C51单片机串口自发自收的问题

来源:百度知道 编辑:UC知道 时间:2024/05/25 00:58:39
我写了一个C51程序,是单片机通过RS232口自发自收一个自动递增的数据,并且通过7段数码管显示出来,现在已经把相关的接口短接,硬件上没有问题
程序如下:
#include <reg52.h>
unsigned char code reg[16]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};
unsigned char i;
unsigned char Temp;
void delay(unsigned int cnt)
{
while(--cnt);
}
void main(void)
{
SCON=0x50;
TMOD|=0X20;
TH1=0XFD;
TR1=1;
EA=1;
ES=1;
while(1)
{
}
}
void UART_SER(void) interrupt 4
{
if(RI)
{
RI=0;
for(i=0;i<=15;i++)
{
delay(3000);
SBUF=i;
Temp=SBUF;
P2=0xFC;
P0=reg[Temp];
}
}
if(TI)
{
TI=0;
}
}
为什么烧录后运行没有结果?麻烦各位高人帮忙看下。

自发、自收。

在主函数里面,设置完成后,应该主动的发送一个字节;

该字节,经过外线,传回到RXD,才能引发接收中断。
下列程序,发出了“8”,如果能收到,将显示出“8”字。
void main(void)
{
SCON = 0x50;
TMOD = 0x20;
TH1 = 0xFD;
TR1 = 1;
EA = 1;
ES = 1;
SBUF = 0x08;
while(1) {}
}
void UART_SER(void) interrupt 4
{
if(RI) {
RI = 0;
Temp = SBUF;
P2 = 0xFC;
P0 = reg[Temp];
}
if(TI) {
TI = 0;
}
}

如果想要连续的发送、接收,也不能 在中断函数里面 连续的发送,你长期占着中断函数不退出,那么 由谁 来接收 呢?