求助,如何使用单片机串口中断,读取串口数据并传递到主函数

2019-07-15 15:03发布

本帖最后由 hoddescle 于 2016-1-27 11:44 编辑

目的:使用中断方式读取串口收到的数据,并将数据传递到主函数中
硬件:STC12C5A60S2 12M晶振
软件:keil V2

示范例,主函数中有参数a进行运算,当串口有中断时,将串口收到的数据(暂定为b)加到a上
代码如下,现象:参数从串口中断中得到的b传递不到主函数中,运行时候主函数的b一直是0.求解
  1. #include<STC12C5A60S2.H>
  2. #define unchar unsigned char

  3. /*串口初始化函数
  4. 无参数
  5. 无返回值
  6. */
  7. void ser_ini()
  8. {        TMOD=0x20;//设置定时器1工作方式2
  9.         TH1=0xfd;//定时器初值
  10.         TL1=0xfd;
  11.         TR1=1;//打开定时器
  12.         SM0=0;//设置串口工作方式
  13.         SM1=1;//设置串口工作方式
  14.         REN=1;//串口允许接受打开
  15. }



  16. /*主函数
  17. 无参数
  18. 无返回值
  19. */
  20. void main()
  21. {
  22. unchar a=0;
  23. unchar b=0;
  24. EA=1;//打开总中断
  25. ES=1;//打开串口中断
  26.    ser_ini();//串口初始化
  27.         if(!RI){
  28.         RI=0;
  29.         a=a+b;
  30.                 }
  31. }

  32. /*串口中断函数
  33. 无参数
  34. 返回值不知道如何搞
  35. */
  36. void ser_inter() interrupt 4//串口中断
  37. {
  38. unchar b;
  39. b=SBUF;
  40. }
复制代码





友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
10条回答
liujinyi016
1楼-- · 2019-07-15 18:29
 精彩回答 2  元偷偷看……
GPYE
2楼-- · 2019-07-15 15:45
接收完成会置RI=1,你这if(!RI),接收完了也进不去呀!
hoddescle
3楼-- · 2019-07-16 00:16
jinyi7016 发表于 2016-1-27 13:19
unchar counter=0;
unchar buffer[200];
void ser_inter() interrupt 4//串口中断

您的意思是定义一个全局变量,然后串口数据改变全局变量的值?
hoddescle
4楼-- · 2019-07-16 02:17
GPYE 发表于 2016-1-27 13:18
接收完成会置RI=1,你这if(!RI),接收完了也进不去呀!

好的,我看看,我还没注意
liujinyi016
5楼-- · 2019-07-16 08:08
hoddescle 发表于 2016-1-26 21:44
您的意思是定义一个全局变量,然后串口数据改变全局变量的值?

这样最简单,当然也可以用指针。
伯爵EARL
6楼-- · 2019-07-16 08:56
我试了,全局变量不太管用,依旧调不出来

一周热门 更多>