作者dio1984 (dio)
看板Electronics
标题[问题] 8051串列传输 使用Keil C
时间Thu Nov 29 17:28:46 2007
想利用8051的串列埠重覆地连续丢四个byte出去
在重覆丢的回圈之中
我同时用P1.0这个接脚让LED灯闪烁
但实际使8051执行时
LED灯确实有在持续闪烁
但串列埠却没有动作 (我用示波器量测 只有几十mV的杂讯)
不知道是出了什麽问题 烦请各位大大指教
谢谢
----
另外请问两个小问题:
1. 我可以直接在程式码中写 TI=1; 强迫改变这个代表传送完毕的位元值吗
2. 假设两个8051互相利用串列埠沟通
那两个8051之间是TxD接TxD,RxD接RxD吗
还是TxD接RxD,RxD接TxD呢
有点搞混 我以为TxD表示传送 RxD表示接收
谢谢
----
程式码如下:
#include <regx51.h>
#include <stdio.h>
#define XTAL 11059200
#define baudrate 19200
void SendTx(char tx); // 由串列埠丢一个byte
void Delay(void); // 放在回圈中用来延迟
void com_initialize(void)
{
SCON=0x50;
PCON=0x80;
TMOD=0x20;
TH1=0xFD;
ES=1;
TR1=1;
return;
}
void main(void)
{
EA=1;
com_initialize();
while(1)
{
SBUF=0x01; // 无意义 只是想使TI=1
P1=0x01; // 使P1.0接脚上的LED亮
SendTx(0xFF); // 连续送四个byte
SendTx(0x80);
SendTx(0x00);
SendTx(((0x80^0x00)&0x7F));
Delay();
P1=0x00; // 使LED灭
Delay();
}
}
void SendTx(unsigned char tx)
{
while(TI==0); // 等到TI=1,也就是前一个byte传送完毕
TI=0;
SBUF=tx; // tx写入SBUF 由TxD脚送出
return;
}
void Delay(void)
{
unsigned char i,j,k;
for (i=0; i<255; i++)
for (j=0; j<255; j++)
for (k=0; k<3; k++) ;
}
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.112.175.37
※ 编辑: dio1984 来自: 140.112.175.37 (11/29 17:29)
1F:推 CuckooBoy:我不确定我说的对不对.不过...232在动作最好不要再控制 11/29 22:09
2F:→ CuckooBoy:其它的东西 11/29 22:10
3F:推 dio1984:谢谢楼上大大回应 11/30 00:43
4F:→ dio1984:我换了Keil C的版本 然後加入了中断的写法 问题已解决 11/30 00:43