请问下面关于STC12C5A60S2单片机串口问题,在调试时发出和接收不同,请教高手

#include<12c5a.h> //包含STC12C5A60S2单片机寄存器定义文件
unsigned char count=0; //声明计数变量
void main (void) //主程序
{
SCON=0x50; //置串行口工作方式1
TMOD=0x20; //定时器1为工作方式2
TH1=0xFD; //产生9600bps的时间常数
TL1=0xFD;
TR1=1; //启动定时器1
ES=1; //串行口开中断
EA=1; //开中断
while(1); //等待中断
}
void UART_ISR(void) interrupt 4 //中断号4是串行中断
{
RI=0;
count=SBUF; //清接收中断标志
P1=count;
ES=0;
SBUF=count;
while(!TI);
TI=0;
ES=1;
}

用下面这段程序试试(先检查一下晶振频率是不是11.0592MHZ)

#include <reg51.h>
#include <intrins.h>

char temp;
bit flag;

void ser() interrupt 4
{
RI=0;
temp=SBUF;
flag=1;
}

void serinit()
{
TMOD=0x20;
TH1=0xfd;
TL1=0xfd; //设置波特率9600
SM0=0;
SM1=1;
REN=1;
TR1=1;
ES=1;
EA=1;
}

void main()
{
serinit();
while(1)
{
if(flag==1) // 判断是否完成接收
{
flag=0;
ES=0; // 串口中断关闭
SBUF=temp; // 将原先发送的值给缓存器(接发都是同一个,但意义不一样)
while(!TI); //判断是否发送完成
TI=0; // 是则硬件清0
ES=1; // 再次打开串口中断
}
}
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-08-16
你先看看串口线有没问题: 将串口的2、3脚两根针短接,用键盘在串口调试输入字符,如果串口调试接收区能够显示输入的字符,说明串口工作正常等我再看看程序
相似回答