求助 MC9S08DZ60 SCI 模块的SCI1D不可写

- UID
- 124450
- 性别
- 男
|

本帖最后由 wjckzdh 于 2011-8-28 20:19 编辑
没那么烦,今天得空就贴一下我自己的程序,具体你自己看吧,已经隔了2年多了,因此解释不清
//===================================
//函数名:Init_SCI1
//函数功能:初始化SCI1,波特率10400
//===================================
void Init_SCI1(void)
{
SCI1BD = 96; //BR=BUSCLK/(16*Baud),BUSCLK=16MHz,Baud=10417,BR=16000000/(16*10417)=96;Baud=19200,BR=16000000/(16*19200)=52
SCI1C1 = 0x00;//
SCI1C2 = 0x24;//0x48 仅使能发送中断 0x24 仅使能接受中断 0x6C 使能发送和接收中断
}
//==========================================
//SCI1发送中断服务程序
//==========================================
void interrupt VectorNumber_Vsci1tx SCI1_TE(void)
{
unsigned char clrTE;
if(SCI1S1_TC)
{
clrTE=SCI1S1;
if(nSend<nDataLen)
{//发送的序号<总的需要发送的字节数
nSend++;
if(nSend>=nDataLen)
{
SCI1D= uartSumS;//发送数据校验和
}
else
{
SCI1D=sendTemp[nSend]; //发送下一个
uartSumS+=sendTemp[nSend];
}
}
else
{
SCI1C2 = 0x24;//0x48 仅使能发送中断 0x24 仅使能接受中断 0x6C 使能发送和接收中断
}
}
}
//==========================================
//SCI1接收中断服务程序
//==========================================
void interrupt VectorNumber_Vsci1rx SCI1_RE(void)
{
if(SCI1S1_RDRF)
{
SCI1S1_RDRF=0;
tempRec=SCI1D;
if(receNum<UART_MAX_REC_NUM)
{
receTemp[receNum]=tempRec;
receNum++;
}
else
{
//接收一帧完毕,设置一些标志,等待主程序处理
在主程序里处理完毕,如果要回应数据的话,要使能发送中断,在上面的发送中断里,如果全部回应数据发完要使能接收中断,以便接收下一帧数据,总之,是一种半双工方式
.........
}
}
}
} |
|
|
|
|
|