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

2019-07-16 07:08发布

我的模拟串口程序发送可以成功,但为什么我的接收程序在发字符时出现乱码,还有发送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
1楼-- · 2019-07-16 07:33
 精彩回答 2  元偷偷看……
依然落叶飘零
2楼-- · 2019-07-16 08:25
既然能够发送,应该不是波特率的问题。看你的接收程序有点问题。应该是先移位再接收。如果是先接收在移位就会多移一位出错。
下面这个是你的程序,你改一下试试。你看看是不是这个问题。
  1. while(i--)//8位数据位
  2. {
  3.   if(RXD)
  4.   output &= 0x80;   
  5.   _t0af=0;
  6.     while(!_t0af);
  7.      output = output>>=1;
  8. }
复制代码
youzizhile
3楼-- · 2019-07-16 09:46
发送处理函数是怎么写的?需要对比查看。
kong1990730
4楼-- · 2019-07-16 11:28
我的少移一位                                                                                

一周热门 更多>