ImageVerifierCode 换一换
格式:PPT , 页数:89 ,大小:3.92MB ,
资源ID:8054708      下载积分:10 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.docduoduo.com/d-8054708.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录   微博登录 

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(单片机原理与应用-基于汇编、C51及混合编程第7章中断控制定时计数器及PCAPWM的应用.ppt)为本站会员(dwy79026)主动上传,道客多多仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知道客多多(发送邮件至docduoduo@163.com或直接QQ联系客服),我们立即给予删除!

单片机原理与应用-基于汇编、C51及混合编程第7章中断控制定时计数器及PCAPWM的应用.ppt

1、系统扩展设计及例题的介绍与实际应用相结合,原理图中给出了各元器件的实际应用参数。在第7-12章中的每一道例题都采用汇编、C51两种语言分别编程实现。第12章中数字显示温度计、RLC测量仪两个应用实例的电路及程序都通过了验证。,2,第7章 中断控制、定时/计数器及PCA/PWM的应用,3,主要内容,7.1 中断的概念 7.2中断系统的结构 7.3中断寄存器 7.4低压检测中断 7.5外部中断 7.6定时/计数器T0、T1的工作方式 7.7定时/计数器T0、T1的应用举例 7.8定时/计数器T2的工作方式及应用 7.9 PCA/PWM模块的结构及应用,4,7.1 中断的概念,1.中断源及中断请求,

2、中断请求,RETI,主程序,响应中断,中断服务子程序,返主程序,继续执行主程序,中断请求,PC断点,PC断点,对于一个中断源,中断请求信号产生一次,CPU中断一次,而不能出现中断请求一次,CPU响应多次的情况,所以要求中断信号及时撤除。,产生中断请求的事件,称为中断源。 STC12C5A60S2单片机有10个中断源:外部中断0、定时/计数器T0、外部中断1、定时/计数器T1、串行口1(UART1)、A/D转换、串行口2(UART2)、低压检测(LVD)中断、PCA中断和SPI中断。,5,7.1 中断的概念,1.中断源及中断请求,对突发事故,做出紧急处理。根据现场随时变化的各种参数、信息,做出实

3、时监控。CPU与外部设备并行工作,以中断方式相联系,提高工作效率。在多项外部设备同时提出中断请求情况下,CPU能根据轻重缓急响应外设的中断请求。,中断的作用:,6,7.1 中断的概念,2.中断优先权控制,3.中断允许与中断屏蔽,4.中断响应与中断返回,当有中断请求时,如果CPU正在执行某一条指令,需要执行完当前指令后再响应中断,如果正在执行RETI,或者是访问IE、IP寄存器指令时,需要执行完当前指令后,再执行一条指令才响应中断。,CPU同一时间只能响应一个中断请求。若同时来了两个或两个以上中断请求,就必须有先有后。 !,在中断系统中,有一个总中断使能位控制所有中断是否允许,另外每个中断源还有

4、各自的中断使能位控制该中断是否允许,只有在总的中断允许及相应中断也允许时, CPU才能响应中断。另外,当有高优先级中断正在响应时,也会屏蔽同级中断和低优先级中断。,7,7.2中断系统的结构,中断源、中断请求,中断允许寄存器IE和IE2,8,7.3中断寄存器,1.中断允许寄存器IE,IE寄存器的地址为A8H,可进行位寻址,CPU的中断允许控制位,当EA=0时,所有的中断源请求均被屏蔽;当EA=1时,允许CPU检测中断源的标志位。EA的作用使中断允许形成两级控制,即各中断源首先受EA控制,其次还受各中断源自己的中断允许控制位控制。,低压检测中断允许位。当ELVD0时,禁止低压检测中断;当ELVD1

5、,允许低压检测中断。,A/D转换中断允许位。当EADC0时,禁止A/D转换中断;当EADC1时,允许A/D转换结束时中断。,串行口1中断允许控制位。当ES0时,禁止串行口1中断;当ES1时,允许串行口1中断。,定时/计数器T1溢出中断允许控制位。当ET10时,禁止T1中断;当ET11时,允许T1中断,外部中断1中断允许控制位。当EX10时,禁止外部中断1中断;当EX11时,允许外部中断1中断,定时/计数器T0溢出中断允许控制位。当ET00时,禁止T0中断;当ET01时,允许T0中断,外部中断0中断允许控制位。当EX00时,禁止外部中断0中断;当EX01时,允许外部中断0中断,9,7.3中断寄存

6、器,1.中断允许寄存器IE2,IE2的地址为AFH,不能进行位寻址,SPI串行通信中断允许位。ESPI=0时,禁止SPI中断;当ESPI=1,允许SPI中断,串行口2中断允许控制位。当ES20时,禁止串行口2中断;当ES21时,允许串行口2中断,10,7.2中断系统的结构,STC系列单片机复位后,IE和IE2寄存器的各位均被清0,即所有中断源均处于禁止状态,由用户程序对寄存器IE和IE2相应的位置1或清0,实现允许或禁止各中断源的中断请求。 要改变IE寄存器各控制位的状态既可以用字节操作指令MOV IE,#DATA来实现,也可用位操作指令SETB或CLR实现。 改变IE2寄存器的各控制位,只能

7、用字节操作指令来实现,如:MOV IE2,#DATA。,11,7.2中断系统的结构,12,7.2中断系统的结构,中断优先级控制寄存器IP、IP2和IPH、IP2H,13,7.3中断寄存器,2.中断优先级控制寄存器IP、IP2和IPH、IP2H,IP寄存器的地址为B8H,可进行位寻址,IPH寄存器的地址为B7H,不能进行位寻址,PPCAH、PPCA为PCA中断优先级的高、低位,PLVDH 、PLVD为低压检测中断优先级的高、低位,PADCH 、PADC为A/D转换中断优先级的高、低位,PSH 、PS为串行口1中断优先级的高、低位,PT1H、PT1为定时/计数器1中断优先级的高、低位,PX1H、P

8、X1为外部中断1中断优先级的高、低位,PT0H、PT0为定时/计数器T0中断优先级的高、低位,PX0H、PX0为外部中断0中断优先级高、低位,14,7.3中断寄存器,2.中断优先级控制寄存器IP、IP2和IPH、IP2H,IP2寄存器的地址为B5H,不能进行位寻址,IP2H寄存器的地址为B6H,不能进行位寻址,PSPIH,PSPI为SPI串行口中断优先级的高、低位,PS2H、PS2为串行口2中断优先级的高、低位,15,7.2中断系统的结构,IPH.X、 IP.X或IP2H.X、IP2.X为11时为最高优先级中断,IPH.X、 IP.X或IP2H.X、IP2.X为10时为2级中断,IPH.X、

9、IP.X或IP2H.X、IP2.X为01时为1级中断,IPH.X、 IP.X或IP2H.X、IP2.X为00时为最低优先级中断,16,7.3中断寄存器,2.中断优先级控制寄存器IP、IP2和IPH、IP2H,上电复位后,中断优先级控制寄存器IP、IP2、IPH和IP2H中的各位均为0,IP寄存器的内容可通过位操作指令或字节操作指令来改变,而IP2、IPH和IP2H寄存器的内容只能通过字节操作指令来改变。,17,7.3中断寄存器,各中断源中断优先查询次序,1 T0 000BH,3 T1 001BH,4 URAT1 0023H,5 ADC 002BH,6 LVD 0033H,7 PCA 003BH

10、,8 UART2 0043H,9 SPI 004BH,使用C语言编程,中断查询次序号就是中断号,当几个中断源都在同一个优先级,其中的几个中断源同时产生中断请求,响应中断的次序取决于内部的查询次序。,18,中断处理的流程图,19,中断服务程序的流程图,20,以外部中断1为例,其中断服务处理程序,ORG 0013H ;外部中断1的入口地址LJMP INT1 ;在中断入口处放一条长转移指令 INT1: CLR EA,PUSH PSW PUSH ACC PUSH DPH PUSH DPL ,SETB EA ;执行中断任务 CLR EA, POP DPL POP DPH POP ACC POP PSW,

11、SETB EA RETI,21,7.4低压检测中断,烧写程序时可以将P4.6引脚设置为第二复位引脚RST2,,若烧写程序时没有将P4.6引脚设置为第二复位引脚RST2,P4.6为低压检测中断引脚EX_LVD,P4SW功能切换寄存器,LVD_P4.6 =0时P4.6为低压检测中断引脚EX_LVD LVD_P4.6 =1时P4.6为I/O引脚,22,7.4低压检测中断,若烧写程序时没有将P4.6引脚设置为第二复位引脚RST2,P4.6为低压检测中断引脚EX_LVD,电源控制寄存器PCON,EX_LVD引脚输入的电压低于低压检测电压门槛值1.33V时,LVDF位自动置1请求中断,,注意:上电复位后,

12、电源控制寄存器PCON中的外部低压检测标志位LVDF为1,要由软件清零(注意该位不可位寻址),建议清零后,再读一次该位,若仍然为1,说明电源还未达到正常值,应再次将该位清零,直至检测到该位为0时再转入正常运行,当外部供电电压产生波动时,无法保证单片机正常工作,可以在单片机的外部低压检测中断服务程序中保存相关数据,避免掉电后数据丢失。,23,7.5外部中断,外部中断0输入引脚,外部中断1输入引脚,24,7.5外部中断,TCON寄存器的地址为88H,可进行位寻址,IT1:外部中断1触发方式选择位。若IT1=0, 引脚输入低电平信号触发中断;若IT1=1, 引脚为下降沿触发方式,外部中断1请求中断标

13、志。若外部中断1输入引脚产生外部触发信号时,硬件将IE1位置1,外部中断1设置为下降沿触发方式时,CPU响应该中断时由硬件自动将IE1位清0,如果设置为低电平触发方式,必须在程序中通过指令清0,外部中断0触发方式选择位。若IT0=0, 引脚输入低电平信号触发外部中断;若IT0=1, 引脚为下降沿触发方式,外部中断0请求中断标志。若外部中断0输入引脚产生外部触发信号时,硬件将IE0位置1,外部中断0设置为下降沿触发方式时,当CPU响应该中断时由硬件自动将IE0清0 ,如果设置为低电平触发方式,必须在程序中通过指令清0,25,7.5外部中断,IT0,IE0,IT1,IE1,注意:如果外部中断设置为

14、下降沿触发方式时,必须在该外部中断输入引脚至少保持1个系统时钟周期的高电平及1个时钟周期的低电平,才能保证CPU检测到该下降沿。同样,如果外部中断为低电平触发,则须在该引脚至少保持2个系统时钟周期的低电平,这样才能保证CPU能够检测到该低电平信号。,26,7.6定时/计数器T0、T1的工作方式,定时/计数器T0和T1工作方式寄存器TMOD的地址为89H,T1工作方式控制,T0工作方式控制,计数、定时方式的选择位。为0时,定时/计数器工作在定时方式;为1时,定时/计数器工作在计数方式,对外部T0、T1引脚输入的脉冲计数,定时/计数器门控方式选择位,M1、M0:定时/计数器工作方式的选择位,27,

15、TCON寄存器的地址为88H,可进行位寻址,定时/计数器T1的溢出中断标志。当T1从初值开始加1计数计满产生溢出时,由硬件使该位置1。中断响应后由内部硬件电路自动清0。,定时/计数器T1的运行控制位。由软件置位或清0,置位时,定时/计数器T1开始工作;清0时,T1停止工作。,定时/计数器T0的运行控制位。由软件置位或清0,置位时,定时/计数器T0开始工作;清0时,T0停止工作。,定时/计数器T0的溢出中断标志。当T0从初值开始加1计数计满产生溢出时,由硬件使该位置1,中断响应后由内部硬件电路自动清0。,7.6定时/计数器T0、T1的工作方式,28,7.6定时/计数器T0、T1的工作方式,7.6

16、.1 方式0,13位的定时/计数器的低5位,13位的定时/计数器的高8位,辅助寄存器AUXR的T0x12位,T0x12,T0和T1工作方式寄存器TMOD,T0和T1控制寄存器TCON,29,7.6定时/计数器T0、T1的工作方式,7.6.2 方式1,16位的定时/计数器的低8位,16位的定时/计数器的高8位,30,7.6定时/计数器T0、T1的工作方式,7.6.3方式2,辅助寄存器AUXR的T1x12位,T1x12,唤醒控制寄存器WAKE_CLKO,T0、T1工作在方式2时均有可编程时钟输出功能,在该模式 P3.4 、P3.5作为时钟输出引脚CLKOUT0、CLKOUT1。当T0CLKO或T1

17、CLKO位置1后,工作在方式2的T0或T1的溢出 将对CLKOUT0或CLKOUT1引脚取反, 即输出的时钟频率=T0(或T1)溢出率/2。,31,7.6定时/计数器T0、T1的工作方式,7.6.4方式3,32,7.7定时/计数器T0、T1的应用举例,在应用定时/计数器资源时,按照以下几个步骤进行:,(1)确定工作方式,对方式控制寄存器TMOD赋值,(2)根据要求计算初值并装入寄存器THx、TLx,33,7.7定时/计数器T0、T1的应用举例,在应用定时/计数器资源时,按照以下几个步骤进行:,(1)确定工作方式,对方式控制寄存器TMOD赋值,(2)根据要求计算初值并装入寄存器THx、TLx,实

18、际定时时间Tc=(M-X) Tp,计数初值:,X=M-,(3)根据需要开放定时/计数器中断,即EA、ETx置1,(4)启动定时/计数器开始工作,即TRx位置1,(5)编写中断服务程序或查询处理方式程序,34,【例71】设STC12C5A60S2单片机的系统时钟频率为12MHz,利用定时/计数器T0 编程实现从P3.4引脚输出周期为500s的方波。,分析:从P3.4引脚输出周期为500s的方波,即只需P3.4每250s取反一次。由于方式2中有时钟输出功能,fosc=12MHz时,最大的定时时间为256s,满足250s的定时要求, 选择定时/计数器T0工作于方式2。T0x12位置0,初值X=M-

19、=256-250=6,即TH0=TL0=06H。,35,WAKE_CLKO EQU 8FH,ORG 0000HLJMP MAINORG 0100H MAIN:MOV SP,#0BFH,MOV TMOD,#02H ;T0工作在方式2ORL WAKE_CLKO,#01H;T0工作在时钟输出方式,MOV TH0,#06H ;给T0的高8位赋初值MOV TL0,#06H ;给T0的低8位赋初值,SETB TR0 ;定时/计数器T0开始计数,SJMP $ END,(1)汇编程序:,36,(2)C51程序:,#include/*STC12C5Axx系列单片机片内资源的头文件*/,void main( )T

20、MOD=0x02; / 工作在方式2WAKE_CLKO= (WAKE_CLKO| 0x01 );/时钟输出方式TL0=0x06;/给T0装入初值TH0=0x06;TR0=1;/启动T0计数while(1);,37,【例72】利用STC12C5A60S2单片机的定时/计数器T0功能,在P1.0引脚输出周期为2ms的方波,假设系统时钟频率为6MHz,编写相应的程序。,分析:若要产生2ms的方波,只需要每1ms对P1.0引脚的输出取反一次,1ms的定时超过方式2的最大计数值256,故可采用方式1定时中断的方式实现。,计数初值X=216-500=65036=1111111000001100B,即TH0

21、=FEH,TL0=0CH,初值计算:T0x12位为0,Tp= = =2s,,计数次数N= = =500,(1) 汇编程序:,38,ORG 0000HLJMP MAINORG 0100HMAIN:MOV SP,#0BFH ;初始化堆栈指针,MOV TMOD,#01H ;T0工作在方式1MOV TL0,#0CH ;给T0装入初值 MOV TH0,#0FEH SETB EA ;开放总中断 SETB ET0 ;T0的溢出中断允许SETB TR0 ;T0开始计数SJMP $,ORG 000BH ;T0的中断入口地址 LJMP T0_INT,T0_INT:MOV TL0,#0CH ;重新给T0赋初值MOV

22、 TH0,#0FEHCPL P1.0 ;P1.0引脚取反 RETI ;中断返回END,39,(2) C51程序:,#include / STC12C5Axx头文件sbit P1_0=P10;,void main( ) TMOD=0x01; /T0工作在方式1TL0=0x0C; /给T0装入初值TH0=0xFE; EA=1; /开放总中断ET0=1; /T0溢出中断允许TR0=1; /启动T0计数while(1); ,void T0_INT( ) interrupt 1 /T0中断服务程序T L0=0xC0; /给T0置入初值TH0=0xFE;P1_0=!P1_0; /对P1.0引脚取反,40,

23、【例73】设STC12C5A60S2单片机的系统时钟频率为12MHz,编程实现从P1.1引脚输出周期为1s的方波。,分析:根据题目要求知,P1.1引脚的输出应每隔500ms取反一次,即定时时间为500ms。用一个定时/计数器无法实现,可用定时/计数器T1进行10ms的定时,然后用寄存器R7对10ms定时中断次数计数50次来实现。,定时/计数器T1定时10ms,选择对系统时钟的12分频模式,T1x12位为0,Tc=10ms,fosc=12MHz,可知计数次数N=10000,,选择方式1。初值X=216-10000=55536=D8F0H,则TH1=D8H,TL1=F0H。,(1)汇编程序:,41

24、,ORG 0000HLJMP MAINORG 001BH ;T1的中断向量入口地址LJMP T1_INTORG 0100HMAIN: MOV SP,#0BFH ;初始化堆栈指针,MOV TMOD,#10H ;T1工作在方式1MOV TL1,#0F0H ;给T1写入初值MOV TH1,#0D8H MOV R7,#50 ;利用寄存器R7计数50次SETB EA ;开放总中断SETB ET1 ;T1溢出中断允许SETB TR1 ;启动T1开始工作SJMP $,T1_INT: MOV TL1,#0F0H ;重新赋初值MOV TH1,#0D8H,42,DJNZ R7,NEXT ; R7减1不为0,中断次

25、数未到50次,;跳转到NEXT处返回 CPL P1.1 ;已定时中断50次, P1.1引脚取反MOV R7,#50 ;重新赋给R7值50NEXT: RETIEND,43,(2)C51程序:,#include/*STC12C5Axx系列单片机片头文件*/sbit P1_1=P11;unsigned char i=0;,void main( )TMOD=0x10;/T1工作在方式1TL1=0xF0;/给T1装入初值TH1=0xD8; EA=1;/开放总中断ET1=1;/T1溢出中断允许TR1=1;/启动T1开始工作while(1);,44,void T1_INT( ) interrupt 3/T1

26、中断服务程序TH1=0xD8;TL1=0xF0;/重新置入初值i+;if(i= =50)P1_1=!P1_1;/已定时中断50次,对P1.1取反i=0;,45,【例74】用T0作为计数器计数一生产流水线上的工件,每生产100个工件,发出一包装命令,包装成一箱,并记录其箱数,,45,包装命令,46,【例74】用T0作为计数器计数一生产流水线上的工件,每生产100个工件,发出一包装命令,包装成一箱,并记录其箱数,,分析:根据题目要求,设单片机的系统时钟频率为12MHz,可选择T0工作在方式2的计数状态,每计数100个工件中断一次,计数初值为256-100=156=9CH,在中断服务程序中输出包装命

27、令。,用R4、R5组成16位箱数计数器,每中断一次,对R4、R5组成的计数器加1。,显示电路及显示程序在此省略。,(1)汇编程序:,48,ORG 0000HLJMP MAINORG 000BH ; T0的中断入口地址LJMP T0_INT ;转向中断服务程序ORG 0100H MAIN: MOV SP,#0AFH ;初始化堆栈指针,SETB P1.0 ;P1.0为高电平,MOV R5,#0 ;箱数计数器清“0”MOV R4,#0,MOV TMOD,#6 ;T0工作在方式2的计数状态MOV TL0,#9CH ;计数初值送计数器MOV TH0,#9CH SETB EA ;CPU开放总中断SETB

28、ET0 ;T0溢出允许中断SETB TR0 ; 启动T0计数,SJMP $,49,T0_INT: PUSH PSW ;保护现场PUSH ACC,CLR P1.0 ;输出包装命令,MOV A,R5 ;箱计数器加“1”ADD A,#1 MOV R5,AMOV A,R4ADDC A,#0MOV R4,A,. .;延迟5ms,让包装命令可靠有效,SETB P1.0 ;包装命令结束,POP ACC ;恢复现场POP PSW,RETI ;中断返回END,50,(2)C51程序:,#include /*STC12C5Axx系列单片机头文件*/ #include /声明本征函数库 unsigned int j

29、=0; sbit P1_0=P10;,void main( ) P1_0=1; /P1.0为高电平TMOD=0x06; /T0工作在方式2的计数状态TL0=0x9C; /给T0置入初值TH0=0x9C;EA=1; /开放总中断ET0=1; /T0溢出中断允许TR0=1; /启动T0开始工作while(1); /等待 ,51,void T0_INT ( ) interrupt 1/中断服务程序 j+;P1_0=0; /P1.0为低电平unsigned char a,b,c;for(c=4;c0;c-) /延时5msfor(b=212;b0;b-)for(a=140;a0;a-)_nop_();

30、P1_0=1; /P1.0为高电平 ,52,【例75】 利用定时/计数器T1门控信号GATE功能,测量P3.3引脚上正脉冲信号的宽度(单位为s)。,12MHz,1,0,0,1,1,1,闭合,0,0,53,(1)汇编程序:,ORG 0000HLJMP MAIN ;跳到主程序入口ORG 0100H MAIN: MOV SP, #0BFH ;初始化堆栈指针SP,MOV TMOD,#90H ;方式1,GATE、TR1控制T1MOV TL1, #00H ;计数器初值为0MOV TH1, #00H,WAITL:JB P3.3, WAITL ;若P3.3引脚为高电平,则等待,,SETB TR1 ;当P3.3

31、引脚为低电平时,置位TR1,WAITH:JNB P3.3, WAITH ;等待P3.3引脚变高电平,WAITHL:JB P3.3, WAITHL ; 等待P3.3引脚的下降沿,CLR TR1 ;下降沿到来,关闭定时/计数器T1,MOV R6,TH1 ;测量结束,读取数据 MOV R7,TL1 SJMP $ END,54,(2)C51程序:,#include/STC12C5Axx系列单片机头文件 sbit P3_3=P33; unsigned int temp=0;,void main( ) TMOD=0x90; /T1工作在方式1TH1=0x00; /计数器初值为0TL1=0x00;while

32、 (P3_3= =1); /P3.3为高电平时,等待TR1=1; /P3.3为低电平时,启动T1工作while(P3_3= =0); /P3.3为低电平时,等待while (P3_3= =1); /P3.3为高电平时,等待TR1=0; / P3.3出现下降沿时,T1停止工作temp=TH1; /读出定时/计数器T1的值temp=(temp8)|TL1;while(1); ,55,7.9 PCA/PWM模块的结构及应用,在STC12Cxx、STC15Fxx等各系列单片机中,没有定时/计数器T2,而是增加了24路可编程计数器阵列(PCA)模块,每个PCA模块均可以设置为4种工作模式:边沿触发捕获、

33、时钟输出、软件定时及脉宽调制(PWM)输出,本节主要以具有2路可编程计数器阵列的STC12C5A60S2单片机为例介绍PCA/PWM模块,56,7.9.1 PCA/PWM模块的结构,由CL、CH两个8位寄存器组成,PCA单元电路内的两个模块共用一个16位的定时/计数器(CH和CL)作为公共时间基准,57,7.9.2 PCA 16位定时/计数器,由CL、CH两个8位寄存器组成,其地址分别为0E9H、0F9H PCA方式寄存器CMOD设定其工作方式 PCA控制寄存器CCON控制其工作,58,7.9.2 PCA 16位定时/计数器,由CL、CH两个8位寄存器组成,其地址分别为0E9H、0F9H PC

34、A方式寄存器CMOD设定其工作方式 PCA控制寄存器CCON控制其工作,CIDL:空闲模式下是否停止PCA计数的控制位,CIDL=0,空闲模式下PCA计数器继续工作,CIDL=1,空闲模式下PCA计数器停止工作,PCA计数器溢出中断使能位,ECF=0,禁止计数器溢出中断,ECF=1,允许计数器溢出中断,PCA计数器的时钟来源由CPS2、CPS1、CPS0三位控制,单片机是否处于空闲模式,59,7.9.2 PCA 16位定时/计数器,由CL、CH两个8位寄存器组成,其地址分别为0E9H、0F9H PCA方式寄存器CMOD设定其工作方式 PCA控制寄存器CCON控制其工作,单片机是否处于空闲模式,

35、PCA计数器溢出中断标志位,PCA计数器启动控制位,CCF1 、CCF0:PCA模块1及模块0的中断标志位,60,7.9.2 PCA 16位定时/计数器,1. PCA工作方式寄存器CMOD 地址为D9H,计数器的时钟来源,2.PCA控制寄存器CCON 地址为D8H,可以进行位寻址,61,7.9.3 PCA/PWM各个模块的特殊功能寄存器,1.PCA各模块的工作方式寄存器CCAPM0和CCAPM1 地址分别为DAH和DBH,62,7.9.3 PCA/PWM各个模块的特殊功能寄存器,比较器允许/禁止控制位,ECOMn=1时有效,1.PCA各模块的工作方式寄存器CCAPM0和CCAPM1 地址分别为

36、DAH和DBH,上升沿捕获允许/禁止控制位,CAPPn=1时允许,下降沿捕获允许/禁止控制位,CAPNn=1时允许,匹配允许/禁止控制位,MATn=1时允许,反转允许/禁止控制位,TOGn=1时允许,脉冲宽度调制允许/禁止位,PWMn=1时允许,模块n中断使能位,ECFFn=1时,允许模块n的CCFn标志位被置1后产生中断。,63,7.9.3 PCA/PWM各个模块的特殊功能寄存器,2. PCA各模块的比较/捕获寄存器CCAPnL(低位字节)CCAPnH(高位字节),地址分别为:CCAP0L:EAH;CCAP0H:FAH;CCAP1L:EBH ;CCAP1H:FBH,64,7.9.3 PCA/

37、PWM各个模块的特殊功能寄存器,3.PCA模块中PWM方式辅助寄存器PCA_PWM0和PCA_PWM1地址分别为 F2H 和 F3H,65,7.9.3 PCA/PWM各个模块的特殊功能寄存器,3.PCA模块中PWM方式辅助寄存器PCA_PWM0和PCA_PWM1地址分别为 F2H 和 F3H,在PWM方式下,与CCAPnH组成9位数,EPCnH为最高位,在PWM方式下,与CCAPnL组成9位数,EPCnL为最高位,由CL、CH两个8位寄存器PCA方式寄存器CMOD PCA控制寄存器CCON,工作方式寄存器: CCAPM0和CCAPM1 比较/捕获寄存器 CCAPnL和CCAPnH PWM方式辅

38、助寄存器PCA_PWM0和PCA_PWM1,67,7.9 .4 PCA/PWM模块的工作方式及应用,1.捕获方式,1,1,1,0,0,0,0,0,可在中断服务程序中判断哪一个模块产生了中断,注意中断标志位必须由软件清零,68,【例77】采用STC12C5A60S2单片机PCA的捕获方式测量低频矩形波的周期及占空比,假设系统时钟频率为12MHz。,PCA的模块0输入引脚P1.3作为信号输入端,刚开始测量时为高电平,需要等待,检测到为低电平时需要继续等待,PULSE_W1 EQU 51H ;保存CH值 PULSE_W2 EQU 52H ;保存CL值,;脉宽计时,PULSE_T1 EQU 54H ;

39、保存CH值 PULSE_T2 EQU 55H ;保存CL值,;周期计时,如果脉宽大于CH、CL的最大计时周期该怎么办?,PULSE_W0 EQU 50H ;脉宽计时最高字节,PULSE_T0 EQU 53H ;周期计时最高字节,69,(1)汇编程序:,CCON EQU 0D8H ;PCA控制寄存器 CMOD EQU 0D9H ;PCA模式寄存器 CL EQU 0E9H ;PCA定时/计数器的低8位 CH EQU 0F9H ;PCA定时/计数器的高8位 CCAPM0 EQU 0DAH ;PCA模块0的模式寄存器 CCAP0L EQU 0EAH ;PCA模块0的捕获寄存器低8位 CCAP0H EQ

40、U 0FAH ;PCA模块0的捕获寄存器的高8位,CR BIT CCON.6 ;PCA定时控制位 CF BIT CCON.7 ;PCA 溢出标志位 CCF0 BIT CCON.0 ;PCA模块0的中断标志位,70,PULSE_W0 EQU 50H ;脉宽计时的最高字节 PULSE_W1 EQU 51H PULSE_W2 EQU 52H ;脉宽计时的最低字节 PULSE_T0 EQU 53H ;周期计时的最高字节 PULSE_T1 EQU 54H PULSE_T2 EQU 55H ;周期计时的最低字节,ORG 0000H LJMP MAIN ORG 003BH ;PCA中断入口地址 LJMP P

41、CA_INT,71,ORG 0100H MAIN: MOV SP,#0BFH ;初始化堆栈指针CLR A MOV CL,A ;PCA计数寄存器清0MOV CH,A MOV PULSE_W0,AMOV PULSE_T0,A,MOV CCON, A ;初始化PCA控制寄存器MOV CMOD,#01H ;系统时钟的12分频为PCA时钟源,;允许PCA计数器溢出中断MOV CCAPM0,#31H;允许上升沿、下降沿捕获中断,SETB P1.3NOP ;等待P1.3引脚输出稳定NOPNOPNOP,72,WAIT1: JB P1.3,WAIT1;若P1.3引脚处在高电平,则等待低电平,WAIT2: JNB

42、 P1.3,WAIT2;若P1.3引脚为低,则等待上升沿,SETB CR ;上升沿到来,启动16位定时/计数器工作,CLR CF ;清中断标志 CLR CCF0 NOP SETB EA ;开放总中断 SJMP $,73,PCA_INT:PUSH PSW,CLR CF ;清溢出中断标志,JNB P1.3,PLUSET ;P1.3引脚为低,PLUSET: INC PULSE_T0 ; 周期高字节加1,CAP_CCF0:JNB CCF0, EXIT ;无边沿触发,退出,CLR CCF0 ;清边沿触发中断标志,JB P1.3 ,CAP_UP ;上升沿捕获,结束,MOV PULSE_W2 ,CCAP0L

43、 ;是下降沿捕获, MOV PULSE_W1 ,CCAP0H ;脉宽计时读出 LJMP EXIT,JNB CF, CAP_CCF0;如果不是计数器溢出,则转移,INC PULSE_W0 ;为高,脉宽高字节加1,CAP_UP:CLR CR ;一个周期检测结束,计数器停止工作MOV PULSE_T2 ,CCAP0L ;将一个周期宽度读出来MOV PULSE_T1 ,CCAP0H,74, ;计算部分略 EXIT: POP PSWRETIEND,75,(2)C 51程序:,#include/STC12C5Axx系列单片机头文件 #include /声明本征函数库 #define uchar unsig

44、ned char sbit P1_3=P13; uchar PULSE_W0 , PULSE_W1, PULSE_W2, PULSE_T0, PULSE_T1, PULSE_T2;,void main( ) CL=0x00; /计数器初值复位CH=0x00;CCON=0x00;CMOD=0x01; /选择时钟源为12分频,允许计数溢出中断CCAPM0=0x31; /允许上升沿、下降沿捕获中断,76,P1_3=1; _nop_( ); /等待P1.3引脚输出稳定 _nop_( ); _nop_( ); _nop_( );,while(P1_3= =1);/若P1.3引脚为高,则等待低电平whil

45、e(P1_3= =0);/若P1.3引脚为低,则等待上升沿CR=1; /检测到P1.3引脚为上升沿,启动计数器工作CF=0; /清溢出中断标志CCF0=0; /清捕获中断标志_nop_( );EA=1;/开放总中断while(1); ,77,void PCA_INT ( ) interrupt 7 ,if(CF= =1) /若计数器溢出 CF=0; /清溢出标志CF,if(P1_3= =1) /P1.3引脚为高电平时PULSE_W0+; /脉宽计数的最高字节加1PULSE_T0+;/周期计数的最高字节加1,else PULSE_T0+;/P1.3引脚为低,只对周期最高字节加1,78,if(CC

46、F0= =1) /若捕获中断溢出 ,CCF0=0; /清捕获中断标志CCF0,if(P1_3= =0) /检测到P1.3引脚为下降沿捕获时, PULSE_W2=CCAP0L; /读出脉冲宽度 PULSE_W1=CCAP0H; , CR=0; PULSE_T2=CCAP0L; /读出脉冲宽度 PULSE_T1=CCAP0H; ,else /检测到P1.3引脚为上升沿捕获时,79,7.9 .4 PCA/PWM模块的工作方式及应用,2.软件定时器方式,1,1,1,0,0,0,0,0,注意:对比较/捕获寄存器赋值时,应先给CCAPnL赋值,再给CCAPnH赋值,原因是给CCAPnL赋值时,硬件自动将E

47、COMn位清0,而给CCAPnH赋值时,自动将ECOMn位置1,允许CH、CL与CCAPnH、CCAPnL寄存器比较,80,7.9 .4 PCA/PWM模块的工作方式及应用,2.软件定时器方式,用于定时的初始化步骤如下:,(1)赋给CCPAMn寄存器初值48H,如果允许定时中断,则赋值为49H;,(2)给寄存器CH、CL、CCAPnH、 CCAPnL赋初值;,(3)CR置1,启动16位计数器工作;,(4)如果允许中断,则开放总中断EA及相应的PCA中断使能位。,81,7.9 .4 PCA/PWM模块的工作方式及应用,3.时钟输出方式,1,1,1,0,0,0,0,1,82,7.9 .4 PCA/PWM模块的工作方式及应用,4.脉宽调制方式(PWM),1,1,83,7.9 .4 PCA/PWM模块的工作方式及应用,4.脉宽调制方式(PWM),84,【例78】利用PCA的模块0,从P1.3引脚调制输出频率为200Hz且占空比为40%的矩形波。,分析:,假设系统的时钟频率为11.0592MHz,

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报