我的问题是:
①在初始化函数InitUART()中SCON设置为了01010000,TI和RI都被设置为0,所以不能向单片机申请中断,然后在初始化函数InitUART()之后又紧接着设置发送一串字符,发送函数中有 while(!TI);TI=0;这么两行,但是因为TI最开始就设为0了,而且串口中断ES是在后面打开的,那么理论上TI就是一直为0,while(!TI)就是个死循环啊,为什么还会传出数据?
②为什么用通用的串口调试工具就能发送汉字,而用德飞莱(我买的单片机牌子)自己的串口调试工具就能发送汉字呢?
/*****************************下面是单片机代码********************************************/
#include <reg52.h>
typedef unsigned char uchar;
typedef unsigned int uint;
void SendStr(uchar *s);
void InitUART();//初始化通用异步收发传输器
void main()
{
InitUART();
SendStr("UART test,dmc");
ES = 1;//串口中断允许位,ES=1允许
while(1)
{
}
}
void SendByte(uchar dat)
{
SBUF = dat;
while(!TI);
TI=0;
}
void SendStr(uchar *s)
{
while(*s != '\0')
{
SendByte(*s);
s++;
}
}
void InitUART()
{
SCON = 0x50;// SCON: 模式 1, 8-bit UART, 使能接收
TMOD = 0x20;// TMOD: timer 1, mode 2, 8-bit 重装
TH1 = 0xFD;// TH1: 重装值 9600 波特率 晶振 11.0592MHz
TR1 = 1;// TR1: timer 1 打开
EA = 1;//打开总中断
}
void UART_SER() interrupt 4
{
uchar temp;
if(RI)
{
RI = 0;
temp = SBUF;
P1 = temp;
SBUF = temp;
}
if(TI)
{
TI = 0;
}
}
|