下载此文档

51单片机i-1模拟串行通信实现总结.doc


文档分类:通信/电子 | 页数:约61页 举报非法文档有奖
1/61
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/61 下载此文档
文档列表 文档介绍
51 单片机 i/1 模拟串行通信实现总结单片机与串行通信程序单片机串行通信的题目单片机串行通信方式单片机串行通信特点是篇一: 51 单片机 IO 口模拟串口论坛新老朋友们。祝大家新年快乐。在新的一年开始的时候, 给大家一点小小的玩意。工程师经常碰到需要多个串口通信的时候, 而低端单片机大多只有一个串行口, 甚至没有串口。这时候无论是选择高端芯片, 还是更改系统设计都是比较麻烦的事。我把以前搞的用普通 I/O 口模拟串行口通讯的程序拿出来,供大家参考,希望各位兄弟轻点拍砖。基本原理: 我们模拟的是串行口方式 1. 就是最普通的方式。一个起始位、 8 个数据位、一个停止位。模拟串行口最关键的就是要计算出每个位的时间。以波特率 9600 为例,每秒发 9600 个位, 每个位就是 1/9600 秒,约 104 个微秒。我们需要做一个精确的延时, 延时时间+对 IO 口置位的时间=104 微秒。起始位是低状态, 再延时一个位的时间。停止位是高状态, 也是一个位的时间。数据位是 8 个位, 发送时低位先发出去, 接收时先接低位。了解这些以后,做个 IO 模拟串口的程序,就是很容易的事。我们开始。先上简单原理图: 就一个 MAX23 2 芯片, 没什么好说的, 一看就明白。使用单片机普通 I/O 口, 232 数据输入端使用 51 单片机 口(外部中断 1 口,接到普通口上也可以, 模拟中断方式的串行口会有用。呵呵)。数据输出为 (随便哪个口都行)。下面这个程序, 您只需吧 和 当成串口直接使用即可, 、底层函数代码如下: sbit TXD1 = P0 ?; // 定义模拟输出脚 sbit RXD1 = P3 ?; // 定义模拟输入脚 bdata unsigned char SBUF1; // 定义一个位操作变量 sbit SBUF1_bit0 = SBUF1 ; sbit SBUF1_bit1 = SBUF1 ; sbit SBUF1_bit2 = SBUF1 ?; sbit SBUF1_bit3 = SBUF1 ?; sbit SBUF1_bit4 = SBUF1 ?; sbit SBUF1_bit5 = SBUF1 ; sbit SBUF1_bit6 = SBUF1 ?; sbit SBUF1_bit7 = SBUF1 ; void delay_bps() {unsigned char i; for (i= 0;i < 29; i++); _nop_();_nop_();} // 波特率 9600 模拟一个 9600 波特率 unsigned char getchar2() // 模拟接收一个字节数据{ while (RXD1); _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_no p_(); delay_bps(); SBUF1_bit0 = RXD1; //0 delay_bps(); SBUF1_bit1 = RXD1; //1 delay_bps(); SBUF1_bit2 = RXD1; //2 delay_bps(); SBUF1_bit3 = RXD1; //3 delay_bps(); SBUF1_bit4 = RXD1; //4 delay_bps(); SBUF1_bit5 = RXD1; //5 delay_bps(); SBUF1_bit6 = RXD1; //6 delay_bps(); SBUF1_bit7 = RXD1; //7 delay_bps(); return(SBUF1) ; // 返回读取的数据} void putchar2(unsigned char input) // 模拟发送一个字节数据{ SBUF1 = input; TXD1 = 0; // 起始位 delay_bps(); TXD1 = SBUF1_bit0; //0 delay_bps(); TXD1 = SBUF1_bit1; //1 delay_bps(); TXD1 = SBUF1_bit2; //2 delay_bps(); TXD1 = SBUF1_bit3; //3 delay_bps(); TXD1 = SBUF1_bit4; //4 delay_bps(); TXD1 = SBUF1_bit5; //5 delay_bps(); TXD1 = SBUF1_bit6; //6 delay_bps(); TXD1 = SBUF1_bit7; //7 delay_bps(); TXD1 = 1; // 停止位 delay_bps(); }3、实现串行通讯。在主程序文件中直接调用上

51单片机i-1模拟串行通信实现总结 来自淘豆网www.taodocs.com转载请标明出处.

非法内容举报中心
文档信息
  • 页数61
  • 收藏数0 收藏
  • 顶次数0
  • 上传人raojun00001
  • 文件大小128 KB
  • 时间2017-04-22