新手求助。

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;

}         



小白求助。
此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
13条回答
billliu66
1楼-- · 2019-03-24 20:16
请问你是用的哪款单片机?似乎是未指定波特率发生器。
Li_Lei
2楼-- · 2019-03-25 01:28
 精彩回答 2  元偷偷看……
ddllxxrr
3楼-- · 2019-03-25 01:28
程序有问题 flag=receiver;但程序没有任何变化灯自然不亮了
a4335654@qq.com
4楼-- · 2019-03-25 04:32
ddllxxrr 发表于 2018-4-22 10:42
程序有问题 flag=receiver;但程序没有任何变化灯自然不亮了

请问应该怎么改呢?初学者实在不懂,忘指教
a4335654@qq.com
5楼-- · 2019-03-25 08:57
 精彩回答 2  元偷偷看……
ddllxxrr
6楼-- · 2019-03-25 09:12
a4335654@qq.com 发表于 2018-4-22 18:28
请问应该怎么改呢?初学者实在不懂,忘指教

这个得楼主拿主意了,因为有好多种方法,只是是你自己写的程序我想会想出来地

一周热门 更多>