




已阅读5页,还剩133页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
8051内部资源 常熟理工学院物理与电子工程学院2011 4 Chap88051内部资源 8 1外部中断 INT0 INT18 2定时 计数器 T0 T18 3串行口 RXD TXD 8 1外部中断 8051外部中断 中断中断源中断优先级中断嵌套 8051外部中断 中断 当CPU正处理某项事务时 若外界或内部发生紧急事件 要求CPU暂停正在处理的工作转而去处理这个紧急事件 待处理完以后再回到原来被中断的地方 继续执行原来被中断了的程序 这样的过程称为中断 堆栈 中断源 向CPU提出中断请求的源称为中断源外部跳变信号 下降延 外部低电平等 0 8051外部中断 中断优先级 当几个中断源同时请求中断时 CPU应优先响应最需紧急处理的中断请求 为此 需要规定各个中断源的优先级 在优先级高的中断请求处理完了以后 再响应优先级低的中断请求 中断嵌套 当CPU正在处理一个优先级低的中断请求的时 如果发生另一个优先级比它高的中断请求 CPU能暂停当前处理的中断 转去处理优先级高的中断请求 待处理完以后 再回到原来正在处理的低级中断程序 这种高级中断源能中断低级中断源的中断处理称为中断嵌套 8051中断 8051单片机有5个中断源2个中断优先级 2级中断嵌套 优先级可通过编程实现IE 中断允许寄存器 中断源的中断请求是否能得到响应 受IE的控制 IP 中断优先级寄存器 各个中断源的优先级可由IP的各位来确定 同一优先级中的各中断源同时请求中断时 由内部的查询逻辑来确定响应的次序 8051中断源 8051五个中断源INT0中断 P3 2 T0中断 P3 4 INT1中断 P3 3 T1中断 P3 5 串行中断 P3 0 P3 1 8051中断入口 ROM 地址和优先级 8051INT0中断机理 当INT0引脚输入如下信号 下降沿 IT0 1 或低电平 IT0 0 CPU自动 硬件 产生中断标志 IE0 1 此时若INT0中断允许 使能EX0 1 EA 1 则CPU立即停止当前程序 跳转到INT0对应的中断入口 ROM保留地址0 x0003 执行中断服务程序 中断服务程序后CPU自动对中断标志清零 IE0 0 待INT0中断服务程序执行完毕后再回原执行程序处 若若INT0中断未允许 则程序不能跳转到INT0中断入口 不执行中断服务程序 中断标志IE0不能自动清0 问提 中断标志IE0的产生与中断使能是否有关 INT0中断方式执行流程 include reg51 h unsignedchari 0 int0中断服务程序 voidINT0 ISR void interrupt0 delay 200 if P3 等待中断 INT0查询方式 voidmain void IT0 1 EX0 1 EA 1 while 1 查询方式1 if IE0 1 IE0 0 手动清中断标志 P1 I P2 LED seg buf i P0 LED bit i I If I 6 I 0delay 500 voidmain void while 1 查询方式2 while IE0 0 等待INT0外部中断 IE0 0 手动清中断标志 8051中断系统 与中断有关的SFR 注 表示可以位寻址 TCON 定时 计数器控制寄存器 TF1 TF0 T1 T0溢出标志TR1 TR0 T1 T0启动控制位 TR 1 启动定时器 IE1 IE0 INT1 INT0中断标志IT1 IT0 INT1 INT0触发方式控制位 IT 1 下降沿触发 IT 0 低电平触发 TF1 TF0 IE1 IE0都具有自动清零功能 SCON 串行口控制寄存器 SM0SM1串行模式选择SM2多机通讯允许位 方式0时 此位应该为0 模式1时 当接收到停止位时 该位将置位 方式2或方式3时 当接收的第9位数据为1时 将置位REN串行接收允许位TB8在模式2和模式3中 将被发送数据的第9位RB8 在方式0中 该位不起作用 在方式1中该位为接收数据的停止位 在方式2和方式3中为接收数据的第9位TI串行发送结束标志 由软件清零RI串行接收结束标志 由软件清零 IE 中断允许寄存器 EA 使能标志位 1 所有中断使能 0 禁止所有中断ET2 T2中断使能ES 串行通信中断使能ET1 T1中断使能EX1 INT1中断使能ET0 T0中断使能EX0 INT0中断使能 IP 中断优先级寄存器 保留 保留PT2 T2中断优先级PS 串行通信中断优先级PT1 T1中断优先级PX1 INT1优先级PT0 T0中断优先级PX0 INT0优先级 与中断有关的各位 PX0 PT0 PX1 PT1 PSEX0 ET0 EX1 ET1 ES EAIT0 IT1TR0 TR1IE0 IE1 TF0 TF1 TI RI以上各位可位寻址 且均为高电平有效 8051外部中断编程示例 include reg51 h C51中断程序框架 int0中断服务程序 voidINT0 ISR void interrupt0using0 中断服务程序 主函数 voidmain void IT0 1 EX0 1 EA 1 打开中断源while 1 等待中断 中断服务函数与寄存器的定义 为了满足在C语言源程序中直接编写中断服务程序的要求 C51编译器对函数的定义进行了扩展 增加了一个扩展关键字interrupt 它是函数定义时的一个选项 加上这个选项即可将一个函数定义成中断服务函数 定义格式为 函数类型函数名 形式参数表 interruptn usingn 中断服务函数与寄存器的定义 函数类型函数名 形式参数表 interruptn usingn 关键字interrupt后面的n是中断号 n的范围为0 31 编译器从8n 3处产生中断向向量 具体的中断号n和中断向量取决于8051单片机芯片型号 常用中断源和中断向量如表所示 中断服务函数与寄存器的定义 工作寄存器 8051片内RAM中有4个工作寄存器组 每个寄存器组中含8个工作寄存器 R0 R7 C51编译器扩展了一个关键字using 专门用来选择8051单片机的工作寄存器组 在定义一个函数时 using后面的n是一个0 3的常数 分别表示4个功能完全一样的工作寄存器组 在定义一个函数时 using是一个选项 若缺省编译器自动分配一个寄存器组作绝对寄存器组访问 需要注意的是 关键字using和interrupt的后面都不允许跟带运算符的表达式 中断服务函数与寄存器的定义 voidINT0 ISR void interrupt0 voidTIMER0 ISR void interrupt1 voidINT1 ISR void interrupt2 voidTIMER1 ISR void interrupt3 voidUART ISR void interrupt4 中断服务函数与寄存器的定义 KeilC51命令 DEFINEBUTTON 定义按钮 命令定义 DEFINEBUTTON 按钮名 命令 在Debug FunctionEditor OpenIniFile 中定义外中断按钮 definebutton INT0 P3 2 PORT3 PORT3 0 x04 definebutton T0 P3 4 PORT3 PORT3 0 x10 definebutton INT1 P3 3 PORT3 PORT3 0 x08 definebutton T1 P3 5 PORT3 PORT3 0 x20 每按钮一次对P3 2取反删除 KILLBUTTONn definebutton clrdrtr dptr 0 killbutton1 中断服务函数与寄存器的定义 KeilC51命令 EVAL EVAL 1 256 0 x00 EVAL 256 256 0 xFF PORT30 xFF ex0 isr counter询问变量的值 中断如何扩充1 定时器中断作为外部中断使用把8051的T1 T0用作对外部脉冲计数方式 每当P3 4 T0 或P3 3 T1 引脚上发生负跳变时 T1和T0的计数器加1 利用这个特性 可以把P3 4和P3 3引脚作为外部中断请求输入线 而定时器的溢出中断作为外部中断请求标志 中断如何扩充1 定时器中断作为外部中断使用 软件 定时器T1对外部计数 TH1 TL1采用16进制赋值 voidint0 void interrupt3 中断服务程序 voidmain void TMOD TMOD TL1 1 256 while 1 中断如何扩充2 中断和查询结合的方式 中断如何扩充2 includesbitLED A P1 0 sbitLED B P1 1 sbitLED C P1 2 sbitIA P1 3 sbitIB P1 4 sbitIC P1 5 中断如何扩充2 voidmain void IT0 1 IT1 1 EX0 1 EX1 1 EA 1 LED A 0 LED B 0 LED C 0 IA 1 IB 1 IC 1 while 1 中断如何扩充2 voidint0 void interrupt0 LED A 0 LED B 0 LED C 0 IE1 0 EX1 1 voidint1 void interrupt2 EX1 0 if IA 0 LED A 1 elseif IB 0 LED B 1 elseif IC 0 LED C 1 中断如何扩充3 利用硬件扩充多个中断源采用一个8 3优先编码器74LS148 把多个中断源信号作为一个中断效果很好 I7 I0优先级逐步降低GS为标志位 判断是否有有效输入 中断如何扩充3 软件设计思路 includeunsignedcharstatus bitflag voidint1 void interrupt2using2 flag 1 设置标志 status P1 存状态 中断如何扩充3 软件设计思路voidmain void PX1 1 置INT1高优先级中断 EX1 1 EA 1 INT1开中断 CPU开中断 while 1 if flag 有中断 switch status 根据中断源分支 case0 break 处理0 case1 break 处理1 case2 break case3 break default flag 0 8 2定时器 问题提出 voiddelay unsignedcharn unsignedchari for i 0 i n i voiddelay unsignedintn unsignedinti for i 0 i n i 问题提出 fosc 11 0592MHz y1 32 82 17 34 y1 us y2 41 79 26 01 x2 uS 8051定时 计数器 8051单片机内部有2个16位可编程的定时 计数器 即T0和T1 8052提供3个 这第三个称为T2 什么是内部定时 外部计数 8051计数器的计数方式 递增 溢出 8051定时 计数器 定时器 计数器结构框图 内部定时 输入的时钟脉冲由晶振的输出经12分频后得到 外部计数 接相应的外部输入引脚T0 P3 4 或T1 P3 5 在这种情况下 当检测到输入引脚上的下降沿 电平由高跳变到低 时 计数器就加1 8051定时 计数器工作机理 定时器 对机器周期计数 即n 12 fosc计数器 对T0引脚上的脉冲计数定义定时器 T0 工作方式 13位 16位 8位设置T0定时初使值 若为16位定时方式 则定时初值可为0 定时最大 65535 定时最小 举n 50000 则计数初值应为65536 50000 15536 0 x3CB0 需对TH0 TL0赋计数初值 TH0 0 x3C TL0 0 xB0 TH0 65536 50000 256 TL0 65536 50000 256 8051定时 计数器工作机理 手工启动定时器 TR0 1 后 T0开始对机器周期计数 硬件对TH0 TL0构成的16位计数器递增计数 当计至TH0 0 xff TL0 0 xff后 再计一次则定时器产生溢出 溢出标志TF0 1 此时若T0中断允许 使能ET0 1 EA 1 则CPU立即停止当前程序 跳转到T0对应的中断入口 ROM保留地址0 x000B 执行中断服务程序 中断服务程序后CPU自动对溢出标志清零 TF0 0 待T0中断服务程序执行完毕后再回原执行程序处 voidTIMER0 ISR void interrupt1 定时器0中断服务程序 若T0中断未允许 则程序不能跳转到T0中断入口 不执行中断服务程序 中断标志此时TF0不能自动清0 8051定时 计数器工作机理 8051定时 计数器机理 进入定时器中断服务程序后 必须重新对TH0 TL0赋初值 之前硬件已把TH0 TL0修改了 voidTIMER0 ISR void interrupt1 TH0 65536 COUNT 256 TL0 65536 COUNT 256 voidTIMER0 ISR void interrupt1 TH0 65536 COUNT 256 TL0 65536 COUNT 256 问题 以上两种赋初值方式哪种更好 8051定时 计数器中断方式编程 defineCOUNT50000 voidmain void TMOD 0 x0 定时 计数器方式定义TH0 65536 COUNT 256 TL0 65536 COUNT 256 定时 计数器赋初值ET0 1 EA 1 定时器0中断允许TR0 1 定时器0定时开始while 1 等待定时 计数器中断溢出 TF0 voidTIMER0 ISR void interrupt1using1 进入中断服务程序后 CPU自动清TF0溢出标志位TH0 65536 COUNT 256 TL0 65536 COUNT 256 重新赋计数值 中断服务程序 8051定时 计数器查询方式编程 中断方式 defineCOUNT50000voidTIMER0 ISR void interrupt1 进入后 CPU自动清TF0标志TH0 65536 COUNT 256 TL0 65536 COUNT 256 voidmain void TMOD 0 x0 TH0 65536 COUNT 256 TL0 65536 COUNT 256 ET0 1 EA 1 TR0 1 while 1 查询方式 defineCOUNT50000 voidTIMER0 ISR void interrupt1 进入后 CPU自动清TF0标志TH0 65536 COUNT 256 TL0 65536 COUNT 256 voidmain void TMOD 0 x0 TH0 65536 COUNT 256 TL0 65536 COUNT 256 ET0 1 EA 1 TR0 1 while 1 添加查询语句 8051定时 计数器查询方式编程 查询方式 defineCOUNT50000voidmain void TMOD 0 x0 TH0 65536 COUNT 256 TL0 65536 COUNT 256 ET0 1 EA 1 TR0 1 while 1 定时 计数器查询方式1if TF0 1 TF0 0 手工清溢出标志TH0 65536 COUNT 256 TL0 65536 COUNT 256 while 1 定时 计数器查询方式2while TF0 定时等待TF0 0 手工清溢出标志TH0 65536 COUNT 256 TL0 65536 COUNT 256 8051定时器工作原理 将定时 计数初使值载入TH0 TL0启动定时 计数器TR0 1定时 计数器溢出CPU自动置位溢出标志TF0 8051内部定时示例 例1 设单片机fosc 12MHz 要求在P1 0引脚上输出周期为2ms的方波 分析 用T0实现 采用中断方式机器周期 T 1us计数值 每隔1ms进入一次T0中断 中断服务程序对P1 0取反 因此计数值n 1ms 1us 1000次TH0 65536 1000 256 TL0 65536 1000 256 8051内部定时示例 例1 设单片机fosc 12MHz 要求在P1 0引脚上输出周期为2ms的方波 程序基本框架 8051内部定时示例 例1 设单片机fosc 12MHz 要求在P1 0引脚上输出周期为2ms的方波 定时器主函数初使化TMOD方式定义 T0 16位内部定时方式 确定计数初值TH0 TL0T0中断使能T0启动等待T0定时中断 voidmain void TMOD 0 x TH0 65536 1000 256 TL0 65536 1000 256 ET0 1 EA 1 TR0 1 while 1 8051内部定时示例 例1 设单片机fosc 12MHz 要求在P1 0引脚上输出周期为2ms的方波 定时器中断服务程序重新赋计数初值TH0 TL0对P1 0取反 voidTIMER0 ISR void interrupt1 TH0 65536 1000 256 TL0 65536 1000 256 P1 0 P1 0 8051内部定时示例 例1 设单片机fosc 12MHz 要求在P1 0引脚上输出周期为2ms的方波 参考程序见P172 如何用查询方式实现 8051内部定时示例 例2 设单片机fosc 12MHz 要求在P1 0引脚上输出周期为2ms 占空比为75 的矩形波 在例1基础上应作何修改 8051内部定时示例 例2 设单片机fosc 12MHz 要求在P1 0引脚上输出周期为2ms 占空比为75 的矩形波 在例1基础上应作何修改 8051内部定时示例 例3 设单片机fosc 12MHz 要求在P1 0引脚上输出周期为2S的方波 在例1基础上应作何修改 8051内部定时示例 例4 循环点亮红 绿 黄灯 时间间隔为1秒 8051外部计数器应用示例 例1 外部中断扩充 8051外部计数器应用示例 例2 高速公路车数统计与显示模块设计例3 简易频率计设计 8051定时 计数器应用示例 对外部脉冲计数时要注意对外部脉冲消抖 按键时存在抖动 必须消抖 硬件 软件法 8051定时 计数器应用示例 硬件消抖 采用基本RS触发器 8051定时 计数器应用示例 软件消抖 延时采样 voidTIMER0 ISR void interrupt1 delay 100 if P3 4 1 return 判别是否为有效T0中断 以抗干扰 中断服务程序 8051定时 计数器 定时 计数器有四种工作方式 其工作方式由两个SFR决定定时方式寄存器 TMOD定时控制器 TCON 8051定时 计数器 TMOD 定时器方式寄存器 8051定时 计数器 TMOD 定时器方式寄存器GATE 门控信号1 L INT TR C T启动受双重控制0 L 1 C T的启动仅受TR0或TR1控制 与INT无关C T 计数器 定时器选择位1 计数器 对T0 P3 4 T1 P3 5外部脉冲计数 0 定时器 对内部机器周期计数 M1 M0 工作方式选择位 8051定时 计数器 M1和M0 工作方式选择位 8051定时 计数器 方式0 M1M0 00 13位 TH 高8位 TL 低5位 满计数值2 13 C T 0内部定时 C T 1外部计数 C T 启动后立即加1计数 当13位计数满时 TH向高位进位 此进位将使TF 1 中断溢出标志 即产生中断请求 若C T允许中断 ET0 ET1 1 EA 1 则响应中断 执行中断服务程序 当CPU转向中断服务程序时 TF 0 自动清0 8051定时 计数器 方式1 M1M0 01 16位 由TH和TL寄存器各提供8位 满计数值为2 16 方式2 M1M0 10 8位可自动重载的C T 满计数值为2 8 在方式0和方式1中 当计数满后 若要进行下一次定时 计数 须用软件向TH和TL重装预置计数初值 方式2中TH和TL被当作两个8位计数器 计数过程中 TH寄存8位初值并保持不变 由TL进行8位计数 计数溢出时 除产生溢出中断请求外 还自动将TH中初值重装到TL 即重装载 除此之外 方式2也同方式0 方式3 略 8051定时 计数器 定时器 计数器的初始化及其步骤使用8051的T0 T1前 应对它进行编程初始化 主要是对TCON和TMOD编程 计算和装载计数初值 TH TL 一般完成以下几个步骤 TMOD 确定C T 工作方式TH TL 计算计数初值 并装载TH TLIE 中断方式时 需打开中断使能TCON 启动定时器 计数器 TRl TR0 8051定时 计数器 说明以下语句功能TMOD 0 x10 TMOD TMOD 8051定时 计数器 定时器初值的计算在内部定时方式下 T0 T1对内部机器周期计数 若fosc 6MHz 一个机器周期为12 fosc 2us 所以方式013位定时器最大定时间隔 2 13 2us 16 384ms方式116位定时器最大定时间隔 2 16 2us 131 072ms方式28位定时器最大定时间隔 2 8 2us 512us例 若使T0 T1工作在方式1 要求定时1ms 求计数初值 设计数初值为x 则有 2 16 x 2us 1000usx 2 16 500 0FEOCH因此 TH TL可置 500 8051定时 计数器 定时 计数器的应用实例例1 设fosc 6MHz 要求在P1 0脚上输出周期为2ms的方波 解 采用定时器T0的方式1编程要求定时间隔1ms 每次时间到P1 0取反 机器周期 12 fosc 2us计数次数n 1000us 2us 500由于计数器递增计数 为得到500个计数之后的定时器溢出 必须给定时器置初值65536 500 8051定时 计数器 用查询方式在P1 0引脚上产生周期为2ms的方波 includesbitP1 0 P1 0 voidmain void TMOD 0 x01 定时器0方式1 TR0 1 启动T0 for TH0 65536 1000 256 装载计数初值 TL0 65536 1000 256 do while TF0 查询等待TF0置位 P1 0 P1 0 定时时间到P1 0反相 TF0 0 软件清TF0 8051定时 计数器 用中断方式在P1 0引脚上产生周期为2ms的方波 includesbitP1 0 P1 0 voidT0 void interrupt1using1 T0中断服务程序入口 P1 0 P1 0 P1 0取反 TH0 65536 500 256 计数初值重载 TL0 65536 500 256 voidmain void TMOD 0 x01 T C0工作在定时器方式l TH0 65536 500 256 计数初值 TL0 65536 500 256 ET0 1 EA 1 中断使能 TR0 1 启动T0 while 1 8051定时 计数器 中断扩充 内部定时器T0用作外中断voidT0 void interrupt1 中断服务程序 voidmain void TMOD 0 x66 T0用作计数器 采用方式2具有自动装载功能 ET0 1 EA 1 TH0 0 xFF TL0 0 xFF TR0 1 while 1 definebutton ToggleT0 P3 4 PORT3 0 x10 8 3串行口 PC机RS232串口 RS232串口是每台计算机的必要配备 通常PC含有COM1 COM2 一般计算机COM1 9PinCOM2 25Pin新一代的计算机均为9Pin RS232通讯端口 在计算机上的RS232均是公头 即使是25Pin也是公头 注意与打印机端口 25Pin 区分 PC机串口地址 RS232串口 RS232串口引脚功能 RS232 DB9与DB25对比 9Pin与25Pin的关系 8051串口 8051有一个可编程的全双工串口 用于串行通信的UART 通用异步接收 发送 TXD端发送数据 RXD端接收数据 串口可实现短距离 10m 机间通信 RS232C和PC机进行通信时可使用驱动芯片 MAX232 8051串口 对应有两个缓冲器SBUF 共用一个地址 接收缓冲器 接收 b SBUF 发送缓冲器 发送 SBUF a 8051串口 8051有接收结束标志 RI receiveinterrupt 和发送结束标志 TI transferinterrupt 该标志为高电平有效 且必须手工清0 RI 0 TI 0 串口的编程可采用中断方式或查询方式采用查询方式编程时 可设置最长等待时间 以确保其它程序正常运行8051串口中断程序格式 voidUART ISR void interrupt4 串口通信 三线制 交叉线 串口通信分类 同步 synchronous 异步 asynchronous 串口通信格式 异步 11 1位起始位 0 9位数据位 低位在前 1位停止位 1 非传输时保持 1 如图发送数据为 0 xCB 串口通信格式 TTL电平 有效距离1m RS232电平 有效距离10m RS485电平 有效距离5km RS232逻辑电平的定义 1 15V 3V0 3V 15V与TTL CMOS逻辑有区别 因此必须对其进行电平转换 TTL RS232电平比较 0 x35 TTL RS232电平转换 TTL RS232电平转换电路 串口通信方式 串口通信方式点对点PC机与MCU PC与智能仪表间的通信 MCU与MCU点对多 多机通信 串口通信模式 上位机主动发发单字节指令发多字节指令定长字节指令 起始字节 0 xAA控制数据地址 0 x01控制数据和校验 控制数据的和结束字节 0 x55不定长字节指令结束标志chr 13 chr 10 串口通信模式 单字节发送 单字节通信 上位机主动上位机程序串口通信工具 scomm32自己编程 控件实现 VB API函数实现 VC 下位机程序接收 中断方式发送 查询方式 PC机串口通信实现 两种方式实现控件MSCOMM32 OCX应用程序接口函数 API OpenFile PC机串口通信 MSCOMM32 OCX 首先为工程添加MSCOMM32 ocx等控件添加如下代码 包括串口初始化 发送 接收等操作PrivateSubForm Load IfMSComm1 PortOpenThenMSComm1 PortOpen False 关闭串口MSComm1 CommPort 1 设置串口1MSComm1 Settings 9600 N 8 1 设置串口波特率MSComm1 InputMode comInputModeBinary 设置串口通信模式 二进制模式MSComm1 InputLen 1 设置每次从输入缓冲区取出的字节数IfMSComm1 PortOpen FalseThenMSComm1 PortOpen True 打开串口EndSub PC机串口通信 MSCOMM32 OCX PublicSubCommand1 Click Dimao 0To0 AsByteDimavAsVariantDimai 1To4 AsByte 存放数据的窗体级变量 因为得到的数据尚需进一步处理DimttAsLongDimcountAsIntegerMSComm1 InBufferCount 0 清输入 输出缓冲区MSComm1 OutBufferCount 0ao 0 int val Text1 text 取出待发送的数据MSComm1 Output ao 串口发送数据tt GetTickCount 利用API函数取得系统时间Do 等待输入缓冲区数据 1或延时3秒钟结束LoopUntilMSComm1 InBufferCount 1OrGetTickCount tt 3000IfMSComm1 InBufferCount 1Then 如果输入缓冲区有1字节的数据 则取出数据并处理av MSComm1 Input 从输入缓冲区取出数据ai 1 av 0 Text2 Text ai 1 ExitSubElseMsgBox 请检查 电源 串口连线 波特率设置后重试 vbOKOnly vbCritical 串口错误 串口通信失败提示信息EndIfEndSub PC机串口通信 MSCOMM32 OCX 新建标准模块 在标准模块中添加DeclareFunctionGetTickCountLib kernel32 AsLong 串口通信注意点 为了确保发送的数据都能被准确接收 格式统一 统一单字节发送与接收的格式 起始位 数据位 停止位 多字节发送时 应先制定双方的通信协议 波特率统一 最大 115200bps 统一发送与接收的速率 波特率 bps bitpersecond 每秒钟发送的位数 波特率可用内部时钟T1或T2 8052 获得 典型波特率 9600bps 通信时应设置最长等待时间 8051串口中断机理 执行串口发送指令SBUF a 通过TXD口发送串行数据 发送结束后CPU自动产生发送结束标志 TI 1 此时若串行中断使能 ES 1 EA 1 则程序立即停止当前程序 跳转置中断号为4的串行口中断入口地址 0 x0023 执行中断服务程序voidUART ISR void interrupt4 CPU不具有自动清零功能 同样 若串口在RXD引脚接收到数据 硬件自动产生接收结束标志 RI 1 若此时若串行中断使能 ES 1 EA 1 则程序立即停止当前程序 跳转置中断号为4的串行口中断入口地址 0 x0023 执行中断服务程序voidUART ISR void interrupt4 CPU不具有自动清零功能 可通过b SBUF 指令取出暂存在数据缓冲区内的数据 为什么串口中断不具有硬件自动清中断标志功能 因为接收与发送结束都能进入同一中断 因此在不具有自动清标志功能 需加判断标志语句 8051串口中断机理 串口中断使能 ES EA串行发送与接收结束会进入同一中断服务程序voidUART void interrupt4 因此 若采用中断方式 在中断服务程序中必须先判别中断是发送还是接收中断 以便进一步处理 SBUF a b SBUF 8051串口通信 串口初始化数据格式设置SCON波特率设置TMODTH1 TL1PCONTR1ES EA串口发送与接收SBUFRI TI 8051串口初始化 格式设置 SCON 串行口控制寄存器 波特率 bps 每秒钟传输的位数 方式1 3必须借助于T110位通信 1位起始位 0 8位数据位 1位停止位 1 T1溢出率 1 T1定时时间 8051串口初始化 格式设置 SM2 多机通信使能控制位 方式2 3 REN ReceiveEnable 串行接收允许位 TB8 TransmitBit8 在方式2 3中 将被发送数据的第9位 奇偶校验位等 RB8 ReceiveBit8 第9位 在方式0中 该位不起作用 在方式1中该位为接收数据的停止位 在方式2 3中为接收数据的第9位 TI RI发送 接收结束标志位 软件 手工 清零 8051串口工作方式 方式0 移位寄存器输入 输出方式 数据通过RXD输入 出 TXD输出移位脉冲CP 该方式下 收发数据为8位 低位在前 波特率固定为fosc 12 发送 SBUF a 发送条件 TI 0 8位输出结束时TI 1 接收 b SBUF 接收条件 REN 1 RI 0 结束时RI 1 发送与接收结束标志必须手工清0 TI 0 RI 0 方式0主要用于I O扩展的场合 74LS164 8051串口工作方式 方式1 10位异步方式 10位 1位起始位 0 8位数据位 1位停止位 1 其中起始位和停止位在发送时自动插入 发送 SBUF a 发送条件 TI 0 发送完TI 1 接收 b SBUF 接收条件 REN l RI 0 SM2 0 RB8 1 10位通信方式下 若接收有效 将接收到的8位数据装入SBUF中 并将停止位 1 装入RB8中 发送与接收结束标志必须手工清0 TI 0 RI 0 方式1的波特率可变 计算公式 Baud 2 SMOD T1的溢出率 32SMOD为PCON的最高位 T1的溢出率 1 T1定时时间 T1方式可为0 1 2 8051串口工作方式 方式2 3 相同 都是11位异步方式 11位 1位起始位 0 9位数据位 1位停止位 1 其中第9位数据放在TB8 RB8中 发送前可通过软件对TB8赋值 奇偶校验位等 它们的操作过程完全一样 不同 波特率可变否方式2Baud 2 SMOD fosc 64方式3Baud 2 SMOD T1溢出率 32 同方式1 发送 SBUF a 发送条件 TI 0 第9位数据 TB8 输出之后 置位TI 1 接收 b SBUF 接收前提 REN 1 RI 0 SM2 0 RB8 1 则将已接收的数据装入SBUF和RB8 并置位RI 8051第9位可作为数据的奇偶校验位 多机通信中的地址 数据标志位等 8051串口初始化 波特率设置 PCON 电源控制寄存器 SMOD 波特率增倍位方式1 3Baud 2 SMOD T1溢出率 32 方式2Baud 2 SMOD fosc 64 8051串口初始化 波特率设置 串口波特率计算方式2 Baud 2 SMOD fosc 64 固定 当SMOD 0时 Baud fsoc 64当SMOD 1时 Baud fsoc 32例 若fosc 6MHz SMOD 1 则Baud 6000000 32 187 5kbps若fosc 12MHz SMOD 0 则Baud 12000000 64 187 5kbps若fosc 12MHz SMOD 1 则Baud 12000000 32 375kbps 8051串口初始化 波特率设置 方式1 3波特率计算方式1 3 Baud 2 SMOD T1溢出率 32 若定时时间常数为n 则T1定时时间 n 12 fosc T1溢出率 1 T1定时时间 fosc 12 n Baud 2 SMOD fosc 12 n 32 2 SMOD fosc 384 n 当SMOD 0时 Baud fsoc 384 n 当SMOD 1时 Baud fsoc 192 n 例 若fosc 11 0592MHz SMOD 0 n 3 TH1 FDH 则Baud 11 0592 10 6 384 3 9600bps例 若fosc 12MHz SMOD 1 n 13 TH1 F3H 则Baud 12 10 6 192 13 4800bps 8051串口初始化 波特率设置 串口初使化 fosc 11 0582Mhz 11位异步通信方式 波特率9600bps 试写出串口初使化语句 Baud 2 SMOD T1溢出率 32 令SMOD 0 则9600 1 n 12 fosc 32 所以n 3T1 采用方式2 8位自动载入 voidsbuf init void SCON 0 xd0 11010000PCON 0 x00 TMOD TMOD 8051串口数据发送与接收 发送数据SBUF a 发送数据while TI 0 等待发送 结束标志 TI 0 手工清发送标志接收数据while RI 0 等待接收 结束标志 RI 0 手工清接收标志b SBUF 接收数据 8051串口通信框架 中断方式 voidUART ISR void interrupt4 unsignedchara if RI 1 若接收到数据 a SBUF 保存接收的数据RI 0 手工清接收结束标志SBUF a 1 串口发送回复数据while TI 0 等待发送结束TI 0 手工清发送标志 voidmain void init sbuf 串口初使化ES 1 串口中断使能EA 1 while 1 等待串口中断 作业 为什么8051单片机常用11 0592MHz的晶振 串口通信时应注意些什么问题 8051单片机串口通信有几种方式 各种方式有何异同 8051串口通信实验 8051单片机发送实验单片机连续发送0 x35 用示波器观察AT89S51TXD P3 1 和MAX232T1OUT MAX232第14脚 信号 画出波形分析并比较两波形 8051单片机接收实验PC机借助sscom32发送任意数据 a 单片机接收后回复数据 a 1 PC机发送实验用VB自编串口发送程序以实现实验2 注 10位通信格式 9600bps 如何设置最长等待时间 temp time TH0 256 TL0 while RI 0 if TH0 256 TL0 temp time 1000 temp time TH0 256 TL0 65536 1000 break 等待接收 结束标志 RI 0 手工清接收标志b SBUF 接收数据 8051串口通信小结 初始化步骤使用串口前 应对它进行初始化 设置产生波特率的T1 TMOD TH1 TL1 ET1 EA TR1 串行口控制 SCON PCON 中断控制 ES EA 具体步骤如下 确定串行口控制 编程SCON 确定Tl工作方式 编程TMOD寄存器 计算T1初值 装载THl TLl 启动T1 编程TCON中的TRl位 串行口在中断 查询方式除外 方式下 需开CPU和源中断 编程IE寄存器 是否有必要使ET1 1 8051串行口示例1 unsignedchardata1 10 M C S 5 1 0 x0d 0 x0a 0 x00 voidmain unsignedchari sbuf init while 1 i 0 while data1 i 0 x00 SBUF data1 i while TI 0 TI 0 i 8051串行口示例2 8051与PC机通信程序 查询方式 unsignedcharcommunicate unsignedcharc switch c case0 x41 proc1 return 0 x42 break case0 x42 proc2 return 0 x43 break case0 x43 proc3 return 0 x44 break default voidmain void while 1 while RI 0 RI 0 a1 SBUF MCU接收数据b1 communicate a1 MCU处理数据SBUF b1 while TI 0 TI 0 MCU发送数据 8051点对点通信 8051机间通信的C编程 双机通信也称点对点通信 可用于MCU和MCU间通信 也用于MCU与PC间通信 在较大规模的测控系统中 一般采用分布式控制 上位机进行管理 下位机完成各种各样的检测控制 8051点对点通信 上位机实现 编辑 查询 统计 报表打印等管理功能 下位机实现 控制 数据采集等检测控制功能 8051点对点通信 通信双方的约定 发送机 SYSTEM1 接收机 SYSTEM2A先送 AA 信号 B收到后应答 BB 表示B同意接收 当A收到 BB 后 开始发送数据 每发送一次求 校验和 假定数据块长度为16个字节 数据缓冲区为buf 数据块发送完后马上发送 校验和 B接收数据并将其转贮到数据缓冲区b
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 生产制造行业标准操作流程指南
- 企业团队协作项目管理框架
- 技术文档撰写与审核流程模板
- 工程项目质量控制标准化检测模板
- 智能化装备安全防护责任书9篇
- 美丽的天池300字9篇
- 农村信息技术服务支持协议文本
- 企业文档分类管理与搜索工具
- 供应链稳定持续承诺函8篇
- 企业风险管理标准化工具与应急预案制定
- 新闻编辑(修改版)马工程课件 第六章
- GB/T 2930.8-2017草种子检验规程水分测定
- 勘察设计工作大纲
- GB/T 17188-1997农业灌溉设备滴灌管技术规范和试验方法
- 关于国有集团公司采购管理办法【五篇】
- 2022年资阳市雁江区社区工作者招聘考试笔试试题及答案解析
- 2.2 第2课时 基本不等式的综合应用(课件)高一数学(人教A版2019必修第一册)
- 帮助卧床老年人使用便器排便课件
- 【高考英语精品专题】必修1 Unit 1 Life Choices-高考英语-一轮总复习备考方略课件PPT(新教材北师大版)
- 中国传媒大学-新媒体概论(刘行芳)-课件
- 医学放射卫生相关法律法规ppt培训课件
评论
0/150
提交评论