作者knight78817 (曬太陽的肥貓)
看板ASM
標題[問題] 有關pc經RS232傳字元給8051
時間Fri Aug 10 16:04:59 2012
以下為我8051上的程式
#include <AT89X51.H>
void UART (int BPS)
{
SCON=0X50;
TMOD=0X20;
TH1=256-(28800/BPS);
TR1=1;
}
void main(void)
{
UART(9600);
RI=0;
P2=~SBUF;
}
電腦上
傳輸速率9600
數據位元8
停止位1
校驗位NONE
我用PC傳字元'a',
我認為應該使P2的LED燈亮"0110 0001"也就是ASCII的"0x61"
可是P2顯示"0100 1111"也就是"0x4f"
我完全不了解為什麼會這樣
拜託板上大大幫忙 ORZ
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 163.13.136.176
1F:推 deo2000:我的P2是亮 0,5,6 08/10 16:50
2F:推 deo2000:雖然下一篇有人修正,但是我照你的code去跑就有亮"01100001 08/10 16:58
3F:→ deo2000:而且不解的是,實際執行就像寫了無限迴圈一樣,不斷更新訊號 08/10 16:59
4F:→ deo2000:可是你的code應該會一次就瞬間跑完了才對 08/10 17:00
5F:推 cwl751005:修正的應該還是迴圈阿,while(1)是作DO內的程式碼吧 08/10 17:37
6F:→ cwl751005:看錯,D大說的應該是原PO的程式碼吧 08/10 17:39
7F:→ cwl751005:我用KEIL C好像都是這樣耶,除非最後加個while(1)來停止 08/10 17:40
8F:→ knight78817:請問deo大大你電腦端設定,與單晶片的石英頻率 08/10 17:48
9F:推 WolfLord:你程式自己沒迴圈,8051就是跑一圈reset一次,一直reset 08/10 18:26
10F:→ WolfLord:你的接收本來就跟擲甩子一樣 08/10 18:27
11F:→ knight78817:所以wolf大大也得到正確答案嗎? 08/10 18:32
12F:推 WolfLord:....真不知道怎麼回答你,我Modbus host都在寫了 XD 08/10 18:39
13F:→ WolfLord:btw你程式沒控制好流程的話, 答案會隨不同廠牌的IC不同 08/10 18:41
14F:推 deo2000:PC:最典型 9600,n,8,1 MCS-51:11.059M 08/10 21:23