电子产品世界 » 论坛首页 » 企业专区 » Renesas » 示波器怎么检测串口的实际波特率


共21条 1/3 1 2 3 跳转至

示波器怎么检测串口的实际波特率

工程师
2012-09-13 19:14:35    评分
/*SBUF:接受器具有双缓冲结构,即在从接收器寄存器中读出前一个已经收到的字节之前
 ,便能接受到第二个字节,如果第二个字节已经接收完毕之前,第一个字节还没有读出来,
 则将丢失其中一个字节,对于发送器,因为数据时由CPU控制和发送的,所以不需要考虑*/
 #include <reg51.h>
 #define uchar unsigned char
 #define uint unsigne int
 uchar flag,a,i;
 void main()
 {
     TMOD=0x20;
  TH1=0xfd;
  TL1=0xfd;
  TR1=1;
  SM0=0;
  SM1=1;
  REN=1;
  EA=1;
  ES=1;
  while(1)
  {
  if(flag==1)
   {
      ES=0;
   SBUF=a;
      while(!TI);
   TI=0;
   ES=1;
   }
  }
}
 void ser() interrupt 4
 {
     RI=0;
  P1=SBUF;
  a=SBUF;
  flag=1;
 }
很简单的一个串口通信程序     为什么单个的字母不能显示啊,两个或者三个就会出现一个 错误的乱码    51单片机   实在解决不了了 
 



关键词: 示波器     怎么     检测     串口     实际     波特率    

工程师
2012-09-13 22:27:58    评分
2楼
为什么没有人回答呢,51的在这里不能问???

专家
2012-09-14 10:43:42    评分
3楼
可以在这里问。
只是可能会的人比较少一些吧~~

——至少我是不会51了。

工程师
2012-09-14 12:24:25    评分
4楼
你不会51,不是吧,不都是从51学期的吗

专家
2012-09-14 14:56:50    评分
5楼
没有学好呗!

工程师
2012-09-14 15:25:51    评分
6楼

雖然我對51不是很懂,但從程序可以看出,

串口接收中斷發生后

讀出數據:

P1=SBUF;
a=SBUF;


然后再通過串口發回上位機去:

SBUF=a;

弱弱的問:P1=SBUF;干什麽用?不是a=SBUF;就可以了嗎?

從你的圖片很明顯可以看出,接收到的數據和發出的不一樣。

這樣很大可能就出在,uart的設置了,波特率算錯沒有?數據位其它的一些參考是否一樣?

建議你這樣調試:
在接收中斷那里設一個斷點,先看看接收到的數據是否就是上位機發出的數據。如果不一樣,就要檢查你的參數設定是否正確了。


工程师
2012-09-14 22:56:21    评分
7楼
因为P1接了8个LED灯,P1可以用来检测单片机是否收到数据
波特率是定时器方式2,自动装初值0xfd,理论上是9600波特率
话说断点怎么设置啊

专家
2012-09-16 12:57:42    评分
8楼
清flag的語句在哪裡?

专家
2012-09-16 21:50:48    评分
9楼
让MCU一直发送0x55即可,然后就能在示波器里看到稳定的波形,然后就能算出来波特率了。

工程师
2012-09-17 18:37:17    评分
10楼
谢谢了,试过了,成功了  谢谢哈

共21条 1/3 1 2 3 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]