51单片机io口模拟串口,我这个程序是51单片机IO口模拟串口通信的

1,我这个程序是51单片机IO口模拟串口通信的你不用中断服务程序来置标志,当溢出是TF0自动置1,你只需清0就OK了 。你的问题肯定是波特率不一致造成的,一是你两个设备的波特率是否一致,你查探一下,另一个是因为你用中断服务程序处理标志,会影响波特率的,给其造成误差 。TH0=0XA0;//初值:256-96=140????????????算错了吧256-160=96好像还是波特率的问题,最好用示波器看看 。没有示波器可以用电脑声卡,网上搜一下,多年前用过 。虚拟声卡示波器
2 , 51单片机串口不够用怎么样模拟用一个普通IO口作为TXD发送口,外部中断口作为RXD接收口,就可以模拟串口通讯了 。就用普通IO口编个代码实现功能两个渠道:1选用双串口单片机;2用51单片机的任意两个串口模拟,网上有程序可以参考 。2 串行口的扩展方法 常用的标准51单片机内部仅含有一个可编程的全双工串行通信接口,具有uart的全部功能 。该接口电路不仅能同时进行数据的发送和接收,也可作为一个同步移位寄存器使用 。当以此类型单片机构成分布式多级应用系统时,器件本身的串口资源就不够用了 。笔者在实际开发中 , 查阅了有关资料,总结出如下两种常用而有效的串行通道扩展方法 。模拟,太费事了 。扩充,就行了 。参考:http://hi.baidu.com/do_sermon/item/3199393bac9b4b4d3175a144
3,51单片机 USB当成串口单片机之间通信不需要专门的串口线 。如果单片机电平相同 , 则只需要将两都的RXD和TXD交叉连接,把两都地相连 。一定要共地 。51的RXD接AVR的TXD,51的TXD接AVR的RXD 。如果单片机电平不同,比如一个是3.3V供电,另一个是5V供电都需要通过串口芯片将两块单片机进行电平匹配 。芯片可以用MAX232(5V)或MAX3232(3.3V) , 然后将串口芯片输出的RXD和TXD交叉连接,共地就行了 。程序中要注意波特率的设置 。看了没看明白.如果电脑是USB接口,单片机是串口,可以买一个USB转串口的,市场有卖的,连上就好.如果单片机的是USB口,想连电脑的串口,估计比较玄,还没见到过有卖这种得.51单片机是通过sbuf这个串口专用寄存器和串口模块来收发数据的 。发送时,只要将数据送入到sbuf,等等ti状态到1就发送完毕 。同样接收时,ri为1,那么说明sbuf接收完毕一帧数据,可以直接从sbuf读取数据了 。51的用USB下程序,可能使STC的吧?串口下程序可以到STC宏晶的官网下手册看看,开发板一般都有232电路的,不用增加其他的硬件 。或是你的单片机TXD接AVR的RXD 51 的RXD接AVR的TXD,注意电平,AVR的有可能是3.3V的 , 需要串个200欧的电阻或是用电压转换芯片最好 用一样吧不同的板子进行双机异步通信有点恼火 反正 我没试过 。。。。可以这样做么,第一:比如AVR就支持发送一个9位的数据,但51怎么可能接收 。。。。第二:他们存放数据的寄存器都不一样 , 怎么接收哦?? 比如AVR发送器是将数据存放在UDR寄存器里,你的51单片机到那里去读数据??SBUF么?这个怎么可能呢?你把两个单片机的IO口..负责TXD RXD的交叉接起来就可以了..得注意两个单片机的波特率得一样.【51单片机io口模拟串口,我这个程序是51单片机IO口模拟串口通信的】

    推荐阅读