第7章 IO接口及增强型捕捉定时器模块_第1页
第7章 IO接口及增强型捕捉定时器模块_第2页
第7章 IO接口及增强型捕捉定时器模块_第3页
第7章 IO接口及增强型捕捉定时器模块_第4页
第7章 IO接口及增强型捕捉定时器模块_第5页
已阅读5页,还剩71页未读 继续免费阅读

下载本文档

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

文档简介

实验内容

实验4:掌握9S12单片机IO口的基本程序调试,学会使用BDM和实际实验系统编程下载:事先看一下实验板原理图和《CodeWarriorV5.0开发环境快速入门-工程创建for9S12DG128B.doc》或《CodeWarriorV5.0开发环境快速入门-工程创建for9S12XDT512等.doc》(一部分同学的实验板是带协处理器的9S12XDT512或DP512等),拿到实验板后先看一下板上单片机的型号。

1.编写并实现LED排灯(D2~D10)显示程序,实现花灯显示,即01010101和10101010动态显示(0表示灯灭,1表示灯亮);

2.编写并实现LED排灯(D2~D10)显示程序,分别实现从左向右逐个点亮和从右到左逐个点亮的流水灯显示;

3.编写并实现LED排灯(D2~D10)显示程序,实现按键与LED的关联,即4个按键S3~S6控制4个LED灯,按键按下相应的灯亮,松开相应的灯灭。要求1.用到延时的地方需用软件延时实现。

2.有完整的程序和注释,并最后总结实现原理。实验5:掌握9S12单片机ECT模块的使用方法要求1.描述什么是输入捕捉和输出比较,描述9S12单片机ECT模块主要寄存器设置;

2.用ECT模块延时代替实验6中用到的软件延时,实现实验6中的各种LED排灯(D2~D10)显示效果;

3.要有完整的程序和注释,并最后总结实现原理。实验6:掌握9S12单片机实现数码管显示要求1.在四位数码管上循环显示0~F共16个数中的某连续四位,如下图所示;

2.程序中需要延时的地方用软件延时实现;

3.要有完整的程序和注释,并最后总结实现原理。0123456789ABCDEF实验7:掌握9S12单片机实现数码管显示要求1.在四位数码管上循环显示0~F共16个数中的某连续四位,如下图所示;

2.程序中需要延时的地方用ECT模块延时实现;

3.要有完整的程序和注释,并最后总结实现原理。0123456789ABCDEF实验8:掌握9S12单片机AD和显示综合编程与调试要求1.实验板上单片机AD模块的AN15引脚接了可调电位器RV1(见实验板原理图),要求实现对可调电位器上的电压进行AD转换(10位精度),并对采样结果进行数字滤波,即对采样多次(如10次)的结果排序并掐头去尾求平均值,将滤波后的结果(转换成十进制)送四位数码管显示;

2.调节可调电位器,观察数码管显示变化规律;

3.要有完整的程序和注释,画出程序流程图并最后总结实现原理。AD采样数字滤波第七章IO接口及增强型捕捉定时器模块

§7-1通用I/O接口§7-2I/O接口的功能及设置方法

§7-3增强型定时器ECT模块内容提要:§7-1通用I/O接口I/O检测控制PORTA、PORTB、PORTE和PORTK在芯片处于扩展方式下被用作总线信号PORTT、PORTP、PORTS、PORTM、PORTJ和PORTH被集成在端口集成模块(PIM)内,与片内其他功能模块的引脚复用并行I/O口复用模块PORTJCAN4,I2C模块PORTPSPI1,PWM模块PORTMCAN0,CAN1,CAN4,SPI0模块PORTTECT模块PORTSSCI模块PORTADATD模块MC9S12DG128单片机并行I/O的复用功能

§7-2I/O接口的功能及设置方法

通用I/O接口一般可以设置输入输出、驱动能力、内部上拉或下拉电阻、中断输入等功能,每个I/O接口都有各自的寄存器。数据寄存器:并行I/O接口都有数据寄存器进行数据的读取和发送

并行I/O口

数据寄存器

PORTAPORTAPORTBPORTBPORTEPORTEPORTJPTJ(PortJI/ORegister:可读写),PTIJ(PortJInputRegister:只读)PORTPPTP,PTIP(意义类上)PORTMPTM,PTIM(意义类上)PORTTPTT,PTIT(意义类上)PORTSPTS,PTIS(意义类上)PORTHPTH,PTIH(意义类上)PORTADPORTADPortJI/ORegister(PTJ)Read:Anytime.Write:Anytime.IfthedatadirectionbitsoftheassociatedI/Opinsaresetto1,areadreturnsthevalueoftheportregister,otherwisethevalueatthepinsisread.PortJInputRegister(PTIJ)Read:Anytime.Write:Never,writestothisregisterhavenoeffect.Thisregisteralwaysreadsbackthestatusoftheassociatedpins.Thiscanbeusedtodetectoverloadorshortcircuitconditionsonoutputpins.方向寄存器

MC9S12单片机中的I/O接口除了PORTAD只可作为输入口外,一般都是双向并行口,因此都配置了一个方向寄存器“DDRx”,I/O接口每个引脚的输入输出方向由各方向寄存器的对应位来设置。方向寄存器的某位为“0”表示相应的引脚为输入引脚;为“1”表示相应的引脚为输出引脚。并行I/O口

方向寄存器

特点

PORTADDRA--PORTBDDRB--PORTEDDRE低2位只能作输入

PORTJDDRJ高2位有效

PORTPDDRP--PORTMDDRM--PORTTDDRT--PORTSDDRS--PORTHDDRH--PORTAD--只作输入口

驱动控制寄存器

MC9S12单片机可以设置I/O接口的驱动能力,当I/O接口为输出口时此功能有效。此寄存器的相应位为“1”,则表示全额驱动能力;为“0”,则表示缩减驱动能力,后者的驱动能力是前者的三分之一。并行I/O口

驱动控制寄存器

特点

PORTARDRIV.BIT01bit控制整个I/O口

PORTBRDRIV.BIT11bit控制整个I/O口

PORTERDRIV.BIT41bit控制整个I/O口

PORTJRDRJ--PORTPRDRP--PORTMRDRM--PORTTRDRT--PORTSRDRS--PORTHRDRH--PORTAD----拉电阻控制寄存器

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

拉电阻控制寄存器

极性选择寄存器

特点

PORTAPUCR.BIT0--(只能使用上拉)

1bit控制整个I/O口

PORTBPUCR.BIT1--(只能使用上拉)

1bit控制整个I/O口

PORTEPUCR.BIT4--(只能使用上拉)

1bit控制整个I/O口

PORTJPERJ--(只能使用上拉)

--PORTPPERP--(只能使用上拉)

--PORTMPERMPPSM--PORTTPERTPPST--PORTSPERSPPSS--PORTHPERHPPSH--PORTAD------中断允许、标志寄存器

MC9S12单片机的I/O接口PORTJ、PORTP、PORTH。具有中断功能,可以通过软件编程来允许或禁止。相应位为“1”表示允许中断,“0”表示禁止中断。具有中断能力的I/O口都有各自的中断标志寄存器。对应位为“1”表示有中断发生,“0”表示无中断发生。另外,还有中断边沿选择寄存器,相应位为“1”表示上升沿中断,“0”表示下降沿中断。当检测到有效中断边沿时,中断标志寄存器PIFJ相应位被置一,产生中断并进入相应的中断服务程序。并行I/O口

中断使能寄存器

中断标志寄存器

边沿选择寄存器

PORTJPIEJPIFJPPSJPORTPPIEPPIFPPPSPPORTHPIEHPIFHPPSH课本6.1.2程序举例8缓冲器#include<hidef.h> #include<mc9s12dg128.h> voidinterrupt24PJI(void); /*声明中断函数*/

voidmain(void){

EnableInterrupts; DDRJ=0x00; /*PORTJ作为输入*/

DDRB=0xFF; /*PORTB作为输出*/

PORTB=0xff; /*灯全灭*/

DDRA=0xff;/*PORTA输出*/

PORTA=0x00;/*PORTA全为低电平*/

PPSJ=0xff;/*上升沿中断*/

PIEJ=0xff;/*中断使能*/

for(;;){PORTA=0b11000000;/*产生中断*/}

}

#pragmaCODE_SEGNON_BANKEDvoidinterrupt24PJI(void)/*中断服务程序,中断向量号为24*/

{PORTB=0xf0;/*LED灯高四灭,低四亮*/}

#pragmaCODE_SEGDEFAULT//9S12中断程序必须定位于non-

//banked区域,必须有这两个pragma语句课本6.1.2程序说明使用PORTJ口的中断功能。设置PORTA口为输出口,PORTA的第6脚和PORTJ的第6脚硬件相连,PORTB为输出口,用来控制8个LED灯,PORTJ开中断,并且设置为上升沿触发。首先PORTA初始化为0,PORTB为0xff,此时LED灯全灭。在循环中设置PORTA第6位为高电平,产生中断,在中断服务程序中设置LED灯低4位亮,高4位不亮,表示已经进入中断。如何得知中断向量号?……向量号0向量号1向量号24依次向下数中断向量表(书上有)本课程实验板原理图见pdf文件另参考“实验板上所用芯片”中的文档前面那个例程不适用本课程实验板让实验板上的小灯(D10~D2)循环点亮#include<hidef.h>/*commondefinesandmacros*/#include<mc9s12dg128.h>/*derivativeinformation*/#pragmaLINK_INFODERIVATIVE"mc9s12dg128b"voiddeley(unsignedintd){inti;for(i=0;i<d;i++){};}voidmain(void){/*putyourowncodehere*/unsignedchard;EnableInterrupts;DDRA=0xFF;PORTA=0xFF;deley(60000);d=0x80;for(;;){PORTA=d;deley(60000);d>>=1;if(d==0)d=0x80;}for(;;){}/*waitforever*//*pleasemakesurethatyouneverleavethisfunction*/}该程序也可写成如下:#include<hidef.h>/*commondefinesandmacros*/#include<mc9s12dg128.h>/*derivativeinformation*/#pragmaLINK_INFODERIVATIVE"mc9s12dg128b"#definePortA*((volatileunsignedchar*)0)#defineDdrA*((volatileunsignedchar*)2)voiddeley(unsignedintd){inti;for(i=0;i<d;i++){};}voidmain(void){unsignedchard;EnableInterrupts;DdrA=0xFF;PortA=0xFF;deley(60000);d=0x80;for(;;){PortA=d;deley(60000);d>>=1;if(d==0)d=0x80;}for(;;){}/*waitforever*/}IC/OC的定义:InputCapture/OutputCompare输入捕捉和输出比较IC—用来监测外部的事件和输入信号。当外部事件发生或信号发生变化时,在指定的输入捕捉引脚发生一个指定的沿跳变(可以指定该跳变是上升沿还是下降沿)。定时器捕捉到特定的沿跳变后,把计数寄存器当前的值锁存到通道寄存器。ECT模块有8个IC通道分别为IC0-IC7,IC0-IC3是标准的带有保持器的缓冲通道,而IC4-IC7不带有保持器。OC—用程序的方法在规定的时刻输出需要的电平,实现对外部电路的控制。通道为OC0-OC7。ECT模块的外部引脚:共有8个外部引脚,分别为IOC0—IOC7,与PORTT复用。§7-3增强型定时器ECT模块ECT模块结构一个16位向上带可编程预分频的主计数器.一个16位的带可编程预分频的模数向下计数器8个独立的定时器通道,每个通道具备输入捕捉和输出比较功能4个8位脉冲累加器,也可设置成2个16位脉冲累加器.通过对寄存器编程可以实现不同的功能定时器结构预分频选择

PR[2:0]MClock1248163264128TCNT15...........................................0DATABUSPINRRRR1–计数器使能0–计数器禁止TENTSWAITSFRZTFFCATSCR1-定时器控制寄存器RST:00000000TCNTCLK.TENB0.......……...B7B8……..........B15R=Reserved$0006AddressOffset$0004,05$FFFE$FFFF$0000*******************TOF模块时钟计数器寄存器脉冲累加器计时器溢出时,对溢出标志位置位,如允许中断,则向CPU发出中断请求定时器,预分频,计数器寄存器:1.TCNT16位自由运行/模计数器B15............................................................................................................................…B0RST:0........................................................................................................................0AddressOffset$0004,$00051–定时器溢出中断使能0–定时器中断禁止$000D3.TSCR2RST:000000001–定时器由OC7比较符合时复位0–定时器自由运行TCRE-允许使用PWM功能B7....................................................................................B0TOI000TCREPR2PR1PR02.TFLG2定时器溢出标志位,写‘1’清零TOF0000000B7......................................................................B0RST:00000000$000F标志寄存器除以1248163264128000011110101010100110011PR2PR1PR0预分频系数选择编程步骤用途:产生定时器溢出中断初始化设定预分频系数定时器溢出中断使能定时器使能中断函数清标志位用户自己的代码voidECT_Init(void){TSCR2_PR=7;//prescalefactoris8,busclock/128TSCR2_TOI=1;//timeroverflowinterruptenableTSCR1_TEN=1;//timerenable}voidinterrupt16Int_TimerOverFlow(void){TFLG2_TOF=1;//cleartimeroverflowflag//用户自己的代码

…………….}定时器溢出中断例程(可在实验板上运行)#include<hidef.h>/*commondefinesandmacros*/#include<mc9s12dg128.h>/*derivativeinformation*/#pragmaLINK_INFODERIVATIVE"mc9s12dg128b"#pragmaCODE_SEGNON_BANKED//9S12中断程序必须定位于non-banked区域interrupt16voidInt_TimerOverFlow(void){TFLG2_TOF=1;//cleartimeroverflowflag//用户自己的代码

PORTA=~PORTA;}#pragmaCODE_SEGDEFAULT//9S12中断程序必须定位于//non-banked区域,必须有这两个pragma语句voidmain(void){EnableInterrupts;TSCR2_PR0=1;TSCR2_PR1=1;TSCR2_PR2=0;//prescalefactorTSCR2_TOI=1;//timeroverflowinterruptenableTFLG2_TOF=1;TSCR1_TEN=1;//timerenableDDRA=0xFF;PORTA=0xFF; for(;;) { }}输出比较功能16位自由运行计数器16位输出比较寄存器比如设置为:0x5678,软件可以修改引脚控制逻辑中断请求CxF状态标志位置位,当比较发生时(值相等时)CxI中断屏蔽(通过软件使能)•共有8个输出比较通道•每个通道有自己的向量表和控制寄存器•在特定的时刻输出一个信号当比较寄存器的值和计数器的值相等时,采取行动比如:当TCNT=0x5678TCNTTCxPinOCx比较比较器相等置位OROR清零翻转输出比较寄存器C7FC6FC5FC4FC3FC2FC1FC0FOM7OL7OM6OL6OM5OL5OM4OL41.TC7–TC02.TFLG13.TIE4.TCTL1

比较/捕捉标志位写‘1’清除中断状态标志位

比较/捕捉屏蔽位

0=屏蔽中断请求

1=中断请求允许OMXOLXActiononOCx00110101NoActionOCxToggleOCxDriveOCxLODriveOCxHI输出模式和输出电平(O7–OC0)B6B5B4B3B7B2B1B05.TCTL2B6B5B4B3B7B2B1B0RST:00000000$0008RST:00000000RST:00000000RST:00000000$000C$000E$0009AddressOffset$0010-$0011--$001E-$001F16位捕捉/比较寄存器(TC7)16位捕捉/比较寄存器(TC0)--C7IC6IC5IC4IC3IC2IC1IC0IB6B5B4B3B7B2B1B0OM3OL3OM2OL2OM1OL1OM0OL0B6B5B4B3B7B2B1B0FOC7FOC6FOC5FOC4FOC3FOC2FOC1FOC06.CFORCB7B6B5B4B3B2B1B0RST:00000000$0001输出强制比较寄存器输出比较,OC7-OC0中断: 清除中断,对TFLG1其中的CxF写’1’不要使用位操作使用OC7-OC0向量表单片机复位时:自由运行计数器(TCNT)被初始化为$0000,并且被禁止输出比较寄存器被初始化为$0000捕捉/比较引脚与比较功能断开中断被禁止标志位被清零强制比较位被清零输出比较,通道7OC7(1of2)用途:1、多个输出比较引脚的控制2、通过2个输出比较来控制1个引脚,可以输出短脉冲在每个时钟周期内,输出比较寄存器7和自由运行的计数器进行比较如果它们的值相等,则:1、中断标志位被置12、输出引脚OC7-OC0的状态被改变或/和产生中断OC7可以影响多个引脚(OC7-OC0)当OC7和OC7-OC0某个引脚的动作有冲突时,OC7的动作将被执行

输出比较7(2of2)C7IC6FC5FC4FC3FC2FC1FC0FOC7M7OC7M6OC7M5OC7M4OC7M3OC7M2OC7M1OC7M04.TIE–定时器中断允许使能5.OC7M-OC7MASKB7.............................................................................................B01-TC7-16位比较寄存器7.RST:00000000RST:00000000$0002$000CC7FC6FC5FC4FC3FC2FC1FC0FRST:00000000$000EB7.............................................................................................B02.TCNT-16-位计数器B15...............................................................................................................................................................B0RST:0..................................................................................................................................................0$0004,$05B7.............................................................................................B03.TFLG1–标志位OC7D7OC7D6OC7D5OC7D4OC7D3OC7D2OC7D1OC7D06.OC7D-OC7DATARST:00000000$0003B7.............................................................................................B0OC7MASK根据寄存器的设置,可以控制任意一路或全部输出比较引脚OC7DATA当OC7比较事件发生时,引脚的逻辑电平定时器溢出时电平翻转TOV7TOV6TOV5TOV4TOV3TOV2TOV1TOV0TOVx–定时器溢出时,电平翻转只有当通道被配置成输出比较时,才有效AddressOffset$0007RST:0……………….…..01.TTOV-定时器溢出时电平翻转寄存器$000D2.TSCR2–定时器系统控制寄存器RST:00000000B7.....................................……………..............................................B0TOI000TCREPR2PR1PR01–定时器由OC7比较事件发生来复位0–定时器自由运行输入捕捉,IC7-IC0(1of3)用途:1、测量事件发生的间隔时间2、对实时时间进行响应输入捕捉能感应到引脚上的电平的变化如果发现电平变化,则:1、计数器的值被保存到到输入捕捉寄存器中,状态标志位被置12、如果中断允许,则向CPU发出中断请求ABS应用举例PT0PT1PT2SENSOR1SENSOR2SENSOR3SENSOR4PB1PB2PB3PB4BRAKEFLUIDPUMPSYSTEMSIGNALCONDITIONINGLOGICIC/PASIGNALCONDITIONINGLOGICSIGNALCONDITIONINGLOGICSIGNALCONDITIONINGLOGICPT3左前轮右前轮

左后轮右后轮HCS12TIMER定时器输入捕捉测量车轮转速发送命令到刹车压力调节阀来调节压力IC/PAIC/PAIC/PA如果左右轮速脉冲周期不等则调节电磁阀输入捕捉功能比较/捕捉单元16位自由运行计数器16位输入捕捉锁存器捕捉发生时,状态位置1向CPU发出中断请求Edge沿选择检测ICxCxFCxI上升/下降沿可选中断屏蔽当外部事件发生时,或外部信号输入发生变化时,记录当前时间TCNTTCx延时计数器000000DLY1DLY0Bit76543210DLYCT–延时计数器控制寄存器DLY[1:0]-DelayCounterValues00=Disabled01=256MClocks10=512MClocks11=1024MClocksAddressOffset$0029注:如果输入信号电平和跳变之前的电平相反时,延时计数器在当前时钟计数时刻产生一个脉冲,它用来去除噪声OROR16位保持寄存器应用:ABS刹车.雷达测距,发动机引脚•共有8个输入捕捉通道•每个通道有自己的向量表和控制寄存器输入捕捉,IC7-IC0(2of3)B2B1B0EDGxB

输入捕捉沿控制(IC7–IC0)EDGxAICxEDGE0101无边沿–ICx禁止上升沿下降沿任何沿4.TCTL3C7FC6FC5FC4FC3FC2FC1FC0FC7IC6IC5IC4IC3IC2IC1IC0I2.TFLG13.TIE1.TC7–TC0EDG7BEDG7AEDG6BEDG6AEDG5BEDG5AEDG4BEDG4A5.TCTL4EDG3BEDG3AEDG2BEDG2AEDG1BEDG1AEDG0BEDG0AB6B5B4B3B7B2B1B0RST:00000000RST:00000000RST:00000000RST:00000000B6B5B4B3B7B2B1B0B6B5B4B3B7B2B1B0B6B5B4B3B7B2B1B0$000E$000C$000A$000BAddressOffset$0010-$0011--$001E-$001F16位捕捉/比较寄存器

(TC7)16位捕捉比较寄存器(TC0)--

比较/捕捉标志位写‘1’清除中断状态标志位

比较/捕捉屏蔽位

0=屏蔽中断请求

1=中断请求允许0011增强型捕捉ECT比标准的TIM增强的特点4个输入捕捉通道有16位缓冲寄存器4个8位/2个16位脉冲累加器16位带4位预分频的模数向下计数器

4个用户选择的延时计数器用来消除噪声

主定时器预分频扩展至7位

队列和锁定模式

主定时器输入捕捉寄存器保持寄存器外部事件拷贝拷贝拷贝读取数据读取数据外部事件输入捕捉/输出比较选择IOS7IOS6IOS5IOS4IOS3IOS2IOS1IOS0TIOS–定时器输入捕捉/输出比较选择寄存器IOSx=1输出比较功能

=0输入捕捉功能RST:00000000$0000B6B5B4B3B7B2B1B0TIMER定时器使能1–计数器使能0–计数器禁止TSCR1–定时器系统控制寄存器RST:0……………0$0006TENTSWAITSFRZTFFCAReservedTSWAI–在WAIT模式时,定时器停止

0=不停止

1=停止TSBCK–在DEBUG模式时,定时器停止0=不停止

1=停止TFFCA–定时器快速标志位清除使能

0=定时器标志位正常清零

1=输入捕捉时读取寄存器,输出比较时写寄存器,可以对相应通道标志位清零脉冲累加模式8–位计数器PAI脉冲累加器输入引脚事件计数模式引脚作为计数器时钟软件选择以什么沿来计数计数器溢出时,产生中断(可选)

8位计数器PAI脉冲累加器输入引脚时间累加模式引脚作为计数器软件选择主动电平作为门的输入当计数器溢出时产生中断在使能的引脚上后面的边缘时产生中断

自由运行E/64时钟PACNTPACNT对事件计数模式,PEDGE选择哪个PAI的沿用来增加PACNT寄存器对门累加模式,PEDGE选择哪个PAI状态用来禁止计数(比如.PEDGE=1--

禁止计数当PAI=HI).脉冲累加结构PINTCxPINLogicDIVby64ControlReg.+8/16BITCNTRHoldingRegisterPOLARITYCONTROLPTxIRQDATABUS注1:PTx可以被用作脉冲累加,输入捕捉或输出比较这里PTx=PT0-PT3SELECTEDCLOCKDelayCounterEdgeDetector000000DLY1DLY0Bit76543210DLYCT-DelayCounterControlRegisterDLY[1:0]-DelayCounterValues00=Disabled01=256MClocks10=512MClocks11=1024MClocksAddressOffset$0029注:如果输入信号电平和跳变之前的电平相反时,延时计数器在当前时钟计数时刻产生一个脉冲,它用来去除噪声模向下计数器二进制向下计数器.可以完全控制计数起始值

应用于精确事件计时-用于产生周期性的标志位和中断主定时器单独运行。时钟来自总线时钟,并经过预分频。可以被设置为定时中断或产生标志位。或装载初始值后向下计数到$0000。装载向下计数至0执行动作MCCNT:模数减法计数寄存器BIT76543210RMCZIMODMCRDMCLMCENMCPR1MCPR0WICLATFLMCRESET00000000MCCTL:16位模数减法计数控制寄存器MCZI:模数计数器减法溢出中断允许:

0=禁止中断。1=允许中断。

MODMC:模数模式允许:0=计数器从写入的数值计数一次到$0000。1=允许模数模式。当计数器计到$0000时,则重新装入最新写入的计数值重新进行计数。RDMCL:模数计数器读取选择寄存器:0=对计数器读操作,返回当前的计数数值。

1=对计数器读操作,返回预先加载的数值。ICLAT:输入捕捉强制锁存FLMC:强制把装载寄存器中的值送入模数计数寄存器中MCEN:模数减法计数器允许:0=禁止。1=允许。

MCPR1、MCPR0:模数计数器预分频因子设置MCPR1MCPR0预分频因子0010141081116BIT76543210RMCZF000POLF3POLF2POLF1POLF0WRESET00000000MCFLG:16位模数减法计数器标志寄存器MCZF:模数计数器减法溢出标志位 当计数器减法计数到$0000时,此位被置一。对这位人工置一可以进行清零,写零无效。当TSCR寄存器中的TFFCA位被置位时,对MCCNT寄存器的任何访问将使MCZF标志清零。

POLF3-POLF0:第一次输入捕捉极性状态位

POLF3-POLF0是只读的,对它们进行写操作无效。这四位指示了引起输入捕捉操作的边沿极性。POLF3-POLF0分别对应了PORT3-PORT0的输入。

0=第一次输入捕捉由下降沿触发。1=第一次输入捕捉由上升沿触发。

//利用模数减法计数器进行定时#include<hidef.h>/*commondefinesandmacros*/#include<mc9s12dg128.h>/*derivativeinformation*/#pragmaLINK_INFODERIVATIVE"mc9s12dg128b"unsignedintcount1=0;#pragmaCODE_SEGNON_BANKED//9S12中断程序必须定位//于non-banked区域voidinterrupt26MDC_ISR(void){MCFLG=0x80;//清中断标志位

count1++;if(count1>=20)//1s闪烁一次

{PORTA=~PORTA;count1=0;}}#pragmaCODE_SEGDEFAULT//9S12中断程序必须定位于non-//banked区域,必须有这两个pragma语句voidSET_PLL(void)//总线时钟频率为8MHz{

CLKSEL=0x00;

PLLCTL=0xe1;

SYNR=3;//PLLCLK=2*OSCCLK*(SYNR+1)/(REFDV+1)=16MHz

//实验板上OSCCLK=4MHz

REFDV=1;

PLLCTL=0x60;

asmNOP;asmNOP;asmNOP;while((CRGFLG&0x08)==0);//时钟校正同步

CLKSEL=0x80;//选定PLL时钟,BusClock=PLLCLK/2=8MHz}voidmain(void){SET_PLL();MCCTL=0xDF;//设定模数减法计数器工作方式,中断使能,计数器使能

//分频系数为16

MCCNT=25000;//定时器赋初值(1/8M)*16*25000=50ms

EnableInterrupts;//开中断

DDRA=0xFF;PORTA=0xFF; for(;;) { }}定时器低功耗模式TSCR–定时器系统控制寄存器RST:0……………0$0006TENTSWAITSFRZTFFCAReservedTSWAI–在WAIT模式时,定时器停止

0=不停止

1=停止TSBCK–在DEBUG模式时,定时器停止0=不停止

1=停止TFFCA–定时器快速标志位清除使能

0=定时器标志位正常清零

1=输入捕捉时读取寄存器,输出比较时写寄存器,可以对相应通道标志位清零1–计数器使能0–计数器禁止三个例子举三个例子讲述本节内容(定时器模块寄存器太多,逐个讲解太费时间,效果也不好)流水灯显示使用输入捕捉功能,对外来脉冲进行计数使用输出比较功能,输出一个具有一定宽度的高电平脉冲voidTimerOverflow(void){ unsignedchari=1,j=0x80; while((i!=0)&&(j!=0)) { PORTA=(i|j); i<<=1; j>>=1;

while(TCNT!=0x0000);//延时

while(TCNT==0x0000); }}voidmain(void){ EnableInterrupts;

TSCR1=0x80;//定时器使能

TSCR2=0x07;//分频系数为128

DDRA=0xff;

PORTA=0xff;

for(;;)

{

TimerOverflow();

}}流水灯的显示PORTA输出调用函数设置控制寄存器1设置控制寄存器2延时控制这个可在实验板上运行ECT控制寄存器一(TSCR1)

本例设置TSCR1=0x80。TEN=1:主定时器使能。0=主定时器禁止,进入低功耗状态。TSWAI=0:等待模式时主定时器继续工作,方便调试。0=停止工作。TSFRZ=0:冻结模式时主定时器继续工作。0=停止工作。TFFCA=0:自动清除标志位。1=手动清除。 必须设置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。总线时钟(BusClock)频率是多少?见课件“第3章MC9S12单片机的内核及片上资源.ppt”第31和32页。ECT计数寄存器(TCNT) TCNT为自由计数器的计数值,本例通过读取它的值实现延时。这是一个16位的寄存器,最大值为65535。

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

TSCR2=0x07;//分频因子=128

ICSYS=0x02; //IC缓冲使能

TIOS=0;

温馨提示

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

评论

0/150

提交评论