单片机串口通信编程

2019-07-16 05:16发布

#include <reg52.h>
#include <intrins.h>
#include <stdio.h>       
#define uint unsigned int
unsigned char flag_uart,flag_time,flag_on,a,i,t0_num,ad_val,a,s;
float ad_vo;
void init()
{
            TMOD|= 0x20;      //定时器1工作方式2                    
                PCON|= 0x80;
                TH1 = 0xF3;                                        // //baud*2  /*  波特率4800、数据位8、停止位1。效验位无 (12M)
            TL1 = 0xF3;         
                TR1  = 1;
       
                ET0=1;
                SM0=0;
                SM1=1;
                REN=1;                                                                        
                EA   = 1;        // 开总中断
                ES   = 1;        //开串口中断   

}
void main()
{                                                                                                                                                                                                  


        while(1)
        {
                         init();
                if(flag_uart==1)
                {
                        flag_uart=0;
                        ES=0;
                        TI=1;
                switch(flag_on)
                        {
                                case 2: puts("Turn on ad! ");
                                                //TR0=1;
                                                break;
                                case 0: printf("Turn off ad! ");
                                                //TR0=0;
                                                break;
                                case 1: puts("Error! ");
                                                break;
                        }
                       
                        while(!TI);
                        TI=0;
                        ES=1;
            }
        }
}
                  
void ser() interrupt 4
{

        if(RI==1)
        {  RI=0;                  //先是收到电脑发送过来的数据,数据放在在SBUF中          
          
          a=SBUF; }
          s=a;
          
          flag_uart=1;
          if(s==1)
                flag_on=0;
          else
                flag_on=1;
}



  //为什么中断服务程序中的s        与a始终为0,导致始终执行的是 case 0中的语句?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
5条回答
lstcspring
1楼-- · 2019-07-16 05:48
 精彩回答 2  元偷偷看……
小杰杰
2楼-- · 2019-07-16 09:47
我学这个学了很久!!
獊韹→狼
3楼-- · 2019-07-16 12:14
谢谢了!我的问题已经解决!能进入中断服务程序波特率设置也没错,是串口调试助手设置的问题SBUF中的数据应为十六进制,发送数据故应以十六进制发送
非法菜鸟
4楼-- · 2019-07-16 13:11
xhmyn
5楼-- · 2019-07-16 16:42
顶,不错不错,值得学习

一周热门 更多>