高分求解单片机C语言串行通讯问题
来源:百度知道 编辑:UC知道 时间:2024/07/07 06:33:56
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)
{ //等待串口接收中断<