我自己整的程序能够发送数据,但是在电脑上用串口调试助手时,出现下面情况:下载完成不断电,串口调试助手立即就能接收数据,但是断电再上电就不行,非得向单片机发一个字符,调试助手才能接收到数据,请问是什么问题?如何解决?
我希望的是单片机能够主动发送数据,我想用它通过串口控制其他模块。谢谢
附个人程序:
#include <reg52.h>
#include <stdio.h>
unsigned char* c;
int length = 0; //记录单片机当前已接收字符串长度。
//串口初始化例程。
void init_uart()
{
SCON = 0x50; //SCON: mode 1, 8-bit UART, enable rcvr
TMOD = 0x20; //TMOD: timer 1, mode 2, 8-bit reload
TH1 = 0xFD; //TH1: reload value for 9600@11.0592MHz
TCON = 0x69;
TR1 = 1; //启动定时器1
ES = 1; //允许串口中断位
EA = 1; //允许总中断位
}
void SendOneChar(char c)
{
ES=0;
TI=0;
SBUF = c;
while(!TI);
TI=0;
ES = 1;
}
void SendString(char *st)
{
while(*st)
{
SendOneChar(*st++);
}
}
void uart_interrupt() interrupt 4
{
if(RI) //当SBUF接收到1个字符,硬件置RI为1。
{
RI = 0; //清RI
if(length < 4) //将接收到的字符缓存在c数组里。
{
c[length++] = SBUF;
}
}
if(TI) //当SBUF发送完1个字符后,由硬件置TI为1。
{
//字符发送中断处理
}
}
void main()
{
int i;
init_uart();
c = "adbs\r\n";
while(1)
{
for(i = 0; i < 4000; i++);//延迟一小段时间
SendString(c);//发送字符串到PC
}
}
我试了一下,还是不行
追答#include
#include
unsigned char* c;
int length = 0; //记录单片机当前已接收字符串长度。
//串口初始化例程。
void init_uart()
{
SCON = 0x50; //SCON: mode 1, 8-bit UART, enable rcvr
TMOD = 0x20; //TMOD: timer 1, mode 2, 8-bit reload
TH1 = 0xFD; //TH1: reload value for 9600@11.0592MHz
TL1=0xfd;
TR1 = 1; //启动定时器1
ES = 1; //允许串口中断位
EA = 1; //允许总中断位
}
void SendOneChar(char c)
{
ES=0;
TI=0;
SBUF = c;
while(!TI);
TI=0;
ES = 1;
}
void SendString(char *st)
{
while(*st)
{
SendOneChar(*st++);
}
}
void uart_interrupt() interrupt 4
{
if(RI) //当SBUF接收到1个字符,硬件置RI为1。
{
RI = 0; //清RI
if(length < 4) //将接收到的字符缓存在c数组里。
{
c[length++] = SBUF;
}
}
if(TI) //当SBUF发送完1个字符后,由硬件置TI为1。
{
TI=0; //字符发送中断处理
}
}
void main()
{
int i;
init_uart();
c = "adbs\r\n";
while(1)
{
for(i = 0; i < 4000; i++);//延迟一小段时间
SendString(c);//发送字符串到PC
}
}
呵呵,不行啊。