作者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