我用的是STC12C5204ad第一次下载程序能正常发数,但单片机重新上电后就不能发数实在不明白为什么。请大家帮忙分析一下:
而且用示波器看单片机TXD口,还有数据发送,但就是串口助手接收不到,串口助手也换了,还是不行,电路也看了,而且也是之前用过的电路。
发现,第一次刚下载完程序,示波器看TXD电压变化,高电平为5V,低电平为0V
而在给单片机重新上电时,TXD口发送数据测试电平变化,高电平要小于5V,在4电几伏。
请帮忙分析一下
#include "STC12C52.h"
typedef unsigned int uint;
typedef unsigned char uchar;
uint sec=0,cnt,cnt1;
uchar dis_buff2[7];
void tx_com(void);
void dl_ms(unsigned int count);//延时毫秒程序
main(void)
{
P1=0XFF;
P3=0Xff;
TMOD=0x21; //设置定时器1为工作方式2,定时器0工作为方式1
SCON=0X40;//10位异步通信,串行口工作方式一,不允许中断接收REN=0
PCON=0X00;//SMOD=0
AUXR=0X00;
TH1=0XFD;//波特率9600
TL1=0XFD;
TR1=1;
//ES=1;//串口中断打开
ET0=1;
TH0=(65536-50000)/256; //对TH0 TL0赋值
TL0=(65536-50000)%256; //使定时器50ms中断一次
TR0=1; //开始计时
EA=1;
while(1)
{
cnt1++;
dl_ms(30);
if(cnt1>=300)
{
tx_com();
cnt1=0;
}
}
}
void tx_com(void)
{
uchar i;
long j;
j=123456;
dis_buff2[0]=(uchar)(j/10000);
dis_buff2[1]=(uchar)((j%10000)/100);
dis_buff2[2]=(uchar)(j%100);
dis_buff2[3]=0xdd;
dis_buff2[4]=0xee;
dis_buff2[5]=0xff;
dis_buff2[6]=0xab;
for(i=0;i<7;i++)
{
SBUF =dis_buff2;
while(TI==0);
TI=0;
dl_ms(1);
}
}
/*******************延时毫秒****************************/
void dl_ms(unsigned int count)//延时毫秒程序
{ uchar i;
while(count--)
{ for(i=0;i<125;i++)
{
;
}
}
}
|