高级会员
- 积分
- 865
- 威望
- 393
- 贡献
- 348
- 兑换币
- 0
- 注册时间
- 2010-1-2
- 在线时间
- 62 小时
|
/*=========================================================
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 80000000 //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发送数据函数
//byte SCI_Rx( void ); //SCI接收数据函数
interrupt void SCI_Rx_IRS( void ); //SCI接收中断处理【回显】函数
/*==========================================================
FUNCTION DEFINE
===========================================================*/
void main(void)
{
DisableInterrupts;
SCI_Init();
EnableInterrupts;
for( ; ; )
{
// SCI_Tx( 'a' );
// GE_Delay( 50 );
}
}
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;
}
不明白的地方是:1. SCI0BDL = ( byte ) ( BusClock / BaudRate / 16 ); //必须/16,不能写出后两项相乘
不太明白要强制转化为byte类型
2. ReadStatus1 = SCI0SR1; //为清除标志位,读状态寄存器【下次写入后完全清除】
这句话是读取状态寄存器,不太清楚是怎么清除标志位的 |
|