串行通信基础概念rs-232接口mcs-51的串行接口单片(编辑修改稿)内容摘要:

可变,由定时器 1的溢出率决定 波特率 /(b/s) fosc/MHz SMOD 定时器 1 C/ 模式 初始值 方式 0: 1 M 方式 2: 375 k 方式 3: k k k k k k k 110 110 12 12 12 6 12 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 2 2 2 2 2 2 2 1 FFH FDH FDH FAH F4H E8H 1DH 72H FEEBH T 波特率 = )x256(12 f322 os cs m od 00:17:22 举例说明波特率的设定方法 00:17:22 单片机之间的通信 R X DTX D8051应用系统( 甲机 )R X DTX D8051应用系统( 乙机 )双机异步通信接口电路 00:17:22 1 217 4 L S 0 5V C C 外 5 V1123 123S N 7 5 1 7 5114 3123213347 4 L S 0 57 4 L S 0 5外 5 V V C CT X DR X D8051( 甲机 )8051( 乙机 )R X DT X DV C C外 5 V外 5 VV C CS N 7 5 1 7 4S N 7 5 1 7 5 S N 7 5 1 7 47 4 L S 0 5外 5 V外 5 VR1R3R2R1R3R2RS422A双机异步通信接口电路 00:17:22 双机通信软件编程 查询方式 1) 甲机发送 编程将甲机片外 1000H~ 101FH单元的数据块从串行口输出。 定义方式 2发送, TB8为奇偶校验位。 发送波特率375 kb/s, 晶振为 12 MHz, SMOD=1。 00:17:22 参考发送子程序如下: MOV SCON, 80H ; 设置串行口为方式 2 MOV PCON, 80H ; SMOD=1 MOV DPTR, 1000H ; 设数据块指针 (教材串行) MOV R7, 20H ; 设数据块长度 START: MOVX A, @DPTR ; 取数据给 A MOV C,P MOV TB8,C ; 奇偶位 P送给 TB8 MOV SBUF,A ; 数据送 SBUF, 启动发送 WAIT: JBC TI,CONT ; 判断帧是否发送完。 若送完 , 清 TI, 取下一个 AJMP WAIT ; 未完等待 CONT: INC DPTR ; 更新数据单元 DJNZ R7,START ; 循环发送至结束 RET 00:17:22 2) 乙机接收 编程使乙机接收甲机发送过来的数据块,并存入片内 50H~6FH单元。 接收过程要求判断 RB8, 若出错置 F0标志为 1,正确则置 F0标志为 0,然后返回。 在进行双机通信时,两机应采用相同的工作方式和波特率。 00:17:22 MOV SCON, 80H ; 设置串行口为方式 2 MOV PCON, 80H ; SMOD=1 MOV R0, 50H ; 设置数据块指针 MOV R7, 20H ; 设置数据块长度 SETB REN ; 启动接收 WAIT: JBC RI, READ ; 判断是否接收完一帧。 若完,清 RI, 读入数据 AJMP WAIT ; 未完等待 READ: MOV A, SBUF ; 读入一帧数据 a JNB ,PZ ; 奇偶位为 0则转 JNB RB8, ERR ; P=1, RB8=0, 则出错 SJMP RIGHT ; 二者全为 1,则正确 PZ: JB RB8, ERR ; P=0, RB8=1, 则出错 RIGHT: MOV @R0, A ; 正确,存放数据 INC R0 ; 更新地址指针 DJNZ R7, WAIT ; 判断数据块是否接收完 CLR ; 接收正确,且接收完清 F0标志 RET ; 返回 ERR: SETB ; 出错,置 F0标志为 1 RET ; 返回 00:17:22 1) 甲机发送 上面的通信程序,收发双方是采用奇偶位 TB8来进行校验的,这里介绍一种用 累加和 进行校验的方法。 编程将甲机片内 60H~ 6FH单元的数据块从串行口发送 , 在发送之前将数据块长度发送给乙机 , 当发送完 16个字节后 , 再发送一个累加校验和。 定义双机串行口按方式 1工作 , 晶振为 MHz, 波特率为 2400 b/s, 定时器 1按方式 2工作。 经计算或查表得到定时器预置值为 0F4H, SMOD=0。 参考发送子程序如下: 中断方式 在很多应用中 , 双机通信的接收方都采用中断的方式来接收数据 , 以提高 CPU的工作效率;发送方仍然采用查询方式发送。 00:17:22 MOV TMOD, 20H ;设置定时器 1为方式 2 MOV TL1, 0F4H ;设置预置值 MOV TH1, 0F4H SETB TR1 ;启动定时器 1 MOV SCON, 50H ;设置串行口为方式 1, 允许接收 START: MOV R0, 60H ;设置数据指针 MOV R5, 10H ;设置数据长度 MOV R4, 00H ;累加校验和初始化 MOV SBUF, R5 ;发送数据长度 00:17:22 WAIT1: JBC TI, TRS ;等待发送 AJMP WAIT1 TRS: MOV A, @R0 ;读取数据 MOV SBUF, A ;发送数据 ADD A, R4 MOV R4, A ;形成累加和 INC R0 ;修改数据指针 00:17:22 WAIT2: JBC TI, CONT ;等待发送一帧数据 AJMP WAIT2 CONT: DJNZ R5, TRS ;判断数据块是否发送完 MOV SBUF, R4 ;发送累加校验和 WAIT3: JBC TI, WAIT4 ;等待发送 AJMP WAIT3 WAIT4: JBC RI。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。