微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 串口控制led闪烁没有反应

串口控制led闪烁没有反应

时间:10-02 整理:3721RD 点击:
#include "reg52.h"                        
typedef unsigned int u16;         
typedef unsigned char u8;

void UsartInit()
{
        SCON=0X50;                        //设置为工作方式1
        TMOD=0X20;                        //设置计数器工作方式2
        PCON=0X80;                        //波特率加倍
        TH1=0XF3;                                //计数器初始值设置,注意波特率是4800的
        TL1=0XF3;
        ES=1;                                                //打开接收中断
        EA=1;                                                //打开总中断
        TR1=1;
                                                //打开计数器
}
void main()
{        
        UsartInit();
          //        串口初始化
        while(1);
}

void Usart() interrupt 4
{
        u8 receiveData;
        receiveData=SBUF;
        P2=SBUF;                    在这里是否对
           RI = 0;
  SBUF=receiveData;
        while(!TI);        
                 
        TI=0;                                                
}

不需要开定时器中断吧

不知坛友解决问题了没有 是怎么造成的呀

这是设置波特率的

没有。 求助大神啊00000000000000

两个问题,第一:你的波特率是多少?0xf3是对应4800吗?  第二:我觉得在串口中断函数中应该对中断源做判断,发送也可以采用查询方式。

数据转换那出了问题,SBUF中的数据没有转换就到了P0,不知你是否懂得SBUF中的数据格式。

sbuf就是一个8位寄存器(你可以理解成8个格子的抽屉),向它写入数据就是填充串口数据位,读取就是获得串口数据。一般的c51都是大端模式,所以sbuf中的数据是高位在前低位在后。放下c51时间太长了,不知你要怎样转换?

假如我输入1,SBUF中的8位数是什么

电脑端使用十六进制方式你发送1那  sbuf=0x01   串口端使用asiic码发送1 则sbuf=1的asiic码值

void Usart() interrupt 4
{

        receiveData=SBUF;
                   while(!RI);
                 if( RI)
          {if(0x30==receiveData)
          {P2=0X50;
                 delay(66536);
                 
                                 }
                 
                 if( 0x31==receiveData)
          {P2=0X05;
                  delay(66536);
               
                                  }        } 已经解决了,谢谢你的提醒。电脑端发送1,单片机接收到的是0x31,单片机发出时电脑将0x31转换成数字1显示出来。串口调试助手是以字符串的形式输入的,难道是这个的原因?

与之前的效果一样
void Usart() interrupt 4
{

        receiveData=SBUF;
                   while(!RI);
                 if( RI)
          {if(48==receiveData)   输入0
          {P2=0X50;
                 delay(66536);
                 
                                 }
                 
                 if( 49==receiveData) 输入1
          {P2=0X05;
                  delay(66536);
               
                                  }        }

请区分一下  字节和字符串

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

网站地图

Top