IO接口及增强型捕捉定时器模块.ppt

上传人:小飞机 文档编号:5435169 上传时间:2023-07-06 格式:PPT 页数:76 大小:1.02MB
返回 下载 相关 举报
IO接口及增强型捕捉定时器模块.ppt_第1页
第1页 / 共76页
IO接口及增强型捕捉定时器模块.ppt_第2页
第2页 / 共76页
IO接口及增强型捕捉定时器模块.ppt_第3页
第3页 / 共76页
IO接口及增强型捕捉定时器模块.ppt_第4页
第4页 / 共76页
IO接口及增强型捕捉定时器模块.ppt_第5页
第5页 / 共76页
点击查看更多>>
资源描述

《IO接口及增强型捕捉定时器模块.ppt》由会员分享,可在线阅读,更多相关《IO接口及增强型捕捉定时器模块.ppt(76页珍藏版)》请在三一办公上搜索。

1、实验内容,实验6:掌握9S12单片机IO口的基本程序调试,学会使用BDM和实际实验系统编程下载:事先看一下实验板原理图和CodeWarrior V5.0开发环境快速入门-工程创建 for 9S12DG128B.doc或CodeWarrior V5.0开发环境快速入门-工程创建 for 9S12XDT512.doc(一部分同学的实验板是带协处理器的9S12XDT512),拿到实验板后先看一下板上单片机的型号。1.编写并实现LED排灯(D2D10)显示程序,实现花灯显示,即01010101和10101010动态显示(0表示灯灭,1表示灯亮);2.编写并实现LED排灯(D2D10)显示程序,分别实现

2、从左向右逐个点亮和从右到左逐个点亮的流水灯显示;3.编写并实现LED排灯(D2D10)显示程序,实现按键与LED的关联,即4个按键S3S6控制4个LED灯,按键按下相应的灯亮,松开相应的灯灭。要求1.用到延时的地方需用软件延时实现。2.有完整的程序和注释,并最后总结实现原理。,实验7:掌握9S12单片机ECT模块的使用方法要求1.描述什么是输入捕捉和输出比较,描述9S12单片机ECT模块主要寄存器设置;2.用ECT模块延时代替实验6中用到的软件延时,实现实验6中的各种LED排灯(D2D10)显示效果;3.要有完整的程序和注释,并最后总结实现原理。,实验8:掌握9S12单片机实现数码管显示要求1

3、.在四位数码管上循环显示共个数中的某连续四位,如下图所示;2.程序中需要延时的地方用软件延时实现;3.要有完整的程序和注释,并最后总结实现原理。,0 1 2 3 4 5 6 7 8 9 A B C D E,实验9:掌握9S12单片机实现数码管显示要求1.在四位数码管上循环显示共个数中的某连续四位,如下图所示;2.程序中需要延时的地方用ECT模块延时实现;3.要有完整的程序和注释,并最后总结实现原理。,0 1 2 3 4 5 6 7 8 9 A B C D E,实验10:掌握9S12单片机AD和显示综合编程与调试要求1.实验板上单片机AD模块的AN15引脚接了可调电位器RV1(见实验板原理图),

4、要求实现对可调电位器上的电压进行AD转换(10位精度),并对采样结果进行数字滤波,即对采样多次(如10次)的结果排序并掐头去尾求平均值,将滤波后的结果(转换成十进制)送四位数码管显示;2.调节可调电位器,观察数码管显示变化规律;3.要有完整的程序和注释,画出程序流程图并最后总结实现原理。,AD采样,数字滤波,第七章 IO接口及增强型捕捉定时器模块,7-1 通用I/O接口7-2 I/O接口的功能及设置方法 7-3 增强型定时器ECT模块,内容提要:,7-1 通用I/O接口,I/O,检测,控制,PORTA、PORTB、PORTE和PORTK在芯片处于扩展方式下被用作总线信号,PORTT、PORTP

5、、PORTS、PORTM、PORTJ和PORTH被集成在端口集成模块(PIM)内,与片内其他功能模块的引脚复用,MC9S12DG128单片机并行I/O的复用功能,7-2 I/O接口的功能及设置方法,通用I/O接口一般可以设置输入输出、驱动能力、内部上拉或下拉电阻、中断输入等功能,每个I/O接口都有各自的寄存器。,数据寄存器:并行I/O接口都有数据寄存器进行数据的读取和发送,Port J I/O Register(PTJ)Read:Anytime.Write:Anytime.If the data direction bits of the associated I/O pins are set

6、 to 1,a read returns the value of the port register,otherwise the value at the pins is read.Port J Input Register(PTIJ)Read:Anytime.Write:Never,writes to this register have no effect.This register always reads back the status of the associated pins.This can be used to detect overload or short circui

7、t conditions on output pins.,方向寄存器,MC9S12单片机中的I/O接口除了PORTAD只可作为输入口外,一般都是双向并行口,因此都配置了一个方向寄存器“DDRx”,I/O接口每个引脚的输入输出方向由各方向寄存器的对应位来设置。方向寄存器的某位为“0”表示相应的引脚为输入引脚;为“1”表示相应的引脚为输出引脚。,驱动控制寄存器,MC9S12单片机可以设置I/O接口的驱动能力,当I/O接口为输出口时此功能有效。此寄存器的相应位为“1”,则表示全额驱动能力;为“0”,则表示缩减驱动能力,后者的驱动能力是前者的三分之一。,拉电阻控制寄存器,MC9S12单片机的各个I/O

8、接口内置了拉电阻,可以通过编程来设置是否使用拉电阻。拉电阻的主要作用是当电路驱动器关闭时给线路(节点)一个固定电平,可以提高总线的抗电磁干扰能力。拉电阻控制寄存器的相应位为“1”,则使用拉电阻;为“0”,则不使用拉电阻。另外,可以使用极性选择寄存器选择拉电阻的极性,即选择拉电阻为上拉或者下拉,相应位为“1”则表示下拉电阻,为“0”则表示上拉电阻。注意,PORTA、PORTB和PORTE只能使用上拉电阻,所以并不设有极性选择寄存器。,中断允许、标志寄存器,MC9S12单片机的I/O接口PORTJ、PORTP、PORTH。具有中断功能,可以通过软件编程来允许或禁止。相应位为“1”表示允许中断,“0

9、”表示禁止中断。具有中断能力的I/O口都有各自的中断标志寄存器。对应位为“1”表示有中断发生,“0”表示无中断发生。另外,还有中断边沿选择寄存器,相应位为“1”表示上升沿中断,“0”表示下降沿中断。当检测到有效中断边沿时,中断标志寄存器PIFJ相应位被置一,产生中断并进入相应的中断服务程序。,课本6.1.2 程序举例,8 缓冲器,#include#include void interrupt 24 PJI(void);/*声明中断函数*/void main(void)EnableInterrupts;DDRJ=0 x00;/*PORTJ作为输入*/DDRB=0 xFF;/*PORTB作为输出*

10、/PORTB=0 xff;/*灯全灭*/DDRA=0 xff;/*PORTA输出*/PORTA=0 x00;/*PORTA全为低电平*/PPSJ=0 xff;/*上升沿中断*/PIEJ=0 xff;/*中断使能*/for(;)PORTA=0b11000000;/*产生中断*/#pragma CODE_SEG NON_BANKED void interrupt 24 PJI(void)/*中断服务程序,中断向量号为24*/PORTB=0 xf0;/*LED灯高四灭,低四亮*/#pragma CODE_SEG DEFAULT/9S12中断程序必须定位于non-/banked 区域,必须有这两个pr

11、agma语句,课本6.1.2 程序说明,使用PORTJ口的中断功能。设置PORTA口为输出口,PORTA的第6脚和PORTJ的第6脚硬件相连,PORTB为输出口,用来控制8个LED灯,PORTJ开中断,并且设置为上升沿触发。首先PORTA初始化为0,PORTB为0 xff,此时LED灯全灭。在循环中设置PORTA第6位为高电平,产生中断,在中断服务程序中设置LED灯低4位亮,高4位不亮,表示已经进入中断。,如何得知中断向量号?,向量号0,向量号1,向量号24,依次向下数,中断向量表(书上有),本课程实验板原理图见pdf文件另参考“实验板上所用芯片”中的文档前面那个例程不适用本课程实验板,让实验

12、板上的小灯(D10D2)循环点亮#include/*common defines and macros*/#include/*derivative information*/#pragma LINK_INFO DERIVATIVE mc9s12dg128bvoid deley(unsigned int d)int i;for(i=0;i=1;if(d=0)d=0 x80;for(;)/*wait forever*/*please make sure that you never leave this function*/,该程序也可写成如下:#include/*common defines a

13、nd macros*/#include/*derivative information*/#pragma LINK_INFO DERIVATIVE mc9s12dg128b#define PortA*(volatile unsigned char*)0)#define DdrA*(volatile unsigned char*)2)void deley(unsigned int d)int i;for(i=0;i=1;if(d=0)d=0 x80;for(;)/*wait forever*/,IC/OC的定义:Input Capture/Output Compare 输入捕捉和输出比较IC用来

14、监测外部的事件和输入信号。当外部事件发生或信号发生变化时,在指定的输入捕捉引脚发生一个指定的沿跳变(可以指定该跳变是上升沿还是下降沿)。定时器捕捉到特定的沿跳变后,把计数寄存器当前的值锁存到通道寄存器。ECT模块有8个IC通道分别为IC0-IC7,IC0-IC3是标准的带有保持器的缓冲通道,而IC4-IC7不带有保持器。OC用程序的方法在规定的时刻输出需要的电平,实现对外部电路的控制。通道为OC0-OC7。ECT模块的外部引脚:共有8个外部引脚,分别为IOC0IOC7,与PORTT复用。,7-3 增强型定时器ECT模块,ECT 模块结构,一个16位向上带可编程预分频的主计数器.一个16位的带可

15、编程预分频的模数向下计数器8个独立的定时器通道,每个通道具备输入捕捉和输出比较功能4个8位脉冲累加器,也可设置成2个16位脉冲累加器.通过对寄存器编程可以实现不同的功能,定时器结构,预分频选择 PR2:0,M Clock,1 2 4 8 16 32 64 128,TCNT,15.0,DATA BUS,PIN,R,R,R,R,1 计数器使能0 计数器禁止,TEN TSWAI TSFRZ TFFCA,TSCR1-定时器控制寄存器,RST:0 0 0 0 0 0 0 0,TCNT CLK,.,TEN,B0.B7 B8.B15,R=Reserved,$0006,Address Offset$0004,

16、05,模块时钟,计数器寄存器,脉冲累加器,计时器溢出时,对溢出标志位置位,如允许中断,则向CPU发出中断请求,定时器,预分频,计数器,寄存器:,编程步骤,用途:产生定时器溢出中断初始化设定预分频系数定时器溢出中断使能定时器使能中断函数清标志位用户自己的代码,void ECT_Init(void)TSCR2_PR=7;/prescale factor is 8,bus clock/128 TSCR2_TOI=1;/timer overflow interrupt enable TSCR1_TEN=1;/timer enablevoid interrupt 16 Int_TimerOverFlow

17、(void)TFLG2_TOF=1;/clear timer overflow flag/用户自己的代码.,定时器溢出中断例程(可在实验板上运行)#include/*common defines and macros*/#include/*derivative information*/#pragma LINK_INFO DERIVATIVE mc9s12dg128b#pragma CODE_SEG NON_BANKED/9S12中断程序必须定位于non-banked 区域interrupt 16 void Int_TimerOverFlow(void)TFLG2_TOF=1;/clear t

18、imer overflow flag/用户自己的代码 PORTA=PORTA;#pragma CODE_SEG DEFAULT/9S12中断程序必须定位于/non-banked 区域,必须有这两个pragma语句,void main(void)EnableInterrupts;TSCR2_PR0=1;TSCR2_PR1=1;TSCR2_PR2=0;/prescale factor TSCR2_TOI=1;/timer overflow interrupt enable TFLG2_TOF=1;TSCR1_TEN=1;/timer enable DDRA=0 xFF;PORTA=0 xFF;fo

19、r(;),输出比较功能,16位自由运行计数器,16位输出比较寄存器 比如设置为:0 x5678,软件可以修改,引脚控制逻辑,中断请求,CxF,状态标志位置位,当比较发生时(值相等时),CxI,中断屏蔽(通过软件使能),共有8个输出比较通道 每个通道有自己的向量表和控制寄存器,在特定的时刻输出一个信号,当比较寄存器的值和计数器的值相等时,采取行动比如:当TCNT=0 x5678,TCNT,TCx,PinOCx,比较器,相等,置位,OR,OR,清零,翻转,输出比较寄存器,C7F C6F C5F C4F C3F C2F C1F C0F,OM7,OL7,OM6,OL6,OM5,OL5,OM4,OL4,

20、1.TC7 TC0,2.TFLG1,3.TIE,4.TCTL1,比较/捕捉标志位写 1清除中断状态标志位,比较/捕捉屏蔽位 0=屏蔽中断请求 1=中断请求允许,输出模式和输出电平(O7OC0),5.TCTL2,RST:0 0 0 0 0 0 0 0,$0008,RST:0 0 0 0 0 0 0 0,RST:0 0 0 0 0 0 0 0,RST:0 0 0 0 0 0 0 0,$000C,$000E,$0009,Address Offset$0010-$0011-$001E-$001F,-,C7I C6I C5I C4I C3I C2I C1I C0I,OM3,OL3,OM2,OL2,OM1

21、,OL1,OM0,OL0,FOC7 FOC6 FOC5 FOC4 FOC3 FOC2 FOC1 FOC0,6.CFORC,B7 B6 B5 B4 B3 B2 B1 B0,RST:0 0 0 0 0 0 0 0,$0001,输出强制比较寄存器,输出比较,OC7-OC0,中断:清除中断,对TFLG1 其中的CxF写1不要使用位操作使用OC7-OC0向量表单片机复位时:自由运行计数器(TCNT)被初始化为$0000,并且被禁止 输出比较寄存器被初始化为$0000捕捉/比较引脚与比较功能断开中断被禁止标志位被清零强制比较位被清零,输出比较,通道7 OC7(1 of 2),用途:1、多个输出比较引脚的控

22、制2、通过2个输出比较来控制1个引脚,可以输出短脉冲在每个时钟周期内,输出比较寄存器7和自由运行的计数器进行比较如果它们的值相等,则:1、中断标志位被置12、输出引脚OC7-OC0的状态被改变 或/和 产生中断OC7可以影响多个引脚(OC7-OC0)当OC7和OC7-OC0某个引脚的动作有冲突时,OC7的动作将被执行,输出比较 7(2 of 2),C7I C6F C5F C4F C3F C2F C1F C0F,OC7M7 OC7M6 OC7M5 OC7M4 OC7M3 OC7M2 OC7M1 OC7M0,4.TIE 定时器中断允许使能,5.OC7M-OC7MASK,B7.B0,1-TC7-16

23、 位比较寄存器7.,RST:0 0 0 0 0 0 0 0,RST:0 0 0 0 0 0 0 0,$0002,$000C,C7F C6F C5F C4F C3F C2F C1F C0F,RST:0 0 0 0 0 0 0 0,$000E,B7.B0,2.TCNT-16-位计数器,B15.B0,RST:0.0,$0004,$05,B7.B0,3.TFLG1 标志位,OC7D7 OC7D6 OC7D5 OC7D4 OC7D3 OC7D2 OC7D1 OC7D0,6.OC7D-OC7DATA,RST:0 0 0 0 0 0 0 0,$0003,B7.B0,OC7MASK 根据寄存器的设置,可以控制

24、任意一路或全部输出比较引脚,OC7DATA 当OC7比较事件发生时,引脚的逻辑电平,定时器溢出时电平翻转,TOV7 TOV6 TOV5 TOV4 TOV3 TOV2 TOV1 TOV0,TOVx 定时器溢出时,电平翻转只有当通道被配置成输出比较时,才有效,Address Offset$0007,RST:0.0,1.TTOV-定时器溢出时电平翻转寄存器,$000D,2.TSCR2 定时器系统控制寄存器,RST:0 0 0 0 0 0 0 0,B7.B0,TOI 0 0 0 TCRE PR2 PR1 PR0,1 定时器由 OC7 比较事件发生来复位0 定时器自由运行,输入捕捉,IC7-IC0(1

25、of 3),用途:1、测量事件发生的间隔时间2、对实时时间进行响应输入捕捉能感应到引脚上的电平的变化如果发现电平变化,则:1、计数器的值被保存到到输入捕捉寄存器中,状态标志位被置12、如果中断允许,则向CPU发出中断请求,ABS 应用举例,PT0,PT1,PT2,SENSOR 1,SENSOR 2,SENSOR 3,SENSOR 4,PB1,PB2,PB3,PB4,BRAKE,FLUID,PUMP,SYSTEM,SIGNALCONDITIONINGLOGIC,IC/PA,SIGNALCONDITIONINGLOGIC,SIGNALCONDITIONINGLOGIC,SIGNALCONDITIO

26、NINGLOGIC,PT3,左前轮 右前轮 左后轮右后轮,HCS12,TIMER,定时器输入捕捉测量车轮转速 发送命令到刹车压力调节阀来调节压力,IC/PA,IC/PA,IC/PA,如果左右轮速脉冲周期不等,则,调节电磁阀,输入捕捉功能,比较/捕捉 单元16位自由运行计数器,16位输入捕捉锁存器,捕捉发生时,状态位置1,向CPU发出中断请求,Edge,沿选择检测,ICx,CxF,CxI,上升/下降沿,可选中断屏蔽,当外部事件发生时,或外部信号输入发生变化时,记录当前时间,TCNT,TCx,延时计数器,0 0 0 0 0 0 DLY1 DLY0,Bit 7 6 5 4 3 2 1 0,DLYCT

27、 延时计数器控制寄存器,DLY1:0-Delay Counter Values 00=Disabled 01=256 M Clocks 10=512 M Clocks 11=1024 M Clocks,Address Offset$0029,注:如果输入信号电平和跳变之前的电平相反时,延时计数器在当前时钟计数时刻产生一个脉冲,它用来去除噪声,OR,OR,应用:ABS 刹车.雷达测距,发动机,引脚,共有8个输入捕捉通道 每个通道有自己的向量表和控制寄存器,输入捕捉,IC7-IC0(2 of 3),B2,B1,B0,EDGxB,输入捕捉沿控制(IC7IC0),EDGxA,ICx EDGE,0101

28、,无边沿 ICx 禁止上升沿下降沿任何沿,4.TCTL3,C7F C6F C5F C4F C3F C2F C1F C0F,C7I C6I C5I C4I C3I C2I C1I C0I,2.TFLG1,3.TIE,1.TC7 TC0,EDG7B EDG7A EDG6B EDG6A EDG5B EDG5A EDG4B EDG4A,5.TCTL4,EDG3B EDG3A EDG2B EDG2A EDG1B EDG1A EDG0B EDG0A,RST:0 0 0 0 0 0 0 0,RST:0 0 0 0 0 0 0 0,RST:0 0 0 0 0 0 0 0,RST:0 0 0 0 0 0 0 0

29、,$000E,$000C,$000A,$000B,Address Offset$0010-$0011-$001E-$001F,-,比较/捕捉标志位写 1清除中断状态标志位,比较/捕捉屏蔽位 0=屏蔽中断请求 1=中断请求允许,0011,增强型捕捉,ECT比标准的TIM增强的特点 4个输入捕捉通道有16位缓冲寄存器 4个8位/2个16位脉冲累加器 16位带4位预分频的模数向下计数器 4个用户选择的延时计数器用来消除噪声 主定时器预分频扩展至7位 队列和锁定模式,主定时器,输入捕捉寄存器,保持寄存器,输入捕捉/输出比较选择,IOS7 IOS6 IOS5 IOS4 IOS3 IOS2 IOS1 IO

30、S0,TIOS 定时器输入捕捉/输出比较选择寄存器,IOSx=1 输出比较功能=0 输入捕捉功能,RST:0 0 0 0 0 0 0 0,$0000,TIMER 定时器使能1 计数器使能0 计数器禁止,TSCR1 定时器系统控制寄存器,RST:00,$0006,TEN TSWAI TSFRZ TFFCA Reserved,TSWAI 在WAIT模式时,定时器停止 0=不停止 1=停止,TSBCK 在DEBUG模式时,定时器停止 0=不停止 1=停止,TFFCA 定时器快速标志位清除使能 0=定时器标志位正常清零 1=输入捕捉时读取寄存器,输出比较时写寄存器,可以对相应通道标志位清零,脉冲累加模

31、式,8 位计数器,PAI,脉冲累加器输入引脚,事件计数模式引脚作为计数器时钟软件选择以什么沿来计数计数器溢出时,产生中断(可选),8 位计数器,PAI,脉冲累加器输入引脚,时间累加模式引脚作为计数器,软件选择主动电平作为门的输入当计数器溢出时产生中断在使能的引脚上后面的边缘时产生中断,自由运行E/64时钟,PACNT,PACNT,对事件计数模式,PEDGE 选择哪个PAI的沿用来增加 PACNT寄存器,对门累加模式,PEDGE选择哪个PAI 状态用来禁止计数(比如.PEDGE=1-禁止计数 当PAI=HI).,脉冲累加结构,PIN,TCx PIN Logic,DIV by 64,Control

32、 Reg.,+,8/16 BIT CNTR,Holding Register,POLARITYCONTROL,PTx,IRQ,DATABUS,注 1:PTx 可以被用作脉冲累加,输入捕捉或输出比较这里 PTx=PT0-PT3,SELECTED CLOCK,DelayCounter,EdgeDetector,0 0 0 0 0 0 DLY1 DLY0,Bit 7 6 5 4 3 2 1 0,DLYCT-Delay Counter Control Register,DLY1:0-Delay Counter Values 00=Disabled 01=256 M Clocks 10=512 M Cl

33、ocks 11=1024 M Clocks,Address Offset$0029,注:如果输入信号电平和跳变之前的电平相反时,延时计数器在当前时钟计数时刻产生一个脉冲,它用来去除噪声,模向下计数器,二进制向下计数器.可以完全控制计数起始值 应用于精确事件计时-用于产生周期性的标志位和中断主定时器单独运行。时钟来自总线时钟,并经过预分频。可以被设置为定时中断或产生标志位。或装载初始值后向下计数到$0000。,装载,向下计数至0,执行动作,MCCNT:模数减法计数寄存器,MCCTL:16位模数减法计数控制寄存器,MCZI:模数计数器减法溢出中断允许:0=禁止中断。1=允许中断。,MODMC:模数

34、模式允许:0=计数器从写入的数值计数一次到$0000。1=允许模数模式。当计数器计到$0000时,则重新装入最新写入的计数值重新进行计数。,RDMCL:模数计数器读取选择寄存器:0=对计数器读操作,返回当前的计数数值。1=对计数器读操作,返回预先加载的数值。,ICLAT:输入捕捉强制锁存,FLMC:强制把装载寄存器中的值送入模数计数寄存器中,MCEN:模数减法计数器允许:0=禁止。1=允许。,MCPR1、MCPR0:模数计数器预分频因子设置,MCFLG:16位模数减法计数器标志寄存器,MCZF:模数计数器减法溢出标志位当计数器减法计数到$0000时,此位被置一。对这位人工置一可以进行清零,写零

35、无效。当TSCR寄存器中的TFFCA位被置位时,对MCCNT寄存器的任何访问将使MCZF标志清零。POLF3-POLF0:第一次输入捕捉极性状态位POLF3-POLF0是只读的,对它们进行写操作无效。这四位指示了引起输入捕捉操作的边沿极性。POLF3-POLF0分别对应了PORT3-PORT0的输入。0=第一次输入捕捉由下降沿触发。1=第一次输入捕捉由上升沿触发。,/利用模数减法计数器进行定时#include/*common defines and macros*/#include/*derivative information*/#pragma LINK_INFO DERIVATIVE mc

36、9s12dg128bunsigned int count1=0;#pragma CODE_SEG NON_BANKED/9S12中断程序必须定位/于non-banked 区域void interrupt 26 MDC_ISR(void)MCFLG=0 x80;/清中断标志位 count1+;if(count1=20)/1s闪烁一次 PORTA=PORTA;count1=0;#pragma CODE_SEG DEFAULT/9S12中断程序必须定位于non-/banked 区域,必须有这两个pragma语句,void SET_PLL(void)/总线时钟频率为8MHz CLKSEL=0 x00;

37、PLLCTL=0 xe1;SYNR=3;/PLLCLK=2*OSCCLK*(SYNR+1)/(REFDV+1)=16MHz/实验板上OSCCLK4MHz REFDV=1;PLLCTL=0 x60;asm NOP;asm NOP;asm NOP;while(CRGFLG/选定PLL时钟,Bus Clock=PLLCLK/2=8MHz,void main(void)SET_PLL();MCCTL=0 xDF;/设定模数减法计数器工作方式,中断使能,计数器使能/分频系数为16 MCCNT=25000;/定时器赋初值(1/8M)*16*25000=50ms EnableInterrupts;/开中断

38、DDRA=0 xFF;PORTA=0 xFF;for(;),定时器低功耗模式,TSCR 定时器系统控制寄存器,RST:00,$0006,TEN TSWAI TSFRZ TFFCA Reserved,TSWAI 在WAIT模式时,定时器停止 0=不停止 1=停止,TSBCK 在DEBUG模式时,定时器停止 0=不停止 1=停止,TFFCA 定时器快速标志位清除使能 0=定时器标志位正常清零 1=输入捕捉时读取寄存器,输出比较时写寄存器,可以对相应通道标志位清零,1 计数器使能0 计数器禁止,三个例子,举三个例子讲述本节内容(定时器模块寄存器太多,逐个讲解太费时间,效果也不好)流水灯显示使用输入捕

39、捉功能,对外来脉冲进行计数使用输出比较功能,输出一个具有一定宽度的高电平脉冲,void TimerOverflow(void)unsigned char i=1,j=0 x80;while(i!=0),流水灯的显示,PORTA输出,调用函数,设置控制寄存器1,设置控制寄存器2,延时控制,这个可在实验板上运行,ECT控制寄存器一(TSCR1),本例设置TSCR1=0 x80。TEN=1:主定时器使能。0=主定时器禁止,进入低功耗状态。TSWAI=0:等待模式时主定时器继续工作,方便调试。0=停止工作。TSFRZ=0:冻结模式时主定时器继续工作。0=停止工作。TFFCA=0:自动清除标志位。1=手

40、动清除。必须设置TSCR1才可以使主定时器工作,需要在ECT模块初始化时就设置好。,ECT控制寄存器二(TSCR2),TOI:0禁止定时器溢出中断。1=允许。本例设置TOI=0。TCRE:定时计数器复位允许。0=禁止复位,计数器自由计数。1=允许复位。本例设置TCRE=0。PR2、PR1、PR0:预分频因子选择本例设置PR2=1、PR1=1、PR0=1:分频系数=27=128。,总线时钟(Bus Clock)频率是多少?见课件“第3章 MC9S12单片机的内核及片上资源.ppt”第31和32页。,ECT计数寄存器(TCNT),TCNT为自由计数器的计数值,本例通过读取它的值实现延时。这是一个1

41、6位的寄存器,最大值为65535。while(TCNT!=0 x0000);while(TCNT=0 x0000);这两句的含义是:TCNT开始计数后值不为0,等待直到TCNT溢出返回0,然后再等到TCNT不为0。为什么要弄两个while?,例二:输入捕捉,利用输入捕捉0通道对外来的方波信号进行捕捉,采用中断的形式。中断发生后,读取捕捉后的计数值,并通过PORTB口使LED灯点亮以指示中断成功。通道0设置为输入捕捉,采用双沿触发(上下沿均触发),IC0开中断,可以进入中断服务程序。方波信号由PORTA_BIT6产生,PORTA_BIT6和IOC0硬件连接。,例二:输入捕捉,IC0的初始化:vo

42、id ic_init(void)TSCR1=0 x90;/主定时器使能 TSCR2=0 x07;/分频因子=128 ICSYS=0 x02;/IC缓冲使能 TIOS=0;/通道设置为输入捕获TCTL4=0 xff;/采用上升、下降沿触发 TIE=0b00000001;/通道0开中断本例使用了例一未使用过的寄存器:ICSYS、TIOS、TCTL4和TIE。,输入控制系统寄存器-ICSYS,SHxy=0:正常操作。1=x通道和y通道将产生一样的输入动作,x通道的设置同样适用于y。TFMOD=0:只要产生正确的输入捕获事件,TFLG1中的CxF位就置一。1=队列模式时才使用。PACMX=0:8位脉冲

43、累加器溢出后自动回0。1=不自动回0,停留在0XFF。脉冲累加器对IC通道捕获的有效边沿数量进行计数。BUFEN=1:使用输入捕获缓冲区。0=不使用。LATQ=0:输入捕获队列模式使能。产生一次成功的输入捕获时,IC通道寄存器中保留的计数值会被送到保持器中,然后IC寄存器会接收新的计数值。1=锁存模式使能。,IC/OC通道选择寄存器-TIOS,TIOS=0:设置相应的通道为输入捕获。IOSx:1=通道x为输出比较;0=通道x为输入捕获。,控制寄存器3/4 TCTL3/4,EDGnA/B:输入捕捉边沿控制。本例设置EDG0A=1,EDG0B=1。即IC0通道采用上升,下降沿都触发。,n代表通道序

44、号。,定时器中断使能寄存器-TIE,CxI:1=第x个通道中断允许;0=第x个通道中断禁止。本例设置C0I=1,把通道0的中断打开,这样能够使外部信号引发IC0中断,并进入相应的服务程序进行处理。,例二:输入捕捉,初始化,需要在main函数中调用初始化函数ic_init()。以下是在main函数中,如何使用PORTA_BIT6来产生一个方波信号。DDRA=0 xff;/设置PORTA的方向寄存器,为输出PORTA=0 x00;/PORTA的输出初始化为低电平DDRB=0 xff;/PORTB设置为LED灯的控制信号PORTB=0 xff;/LED全灭for(;)for(i=0;i6000;i+

45、)PORTA_BIT6=1;/循环中设置信号为高电平for(i=0;i6000;i+)PORTA_BIT6=0;/循环中设置信号为低电平,产生方波,例二:输入捕捉,方波信号已经成功得产生了,下面是中断服务程序:void interrupt 8 ic0_int(void)TFLG1_C0F=1;/中断标志清除ic4=TC0;/通过读TC0寄存器来响应中断,ic4PORTB=0 x55;/用LED灯来指示已经进入了中断/*以下放置其他代码*/,TFLG1:主定时器中断寄存器1,TFLG1指示了中断发生在哪个通道,需要对相应位清零时,可以对它进行置一操作。C7F-C0F:IC/OC的中断标志。,TC

46、x:定时器输入捕捉和输出比较寄存器0-7,TC0-TC7寄存器用来锁存自由计数计数器的值,当得到有效的边沿触发时,我们可以通过读这些寄存器来获得输入捕捉计数值;通过写这些寄存器来设置输出比较的计数值。任意时刻可读。在输出比较模式任何时刻可写。在输入捕捉模式对寄存器的写操作没有意义。当寄存器复位后,寄存器值等于$0000。,例三:输出比较,这里讲一个输出比较例子,目的是通过OC0通道输出一个有一定宽度的脉冲。,OC0的初始化:void oc_init()TSCR2=0 x07;/128分频,定时器溢出中断禁止TIOS=0 xff;/所有通道作为输出比较通道TIE=0 x00;/中断全部禁止TSC

47、R1=0 x90;/主定时器使能TCTL2=0 xaa;/OC0输出电平为低电平CFORC=0 xff;/强制输出比较,例三:输出比较,void main(void)EnableInterrupts;oc_init();/初始化函数调用asm_main();TCTL2_OM0=1;TCTL2_OL0=1;/OC0输出电平为高电平CFORC_FOC0=1;/OC0强制输出比较TC0=TCNT+40000;/设置脉冲宽度,在自由计数器TCNT的基础上加上脉冲宽度的计数值TCTL2_OM0=1;TCTL2_OL0=0;/OC0输出电平为低电平for(;)/*其他代码*/,强制输出比较寄存器-CFORC,FOCxx通道强制输出比较在相应的寄存器位写入强制输出比较命令,会立即使相应的通道处于输出比较状态。,定时器控制寄存器1/2TCTL1/2,OMn:输出模式 OLn:输出等级这8 对控制位是用来指定输出比较的输出动作的,当OMn 和OLn 二者任意一个为1 时,OCn 对应的端口会有相应的输出。,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号