急问串口的问题
要它跟PC进行SCI串口通信 写了一个接收程序 用中断方式 当从PC发过来一个字符后,SCIRXBUF中有发过来的数据,可是按照手册上说的这个时候RXRDY标志应该置1,可是没有
而IFR中的相应标志位置位了 最终没有进入中断服务子程序 为什么呢 谢谢
下面是源程序:
#include \"LF2407.h\"
/*开,关中断子程序*/
void inline disable()
{
asm(\" setc INTM\"
;
}
void inline enable()
{
asm(\" clrc INTM\"
;
}
/*系统,SCI初始化*/
void sys_ini(void)
{
asm(\" setc SXM\"
;
*SCSR1=0x014D;
*WDCR=0xE8;
*SCSR2=(*SCSR2 | 0x000B)&0x000F;
}
void sci_ini(void)
{
*SCICCR=0x07; //无奇偶效验 8位字符
*SCICTL1=0x00; // SCI复位
*SCICTL2=0x03; //开接受中断 关发送中断
*SCIHBAUD=0x0001;
*SCILBAUD=0x0003; //波特率19200
*SCICTL1=0x23; //使能接受发送
*SCIPRI=0x0018; //接受高优先级
}
unsigned int sci_buff=0;
unsigned int sci_status;
/*主程序*/
main()
{
sys_ini();
sci_ini();
disable();
*IFR=0xFFFF; //清中断标志
*MCRA=0x0003;
*IMR=0x0001; //使能中断
enable();
while(1)
{;}
}
/*中断程序*/
void interrupt sci_ec()
{
//disable();
switch(*PIVR)
{
case 0x0006:
sci_buff=*SCIRXBUF;
sci_buff=(sci_buff & 0x00FF);//低8位有效,因为SCI模块的寄存器都为8位
break;
default: break;
}
*IFR=0x0001; /*中断标志寄存器清0*/
enable();
return;
}
void interrupt bad_trap()
{
*IFR=0xffff;
enable();
return;
}
真不知道是怎么回事
SCIRXBUF里面接收到了正确的数据就说明进过中断了阿。
我没用过2000的,但读程序没什么问题啊,把中断函数写成interrupt void sci_ec()试试看,或者你用查询方式再写一下,看有没有执行程序。
谢谢楼上的两位
改成interrupt void还是不可以啊
依旧SCIRXBUF中有数据,我在中断中加了flag=1(flag初始为0),可是RUN之后FLAG依然是0
我没用过2000的,所以不是很清楚,但你写了两个中断ISR,确认void interrupt sci_ec()
优先级别高于另外一个void interrupt bad_trap()么?还是你的中断被别的中断占用了
谢谢楼上的 我把SCI设置为高优先级 应该比BAD_TRAP优先级高
不知道是不是我调试的过程有问题