#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
void yu()
{
TMOD = 0X20; //选择计数器1,工作模式3
TR1 = 1;
TH1 = 0Xfd; //波特率为9600,PCOM为0X00
TL1 = 0Xfd;
SM0=0;
SM1=1;
REN=1;
}
void main()
{
P0=0X00;
yu();
while(1)
{
while(!RI);
P0=SBUF;
RI = 0;
SBUF=0X00;
}
}
我试了下,后四位led(P0^4——P0^7)当我分别从0按到f时,led亮的情况对应的二进制为0,3,4,7,8,11,12,15,0,3,4,8,11,12,15
而且烧录时还没打开串口时,P0^5,P0^6亮起
是哪里出了问题
这里有一个关键问题,用串口助手发送数据时,是发送十六进制数(也是二进制数)?还是字符?看你的程序应该是发送十六进制数。还有,串口助手的波特率是否为9600?
串口初始化程序要写一行,如下,原写法初始有误。
还有,串口接收后,不要返回,删掉SBUF=0X00;这没有什么用,但串口还要发送,又没while语句等待发送结束。
还有,P0.4~P0.7是高四位,是在前的,而不是后回位。至于烧录程序时,P0的两个灯亮,与串口无关。烧录程序时,单片机处于复位状态,P0口全输出为高电平,应该是全亮的。但是,P0输出高电平时的输出电流较小,点亮LED灯是有问题的,会出现几个亮(LED亮度高的),而多数都是不亮的。
解决方法,一是改用低电平点亮LED,低电平时输出电流大。二是设置P0为强推挽输出模式。
我这个只是控制led亮灭而已,并没有用到数码管;而且我用的是c语言啊