首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

MC9S12DG128BSCI0中断接收问题!

MC9S12DG128BSCI0中断接收问题!

各位大虾帮忙看看,我的串口中断接收,为什么进入中断就退不出了呢

interrupt 20 void SCI0_receive_isr(void) {
static uchar i=0;
DisableInterrupts;
rdata=SCI0SR1;
rdata=SCI0DRL;
SCI1_send(rdata);
i++;
if(i==6)i=0;
EnableInterrupts;
}
各位,加油啊
在中断中无须执行DisableInterrupts和EnableInterrupts,否则会出现中断嵌套。
海纳百川  有容乃大
我只用了这一个中断阿
加不加应该不会影响吧
那不只是开中断和关中断用的吗
各位,加油啊
void initialsystermclock(void)
{
PLLCTL=0x00;
CLKSEL=0x00;
SYNR=3;
REFDV=0; //PLLCLK=2*OSCCLK*(SYNR+1)/(REFDV+1)
}
void initSCI0(void) {
uchar clear;
SCI0BDL=104; //MCLK=8MHz,波特率为4800
SCI0BDH=0x00; //SCIbaudrate=SCI module clock/(16*SCIBR[12:0])
SCI0CR1=0x00; //bit5,数据格式控制,1起始位,8数据位,1停止位,不打开奇偶校验//,奇校验
SCI0CR2=0x2c; //接收寄存器满或溢出中断允许,RIE=1时,允许中断。允许接收发送数据
clear=SCI0SR1;
}

interrupt 20 void SCI0_receive_isr(void) {
DisableInterrupts;
if(SCI0SR1&0x20) { //接收中断
rdata[0]=SCI0SR1;
rdata[0]=SCI0DRL;
switch(rdata[0]) {
case 0x01:pwm45set(1350);goahead();pwm6set(150); break; //左拐
case 0x02:pwm45set(1650);goahead();pwm6set(150); break; //右拐
case 0x03:pwm45set(1300);goahead();pwm6set(130); break; //前进
case 0x04:pwm45set(1700);goback(); pwm6set(130); break; //后退
case 0x05:pwm45set(1500);pwm6set(0);break; //停止
default:break;
}
SCI0_send(rdata[0]);
}
EnableInterrupts;
}
这样用中断接收有什么错误吗
为什么返回的数据不对呢
各位,加油啊
你可以先把它们去掉试试。另外,你是否用示波器看过通讯的波形和波特率是否正确?
海纳百川  有容乃大
进入中断时候默认是关闭I的,如果在里面置位I的话就可能会出现中断嵌套,也就是说这个中断没有执行完就开始下一个中断。
你这个程序可能还没有执行完就开始第二次的中断开始,程序就应该没有执行下去咯
把EnableInterrupts;去掉,
还有就是你的波特率可能不对,就是电脑发送的波特率要改成4800,N,1,NONE
电脑的波特率就是4800,N,1,NONE 啊
并且不用中断时,接受和发送都是正确的
波特率我确定没有错误,中断标志应该也清了,还有我只用了SCI0接收中断,应该不会涉及到中断嵌套。
我把EnableInterrupts去掉试试吧,谢谢各位的回答
各位,加油啊
各位,我怎么做就是不行,真愁坏我了,打包传上帮我看看吧
各位,加油啊
那位大哥给个中断接收的例子看一下吧
我设置MC9S12DG128的串口应该没问题吧
不用中断发送接收都正确,但一用中断,好像就出不来了,
自己感觉没有道理这样啊
各位,加油啊
谢谢各位的支持。
我的问题解决了,程序没有错
原样移植到SCI1上就可以了,不过也挺奇怪的
我就用SCI1吧,估计是开发板SCI0有问题,但是我却是用SCI0下载程序的
不知为什么?
各位,加油啊
返回列表