好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

第7章MCS-51单片机的中断系统二.ppt

37页
  • 卖家[上传人]:金**
  • 文档编号:204614708
  • 上传时间:2021-10-26
  • 文档格式:PPT
  • 文档大小:289.50KB
  • / 37 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 7.2定时/计数器及应用,7.2 定时/计数器及应用,定时/计数器的核心是一个加1计数器 当它对外部事件计数时,由于频率不固定,称之为计数器; 当它对内部固定频率的机器周期进展计数时,称为定时器MCS-51单片机内有2个16位可编程的定时器/计数器, 分别为T0和T1定时器/计数器内部构造逻辑图,外部计数,1 加1计数器,定时器/计数器T0由8位特殊功能存放器TH0和TL0组成,TH0为高8位,TL0为低8位;,加1计数器的初值可以通过程序进展设定,设定不同的初值,就可以获得不同的计数值或定时时间 对外部事件脉冲计数,是计数器; 对单片机内部机器周期产生的脉冲进展计数,是定时器TCON,TR1:定时器1运行启停控制位可由用户通过软件设置 TR1 =0:定时器1停顿运行; TR1 =1:定时器1启动运行2 定时器控制存放器TCON,TR1,TR0,当C/T=0,定时功能 当C/T=1,计数功能,3 工作方式控制存放器TMOD,M1M0对应4种不同的二进制组合对应4种工作方式: 方式0、方式1、方式2、方式3,GATE=0,TRi单独控制计数器启停;GATE=1, TRi和INTi共同决定计数器启停,计数功能:对外部事件产生的脉冲进展计数。

      当C/ =1,T0P3.4或T1P3.5两个信号引脚输入信号脉冲发生负跳变时,加1计数器自动加1 定时功能:对单片机内部机器周期产生的脉冲进展计数 当C/ =0,每个机器周期计数器自动加1假如单片机的晶体频率为12MHz,那么计数频率为1MHz,或者说计数器每加1,可实现1s的定时定时或计数功能的选择,1 方式0,当TMOD中M1M0 = 00时,定时器/计数器选定方式0进展工作 此时,选择定时器/计数器的高8位和低5位组成一个13位的定时器/计数器2 方式1,当TMOD中M1M0 = 01时,定时器/计数器选定方式1进展工作 此时,选择定时器/计数器的TH0和TL0构成一个16位的定时器/计数器2 方式1,当作为计数器使用时,计数脉冲个数N: N = 216- x =65536 - x 计数初值x是TH0、TL0设定的初值当作为定时器使用时,定时器的定时时间为: Td = 216- xTcy 假如晶振频率fosc=12MHz,那么Tcy =1 s,定时范围为165536 s 初值x是TH0、TL0设定的初值 为机器周期,3 方式2,工作方式0、方式1具有共同的特点,发生溢出后,要程序不断反复给计数器赋初值 。

      方式2可以解决这一问题TH0的内容重新装入TL0后,其自身保持不变3 方式2,当作为计数器使用时,计数脉冲个数N: N = 28- x =256 - x 计数初值x是TH0、TL0设定的初值当作为定时器使用时,定时器的定时时间为: Td = 28- xTcy 假如晶振频率fosc=12MHz,那么Tcy =1 s,定时范围为1256 s 初值x是TH0、TL0设定的初值4 方式3,T0和T1具有完全不同的功能 定时/计数器0、1 的四种工作方式总结,1、定时器/计数器的初始化编程,MCS-51单片机的定时/计数器具有定时和计数功能,并可选择4种工作方式在使用定时器/计数器前必须对其进展初始化,设置其工作方式等初始化包括: 1设置工作方式,即设置TMOD中的各位:GATE、C/T、M1M0 2计算定时/计数器的初值x,并将初值x送入TH、TL中 3启动计数器工作,即将TR置1 4假设采用中断方式那么将对应的定时/计数器及CPU开中断1计数方式下,初值x的计算 计数脉冲个数N=2n-x 计数脉冲个数N,那么初值x = 2n- N 当采用工作方式0,1,2时,n分别取值13,16,8 2定时方式下,初值x的计算 定时时间Td =(2n - x)机器周期Tcy 定时时间Td,机器周期Tcy。

      那么初值x=2n-Td/Tcy当采用工作方式0,1,2时,n分别取值13,16,82. 计算计数初值,例:在P1.0上产生周期为10ms的方波,设晶振频率12MHz.要求分别以查询方式和中断方式设计程序,使用T1,方式1,查 询 方 式:,ORG 0100H MOV TMOD,#10H MOV TH1,#0ECH;5ms MOV TL1,#78H;中断 SETB TR1 WAIT:JBC TF1,NX SJMP WAIT NX:CPL P1.0 MOV TH1,#0ECH MOV TL1,#78H SJMP WAIT END,中 断 方 式:,ORG 0000H AJMPMAIN ORG001BH AJMPPPT1 ORG100H MAIN: MOV TMOD,#10H MOV TH1,#0ECH MOV TL1,#78H MOV IE, #88H SETB TR1 WAIT: SJMP WAIT PPT1: CPL P1.0 MOV TH1,#0ECH MOV TL1,#78H RETI,例7-5:定时器/计数器T1工作于计数方式,计数脉冲个数N = 100,允许中断,分别使用:1工作方式1;2工作方式2,进展初始化编程。

      1 由于T1工作于计数方式 GATE=0,C/T=1,T1工作于方式1,那么M1M0 = 01 T0不用,TMOD的低4位取0000,那么 TMOD= 01010000B = 50H 工作方式1,那么计数器位数n = 16 计数器初值x = 216-100=65536-100=65436=FF9CH TH1=FFH; TL1=9CH,分析:,C51语言初始化程序如下: TMOD=0 x50; /*设置T1工作计数方式1*/ TH1=0 xff; /*加1计数器高8位TH1赋初值FFH*/ TL1=0 x9c; /*加1计数器低8位TL1赋初值9CH*/ TR1=1; /*翻开T1启动开关*/ ET1=1; /*T1开中断*/ EA=1; /*CPU开中断*/,汇编语言初始化程序1如下: MOV TMOD,#50H MOV TH1,#0FFH MOV TL1,#9CH SETB TR1 SETB ET1 SETB EA,汇编语言初始化程序2如下: MOV TMOD,#50H MOV TH1,#0FFH MOV TL1,#9CH SETB TR1 MOV IE,#84H,例7-5:定时器/计数器T1工作于计数方式,计数脉冲个数N = 100,允许中断,分别使用:1工作方式1;2工作方式2,进展初始化编程。

      2工作于方式2 TMOD= 01100000B = 60H 计数器初值x = 28-100=156=9CH TH1=9CH; TL1=9CH,分析:,C51语言初始化程序如下: TMOD=0 x60; /*设置T1工作计数方式2*/ TH1=0 x9c; /*加1计数器高8位TH1赋初值9CH*/ TL1=0 x9c; /*加1计数器低8位TL1赋初值9CH*/ TR1=1; /*翻开T1启动开关*/ ET1=1; /*T1开中断*/ EA=1; /*CPU开中断*/,例7-5:定时器/计数器T1工作于计数方式,计数脉冲个数N = 100,允许中断,分别使用:1工作方式1;2工作方式2,进展初始化编程汇编语言初始化程序1如下: MOV TMOD,#60H MOV TH1,#9CH MOV TL1,#9CH SETB TR1 SETB ET1 SETB EA,汇编语言初始化程序2如下: MOV TMOD,#60H MOV TH1,#9CH MOV TL1,#9CH SETB TR1 MOV IE,#84H,例7-6:T0工作于定时方式1,定时时间Td = 2ms,系统主频fosc =12MHz,允许中断,对T0进展初始化编程 。

      分析:,T0工作于定时方式 GATE=0,C/T=0,T0工作于方式1,那么M1M0 = 01 T1不用,TMOD的高4位取0000,那么 TMOD= 00000001B =01H 系统主频fosc =12MHz ,机器周期Tcy=1us 工作方式1,那么计数器位数n = 16 计数器初值x = 216-Td/Tcy=65536-2000 =63536=F830H TH0=F8H; TL0=30H,分析:,C51语言初始化程序如下: TMOD=0 x01; /*设置T0工作计数方式1*/ TH0=0 xf8; /*加1计数器高8位TH0赋初值F8H*/ TL0=0 x30; /*加1计数器低8位TL0赋初值30H*/ TR0=1; /*翻开T0启动开关*/ ET0=1; /*T0开中断*/ EA=1; /*CPU开中断*/,TMOD= 00000001B =01H TH0=F8H; TL0=30H,汇编语言初始化程序1如下: MOV TMOD,#01H MOV TH0,#0F8H MOV TL0,#30H SETB TR0 SETB ET0 SETB EA,汇编语言初始化程序2如下: MOV TMOD,#01H MOV TH0,#0F8H MOV TL0,#30H SETB TR0 MOV IE,#84H,要求利用定时器T0使图中P1.0口控制的发光二极管D1进展300us亮,300us灭。

      系统主频f =6MHz 计数值=150,方式2,ORG 0000H LJMP MAIN ;转主程序 ORG 000BH ;T0中断入口地址 LJMP IT0 ;转T0中断效劳程序 ORG 0100H ;主程序首地址 MAIN:MOV TMOD,#02H ;定时器0工作方式2 MOV TH0,#6AH ;T0初值设置 MOV TL0,#6AH SETB TR0 ;启动T0 SETB ET0 ;T0中断允许 SETB EA ;中断总允许 SETB P1.0 SJMP $ ;等待中断,ORG 0200H IT0: CPL P1.0 RETI END,#include sbit P1_0=P10; void main() TMOD=0 x02; /*设置T0工作计数方式2*/ TH0=0 x6A; /*加1计数器高8位TH0赋初值*/ TL0=0 x6A; /*加1计数器低8位TL0赋初值*/ TR0=1; /*翻开T0启动开关*/ ET0=1; /*T0开中断*/ EA=1; /*CPU开中断*/ while(1); void Timer0(void) interrupt 1 P1_0=P1_0; ,例7-7:要求利用定时器T0使图中P1.7口控制的发光二极管D8进展秒闪烁。

      系统主频f =12MHz 分析:,发光二极管D8进展秒闪烁,即每秒一亮一灭,亮500 ms,灭500 ms 系统主频f =12MHz条件下,定时器0工作方式1,最大定时时间为65.536 ms , 取定时器0定时50ms,溢出10次实现500 ms定时 T0工作方式确定: GATE=0,C/T=0,T0工作于方式1,那么M1M0 = 01那么 TMOD= 00000001B =01H 系统主频fosc =12MHz ,机器周期Tcy=1us 工作方式1,那么计数器位数n = 16 计数器初值x = 216-Td/Tcy=65536-50000 =15536=3CB0H TH0=3CH; TL0=B0H,例7-7:要求利用定时器T0使图中P1.7口控制的发光二极管D8进展秒闪烁系统主频f =12MHz ORG 0000H LJMP MAIN ;转主程序 ORG 000BH ;T0中断入口地址 LJMP IT0 ;转T0中断效劳程序 ORG 0100H ;主程序首地址 MAIN:MOV TMOD,#01H ;定时器0工作方式1 MOV TH0,#3CH ;T0初值设置 MOV TL0,#0B0H SETB ET0 ;T0中断允许 SETB EA ;中断总允许 MOV R7,#0AH ;50 ms 置10次 SETB TR0 ;启动T0 SETB P1.7 。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.