主要是通过消耗指令来获得波特率的匹配。注意_delay(T)的计算,
其公式是:1/波特率=1/晶振频率×4×(X+T),X是指以下程序中断点a至断点b的指令周期数,当然不包括_delay(195),T指的是额外的指令消耗,即_delay()中的195。
#include<ht46ru232h>
#define tx _pc0
#define rx _pc1
unsigned char data[20];
unsigned char receive_data;
unsigned char send_data;
unsigned char receive()
{
unsigned char i;
unsigned char j=10;
while(rx); //断点a
for(i=0;i<8;i++)
{ _delay(195);
if(rx) receive_data=receive_data|0x80;
receive_data>>=1;//断点b
}
_delay(195);
_delay(195);
return receive_data;
}
void transmit()
{ unsigned char send_bit;
unsigned char i;
tx=0;
for(i=0;i<8;i++)
{ send_bit=send_data&0x01;
send_data>>=1;
_delay(192);
if(send_bit)
{ _delay(1);
tx=1;
}
else
{ tx=0;
_delay(2);
}
}
_delay(205);
tx=1;
_delay(192);
}
void main(void)
{ unsigned char k=0;
receive_data=0x00;
_pcc=0x02;
while(1)
{ if(k<20)
{ receive();
data[k]=receive_data;
_delay(10);
send_data=data[k];
transmit();
k++;
}
k=0;
}
}
如果你测试的是同一台机子上的两个串口,就连接好2个串口,然后打开两次串口调试助手,分别选好串口编号,设定波特率等参数,点连接,然后在发送区随便填点信息点发送,打开的2个串口调试助手的窗口能互相发送接收,就说明这两个串口能正常通信
如果测试2台不同机子上的串口,就分辨在两台机子上打开串口调试助手, *** 作一样
如果只测试一个串口,rs422和rs485方式的是测不了的,rs232的可以短接2,3针脚,打开一个串口调试助手,选好串口编号和参数,发送信息能在接收区得到回复,证明该串口能工作
以上就是关于哥们帮我看看这个程序吧~模拟串口收发四个字节 接收正常 发送不正常~感激不尽~辛苦了~全部的内容,包括:哥们帮我看看这个程序吧~模拟串口收发四个字节 接收正常 发送不正常~感激不尽~辛苦了~、串口调试波形图版 3.0怎么用、这个51单片机串口通讯程序为什么接受不了数据等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)