#pragma CODE_SEG __NEAR_SEG NON_BANKED
interrupt 20 void SCI0_interrupt(void)
{
while(SCI0SR1_RDRF)
{
inbuf1[count3]=ch;
count3++;
if( (count3==(INBUF_LEN-1))
{
flag=1; //如果串口接收的数据达到INBUF_LEN个,且校验没错,就置位取数标志
}
}
}
#pragma CODE_SEG DEFAULT
void main(void)
{
/* put your own code here */
init_sci();
init_io();
EnableInterrupts;
for(;;)
{
if(flag) //如果取数标志已置位,就将读到的数从串口发出
{
flag=0; //取数标志清0
send_string_com(inbuf1,INBUF_LEN);
}
} /* wait forever */
}
我想实现通过串口发送一串数字,比如“11 22 33 44”,SCI串口接收(中断)和发送例程,可
以用来测试单片机的中断接收,可是老是不正确(中断只能进入1次),例如
我用串口助手发送了“11 22 33 44”,会接收到“11 22 33 44”,可是第二次发送“11 22 33 44”,就没有接收到数据。邵贝贝的书中说要清中断服务后用RTI作中断返回,可是没有RTI指令,CW不认呀, 麻烦各位给看看,那里有问题?谢谢了
[此贴子已经被作者于2006-4-7 10:32:22编辑过]
参考学习一下
可以用PE生成代码
参考如下
void AS1_OnRxChar(void)
{
/* Write your code here ... */
//datai=2;
sFlag='T';
//for(;data!='D';) { // 没有接收到字符‘D',程序就一直等待 通讯协议为"R02C05D"
if(AS1_GetCharsInRxBuf()!=0){
AS1_RecvChar(&data);
string[datai]=data;
datai++;
AS1_SendChar(data);
}
//}
data=0;
R1=string[1]-48;
R2=string[2]-48;
myR=R1*10+R2; //行
C1=string[4]-48;
C2=string[5]-48;
myC=C1*10+C2;//列
iNum=myR*100+myC;
// datai=0;
}
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) | Powered by Discuz! 7.0.0 |