新手求助。

2019-03-24 17:02发布

我想通过串口通信控制led灯的闪烁。可是感觉行不通,不知道哪里出问题了。
#include "reg52.h"
#include "stdio.h"
#define uchar unsigned char
#define uint  unsigned int

uchar flag;
uchar receiver;
sbit led1=P2^0;
sbit led2=P2^1;
void delay(uint i)
{
        uint x,y;
        for(x=0;x<i;x++)
        {
         for(y=0;y<110;y++);
        }

}
void Usartinit()
{
        TMOD=0x20; //工作方式2
        TH1=0xf3;
        TL1=0xf3;  //波特率为4800
        PCON=0x80;  //SMOD=1 波特率倍增  1000 0000
        TR1=1;     //T1运行控制位,TR1=1时T1工作,TR1=0时T1停止,TR1由软件置1或清0
        SCON=0x50;  //特殊功能寄存器,设定串行口的工作方式、接受/发送控制以及状态
                           //此次使用方式1,即SM0=0,SM1=1,
                           //REN,允许串行接收位,由软件置1,则启动串行口接收数据
        ES=1;            //打开接收中断
        EA=1;           //打开总中断

}

void main()
{
        Usartinit();
        flag=receiver;
        while(1)
        {
                switch(flag)
                {
                        case 2: led1=~led1;
                                        delay(10);
                                        break;
                        case 3:
                                        led2=~led2;
                                        delay(10);
                                        break;
                }
        }
}

void Usart() interrupt 4
{

         receiver=SBUF;
         RI=0;
         SBUF=receiver;
         while(!TI)
         TI=0;

}         



小白求助。
此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。