高分求解单片机C语言串行通讯问题

来源:百度知道 编辑:UC知道 时间:2024/06/23 23:28:05
我在编51单片机C语言通讯时遇到个问题,大概意思如下:
main
{......
test=0x01;(test定义为全局变量,unsigned char型)
serial();
.......

}
serial
{.....
sbuf=test;(问题就在这了,我调试的时候串口这时会输出ff,应该是01才对,如果我写成test=0x01;sbuf=test;这时才会输出01;不知道什么问题,搞了个下午了,用KEIL的纯软件仿真的话此时会看到test=0x01,但是如果用仿真器跟踪看的话test=0xffff,直接烧程序到硬件中,用串行口输出也为ff)
......
}
不知道到底怎么回事,希望大家能帮帮我,谢谢
补充一下,serial()这个函数是在另外一个文件里面,是这样定义的void serial(void)

硬件与软件结合要考虑的问题很多,你看看你有没有在代码里吧芯片的外部内存控制位打开

#include <reg51.h>
#include <string.h>

void init_serialcomm(void)
{
SCON = 0x50; //SCON: 串口工作方式1,允许接收
TMOD |= 0x20; //TMOD: 定时器1的工作方式2
PCON |= 0x80; //SMOD=1;
TH1 = 0xF4; //Baud:4800 fosc=11.0592MHz
IE |= 0x90; //开总中断,开串口中断
TR1 = 1; // 开启定时器1

}

//向串口发送一个字符
void send_char_com(unsigned char ch)
{
SBUF=ch;
while(TI==0);
TI=0;
}

//串口接收中断函数
void serial () interrupt 4
{
unsigned char ch;

if(RI) //接收中断
{ //清除接收中断标志位
RI = 0;
ch=SBUF; //读出接收到的数据
send_char_com(ch); //发送接收到的数据
}
}

main()
{

init_serialcomm(); //初始化串口
while(1)
{ //等待串口接收中断<