急啊,求助,PIC18F4520串口中断打开了.却没有反映..

2020-02-08 09:04发布

本帖最后由 sweet_136 于 2012-8-4 15:03 编辑

360桌面截图20120804150228.jpg (57.43 KB, 下载次数: 0) 下载附件 2012-8-4 15:02 上传
现在出现了这个警告.不知道是哪里问题.
//AD 端口设置
   setup_adc_ports(AN0_TO_AN8|VSS_VREF); //AN0-AN8为AD输入端口,VREF为参考端
   setup_adc(ADC_CLOCK_INTERNAL);
   
   enable_interrupts(INT_RDA);  //使能串口接收中断
   enable_interrupts(GLOBAL);   //使能串口接收中断


上面是主函数,

下面是中断.
为什么不能进入到中断里面去呢? 好纠结...搞了好几天了就一直是这个问题.或者.数据有时候不对.
#int_RDA
void RDA_isr()
{   
  receivedata=getc();//得到数据
  
  switch(receivedata)
        {
                case 10:
                        LED[0].key_status = OFF;
                        printf("LED[0].key_status = OFF ");
                        receivedata = 0;
                        break;
                case 11:
                        LED[0].key_status = ON;
                        printf("LED[0].key_status = ON ");
                        receivedata = 0;
                        break;
               
                case 20:
                        LED[1].key_status = OFF;
                        printf("LED[1].key_status = OFF ");
                  receivedata = 0;
                        break;
                case 21:
                        LED[1].key_status = ON;
                        printf("LED[1].key_status = ON ");
                        receivedata = 0;
                        break;
                       
                case 30:
                        LED[2].key_status = OFF;
                        printf("LED[2].key_status = OFF ");
                        receivedata = 0;
                        break;
                case 31:
                        LED[2].key_status = ON;
                        printf("LED[2].key_status = ON ");
                        receivedata = 0;
                        break;
                       
                case 40:
                        LED[3].key_status = OFF;
                        printf("LED[3].key_status = OFF ");
                        receivedata = 0;
                        break;
                case 41:
                        LED[3].key_status = ON;
                        printf("LED[3].key_status = ON ");
                        receivedata = 0;
                        break;
               
                case 0xFA:
                        LED[0].error_flag = ON;
                        printf("LED[0].error_flag = ON ");
                        receivedata = 0;
                        break;
                case 0xFB:
                        LED[1].error_flag = ON;
                        printf("LED[1].error_flag = ON ");
                        receivedata = 0;
                        break;
                case 0xFC:
                        LED[2].error_flag = ON;
                        printf("LED[2].error_flag = ON ");
                        receivedata = 0;
                        break;
                case 0xFD:
                        LED[3].error_flag = ON;
                        printf("LED[3].error_flag = ON ");
                        receivedata = 0;
                        break;
        }
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
9条回答
sweet_136
1楼-- · 2020-02-08 11:03
中断会进来一次.但之后就不会了.奇怪了这就.
117433525
2楼-- · 2020-02-08 13:58
 精彩回答 2  元偷偷看……
sweet_136
3楼-- · 2020-02-08 15:54
117433525 发表于 2012-8-4 12:04
到了中断里面,需要跟据你的实际情况,再次写放数据或读取数据,保证下次还能中断,否则没有下次中断的基本 ...

非常谢谢你的回复.我试过了.就算我只在中断里面用一条 receivedata = getc();  第二次中断都不会进来.
AttTiv
4楼-- · 2020-02-08 19:47
查看 FERR  和 OERR 是否置位了
sweet_136
5楼-- · 2020-02-08 21:53
AttTiv 发表于 2012-8-4 15:21
查看 FERR  和 OERR 是否置位了

嗯。什么情况?
surf_131
6楼-- · 2020-02-09 03:26
sweet_136 发表于 2012-8-5 09:03

usrt_ferr.JPG (108.4 KB, 下载次数: 0)

下载附件

2012-8-5 09:28 上传



RCSTA相关内容。

一周热门 更多>