给STC89C52写的串行通讯程序,为什么单片机一上电就有输出啊

2019-07-16 02:52发布

#include<reg52.h>
unsigned int flag;
sbit Moudle_En=P2^5;
sbit Seg_LED1_En=P2^0;
sbit Seg_LED2_En=P2^1;
sbit Seg_LED3_En=P2^2;
sbit Seg_LED4_En=P2^3;
void ser()  interrupt 4
{
RI=0;
P1=SBUF;
flag=1;
}
void main()
{
ti=0;
TMOD=0x20; //定时器T1工作模式为方式2,8位自动重装
TH1=0xfd;//设置波特率9600
TL1=0xfd;//设置波特率9600
REN=1;  //接受使能
SM0=0;  //10位异步收发
SM1=1;
TR1=1;  //
EA=1;
ES=1;
while(1)
{
     if(flag==1)
     {
   Moudle_En=0;
   Seg_LED1_En=0;
     }
}
}

========================================================
数码管由74HC573驱动,D断接P1,Q端接数码管,数码管共阴极,接到P2^0,即Seg_LED1_En。
74HC573的output control端(低电平有效)接P2^5,即Moudle_En。
单片机上电后还没由PC机发送数据的时候flag应该为0,P2^0,P2^5应该为高电平啊,数码管
应该不亮才对啊,可是一下载程序后,数码管亮,断电重启后数码管还是亮,不知道为什么。
在数码管显示8.后给单片机发送数据时是正常的。
????为什么重启他还亮呢


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
6条回答
ω琉璃蝶羽σ
1楼-- · 2019-07-16 07:23
最好在主函数先使flag=0;没有原理图很难看得明白!另外,最好在串口接收中断时,串口发某个值才能使flag=1;如
tem=SBUF;
if(tem==0x55){flag=1;}即当串口发送数据中包含0x55,再打开灯!试试吧!
jzhsh2007
2楼-- · 2019-07-16 12:38
ω琉璃蝶羽σ 发表于 2013-1-6 14:47
最好在主函数先使flag=0;没有原理图很难看得明白!另外,最好在串口接收中断时,串口发某个值才能使flag=1 ...

嗯,根据你的提示,这个实现了啊,下载完程序后不再出现数码管亮的情况,
现在的问题是怎么让它上电后自己发送一个特定值,人为的发送也不太好啊
jzhsh2007
3楼-- · 2019-07-16 12:40
 精彩回答 2  元偷偷看……
yijin1989616
4楼-- · 2019-07-16 12:57
{:18:}{:18:}
yshuo0906
5楼-- · 2019-07-16 14:09
看的迷糊
殷高旺
6楼-- · 2019-07-16 18:58
最好有原理图截图

一周热门 更多>