




已阅读5页,还剩49页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1 第7章89C51的串行口全双工的异步通讯串行口 全双工 两个单片机之间串行数据可同时双向传输 异步通信 收 发双方使用各自的时钟控制发送和接受过程 为使收发双方协调 要求收 发双方的时钟尽可能一致 但不要求接 收双方的时钟严格一致 可节省接连收 发双方的一条时钟信号线 要传送的串行数据在发送方是以数据帧形式一帧一帧地发送 通过串行传输线由接受方一帧一帧地接受 2 起始位 开始一个字符传送的标志位 数据位 起始位之后传送的数据信号位 奇偶效验位 用于对字符的传送作正确性检查 停止位 用以标志一个字符的结束 位时间 发送1位数据所需时间 帧 frame 从起始位开始到停止位结束的全部内容称为一帧 下图给出了一个字符帧的异步串行通信格式 3 89C51的串行口有4种工作方式 波特率由片内定时器 计数器控制 每发送或接收一帧数据 均可发出中断请求 除用于串行通讯 还可用来扩展并行I O口 4 7 1串行口的结构串行口内部结构如下图 两个物理上独立的接收和发送缓冲器SBUF 特殊功能寄存器 可同时收 发数据 全双工 发送缓冲器只能写入不能读出 接受缓冲器只能读出不能写入 两个缓冲器共用一个特殊功能寄存器字节地址 SBUF 99H 控制寄存器共两个 特殊功能寄存器SCON和PCON 5 1 SM0 SM1 串行口4种工作方式的选择位表7 1串行口的4种工作方式SM0SM1方式功能说明000同步移位寄存器方式 用于扩展I O口 0118位异步收发 波特率可变 由定时器控制 1029位异步收发 波特率为fosc 64或fosc 321139位异步收发 波特率可变 由定时器控制 7 1 1串行口控制寄存器SCON字节地址98H 可位寻址 格式如图7 2所示 6 2 SM2 多机通信控制位用于方式2或方式3中 当串行口以方式2或方式3接收时 如果SM2 1 只有当接收到的第9位数据 RB8 为 1 时 才将接收到的前8位数据送入SBUF 并置 1 RI 产生中断请求 当接收到的第9位数据 RB8 为 0 时 则将接收到的前8位数据丢弃 如果SM2 0 则不论第9位数据是 1 还是 0 都将前8位数据送入SBUF中 并置 1 RI 产生中断请求 方式1时 如果SM2 1 则只有收到有效的停止位时才会激活RI 方式0时 SM2必须为0 7 3 REN 允许串行接收位由软件置 1 或清 0 REN 1允许串行口接收数据 REN 0禁止串行口接收数据 4 TB8 发送的第9位数据方式2和3时 TB8是要发送的第9位数据 可作为奇偶校验位使用 也可作为地址帧或数据帧的标志 1为地址帧 0为数据帧 5 RB8 接收到的第9位数据方式2和3时 RB8存放接收到的第9位数据 在方式1 如果SM2 0 RB8是接收到的停止位 在方式0 不使用RB8 8 6 TI 发送中断标志位 方式0时 串行发送第8位数据结束时由硬件置 1 其它工作方式 串行口发送停止位的开始时置 1 TI 1 表示一帧数据发送结束 可供软件查询 也可申请中断 CPU响应中断后 向SBUF写入要发送的下一帧数据 TI必须由软件清0 7 RI 接收中断标志位 方式0时 接收完第8位数据时 RI由硬件置1 其它工作方式 串行接收到停止位时 该位置 1 RI 1 表示一帧数据接收完毕 并申请中断 该位状态也可软件查询 RI必须由软件清 0 9 SMOD 波特率选择位 例如 方式1的波特率的计算公式为 方式1波特率 2SMOD 32 定时器T1的溢出率也称SMOD位为波特率倍增位 7 1 2特殊功能寄存器PCON字节地址为87H 没有位寻址功能 10 7 2串行口的4种工作方式7 2 1方式0同步移位寄存器输入 输出方式 不能用于两个89C51之间的通信 常用于外接移位寄存器 以扩展并行I O口 8位数据为一帧 不设起始位和停止位 先发送或接收最低位 波特率固定为fosc 12 帧格式如下 11 1 方式0发送当CPU执行一条将数据写入发送缓冲器SBUF的指令时 产生一个正脉冲 串行口即把SBUF中的8位数据以fosc 12的固定波特率从RXD引脚串行输出 低位在先 TXD引脚输出同步移位脉冲 发送完8位数据置 1 中断标志位TI 时序如图7 5所示 图7 5 12 2 方式0接收REN 1 允许接收 REN 0 禁止接收 REN 1 允许接收 向串口的SCON写入控制字 置为方式0 并置 1 REN位 同时RI 0 时 产生一个正脉冲 串行口即开始接收数据 RXD为数据输入端 TXD为移位脉冲信号输出端 接收器也以fosc 12的固定波特率采样RXD引脚的数据信息 当收到8位数据时置 1 RI 表示一帧数据接收完 时序如下 图7 6 13 方式0下 SCON中的TB8 RB8位没有用到 发送或接收完8位数据由硬件置 1 TI或RI CPU响应中断 TI或RI须由用户软件清 0 可用如下指令 CLRTI TI位清 0 CLRRI RI位清 0 方式0时 SM2位必须为0 14 7 2 2方式1SM0 SM1 01方式1一帧数据为10位 1个起始位 0 8个数据位 1个停止位 1 先发送或接收最低位 帧格式如图7 7 方式1波特率 2SMOD 32 定时器T1的溢出率SMOD为PCON寄存器的最高位的值 0或1 图7 7方式1的帧格式 15 1 方式1发送方式1输出 数据由TXD P3 1 输出一帧信息为10位 1位起始位0 8位数据位 先低位 和1位停止位1 当执行一条数据写发送缓冲器SBUF的指令 就启动发送 图中TX时钟是发送的波特率 发送开始时 内部发送控制信号 SEND变为有效 将起始位向TXD输出 此后 每经过一个TX时钟周期 便产生一个移位脉冲 并由TXD输出一个数据位 8位数据位全部发送完毕后 置 1 TI SEND失效 方式1发送数据的时序 如图7 8所示 图7 8 16 2 方式1接收串行口以方式0 SM0 SM1 01 接受时 REN 1 数据从RXD P3 0 脚输入 当检测到起始位的负跳变时 开始接收数据 定时控制信号有两种 接收移位时钟 RX时钟 频率和传送的波特率相同 和位检测器采样脉冲 频率是RX时钟的16倍 1位数据期间 有16个采样脉冲 当采样到RXD端从1到0的跳变时就启动检测器 接收的值是3次连续采样 第7 8 9个脉冲时采样 进行表决以确认是否是真正的起始位 负跳变 的开始 图7 9 17 当一帧数据接收完 须同时满足两个条件 这次接收才真正有效 RI 0 即上一帧数据接收完成时 RI 1发出的中断请求已被响应 SBUF中的数据已被取走 说明 接收SBUF 已空 SM2 0或SM2 1 但收到的RB8 1 方式1时 停止位已进入RB8 则收到的数据装入SBUF和RB8 RB8装入停止位 且置 1 中断标志RI 若这两个条件不同时满足 收到的数据将丢失 18 7 2 3方式29位异步通信接口 每帧数据均为11位 1位起始位0 8位数据位 先低位 1位可程控的第9位数据和1位停止位 帧格式如图7 10 方式2波特率 2SMOD 64 fosc 图7 10方式2 3的格式帧 19 1 方式2发送发送前 先根据通讯协议由软件设置TB8 例如 双机通讯时的奇偶校验位或多机通讯时的地址 数据的标志位 然后 将要发送的数据写入SBUF 启动发送程序 串行口能自动把TB8取出 装入第9位位置 再逐一发送 发送完毕 使 TI 位置1 方式2发送数据波形如图7 11所示 图7 11方式2和方式3发送时序 20 例7 1 方式2发送在双机通讯中的应用 下面的发送中断服务程序 是在双机通讯中 以TB8作为奇偶校验位 处理方法为数据写入SBUF之前 先将数据的奇偶校验位写入TB8 以保证采用偶校验发送 PIPTI PUSHPSW 现场保护PUSHAccSETBRS1 选择第2组工作寄存器区CLRRS0CLRTI 发送中断标志清 0 MOVA R0 取数据 产生奇偶标志MOVC P 校验位送TB8 采用偶校验MOVTB8 C 为什么不直接写MOVTB8 P MOVSBUF A 启动发送INCR0 数据指针加1POPAcc 恢复现场POPPSWRETI 中断返回 21 2 方式2接收SM0 SM1 10 且REN 1 数据由RXD端输入 接收11位信息 当位检测到RXD从1到0的负跳变 并判断起始位有效后 开始收一帧信息 在接收器完第9位数据后 需满足两个条件 才能将接收到的数据送入SBUF 1 RI 0 意味着接收缓冲器为空 2 SM2 0或SM2 1 但RB8 1 即接收到的第9位数据位为1 当上述两个条件满足时 接收到的数据送入SBUF 接收缓冲器 第9位数据送入RB8 并置 1 RI 若不满足两个条件 接收的信息将被丢弃 方式2接收数据的时序如图7 12所示 图7 12方式2和方式3的接受时序 22 例7 2 方式2接收在双机通讯中的应用 本例与上例相对应 若第9位数据为校验位 在接收程序中作偶校验处理 设1组寄存器区的R0为数据缓冲器指针 PIRI PUSHPSWPUSHAccSETBRS0 选择1组寄存器区CLRRS1CLRRI 清中断标志MOVA SBUF 收到数据送AMOVC P 接受的数据产生的奇偶校验位在CJNCL1 C 0 跳L1JNBRB8 ERP C 1 RB8 0 跳ERPAJMPL2 C 1 RB8 1 跳L2L1 JBRB8 ERP C 0 RB8 1 跳ERPL2 MOV R0 A C和RB8一致 才表示接受数据正确INCR0POPAccPOPPSWERP 出错处理程序段 RETI 23 7 2 4方式3SM0 SM1 11 串口为方式3 波特率可变的9位异步通讯方式 除波特率外 方式3和方式2相同 方式3的时序见方式2 方式3波特率 2SMOD 32 定时器T1的溢出率 24 7 3多机通信要保证主机与所选择的从机实现可靠地通信 必须保证串口具有识别功能 SCON中的SM2位就是满足这一条件而设置的多机通信控制位 原理 在串行口以方式2 或方式3 接收时 若SM2 1 表示置多机通信功能位 这时有两种可能 1 接收到的第9位数据为1时 数据才装入SBUF 并置中断标志RI 1向CPU发出中断请求 2 接收到的第9位数据为0时 则不产生中断标志 信息将抛弃 若SM2 0 则接收的第9位数据不论是0还是1 都产生RI 1中断标志 接收到的数据装入SBUF中 上述特性 便可实现89C51的多机通信 25 设多机系统中有一主机和3个89C51从机 如图7 13 主机的RXD与从机的TXD相连 主机TXD与从机的RXD端相连 从机地址分别为00H 01H 02H 1 从机串行口编程为方式2或方式3接收 且置 1 SM2和REN位 使从机只处于多机通讯且接收地址帧的状态 2 主机先将从机地址 即准备接收数据的从机 发给各从机 主机发出的地址信息的第9位为1 各从机接收到的第9位信息RB8为1 且由于SM2 1 则置 1 RI 各从机都响应中断 执行中断程序 在中断服务子程序中 判主机送来的地址是否和本机地址相符合 相符则该从机清 0 SM2位 准备接收主机的数据或命令 若不符 则保持SM2 1状态 26 3 接着主机发送数据帧 此时各从机串行口接收到的RB8 0 只有地址相符合的从机系统 即已清 0 SM2位的从机 才能激活RI 从而进入中断 在中断程序中接收主机的数据 或命令 其它的从机因SM2 1 又RB8 0不激活中断标志RI 不能进入中断 接收的数据丢失 图7 13所示的多机系统是主从式 由主机控制多机之间的通信 从机和从机的通讯只能经主机才能实现 27 7 4波特率的制定方法方式0 方式2的波特率是固定的 方式1 方式3波特率由定时器T1的溢出率来确定 7 4 1波特率的定义波特率的定义 串行口每秒钟发送 或接受 的位数 设发送每一位所需的时间为T 则波特率为1 T 对于定时器的不同工作方式 波特率的范围不一 28 7 4 2定时器T1产生波特率的计算 1 方式0波特率 时钟频率fosc 1 12 不受SMOD位的值的影响 若fosc 12MHz 波特率为fosc 12即1Mb s 2 方式2波特率 2SMOD 64 fosc若fosc 12MHz SMOD 0波特率 187 5kb s SMOD 1波特率 375kb s 3 方式1或方式3时 波特率为 波特率 2SMOD 32 T1的溢出率实际设定波特率时 T1常设置为方式2定时 自动装初值 这种方式不仅操作方便 也可避免因软件重装初值而带来的定时误差 公式 7 3 29 30 实际使用时 为避免烦杂的初值计算 常用的波特率和初值X间的关系列成表7 2 P124 以供查用 表7 2有两点需要注意 1 时钟振荡频率为12MHz或6MHz时 表中初值X和相应的波特率之间有一定误差 例如 FDH的对应的理论值是10416波特 时钟6MHz 与9600波特相差816波特 消除误差可以调整时钟振荡频率fosc实现 例如采用的时钟振荡频率为11 0592MHz 2 如果串行通讯选用很低的波特率 例如 波特率选为55 可将T1设置为方式1定时 但在T1溢出时 需用在中断服务程序中重新装入初值 中断响应时间和执行指令时间会使波特率产生一定的误差 可用改变初值的方法加以调整 31 例7 3 若8031单片机的时钟振荡频率为11 0592MHz 选用T1为方式2定时作为波特率发生器 波特率为2400b s 求初值 设T1为方式2定时 选SMOD 0法一 按公式 7 3 计算法二 上述结果可直接从表7 2中查到 这里时钟振荡频率选为11 0592MHz 就可使初值为整数 从而产生精确的波特率 32 7 5串行口的编程和应用介绍89C51之间的双机串行通信的硬件接口和软件设计 7 5 1双机串行通信硬件接口89C51串行口的为TTL电平 这种以TTL电平串行传输数据的方式 抗干扰性差 传输距离短 为了提高串行通信的可靠性 增大串行通信的距离 一般都采用标准串行接口 如RS 232 RS 422A RS 485等来实现串行通信 根据89C51的双机通信距离和抗干扰性的要求 可选择TTL电平传输 或选择RS 232C RS 422A RS485串行接口进行串行数据传输 33 1 TTL电平通信接口如果两个89C51单片机相距在几米之内 它们的串行口可直接相连 从而直接用TTL电平传输方法来实现双机通信 接口电路如图7 14所示 图7 14用TTL电平传输方法实现双机通信的接口电路 34 2 RS 232C双机通信接口如果双机通信距离在30m之内 可利用RS 232C标准接口实现点对点的双机通信 接口电路如图7 15所示 图7 15中的MAX232A是美国MAXIM公司生产的RS 232C双工发送器 接收器电路芯片 图7 15RS 232C双机通信接口电路 35 3 RS 422A双机通信接口为了增加通信距离 可以在通信线路上采用光电隔离方法 利用RS 422A标准进行双机通信 最大传输距离可达1000m左右 其接口电路如图7 16所示 图7 16中的SN75174 SN75175是TTL电平到RS 232电平与RS 232电平到TTL电平的电平转换芯片 图7 16RS 422A双机通信接口电路 36 4 RS 485双机通信接口RS 422A双机通信需四芯传输线 这对长距离通信很不经济 故在工业现场 通常采用双绞线传输的RS 485串行通信接口 它很容易实现多机通信 图7 17给出了其RS 485双机通信接口电路 最大传输距离可达1000m左右 图7 17RS 485双机通信接口电路 37 7 5 2双机串行通信软件编程4种工作方式中的方式0是移位寄存器工作方式 主要用于扩展并行I O用 并不用于串行通信 见9 5 串行口的方式1 3是用于串行通信的 下面介绍串行口的方式1 3的双机串行通信软件编程 软件编程实际上与上面介绍的各种串行标准的硬件接口电路无关 38 1 串行口方式1应用编程 例7 4 本例采用方式1进行双机串行通信 收 发双方均采用6MHz晶振 波特率为2400b s 每一帧信息为10位 第0位为起始位 第1 8位为数据位 最后1位为停止位 发送方把以78H 77H单元的内容为首地址 以76H 75H单元内容减1为末地址的数据块通过串行口发送给接收方 发送方要发送的数据块的地址为2000H 201FH 发送时先发送地址帧 再发送数据帧 接收方在接收时使用一个标志位来区分接收的是地址还是数据 然后将其分别存放到指定的单元中 发送方可采用查询方式或中断方式发送数据 接收方可采用中断或查询方式接收 下面仅介绍采用中断方式发送 接收的程序 39 1 甲机发送程序 P128 ORG0000HLJMPMAIN 跳至主程序ORG0023HLJMPCOM INT 跳至中断服务程序ORG1000HMAIN MOVSP 53H 设置堆栈指针MOV78H 20H 要发送数据的首地址MOV77H 00HMOV76H 20H 要发送数据的末地址MOV75H 40HACALLTRANS 调用发送程序 发送地址 SJMP 等待中断 40 定时 计数器T1方式2TRANS MOVTMOD 20H 设置计数器初值MOVTH1 0FAHMOVTL1 0FAH 波特率加倍MOVPCON 00HSETBTR1 打开计数器 设置串行口工作方式MOVSCON 40H 关中断 用查询方式发送地址帧MOVIE 00HCLRF0 清标志位 发送78H单元地址帧MOVSBUF 78H 发送过程中 TI 0 等待WAIT1 JNBTI WAIT1CLRTI 发送完 清TI MOVSBUF 77HWAIT2 JNBTI WAIT2CLRTIMOVSBUF 76HWAIT3 JNBTI WAIT3CLRTIMOVSBUF 75HWAIT4 JNBTI WAIT4CLRTI 地址帧发送完 中断方式发送数据MOVIE 90H 设置中断允许MOVDPH 78H 数据指针MOVDPL 77HMOVXA DPTRMOVSBUF A 发送首个数据WAIT JNBF0 WAITRET 41 中断服务子程序 用来发送数据COM INT CLRTI 清发送中断标志INCDPTR 改变数据指针MOVA DPH 判断数据指针到末尾地址了没 CJNEA 76H END1 未发送结束 至END1继续MOVA DPLCJNEA 75H END1SETBF0 置标志位为1CLRES 清串行通信中断CLREA 清所有中断RETI 中断返回END1 MOVXA DPTR 未到末尾单元 继续发MOVSBUF ARETI 中断返回END 42 2 乙机接受程序 P129 ORG0000HLJMPMAIN 跳至主程序ORG0023HLJMPCOM INT 跳至中断服务程序ORG1000HMAIN MOVSP 53H 设置堆栈指针ACALLRECEI 调用接受子程序SJMP 等待中断 43 RECEI MOVR0 78H 设置地址接收区MOVTMOD 20H 设置定时器 计数器工作方式MOVTH1 0FAH 设置波特率MOVTL1 0FAHMOVPCON 00H 波特率加倍SETBTR1 开计数器MOVSCON 50H 设置串行口工作方式 REN 1MOVIE 90H 开串行口中断CLRF0 清标志F0 地址数据标志CLR7FH 清7FH位 接受结束标志WAIT JNB7F WAIT 7F位为0 则等待RET 44 中断服务程序COM INT PUSHDPL 压栈PUSHDPHPUSHACC 清中断标志CLRRI F0为1 则至R DATAJBF0 R DATA 保存地址单元MOVA SBUFMOV R0 ADECR0 内容不为 74H 跳至RETNCJNER0 74H RETN 内容为 74H 则F0 1SETBF0RETN POPACC 出栈POPDPHPOPDPLRETI 中断返回 R DATA MOVDPH 78HMOVDPL 77H 首地址MOVA SBUFMOV DPTR AINC77H 改变指针MOVA 77HJNZEND2INC78H 高字节处理END2 MOVA 76H 判断数据是否传送完CJNEA 78H RETNMOVA 75HCJNEA 77H RETNCLRESCLREASETB7FH 接受结束SJMPRETNEND 45 2 串行口方式2应用编程方式2和方式1有两点不同之处 方式2接收 发送11位信息 第0位为起始位 第1 8位为数据位 第9位是程控位 该位可由用户置TB8决定 第10位是停止位1 这是方式1和方式2的一个不同点 另一个不同点是方式2的波特率变化范围比方式1小 方式2的波特率 振荡器频率 n 当SMOD 0时 n 64 当SMOD 1时 n 32 鉴于方式2的使用和方式3基本一样 只是波特率不同 方式3的波特率要由用户决定 所以方式2的具体编程应用 可参照下面介绍的方式3应用编程 46 3 串行口方式3应用编程 例7 5 本例为89C51单片机用串行通信方式3进行发送和接收的应用实例 发送方采用查询方式发送地址帧 采用中断或查询方式发送数据 接收方采用中断或查询方式接收数据 发送和接收双方均采用6MHz的晶振 波特率为4800b s 发送方首先将存放在78H和77H单元中的地址发送给接收方 然后发送数据00H FFH 共256个数据 47 1 甲机发送程序 P131 ORG0000HLJMPMAIN 跳至主程序ORG0023HLJMPCOM INT 跳至串行口中断ORG1000HMAIN MOVSP 53H 设置堆栈指针MOV78H 20H 设置要存放数据的单元的首地址MOV77H 00HACALLTRANS 调用TRANS子程序SJMP 48 TRANS MOVTMOD 20H 设置定时器 计数器的工作方式MOVTH1 0F3H 设置波特率为4800bpsMOVTL1 0F3H SETBTR1 开定时器MOVSCON E0H 设置串行口工作方式为3SETBTB8 设置第9位数据位MOVIE 00H 关中断MOVSBUF 78H 查询方式发送首地址高8位WAIT JNBTI WAITCLRTIMOVSBUF 77H
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 药品销售储存管理制度
- 药店仓库发货管理制度
- 药店店员交易管理制度
- 莱昂纳德负荷管理制度
- 设备临床准入管理制度
- 设备公司安全管理制度
- 设备安全连锁管理制度
- 设备标准机台管理制度
- 设备状态评价管理制度
- 设备维护部门管理制度
- MOOC 嵌入式系统-西北工业大学 中国大学慕课答案
- 北京市密云区2024届物理八年级下册期末联考试题含解析
- 工程造价专业《工程项目管理实训》课程标准
- 《高温熔融金属吊运安全规程》(AQ7011-2018)
- 《观念决定行动》课件
- 年产4亿片阿奇霉素片的精烘包及车间设计
- 分组密码的攻击方法与实例分析
- 《现代汉语》考试复习题库及答案
- 关于幼儿园沙水区自主游戏探究的论文
- (完整word)软件验收单
- 享受低保证明
评论
0/150
提交评论