微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 求助,如何使用单片机串口中断,读取串口数据并传递到主函数

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

时间:10-02 整理:3721RD 点击:

目的:使用中断方式读取串口收到的数据,并将数据传递到主函数中
硬件: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. }

复制代码




接收完成会置RI=1,你这if(!RI),接收完了也进不去呀!

unchar counter=0;
unchar buffer[200];
void ser_inter() interrupt 4//串口中断
{
        counter++;
        buffer[counter]=SBUF;
        if(counter>=200)
                counter=0;
}

您的意思是定义一个全局变量,然后串口数据改变全局变量的值?

好的,我看看,我还没注意

这样最简单,当然也可以用指针。

我试了,全局变量不太管用,依旧调不出来

#include<reg51.h>
#define uchar unsigned uchar
#define uint unsigned uint
char over;
void send(char receive)
{
SBUF=receive;
while(TI==0);
TI=0;
}
void main()
{
char a;
TMOD=0X20;                                //TI定时方式
TH1=TL1=0Xfd;          //波特率9600
PCON=0;                //波特率不加倍
SCON=0x50;             //串口通信方式1,TI\RI清零,允许接收
TR1=1;                 //启动T1
EA=1;
ES=1;
a=0x01;
P2=a+receive;
}
/***************************************************
函数名称:ser()interrupt 4
函数功能:中断程序
输入参数:无
输出参数:无
***************************************************/
void ser()interrupt 4
{
static unsigned char i;//串口接收计数的变量
over=0;   
RI=0;//手动清某个寄存器,大家都懂的
receive=SBUF;
send(receive);
ES=0;
}   
我就是这么做的,依旧白扯

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top