按照AN2883 想学习一下SCI的中断接收,可是不能实现。代码如下。
请问是什么原因,通过串口调测助手接收到的一直是'F',通过串口调测助手发送'L',还是只收到'F'。
#include <hidef.h> /* common defines and macros */
#include <mc9s12dp256.h> /* derivative information */
#pragma LINK_INFO DERIVATIVE "mc9s12dp256b"
unsigned char Stringcase;
#pragma CODE_SEG __NEAR_SEG NON_BANKED
interrupt 20 void sci0_rx(void)
{
SCI0SR1_RDRF=0;
if (SCI0DRL=='U' || SCI0DRL=='u')
{
Stringcase=0x00;
}
else if (SCI0DRL=='L' || SCI0DRL=='l')
{
Stringcase=0x20;
}
}
//*****************************************************************************
// SCI参数设置
//*****************************************************************************
void Init_SCI(void)
{
SCI0BDL=6;
SCI0BDH=0; //CLOCK=7.3728MHz, bps=38400
SCI0CR1=0x00;
SCI0CR2=0x2c;
}
//**************************************************************************
// 串口0发送
//**************************************************************************
void send(unsigned char data)
{
unsigned char c;
while(!SCI0SR1_TDRE) {}; //数据仍在发送寄存器中,等待
c=SCI0SR1; //读SCI0SR1,清TDRE标志
SCI0DRL=data; //写SCI数据寄存器
}
void main(void) {
/* put your own code here */
Init_SCI();
EnableInterrupts;
// Stringcase=0x20;
for(;;)
{
send('F'+Stringcase);
} /* wait forever */
}
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) | Powered by Discuz! 7.0.0 |