单片机原理与接口技术PPT电子课件教案-第7章_MCS-51单片机定时计数器和串行接口.ppt_第1页
单片机原理与接口技术PPT电子课件教案-第7章_MCS-51单片机定时计数器和串行接口.ppt_第2页
单片机原理与接口技术PPT电子课件教案-第7章_MCS-51单片机定时计数器和串行接口.ppt_第3页
单片机原理与接口技术PPT电子课件教案-第7章_MCS-51单片机定时计数器和串行接口.ppt_第4页
单片机原理与接口技术PPT电子课件教案-第7章_MCS-51单片机定时计数器和串行接口.ppt_第5页
已阅读5页,还剩106页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1 21 11 单片机原理与接口技术 第7章mcs 51单片机定时 计数器和串行接口 2 21 11 1 了解定时 计数器的结构和工作原理 2 熟悉定时 计数器的控制寄存器 3 掌握定时 计数器的应用编程 4 了解串行通信接口的结构和工作原理 5 熟悉串行通信接口的控制寄存器 6 掌握串行通信的应用编程 本章教学要求 3 21 11 本章目录 7 1定时 计数器7 1 1定时 计数器的结构与原理7 1 2定时 计数器的工作方式7 1 3定时 计数器对输入信号的要求7 1 4定时 计数器的应用7 2串行通信接口7 2 1串行通信基础知识7 2 2mcs 51串行通信接口7 2 3串行通信接口的应用习题与思考题 4 21 11 7 1定时 计数器 mcs 51单片机内有2个16位可编程的定时 计数器 即定时器0 t0 和定时器1 t1 两个定时 计数器都有定时或事件计数的功能 可用于定时控制 延时 对外部事件计数和检测等应用 5 21 11 7 1 1定时 计数器的结构与原理 t0和t1受特殊功能寄存器tmod和tcon控制 可由软件设置为定时或计数工作方式 1 定时 计数器t0 t1结构 t0 t1结构 6 21 11 2 加1计数器 t0 t1都是16位加1计数器 th0 tl0构成定时 计数器t0加1计数器的高8位和低8位 加1计数器的初值可以通过程序进行设定 设定不同的初值 就可以获得不同的计数值或定时时间 7 1 1定时 计数器的结构与原理 加1计数器 7 21 11 3 定时控制寄存器 tcon tf0 tf1 计数溢出标志位 tf0 1或tf1 1是计数溢出 tf0 0或tf1 0是计数未满 tr0 tr1 启 停控制位 tr0 1或tr1 1 使t0或t1启动计数 tr0 0或tr1 0 使t0或t1停止计数 7 1 1定时 计数器的结构与原理 tcon 8 21 11 4 工作方式控制寄存器 tmod gate 门控信号 当gate 0时 trx 1即可启动定时器工作 当gate 1时 要求同时有trx 1和intx 1才可启动定时器工作 x是1 2 c t 定时 计数器选择位 c t 1 为计数器工作方式 c t 0 为定时器工作方式 7 1 1定时 计数器的结构与原理 m1 m0 定时 计数器工作模式选择位m1m0 00工作方式0 13位方式 m1m0 01工作方式1 16位方式 m1m0 10工作方式2 8位自动再装入方式 m1m0 11工作方式3 t0为2个8位方式 tmod 9 21 11 5 t0 t1定时功能和计数功能的选择 通过选择控制c t实现定时器或计数器的功能选择 当c t 0时 选择定时器功能 当c t 1时 选择计数器功能 7 1 1定时 计数器的结构与原理 定时 计数功能选择 10 21 11 对单片机内部机器周期产生的脉冲进行计数 计数器每个机器周期自动加1 如果单片机的晶振频率为12mhz 则计数频率为1mhz 或者说计数器每加1 可实现1 s的计时 7 1 1定时 计数器的结构与原理 定时器功能 c t 0 定时器功能 11 21 11 对外部事件产生的脉冲进行计数 对于mcs 51单片机来说 p3 4和p3 5两个信号引脚分别是t0和t1计数器的计数脉冲信号输入端 当该引脚输入脉冲发生负跳变时 加1计数器自动加1 7 1 1定时 计数器的结构与原理 计数器功能 c t 1 计数器功能 12 21 11 7 1 2定时 计数器的工作方式 定时 计数器t0 t1可以有四种不同的工作方式 方式0 方式1 方式2和方式34种工作方式由tmod中的m1 m0两位决定 见表7 3所示 四种工作方式 13 21 11 当tmod中m1m0 00时 选定方式0 13位状态 进行工作 c t 1时 图中电子开关s1切至下端 13位定时 计数器处于计数器状态 加法计数器对t0引脚上的外部输入脉冲计数 计数值 n 8192 x x是由th0 tl0设定的初值 x 8191时为最小计数值l x 0时为最大计数值8192 即计数范围为1 8192 213 7 1 2定时 计数器的工作方式 1 方式0 方式0 13位计数 14 21 11 c t 0时 图中电子开关s1切至上端 加法计数器对机器周期计数 13位定时 计数器处于定时器状态 定时时间 td 8192 x tcy 如果晶振频率fosc 12mhz 即机器周期为1 s 则定时范围为1 s 8192 s 7 1 2定时 计数器的工作方式 方式0 13位定时 1 方式0 15 21 11 无论是计数器状态还是计时器状态 随着加法计数的增大 tl0的低5位溢出后自动向th0进位 th0溢出后 将溢出标志位tf0置位 并向cpu发出中断请求 7 1 2定时 计数器的工作方式 方式0计数溢出置位tf0 1 方式0 16 21 11 7 1 2定时 计数器的工作方式 启动方式 17 21 11 当tmod中m1m0 01时 选定方式1 16位状态 进行工作 7 1 2定时 计数器的工作方式 方式1 16位定时 计数 2 方式1 当作为计数器使用时 计数范围是1 65536 216 当作为定时器使用时 定时器的定时时间为 td 216 count tcy 如果晶振频率fosc 12mhz 则定时范围为 1 65536 s 18 21 11 方式0和方式1具有共同的特点 即当加法计数器发生溢出后 自动处于0状态 如果要实现循环计数或周期定时 就需要程序不断反复给计数器赋初值 这就影响了计数或定时精度 并给程序设计增添了麻烦 而方式2具有初值自动重新加载功能 其逻辑结构如图7 5所示 7 1 2定时 计数器的工作方式 方式2 自动重载初值 3 方式2 19 21 11 当m1m0 10时 定时 计数器选定方式2进行工作 该方式下 16位计数器被分为两个8位寄存器tl0和th0 其中tl0作为计数器 th0作为计数器tl0的初值预置寄存器 并始终保持为初值常数 当tl0计数溢出时 系统将tf0置位 并向cpu申请中断 同时将th0的内容重新装入tl0 继续计数 7 1 2定时 计数器的工作方式 方式2 自动重载初值 20 21 11 4 方式3 7 1 2定时 计数器的工作方式 方式3 在前述方式0 1 2三种工作方式中 t0和t1两个定时 计数器具有相同的功能 在方式3下 t0和t1的功能完全不同 当m1m0 11时 t0定时 计数器处于方式3工作模式 t1定时 计数器只能工作在方式0 1 2下 21 21 11 4 方式3 7 1 2定时 计数器的工作方式 方式3时t0的结构 1 t0的方式3工作模式在方式3下 t0被拆成两个独立的8位计数器tl0和th0 tl0既可以计数使用 又可以定时使用 构成了1个8位的定时 计数器 tl0 t0的控制位和引脚信号全归tl0使用 其功能和操作与方式0或方式1完全相同 而且工作逻辑结构也极其类似 th0只能作为1个8位定时器使用 不能用做外部计数方式 而且由于t0的控制位已被tl0独占 因此只好借用定时 计数器t1的控制位tr1和tf1 以计数溢出去置位tf1 还占用t1的中断源 而定时的启动和停止则受tr1的状态控制 由于tl0既能做定时器使用 也能做计数器使用 而th0只能做定时器使用 因此在工作方式3下 定时 计数器t0可以构成两个独立的定时器或1个定时器 1个计数器 22 21 11 1 t0的方式3工作模式t0为方式3工作模式时可以构成两个独立的定时器或1个定时器 1个计数器 7 1 2定时 计数器的工作方式 方式3时t0的结构 23 21 11 2 t0在方式3时t1的工作模式 7 1 2定时 计数器的工作方式 方式3时t1的工作模式 如果定时 计数器t0已工作在方式3下 则定时 计数器t1只能工作在方式0 方式1或方式2下 此时由于t1的运行控制位tr1及计数溢出标志位tf1已被定时 计数器t0借用而没有计数溢出标志位可供使用 因此只能把计数溢出直接送给串行口 作为串行口的波特率发生器使用 以确定串行通信的速率 当作为波特率发生器使用时 只需要设置好工作方式 便可自动运行 如要停止工作 只需送入一个把t1设置为方式3的方式控制字就可以了 因为定时 计数器t1不能在方式3下使用 如果硬把它设置为方式3 则停止工作 24 21 11 2 t0在方式3时t1的工作模式 7 1 2定时 计数器的工作方式 方式3时t1的工作模式 如果定时 计数器t0已工作在方式3下 则定时 计数器t1只能工作在方式0 方式1或方式2下 25 21 11 7 1 3定时 计数器对输入信号的要求 定时 计数器的作用是用来精确地确定某一段时间间隔 作为定时器用 或累计外部输入的脉冲个数 作为计数器用 当用作定时器时 在其输入端输入周期固定的脉冲 根据定时 计数器中累计的脉冲个数 即可计算出所定时间的长度 当mcs 5l内部的定时 计数器被选定为定时器工作模式时 计数输入信号是内部时钟脉冲 每个机器周期产生一个脉冲位 计数器增l 因此定时 计数器的输入脉冲的周期与机器周期一样 为时钟振荡频率的l 12 当采用12mhz频率的晶振时 计数速率为1mhz 输入脉冲的周期间隔为1 s 由于定时的精度决定于输入脉冲的周期 因此当需要高分辨率的定时时 应尽量选用频率较高的晶振 定时器作用 定时器作用 26 21 11 当定时 计数器用作计数器时 计数脉冲来自外部输入引脚t0或t1 当输入信号产生由1至0的跳变 即负跳变 时 计数器的值增l 由于确认一次负跳变需要用2个机器周期 即24个振荡周期 因此外部输入的计数脉冲的最高频率为振荡器频率的1 24 例如 选用6mhz频率的晶振 允许输入的脉冲频率为250khz 如果选用12mhz频率的晶振 则可输入500khz的外部脉冲 对于外部输入信号的占空比并没有什么限制 但为了确保某一给定的电平在变化之前能被采样一次 则这一电平至少要保持一个机器周期 7 1 3定时 计数器对输入信号的要求 计数器作用 计数器作用 27 21 11 7 1 4定时 计数器的应用 1 初始化步骤1 设置工作方式2 计算加1计数器的计数初值count 并将计数初值count送入th tl中3 启动计数器工作 即将trx置14 若采用中断方式 则应设置t0 t1及cpu开中断 1 定时 计数器初始化 初始化步骤 28 21 11 2 计数方式初始化 假设t0工作于计数方式1 计数值n 1 即每当t0引脚输入一个计数脉冲就使加1计数器产生溢出 通常可以使用这种方法扩展外中断 为了使加1计数器每加一次1就溢出 加1计数器的初值count 0ffffh 216 1 其中16为工作方式1时加1计数器的位数 1为计数值x 现用n表示加1计数器的位数 用x表示计数值 则计数初值count 2n x 式中 n 13 16 8和8 分别对应工作方式0 1 2和3 7 1 4定时 计数器的应用 计数器初始化 29 21 11 例7 1定时 计数器t0工作于计数方式 计数值x 1 允许中断 分别使用工作方式1 方式0和方式2 进行初始化编程 7 1 4定时 计数器的应用 计数器初始化 例7 1 1 假设t1定时 计数器闲置不用 可设控制寄存器tmod的高4位为0000 即 tmod7 4 0000b 2 t0定时 计数器工作于计数方式 可确定t0的gate 0 c t 1 即 tmod3 2 01b 30 21 11 3 t0工作于方式1时 应确定m1m0 01即 tmod1 0 01b则 tmod 0000 0101b 05h计数器位数n 16 计数器初值count 216 1 1111 1111 1111 1111b ffffh即 th0 ffh tl0 ffh 7 1 4定时 计数器的应用 计数器初始化 例7 1 31 21 11 4 t0工作于方式0时 应确定m1m0 00即 tmod1 0 00b则 tmod 0000 0100b 04h计数器位数n 13 计数器初值count 213 1 1111 1111 1 1111b即 th0 ffh 高8位ffh送入th0中 tl0 1fh 低5位1fh送入tl0中 7 1 4定时 计数器的应用 计数器初始化 例7 1 32 21 11 5 t0工作于方式2时 应确定m1m0 10即 tmod1 0 10b则 tmod 0000 0110b 06h计数器位数n 8 计数器初值count 28 1 1111 1111b ffh即 th0 ffh tl0 ffh 7 1 4定时 计数器的应用 计数器初始化 例7 1 33 21 11 按照前面分析 初始化程序如下 1 t0工作于方式1的初始化程序汇编程序段 movtmod 05h 设置t0工作于计数方式1movth0 0ffh 加1计数器高8位th0赋初值ffhmovtl0 0ffh 加1计数器低8位tl0赋初值ffhsetbet0 t0开中断setbea cpu开中断setbtr0 启动t0计数 7 1 4定时 计数器的应用 计数器初始化 例7 1 34 21 11 c语言程序段 includesbitet0 ie 1 定义cpu中断控制字ie第1位为et0 sbitea ie 7 定义cpu中断控制字ie第7位为ea sbittr0 tcon 4 定义tcon第4位为tr0 tmod 0 x05 设置t0工作于计数方式1 th0 0 xff 加1计数器高8位th0赋初值ffh tl0 0 xff 加1计数器低8位tl0赋初值ffh et0 1 t0开中断 ea 1 cpu开中断 tr0 1 启动t0 7 1 4定时 计数器的应用 计数器初始化 例7 1 35 21 11 2 t0工作于方式0的初始化程序movtmod 04h 设置t0工作于计数方式0movth0 ffh 加1计数器高8位th0赋初值ffhmovtl0 1fh 加1计数器低8位tl0赋初值1fhsetbet0 t0开中断setbea cpu开中断setbtr0 启动t03 t0工作于方式2的初始化程序movtmod 06h 设置t0工作于计数方式2movtl0 0ffh 计数器tl1赋初值ffhmovth0 0ffh 重装寄存器th1赋初值ffhsetbet0 t0开中断setbea cpu开中断setbtr0 启动t0 7 1 4定时 计数器的应用 计数器初始化 例7 1 36 21 11 3 定时方式初始化 若系统主频fosc 6mhz 则机器周期tcy 2 s 即计数器加一次1所用时间为2 s 若计数器加100次产生溢出 计数值n 100 则定时时间为200 s 即定时器定时时间td n tcy 计数值n与计数器初值count的关系是n 2n count所以 定时时间td 2n count tcy计数初值count 2n td tcy式中 n 13 16 8 8 分别对应方式0 1 2 3 7 1 4定时 计数器的应用 定时器初始化 37 21 11 1 假设t1定时 计数器闲置不用 可设控制寄存器tmod的高4位为0000 即 tmod7 4 0000b 2 t0工作于定时方式 可确定t0的gate 0 c t 0 即tmod3 2 00b 例7 2t0工作于定时方式1 定时时间td 2ms 系统主频fosc 8mhz 允许中断 对t0进行初始化编程 7 1 4定时 计数器的应用 定时器初始化 例7 2 38 21 11 3 t0工作于方式1时 应确定m1m0 01即 tmod1 0 01b则 tmod 0000 0001b 01h4 系统主频fosc 8mhz 时钟周期tcp 1 8 s系统机器周期tcy 12tcp 12 8 1 5 s计数器位数n 16 定时时间td 2ms 2000 s计数初值count 2n td tcy 216 2000 1 5 64203 facbh即 th0 fah tl0 cbh 7 1 4定时 计数器的应用 定时器初始化 例7 2 39 21 11 汇编语言初始化程序段 movtmod 01h 设置t0工作于定时方式1movth0 0fah 加1计数器高8位th0赋初值fahmovtl0 0cbh 加1计数器低8位tl0赋初值cbhsetbet0 t0开中断setbea cpu开中断setbtr0 启动t0开始定时 7 1 4定时 计数器的应用 定时器初始化 例7 2 40 21 11 1 假设t0定时 计数器闲置不用 可设控制寄存器tmod的低4位为0000 即 tmod3 0 0000b 2 t1工作于定时方式 可确定t1的gate 0 c t 0 即 tmod7 6 00b 例7 3t1工作于定时方式2 定时时间td 500 s 系统主频fosc 6mhz 不允许中断 对t1进行初始化编程 7 1 4定时 计数器的应用 定时器初始化 例7 3 41 21 11 3 t1工作于方式2时 应确定m1m0 10即 tmod5 4 10b 则 tmod 0010 0000b 20h 4 系统主频fosc 6mhz 时钟周期tcp 1 6 s tcy 12tcp 12 6 2 s 计数器位数n 8 定时时间td 500 s 计数初值count 2n td tcy 28 500 2 6 06h 即 th0 06h tl0 06h 7 1 4定时 计数器的应用 定时器初始化 例7 3 42 21 11 汇编语言初始化程序段 movtmod 20h 设置t1工作于计数方式2movtl1 06h 计数器tl1赋初值06hmovth1 06h 重装寄存器th1赋初值06hclret1 t1关中断setbtr1 启动t1 7 1 4定时 计数器的应用 定时器初始化 例7 3 43 21 11 c语言初始化程序段 includesbitet1 ie 3 定义cpu中断控制字ie第3位为et1 sbittr1 tcon 6 定义tcon第6位为tr1 tmod 0 x20 设置t1为定时方式2 tl1 0 x06 计数器tl1赋初值06h th1 0 x06 重装寄存器th1赋初值06h et1 0 t1关中断 tr1 1 启动t1 7 1 4定时 计数器的应用 定时器初始化 例7 3 44 21 11 2 定时 计数器应用实例 分析 周期为2ms的方波要求定时间隔为1ms 每次时间到将p1 0取反 定时器计数频率为fosc 12 tcy 12 fosc 1 s 每个机器周期定时器计数加1 1ms 1000 s 需计数次数为1000 12 fosc 1000 由于计数器向上计数 为得到l000个计数之后的定时器溢出 必须给定时器赋初值65536 1000 c语言中相当于 1000 用定时器1的方式1编程 采用中断方式 例7 4设单片机的fosc 12mhz 要求在p1 0脚上输出周期为2ms的方波 7 1 4定时 计数器的应用 应用实例 例7 4 45 21 11 1 汇编语言程序 org0000h 复位入口ajmpstartorg001bh t1中断服务程序入口地址ajmpt1intorg0030hstart movsp 60h 初始化程序movtmod 10h 设置t1工作于定时方式1movth1 0fch 设置加1计数器的计数初值高字节movtl1 18h 设置加1计数器的计数初值低字节setbtr1 启动t1setbet1 开t1中断setbea 开总允许中断main ajmpmain 主程序t1int cplp1 0 t1中断服务程序movth1 0fchmovtl1 18hreti 7 1 4定时 计数器的应用 应用实例 例7 4 46 21 11 2 c51程序段 includesbitrect wave p1 0 方波由p1 0口输出 voidtime1 over void 计数器计数时间到子程序 voidmain void tmod 0 x10 设置定时 计数器1为工作方式1 th1 1000 256 设置计数初值高字节 tl1 1000 256 设置计数初值低字节 ie 0 x00 禁止中断 tr1 1 启动定时 for if tf1 查询计数溢出 time1 over 调用计数器计数时间到子程序 7 1 4定时 计数器的应用 应用实例 例7 4 47 21 11 voidtime1 over void 计数器计数时间到子程序 th1 1000 256 设置计数初值高字节 tl1 1000 256 设置计数初值低字节 重启定时器 tf1 0 计数溢出标志位清0 rect wave rect wave 输出取反 7 1 4定时 计数器的应用 应用实例 例7 4 48 21 11 例7 5设一只发光二极管led和8051的p1 0脚相连 当p1 0脚是高电平时 led发亮 当p1 0脚是低电平时 led熄灭 编制程序用定时器来实现发光二极管led的闪烁功能 设置led每1s闪烁一次 已知单片机系统主频为12mhz 7 1 4定时 计数器的应用 应用实例 例7 5 49 21 11 设计思想 定时 计数器的最长定时是65 536ms 无法实现1s的定时 可以采用软件计数器来进行设计 定义一个软件计数器单元30h 先用定时 计数器t0做一个50ms的定时器 定时时间到后将软件计数器中的值加1 如果软件计数器计到了20 1s 取反p1 0 并清除软件计数器中的值 否则直接返回 则完成了20次定时中断才取反一次p1 0 实现定时时间20 50 1000ms 1s的定时 定时 计数器t0采用工作方式1 16位定时器 其初值为 216 50ms 1 s 65536 50000 15536 3cb0h 7 1 4定时 计数器的应用 应用实例 例7 5 50 21 11 程序如下 org0000hajmpstart 转入主程序org000bh 定时 计数器t0的中断服务程序入口地址ajmptime0 跳转到真正的定时器中断服务程序处org0030hstart movsp 60h 设置堆栈指针movp1 00h 关发光二极管led 使其灭 mov30h 00h 软件计数器预清0movtmod 01h 定时 计数器t0工作于方式1movth0 3ch 设置定时 计数器的初值movtl0 0b0hsetbea 开总中断允许setbet0 开定时 计数器t0中断允许setbtr0 启动定时 计数器t0loop jmploop 循环等待 7 1 4定时 计数器的应用 应用实例 例7 5 51 21 11 time0 inc30h 中断程序mova 30hcjnea 14h ret0 与20比较 不等转ret0mov30h 00hcplp1 0ret0 movth0 3ch 重设定时初值 启动movtl0 0b0hreti 7 1 4定时 计数器的应用 应用实例 例7 5 52 21 11 尽管mcs 51为用户只提供了两个外部中断源 但用户可以根据实际需求 进行多于两个外部中断请求的扩展 其中有很多扩展方法 在此重点介绍利用定时器中断作为外部中断的扩展 mcs 51有两个定时 计数器t0 t1 若选择它们以计数器方式工作 当引脚t0或t1上发生负跳变时 t0或t1计数器则加1 利用这个特性 借用引脚t0或t1作为外部中断请求输入线 若设定计数初值为满量程 计数器加1 就会产生溢出中断请求 tf0或tf1变成了外部中断请求标志位 t0或t1的中断入口地址被扩展成了外部中断源的入口地址 值得注意的是 当使用定时器作为外部中断时 定时器以前的功能将失效 除非用软件对它进行复用 3 采用定时 计数器扩展外部中断 7 1 4定时 计数器的应用 扩展外部中断 53 21 11 将定时器t0引脚作为外部中断源使用的具体做法为 设定相应定时器工作方式为方式2 计数器th0 tl0初值为0ffh 允许计数器t0中断 则t0的初始始化程序如下 movtmod 06h 将计数器t0设定为 方式2外部计数movtl0 0ffh 设置计数器初值movth0 0ffh 设置重装计数器初值setbet0 允许t0中断setbea cpu开中断setbtr0 启动t0 7 1 4定时 计数器的应用 扩展外部中断 54 21 11 includevoidmain void tmod 0 x66 两个定时 计数器都设为方式2外部计数模式 th1 0 xff 设定重装值 tl1不用设置 th0 0 xff 设定重装值 tl0不用设置 tcon 0 x50 置位tr1 tr0 开始计数 ie 0 x9f 中断使能 7 1 4定时 计数器的应用 扩展外部中断 55 21 11 定时器0中断服务程序 voidtimer0 int void interrupt1 tf0 0 计数溢出标志位清0 定时器1中断服务程序 voidtimer1 int void interrupt3 tf1 0 计数溢出标志位清0 7 1 4定时 计数器的应用 扩展外部中断 56 21 11 7 2串行通信接口 数据通信的传输方式有 单工方式 数据仅按一个固定方向传送 半双工方式 数据可实现双向传送 但不能同时进行 全双工方式 允许双方同时进行数据双向传送 7 2 1串行通信基础知识 1 数据通信的传输方式 数据通信传输方式 57 21 11 2 并行通信和串行通信 数据通信 指计算机与计算机或外设之间的数据传送 信 指一种信息 是由数字1和0构成的具有一定规则并反映确定信息的一个数据或一批数据 这种数据传输有两种基本方式 并行通信 是数据的每位被同时传输出去或接收进来 串行通信 数据传输是逐位传输的 在相同条件下 串行通信比并行通信传输速度慢 7 2 1串行通信基础知识 并行通信 串行通信 58 21 11 根据串行通信的不同工作方式 还可将发送接收线合二为一 成为发送 接收复用线 如半双工 即便在实际应用中可能还要附加一些信号线 如应答信号线 准备好信号线等 在多字节数据通信中 串行通信与并行通信相比 其工程实现上造价要低得多 串行通信已被越来越广泛地采用 尤其是 串行通信通过在信道中设立调制 解调器中继站等 可使数据传输到地球的每个角落 目前 飞速发展的计算机网络技术 互联网 广域网 局域网 均为串行通信 7 2 1串行通信基础知识 串行通信 串行通信 59 21 11 3 异步串行通信和同步串行通信 异步串行通信 简称异步通信 所传输的数据格式 也称为串行帧 由1个起始位 7个或8个数据位 1 2个停止位 含1 5个停止位 和1个校验位组成 起始位约定为0 空闲位约定为1 在异步通信方式中 接收器和发送器有各自的时钟 它们的工作是非同步的 异步通信的实质是指通信双方采用独立的时钟 每个数据均以起始位开始 停止位结束 起始位触发甲乙双方同步时钟 每个异步串行帧中的1位彼此严格同步 位周期相同 所谓异步是指发送 接收双方的数据帧与帧之间不要求同步 也不必同步 7 2 1串行通信基础知识 异步串行通信 60 21 11 3 异步串行通信和同步串行通信 同步串行通信 简称同步通信 发送器和接收器由同一个时钟源控制 在异步通信中 每传输一帧字符都必须加上起始位和停止位 占用了传输时间 在要求传送数据量较大的场合 速度就会慢得多 同步传输方式去掉了这些起始位和停止位 只在传输数据块时先送出一个同步头 字符 标志即可 同步传输方式比异步传输方式速度快 这是它的优势 但同步传输方式也有其缺点 即它必须要用一个时钟来协调收发器的工作 所以它的设备也较复杂 7 2 1串行通信基础知识 同步串行通信 61 21 11 4 波特率及时钟频率 波特率 br 单位时间传输的数据位数 单位 bps bitpersecond 1bps 1bit s 波特率的倒数即为每位传输所需的时间 发送 接收时钟频率与波特率有关 即ft r n brt r式中 ft r为发 收时钟频率 单位 hz brt r为发 收波特率 单位 bps n为波特率因子 同步通信n 1 异步通信n可取1 16或64 也就是说 同步通信中数据传输的波特率即为同步时钟频率 而异步通信中 时钟频率可为波特率的整数倍 7 2 1串行通信基础知识 波特率 时钟频率 62 21 11 5 串行通信的校验 异步通信时可能会出现帧格式错 超时错等传输错误 在具有串行口应用的单片机开发中 应考虑在通信过程中对数据差错进行校验 因为差错校验是保证准确无误通信的关键 常用差错校验方法有奇偶校验 mcs 51系列单片机编程采用此法 和校验及循环冗余码校验 7 2 1串行通信基础知识 传输的准确性 63 21 11 发送数据时 数据位尾随1位数据 为奇偶校验位 1或0 当设置为奇校验时 数据中 1 的个数与校验位 1 的个数之和应为奇数 当设置为偶校验时 数据中 1 的个数与校验位 1 的个数之和应为偶数 接收时 接收方应具有与发送方一致的差错检验设置 当接收一个字符时 对 1 的个数进行校验 若二者不一致 则说明数据传送出现了差错 奇偶校验是按字符校验 数据传输速度将受到影响 这种特点使得它一般只用于异步串行通信中 7 2 1串行通信基础知识 1 奇偶校验 奇偶校验 64 21 11 发送方将所发送的数据块求和 字节数求和 并产生一个字节的校验字符 校验和 附加到数据块末尾 接收方接收数据时也是先对数据块求和 将所得结果与发送方的校验和进行比较 相符则无差错 否则即出现了差错 特点是无法检验出字节位序的错误 7 2 1串行通信基础知识 2 和校验 和校验 65 21 11 这种校验是对一个数据块校验一次 例如对磁盘信息的访问 rom或ram存储区的完整性等的检验 这种方法广泛应用于串行通信方式 7 2 1串行通信基础知识 3 循环冗余码校验 循环冗余码校验 66 21 11 7 2 2mcs 51串行通信接口 mcs 51单片机内部有一个全双工的串行通信口 即串行接收和发送缓冲器 sbuf 这两个在物理上独立的接收发送器 既可以接收数据 也可以发送数据 但接收缓冲器只能读出不能写入 而发送缓冲器则只能写入不能读出 它们的地址为99h sbuf 67 21 11 mcs 51单片机串行口构成 发送缓冲寄存器 sbuf 发送控制器发送控制门接收缓冲寄存器 sbuf 接收控制寄存器移位寄存器中断 1 串行口结构与特殊功能寄存器 7 2 2mcs 51串行通信接口 串行口结构 68 21 11 与串行通信有关的控制寄存器共有4个 sbuf scon pcon和ie 在逻辑上 sbuf只有一个 既表示发送寄存器 又表示接收寄存器 具有同一个单元地址99h 在物理上 sbuf有两个 一个是发送寄存器 另一个是接收寄存器 7 2 2mcs 51串行通信接口 1 接收 发送缓冲器 sbuf 接收 发送缓冲器 sbuf 69 21 11 scon是mcs 51的一个可位寻址的专用寄存器 用于串行数据通信的控制 单元地址98h 位地址9fh 98h scon各位的定义下表所示 7 2 2mcs 51串行通信接口 2 串行控制寄存器 scon 串行控制寄存器 scon 70 21 11 1 串行口工作方式选择位sm0 sm1sm0 sm1由软件置1或清0 用于选择串行口的4种工作方式 方式0 1 2 3 详见后面 2 mcs 51串行通信工作方式 7 2 2mcs 51串行通信接口 串行控制寄存器 scon 71 21 11 2 多机通信控制位sm2sm2 1时 接收到一帧信息 如果接收到的第9位数据为1 硬件将ri置1 申请中断 如果第九位数据为0 则ri不置1 且所接收的数据无效 sm2 0时 只要接收到一帧信息 不管第九位数据是0还是1 硬件都置ri 1 并申请中断 ri由软件清0 sm2由软件置1或清0 多机通信时 各从机先将sm2置l 接收并识别主机发来的地址 当地址与本机相同时 将sm2清0 与主机进行数据传递 各机所发送的数据第9位必须为0 7 2 2mcs 51串行通信接口 串行控制寄存器 scon 72 21 11 3 允许接收控制位renren 1时允许并启动接收 ren 0时禁止接收 ren由软件置1或清0 4 发送数据d8位tb8tb8是方式2 方式3中要发送的第九位数据 事先用软件写入1或0 方式0 方式1不用 7 2 2mcs 51串行通信接口 串行控制寄存器 scon 73 21 11 5 接收数据d8位rb8方式2 方式3中 由硬件将接收到的第九位数据存入rb8 方式1中 停止位存入rb8 6 发送中断标志位ti发送完一帧信息 由硬件使ti置1 ti必须由软件清0 7 接收中断标志位ri接收完一帧有效信息 由硬件使ri置1 ri必须由软件清0 7 2 2mcs 51串行通信接口 串行控制寄存器 scon 74 21 11 7 2 2mcs 51串行通信接口 pcon与ie 3 电源控制寄存器 pcon pcon主要是为chmos型单片机的电源控制而设置的专用寄存器 单元地址为87h 不能位寻址 pcon是一个8位寄存器 其最高位smod为波特率控制位 该位为1时 波特率增大一倍 4 中断允许控制寄存器 ie ie的地址是a8h 其内容第6章已介绍 其中串行口允许中断的控制位为es 当es 1 允许串行口中断 当es 0 禁止串行中断 75 21 11 2 mcs 51串行通信工作方式 7 2 2mcs 51串行通信接口 工作方式 76 21 11 在方式0下 串行口作为同步移位寄存器使用 这时用rxd p3 0 引脚作为数据移位的入口和出口 而由txd p3 1 引脚提供移位脉冲 移位数据的发送和接收以8位为一帧 不设起始位和停止位 低位在前高位在后 其帧格式如图7 10所示 1 串行工作方式0 7 2 2mcs 51串行通信接口 工作方式0 77 21 11 使用方式0实现数据的移位输入 输出时 实际上是把串行口变成并行口使用 串行口作为并行输出口使用时 要有 串入并出 的移位寄存器配合 例如cd4049或74hc164 其电路连接如图所示 7 2 2mcs 51串行通信接口 工作方式0 用串行口实现并行输出 78 21 11 如果把实现并入串出功能的移位寄存器 例如cd4014或74hc165 与串行口配合使用 如图7 12所示 就可以把串行口变为并行输入口使用 7 2 2mcs 51串行通信接口 工作方式0 用串行口实现并行输入 79 21 11 2 串行工作方式1方式1是10位为一帧的异步串行通信方式 方式1帧格式如图7 13所示 包括1个起始位 8个数据位和1个停止位 7 2 2mcs 51串行通信接口 工作方式1 异步通信用起始位 0 表示字符的开始 然后从低位到高位逐位传送数据 最后用停止位 1 表示字符结束 一个字符又称一帧信息 80 21 11 1 数据发送方式1的数据发送是由一条写发送缓冲寄存器指令 movsbuf a 开始的 随后在串行口由硬件自动加入起始位和停止位 构成一个完整的帧格式 然后在移位脉冲的作用下 由txd端串行输出 一个字符帧发送完后 使txd输出线维持在1状态下 并将scon寄存器的ti置1 通知cpu可以发送下一个字符 7 2 2mcs 51串行通信接口 工作方式1 81 21 11 2 数据接收接收数据时 scon的ren位应处于允许接收状态 ren 1 在此前提下 串行口采样rxd端 当采样到从1向0的状态跳变时 就认定是接收到起始位 随后在移位脉冲的控制下 把接收到的数据位移入接收缓冲寄存器中 直到停止位到来之后把停止位送入rb8中 并置位接收中断标志位ri 通知cpu从sbuf取走接收到的一个字符 指令为mova subf 7 2 2mcs 51串行通信接口 工作方式1 82 21 11 3 串行工作方式2和方式3方式2和方式3是11位一帧的串行通信方式 其帧格式如图7 14所示 包括1个起始位 9个数据位和1个停止位 7 2 2mcs 51串行通信接口 工作方式2 3 在方式2和方式3下 字符还是有8个数据位 第9个数据位d8 既可作为奇偶校验位使用 也可作为控制位使用 其功能由用户确定 发送之前应先将scon中的tb8准备好 可使用如下指令完成 setbtb8 tb8位置1clrtb8 tb8位清零 83 21 11 3 串行工作方式2和方式3 7 2 2mcs 51串行通信接口 工作方式2 3 准备好第9位数据之后 再向sbuf写入字符的8位数据 并以此来启动串行发送 一个字符帧发送完毕后 将ti位置1 其过程与方式1相同 方式2的接收过程也与方式1类似 所不同的是在第9位数据上 串行口把接收到的8位数据送入sbuf 而把第9位数据送入rb8 方式2和方式3的不同之处在于波特率的计算方法不同 方式3同方式1 即通过设置定时器1的初值来设定波特率 方式2的波特率是固定的 见下文所述 84 21 11 方式0时波特率是固定的 为单片机晶振频率的1 12 即br fosc 12 fosc为晶振频率 方式0的波特率是一个机器周期进行一次移位 当fosc 6mhz时 波特率为500kbps 即2 s移位一次 当fosc 12mhz时 波特率为1mbps 即1 s移位一次 方式2的波特率也是固定的 且有两种 一种是晶振频率的1 32 即fosc 32 另一种是晶振频率的1 64 fosc 64 用公式表示为 br 2smod fosc 64式中 smod为pcon寄存器最高位的值 smod 1表示波特率加倍 7 2 2mcs 51串行通信接口 串行口波特率 3 mcs 51串行口波特率 85 21 11 方式1和方式3的波特率是可变的 其波特率由定时器1的溢出率决定 公式为 br 2smod fd 32式中 smod为pcon寄存器最高位的值 smod 1表示波特率加倍 而定时器1溢出率计算公式为 fd fosc 12 256 th1 mcs 51单片机串行通信方式0到方式3的常用波特率如表7 6所示 以便查找对应的方式设置及定时器1的时间常数 7 2 2mcs 51串行通信接口 串行口波特率 3 mcs 51串行口波特率 86 21 11 例7 6使用74hc164的并行输出引脚接8支发光二极管 利用它的串入并出功能 把发光二极管从左向右轮流点亮 并反复循环 发光二极管为共阴极型 电路连接如图7 15所示 7 2 3串行通信接口的应用 串行移位输出 1 串口方式0应用 分析 当串行口把8位状态码串行移位输出后 ti置1 把ti作为状态查询标志 使用查询方法 87 21 11 org1000hstart movscon 00h 置串行口工作方式0mova 80h 最高位灯先亮clrp1 0 关闭并行输出out0 movsbuf a 开始串行输出out1 jnbti out1 输出完否 未完 等待clrti 完了 清零ti标志位 以备下次发送setbp1 0 打开并行口输出acalldelay 延时一段时间 串行移位输出 汇编程序1 7 2 3串行通信接口的应用 1 汇编语言编程 88 21 11 rra 循环右移clrp1 0 关闭并行输出sjmpout0 循环 延时子程序delay movr7 250d1 movr6 250d2 djnzr6 d2djnzr7 d1retend 7 2 3串行通信接口的应用 1 汇编语言编程 串行移位输出 汇编程序2 89 21 11 include include defineout offp1 0 0 defineout onp1 0 1externvoiddelay void 外部延时函数 7 2 3串行通信接口的应用 2 c51编程 串行移位输出 c程序1 90 21 11 voidmain unsignedchari scon 0 x00 串行口方式0工作 es 0 禁止串行中断 for for i 0 i 8 i out off 关闭并行输出 sbuf cror 0 x80 i 串行输出 while ti 状态查询 out on 开启并行输出 ti 0 清发送中断标志 delay 状态维持 7 2 3串行通信接口的应用 2 c51编程 串行移位输出 c程序2 91 21 11 2 串口方式1应用 双机通信1 例7 7双机通信通信协议 方式1的一帧信息中有1个起始位 8个数据位和1个停止位 波特率为2400bps t1工作在定时器方式2 单片机时钟振荡频率选用11 0592mhz 查表7 6可得 th1 tl1 0f4h pcon寄存器的smod位为0 7 2 3串行通信接口的应用 92 21 11 双机通信2 例7 7双机通信当1号机发送时 先发送一个 e1 联络信号 2号机收到后回答一个 e2 应答信号 表示同意接收 当1号机收到应答信号 e2 后 开始发送数据 每发送一个字节数据都要计算 校验和 假定数据块长度为16个字节 起始地址为40h 一个数据块发送完毕后立即发送 校验和 7 2 3串行通信接口的应用 93 21 11 双机通信3 例7 7双机通信2号机接收数据并转存到数据缓冲区 起始地址也为40h 每接收到一个字节数据便计算一次 校验和 当收到一个数据块后 再接收1号机发来的 校验和 并将它与2号机求出的校验和进行比较 若两者相等 说明接收正确 2号机回答00h 若两者不相等 说明接收不正确 2号机回答0ffh 请求重发 1号机接到00h后结束发送 若收到的答复非零 则重新发送一次数据 发送和接收程序流程图如图7 17所示 7 2 3串行通信接口的应用 94 21 11 双机通信4 7 2 3串行通信接口的应用 95 21 11 双机通信 发送程序1 发送程序 org1000hastart clreamovtmod 20h t1置为定时器方式2movth1 0f4h 装载定时器初值 波特率为2400bpsmovtl1 0f4hmovpcon 00hsetbtr1 启动定时器movscon 50h 设定串口方式1 且准备接收应答信号aloop1 movsbuf 0e1h 发联络信号jnbti 等待一帧发送完毕clrti 允许再发送jnbri 等待2号机的应答信号 7 2 3串行通信接口的应用 96 21 11 clrri 允许再接收mova sbuf 2号机应答后 读至axrla 0e2h 判断2号机是否准备完毕jnzaloop1 2号机未准备好 继续联络aloop2 movr0 40h 2号机准备好 设定数据块地址指针初值movr7 10h 设定数据块长度初值movr6 00h 清校验和单元aloop3 movsbuf r0 发送一个字节数据mova r6adda r0 求校验和movr6 a 保存校验和incr0jnbti 7 2 3串行通信接口的应用 双机通信 发送程序2 97 21 11 clrtidjnzr7 aloop3 整个数据块是否发送完毕movsbuf r6 发送校验和jnbti clrtijnbri 等待2号机的应答信号clrrimova sbuf 2号机应答 读至ajnzaloop2 2号机应答 错误 转重新发送ret 2号机应答 正确 返回end 7 2 3串行

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论