單片機(jī)用的是AT89S52,以下程序能正常運(yùn)行,且用串口調(diào)試助手觀察,每發(fā)送一個(gè)數(shù)據(jù),發(fā)回這個(gè)數(shù)據(jù)+1的值,其余時(shí)間均在while(RI==0)處等待,真是不明白其中為什么RI位硬件沒有自動(dòng)置1,似乎是僅僅在接收的時(shí)候RI才是1啊,如果這樣的話,中斷服務(wù)程序怎么編啊,求助啊。
#include<reg52.h>
unsigned char num;
void UART_init()
{
SCON=0x50;
TMOD|=0x20;
TMOD&=0xef;
TH1=0xfd;
TL1=0xfd;
TR1=1;
}
void UART_receive()
{
while(RI==0);
num=SBUF;
num++;
SBUF=num;
}
void main()
{
UART_init();
while(1)
{
UART_receive();
}
}
你這個(gè)肯定不對(duì)了啊。都沒有中斷函數(shù)。void UART——receive()改為中斷函數(shù)。這么寫
#include<reg52.h>
unsigned char num,FLAG;
void UART_init()
{
SCON=0x50;
TMOD|=0x20;
TMOD&=0xef;
TH1=0xfd;
TL1=0xfd;
TR1=1;
}
void main()
{
UART_init();
while(1)
{
IF(FLAG==1)
{
SBUF=NUM;
WHILE(!TI);
TI=0;
}
}
void ser() interrupt 4
{
RI=0;
FLAG=1;
NUM=SBUF;
NUM++;
}大小寫我沒有注意,你看看吧。
你看看你的主函數(shù)中while(!RI);只要你寫數(shù),那么RI就為1了。然后你接著就把SBUF值付給NUM。自加后賦給SBUF,這是TI的值變?yōu)?了,發(fā)送出去。當(dāng)然可以運(yùn)行,但沒有用到中斷。
程序中并沒有RI=0的清零語句,可RI還是會(huì)自動(dòng)清零,程序能在while(RI==0)處等待下一個(gè)數(shù)據(jù)的接收,就這里奇怪
歡迎光臨 (http://www.zg4o1577.cn/bbs/) | Powered by Discuz! X3.1 |