单片机/MCU论坛
直播中

zw84873018

14年用户 22经验值
擅长:基础元器件
私信 关注
[问答]

模拟串口接收出现的问题?

我的模拟串口程序发送可以成功,但为什么我的接收程序在发字符时出现乱码,还有发送16进制时快了也会出现乱码,更奇怪的是只能发送0011这样的数才能成功,234这些都不行?我的232转换电路如下:
我的程序编写如下:
#pragma vector timer0 @ 0x14//中断入口地址
#define uchar unsigned char
#define uint unsigned int


//*************
//接收一个字节数据
//*****************
uchar RXD_byte()
{
uchar output = 0;
uchar i = 8;
_t0af=0;//中断标志位
_t0on=1;//打开定时器
while(!_t0af);//等过起始位
while(i--)//8位数据位
{
  if(RXD)
  output &= 0x80;   
  _t0af=0;
    while(!_t0af);
     output = output>>=1;
}
_t0af=0;
while(!_t0af)
{
  if(RXD) break;
}
_t0on=0;
return output;

}


void main()
{   
char gch;
INIT_PA();//初始化
INIT_timer();   
_t0on= 0 ;//关定时器
/ while(1)
{
  if(RXD == 0)
  gch = RXD_byte();
}

}

void timer0 (void)//中断响应
{  
_t0af= 1;//多功能中断寄存器,需要手动清零,而中断控制寄存器是自动清零(见书上P57)   
}



  • MAX32接口图.jpg

回帖(4)

z00

2014-4-23 11:18:52
接收的字符出现乱码一般都和波特率有关

楼主可以看看这个资料呢:
单片机IO口模拟串口程序(发送 接收).doc (52.5 KB)
(下载次数: 54, 2014-4-23 11:18 上传)
举报

陈锐文

2014-4-24 13:26:12
既然能够发送,应该不是波特率的问题。看你的接收程序有点问题。应该是先移位再接收。如果是先接收在移位就会多移一位出错。
下面这个是你的程序,你改一下试试。你看看是不是这个问题。
  1. while(i--)//8位数据位
  2. {
  3.   if(RXD)
  4.   output &= 0x80;   
  5.   _t0af=0;
  6.     while(!_t0af);
  7.      output = output>>=1;
  8. }
举报

youzizhile

2014-4-26 17:07:55
发送处理函数是怎么写的?需要对比查看。
举报

孔彬

2016-5-25 11:13:18
我的少移一位                                                                                
举报

更多回帖

发帖
×
20
完善资料,
赚取积分