微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 单片机串口通信编程

单片机串口通信编程

时间:10-02 整理:3721RD 点击:
#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!\n");
                                                //TR0=1;
                                                break;
                                case 0: printf("Turn off ad!\n");
                                                //TR0=0;
                                                break;
                                case 1: puts("Error!\n");
                                                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中的语句?

因为串口始终收到0或者根本就没有接收到串口数据,解决方法:先看是否能进入串口中断服务程序,若能进入,则看波特率设置是否正确

我学这个学了很久!

谢谢了!我的问题已经解决!能进入中断服务程序波特率设置也没错,是串口调试助手设置的问题SBUF中的数据应为十六进制,发送数据故应以十六进制发送

顶,不错不错,值得学习

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

网站地图

Top