|
最近調(diào)試51單片機(jī)程序,編譯下載后運(yùn)行得不到意料的回復(fù)A的結(jié)果,程序如下:
#include "reg52.h"
typedef unsigned int u16; //對(duì)系統(tǒng)默認(rèn)數(shù)據(jù)類型進(jìn)行重定義
typedef unsigned char u8;
/*******************************************************************************
* 函 數(shù) 名 : uart_init
* 函數(shù)功能 : 串口通信中斷配置函數(shù),通過設(shè)置TH和TL即可確定定時(shí)時(shí)間
* 輸 入 : baud:波特率對(duì)應(yīng)的TH、TL裝載值
* 輸 出 : 無
*******************************************************************************/
void uart_init(u8 baud)
{
TMOD|=0X20; //設(shè)置計(jì)數(shù)器工作方式2
SCON=0X50; //設(shè)置為工作方式1
PCON=0X80; //波特率加倍
TH1=baud; //計(jì)數(shù)器初始值設(shè)置
TL1=baud;
ES=1; //打開接收中斷
EA=1; //打開總中斷
TR1=1; //打開計(jì)數(shù)器
}
/*******************************************************************************
* 函 數(shù) 名 : main
* 函數(shù)功能 : 主函數(shù)
* 輸 入 : 無
* 輸 出 : 無
*******************************************************************************/
void main()
{
uart_init(0XFA);//波特率為9600
while(1)
{
}
}
void uart() interrupt 4 //串口通信中斷函數(shù)
{
u8 rec_data;
RI = 0; //清除接收中斷標(biāo)志位
rec_data=SBUF; //存儲(chǔ)接收到的數(shù)據(jù)
SBUF=0x41; //收到回復(fù)A
while(!TI); //等待發(fā)送數(shù)據(jù)完成
TI=0; //清除發(fā)送完成標(biāo)志位
}
用串口助手,輸入一個(gè)字符,得到16進(jìn)制的A1。把原程序?qū)懗奢敵鯞,得到輸出結(jié)果是A2。把原程序?qū)懗奢敵鯟,得到輸出結(jié)果是A3。不知道為什么?
|
|