[求助] 新手求助。

a4335654@qq.com   2018-4-20 17:22 楼主
我想通过串口通信控制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         {
         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)

请问你是用的哪款单片机?似乎是未指定波特率发生器。
点赞  2018-4-21 13:16
flag没有再变化所以。。。
点赞  2018-4-22 09:59
程序有问题 flag=receiver;但程序没有任何变化灯自然不亮了
http://shop34182318.taobao.com/ https://shop436095304.taobao.com/?spm=a230r.7195193.1997079397.37.69fe60dfT705yr
点赞  2018-4-22 10:42
引用: ddllxxrr 发表于 2018-4-22 10:42
程序有问题 flag=receiver;但程序没有任何变化灯自然不亮了

请问应该怎么改呢?初学者实在不懂,忘指教
点赞  2018-4-22 18:28
引用: huo_hu 发表于 2018-4-22 09:59
flag没有再变化所以。。。

请问应该怎么改呢?初学者实在不懂,忘指教
点赞  2018-4-22 18:28
引用: a4335654@qq.com 发表于 2018-4-22 18:28
请问应该怎么改呢?初学者实在不懂,忘指教

这个得楼主拿主意了,因为有好多种方法,只是是你自己写的程序我想会想出来地
http://shop34182318.taobao.com/ https://shop436095304.taobao.com/?spm=a230r.7195193.1997079397.37.69fe60dfT705yr
点赞  2018-4-23 10:11
引用: huo_hu 发表于 2018-4-22 09:59
flag没有再变化所以。。。

你好,请问应该怎么改呢?
点赞  2018-4-25 21:02
引用: billliu66 发表于 2018-4-21 13:16
请问你是用的哪款单片机?似乎是未指定波特率发生器。

51 89c52
点赞  2018-4-25 21:02
引用: a4335654@qq.com 发表于 2018-4-25 21:02
你好,请问应该怎么改呢?

switch(recive)
点赞  2018-4-26 08:01
flag的值没有得到更新
点赞  2018-4-26 21:55
引用: huo_hu 发表于 2018-4-26 08:01
switch(recive)

好的,谢谢你。
点赞  2018-4-27 22:50
引用: 王轩shadow 发表于 2018-4-26 21:55
flag的值没有得到更新

OK,谢谢你,我试试着修改
点赞  2018-4-27 22:50

89C是很古老的型号,性价比超低
点赞  2018-4-28 13:20
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复