中级会员
- 积分
- 297
- 威望
- 245
- 贡献
- 46
- 兑换币
- 18
- 注册时间
- 2010-5-6
- 在线时间
- 3 小时
|
/*=========================================================
ProjectName: SCI_TEST_V
Description: A SCI TEST PROGRAM for 9S12XS128,CW4.7
Author : lucev
Date : 2009.2.15
Notes :
==========================================================*/
#include <hidef.h> /* common defines and macros */
#include <MC9S12XS128.h> /* derivative information */
#pragma LINK_INFO DERIVATIVE "mc9s12xs128"
/*=========================================================
MACRO DEFINE ( FirstSndThd )
==========================================================*/
#define BusClock 8000000 //8MHz
#define BaudRate 9600 //SCI baud rate (hz)
/*=========================================================
GLOBAL VIRIABLE DEFINE ( FirstSndThd )
==========================================================*/
/*=========================================================
FUNCTION DECLARE ( Module_Func_ADDITION() ) ( GE = general )
==========================================================*/
void GE_Delay( unsigned int x ); //延时控制
void SCI_Init( void ); //SCI初始化函数,波特率根据宏定义
void SCI_Tx( byte TxData ); //SCI发送数据函数
void send_int_type(int data_int)
{ int i;
int data1;
int data[2];
data1=data_int;
data[0]=data1>>8;
data[1]=data1;
for(i=0;i<2;i++)
{
SCI_Tx(data[i]);
}
}
//byte SCI_Rx( void ); //SCI接收数据函数
interrupt void SCI_Rx_IRS( void ); //SCI接收中断处理【回显】函数
/*==========================================================
FUNCTION DEFINE
===========================================================*/
void main(void)
{
DisableInterrupts;
SCI_Init();
EnableInterrupts;
for( ; ; )
{
send_int_type(12.34*10);
GE_Delay( 157);
}
}
void GE_Delay( unsigned int x )
{
unsigned int i,j;
for( i=0;i<=x;i++ )
for( j=0;j<=10000;j++ )
;
}
void SCI_Init( void )
{
SCI0BDL = ( byte ) ( BusClock / BaudRate / 16 ); //必须/16,不能写出后两项相乘
SCI0CR1 = 0x00; //8位数据位,1位停止位,无校验
SCI0CR2 = 0x2C; //接收中断使能,使能发送与接收
}
void SCI_Tx( byte TxData )
{
unsigned char ReadStatus1;
// ReadStatus1 = SCI0SR1; //为清除标志位,读状态寄存器【下次写入后完全清除】
SCI0DRH = 0;
SCI0DRL = TxData; //将待发数据写入寄存器
while( !SCI0SR1_TDRE ); //等待发送结束
ReadStatus1 = SCI0SR1; //为清除标志位,读状态寄存器【下次写入后完全清除】
}
/*
byte SCI_Rx( void );
*/
//不能有返回值
interrupt 20 void SCI_Rx_IRS( void )
{
byte ReadStatus1 , RxData;
DisableInterrupts;
ReadStatus1 = SCI0SR1;
RxData = ( byte ) SCI0DRL;
SCI_Tx( RxData );
EnableInterrupts;
} |
|