收藏 分享(赏)

飞思卡尔MC9S12XS128单片机重点模块讲解.pdf

上传人:weiwoduzun 文档编号:3137558 上传时间:2018-10-04 格式:PDF 页数:53 大小:1.50MB
下载 相关 举报
飞思卡尔MC9S12XS128单片机重点模块讲解.pdf_第1页
第1页 / 共53页
飞思卡尔MC9S12XS128单片机重点模块讲解.pdf_第2页
第2页 / 共53页
飞思卡尔MC9S12XS128单片机重点模块讲解.pdf_第3页
第3页 / 共53页
飞思卡尔MC9S12XS128单片机重点模块讲解.pdf_第4页
第4页 / 共53页
飞思卡尔MC9S12XS128单片机重点模块讲解.pdf_第5页
第5页 / 共53页
点击查看更多>>
资源描述

1、基于飞思卡尔基于飞思卡尔基于飞思卡尔基于飞思卡尔 MC9S12XS128MCU 的模块讲解及测试的模块讲解及测试的模块讲解及测试的模块讲解及测试 刘昌元刘昌元刘昌元刘昌元概述:飞思卡尔单片机的端口名称和51系列单片机有区别,51单片最经典的通用I/O口名称是P0口、P1口、P2口、P3口。而飞思卡尔128单片机是由A口、B口、K口、E口等标称的,熟悉51单片的同学在此学习飞思卡尔单片时要知道变通,同样的对于学习其他单片机也是一样的,先熟悉端口名称,再熟悉其端口功能,再熟悉其寄存器。C语言的编程语法和算法思路是通用的。现在功能强悍一点的单片都在内部集成了很多现成的模块,我们可以通过对其模块寄存器

2、编程配置我们需要的功能即可,此处的128单片机就是这样一款单片机,在此我就我个人学习的一些心得写出来,仅供交流与参考,同时我也希望帮助新手能够很快得上手。具体更深层的内容大家还需要去参考芯片的技术手册和其他参考书。以下我就分模块来讲解,大家在学习的过程中也需要一个模块一个模块的来学习和测试。其实我个人觉得买过来的开发板用途不是很大,因为很多端口被其在PCB设计时固化了,留给我们的端口并不多,使用起来极不方便,所以我个人建议大家可以买个带有最小系统的模块,自己用排针和插槽焊一个程序调试板,再焊一排共阴极的发光二极管(最好能发不同颜色光的),再焊几个开关电路和按键电路即可。我们在代码的各个位置通过

3、点亮发光二极管来知道程序走到哪一步了。下面我提供的测试例程也是这么来的,节省硬件就是节省开支啊,多动脑子,多想办法可以克服很多困难的。注:一个寄存器的多个位可以一次性写入配置的,但是为了使大家读程序理解方便我对寄存器的每一位几乎一位一位配置的,我麻烦了,不过可以给大家读程序带来方便。第一章: PIM 模块 (端口集成模块)一、端口主要功能概述:1:端口A、B、K作为通用的输入输出口使用2:端口E整合了1个外部IRQ(可屏蔽的)和XIRQ(不可屏蔽的)中断输入模块3:端口T整合了1个定时器TIM模块4:端口S整合了2个SCI(串行通信)和1个SPI(串行外设)模块5:端口M整合了1个MSCAN(

4、CAN总线)模块6:端口P连接到内部的PWM(脉宽调制)模块,即PWM信号可以通过P口输出,同时P口的输入也可以作为外部中断信号的输入。7:端口H和J在作为通用输入输出口使用的同时也可以作为外部中断信号的输入口。8:端口AD口整合了一个16通道的ATD模块即模拟量转数字量的模块。二、通用输入输出口(GPIO)以端口A和端口B为例讲解,以上是我截取的技术手册上的,从上来看A口和B口各有8个口,且A0-A7;B0-B7全部作为GPIO(通用输入输出口)使用。此处A口和B口使用方法是一样的,我姑且就以端口A来讲解。 A口和B口作为通用输入输出口使用时我们只需要掌握4个寄存器即可。PORTA(A口21

5、2基 于飞 思卡 尔 基 于飞 思卡 尔 基 于飞 思卡 尔 基 于飞 思卡 尔 MC9S12XS128MCU的 模块 讲解 及测 试 的 模块 讲解 及测 试 的 模块 讲解 及测 试 的 模块 讲解 及测 试 安徽工 业大学 安徽工 业大学 安徽工 业大学 安徽工 业大学 自动化 系 自动化 系 自动化 系 自动化 系 刘昌元 刘昌元 刘昌元 刘昌元数据寄存器)、DDRA(A口数据方向寄存器)、PUCR(引脚上拉控制寄存器)、RDRIV(低功耗驱动寄存器)这些寄存器都是8位的寄存器,其名称可以直接在程序中使用,当然也可以只使用其中的个别数据位。DDRA由如下8位构成,任何一位置1时对应端口

6、为输出,置0时对应端口为输入。这一点和51单片机的I/O口有区别,在典型的51单片中P0口内部没有上拉电阻,但作为I/O口使用时需要外接排阻。其他P1-P3口则可以直接作为双向口使用,51单片在上电复位后端口被默认的置1.在51单片中端口的某一位置0时端口作为输出口使用,置1时作为输入口使用。例如如果我们想把P1作为输出口使用时我们可以在程序开始时写P1=0x00;如果我们想把P1口作为输入口使用时我们可以写P1=0xff;这一点正好和飞思卡尔的128单片机相反,另外128单片有专门的数据方向寄存器DDRA或者DDRB等来管理各个端口的输入输出选择,51单片没有。如果我们想把端口A作为输入口使

7、用,我们只需写DDRA=0x00;即所有位都置0,如果我们想把端口A作为输出口使用,我们只需要写DDRA=0xff;即所有位都置1,而如果我们想要把端口A的高四位做输入口,低4位做输出口时我们就写DDRA=0x0f;当我们需要将该端口的某一位做输出或者输入口使用时只需要将该端口对应的方向位置1或者置0即可。例如我们想把A3口作输入口,A4口作输出口使用时我们只需要写:DDRA_DDRA3=0; DDRA_DDRA4=1;即可。对于数据方向寄存器的使用只要记住:置1输出置0输入PORTA数据寄存器也是由8位组成,任何时候都可以对它进行读写操作。例如在DDRA=0xff;A口想全部输出高电平的话我

8、们只要写PORTA=0xff;想全部输出低电平的话我们只要写PORTA=0x00;如果想让某一位输出高电平或者低电平的话我们只需要将该端口对应的数据寄存器位置1或者置0即可,例如:PORTA_PA2=1;此时A2口输出高电平,PORTA_PA3=0;此时A3口输出低电平。其他端口作为输入输出口使用时类似。对于数据寄存器的使用只要记住:置1高电平置0低电平PUCR上拉控制寄存器是由A、B、E、K口共用的,当端口作为输入口使用时用来控制端口是否允许接上拉电阻。当端口做输出口使用时该寄存器无效。当我们将A口作输入口使用时需要设置A口内置上拉电阻时首先写PUCR_PUPAE=1;当我们将B口作输入口使

9、用时需要设置B口内置上拉电阻时首先写PUCR_PUPBE=1;当我们将E口作输入口使用时需要设置E口内置上拉电阻时首先写PUCR_PUPEE=1;基 于飞 思卡 尔 基 于飞 思卡 尔 基 于飞 思卡 尔 基 于飞 思卡 尔 MC9S12XS128MCU的 模块 讲解 及测 试 的 模块 讲解 及测 试 的 模块 讲解 及测 试 的 模块 讲解 及测 试 安徽工 业大学 安徽工 业大学 安徽工 业大学 安徽工 业大学 自动化 系 自动化 系 自动化 系 自动化 系 刘昌元 刘昌元 刘昌元 刘昌元当我们将K口作输入口使用时需要设置K口内置上拉电阻时首先写PUCR_PUPKE=1;对于上拉控制寄存

10、器的使用只要记住:置1设置上拉置0禁止上拉RDRIV低功耗驱动寄存器,这个寄存器由A、B、E、K口共用。此低功耗驱动寄存器可以在任意时刻进行读、写操作。其中RDPA、RDPB、RDPE、RDPK作为低功耗选择位分别负责对A口、B口、E口、K口低功耗驱动的选择,注意只有在该端口被选择作为输出口使用时低功耗设置才有效,作为输入口使用时是无效的。一旦选择低功耗后其输出功耗将近乎正常功耗的1/5。例如我们想要把端口A作为低功耗输出,我们只需在程序初始化的时候写入如下几条指令即可:DDRA=0xff; /设置A口方向寄存器为数据输出RDRIV_RDPA=1; /选择A口为低功耗驱动对于低功耗驱动寄存器的

11、使用只要记住:置1选择低功耗输出置0正常功耗输出到此为止关于端口作为GPIO使用时需要用到的四个端口寄存器我已经介绍完毕,虽然只以端口A为例讲解的,但是其他端口的使用方法是一样的,只是改一下寄存器名而已,所以我们要学会举一反三。关于GPIO的使用最常见的就是输出高低电平或者读入高低电平,不要小看这个高低电平,这个高低电平作为输出可以用来控制LED、加上驱动之后可以用来控制电机、可以用来驱动继电器等其他一些控制回路,作为输入时可以用来查询外部的传感或者触发信号,可以来读取按钮或者来自键盘的信号等。此处为了方便我们就用它的输出来控制发光二极管的点亮,可以用来程序测试发光二极管,达到灯似流水的效果,

12、当年可以用程序把发光二极管控制随心所欲的时候GPIO你就入门了。如下我给出我写的测试代码,这是针对PORTB即B口的,当你把B0到B5口按顺序接到共阴极接法的6只发光二极管上时可以看到灯似流水的效果。源代码:(基于128单片机)/*-流水灯测试程序-*/#include /头文件包含#include“derivative.h“#define LED PORTB /定义LED为B口#define uchar unsignedchar /宏替换#define uint unsignedint#define tim e 300 /延时时间宏替换/*-延时函数-*/voiddelay(uint a)

13、uint i,j;for(i=0;i /头文件包含#include“derivative.h“#defineINPUT PORTB_PB7 /将B7口作为输入信号的检测口#defineucharunsignedchar /数据类型宏替换#defineuint unsignedint/*-延时函数-*/voiddelay(uint a) uint i,j;for(i=0;i#include“derivative.h“/*-端口定义-*/#defineLED_1 PORTB_PB0#defineLED_1_dir DDRB_DDRB0#defineLED_2 PORTB_PB5#defineLED

14、_2_dir DDRB_DDRB5/*-变量定义-*/#define uchar unsignedchar#define uint unsignedintuint Tim e_count=0;uchar LED_flag=0;/*-延时函数-*/voiddelay(uint a) uint i,j;for(i=0;i#include“derivative.h“#defineuint unsignedint /宏替换#defineucharunsignedchar#definetim e 300#defineLED PORTB_PB0 /定义端口B0为指示灯控制端口#defineLED_dir

15、DDRB_DDRB0 /定义端口B0的方向控制位/*-延时程序-*/voiddelay(uint a) uint i,j;for(i=0;i0;duty-=1) PWMDTY1=duty; /改变通道1的占空比,递减light();源代码(128单片机)两个8位通道联接成一个16位通道使用/*-联接通道0和通道1组成一个16位的通道-*/#include#include“derivative.h“/*-PWM模块初始化-*/voidPWM_initial() PWMCTL_CON01=1; /联接通道0和通道1组成16位通道,由通道1输出控制PWMPOL_PPOL1=1; /设置通道1极性为高

16、电平PWMCLK_PCLK1=1; /设置通道1为SA时钟PWMPRCLK=0x04; /设置A时钟频率,clock_A=16MHz/16=1MHzPWMSCLA=20; /设置SA时钟频率,clock_SA=1/(2*20)=0.025MHz=40usPWMCAE_CAE1=1; /设置通道1为中央对齐PWMPER01=50000; /PWM周期=40us*50000=2sPWMDTY01=25000; /设置PWM占空比=PWMDTY01/PWMPER01=50%PWME_PWME1=1; /打开PWM通道1/*-主程序-*/voidm ain(void)PWM_initial(); /P

17、WM初始化EnableInterrupts;while(1);基 于飞 思卡 尔 基 于飞 思卡 尔 基 于飞 思卡 尔 基 于飞 思卡 尔 MC9S12XS128MCU的 模块 讲解 及测 试 的 模块 讲解 及测 试 的 模块 讲解 及测 试 的 模块 讲解 及测 试 安徽工 业大学 安徽工 业大学 安徽工 业大学 安徽工 业大学 自动化 系 自动化 系 自动化 系 自动化 系 刘昌元 刘昌元 刘昌元 刘昌元熟悉了上面两种PWM(8位通道和16通道)的使用方法后我们再熟悉一下它深层次的引用:开两路时钟源分别配置,带有中断并且可以随时关闭所有PWM通道的输出,另外一旦关闭信号消失后PWM通道

18、自动重启,输出正常。请看我写的如下这段代码,大家请记住,再简单的代码尽可能写得规范一点,便于阅读和维护。我不敢说我写的代码有多么精美,但是我个人认为层次很清晰,分模块的。源代码(128单片机)/*程序功能:用B0口和B1口控制2个指示灯做程序指示,即指示灯1做主程序指示B1口做中断服务程序指示。再由通道0和通道2的两路PWM波信号控制另外2个指示灯以不同频率得闪烁,通道7做为紧急关闭的输入口接到一个可以供应高低电平的开关上,通过开关来紧急关闭两路PWM波,同时我在主程序中设置了重启PWM通道的程序,所以一旦关闭信号消除,PWM通道会重新启动,即两路指示灯会重新闪烁*/#include /头文件

19、包含#include“derivative.h“#defineLED_1 PORTB_PB0 /定义端口B0口为指示灯控制口#defineLED_2 PORTB_PB1#define uchar unsignedchar /宏替换#define uint unsignedint#define tim e 500 /延时宏替换/*-功能子函数申明-*/voiddelay(uint Tim e);voidlight_1();voidlight_2();voidPort_initial();voidPWM_initial();/*-主程序-*/voidm ain(void)Port_initial(

20、); /端口初始化PWM_initial(); /PWM初始化EnableInterrupts;while(1)PWMSDN_PWMRSTRT=1; /重启PWM通道light_1(); /指示灯1闪烁基 于飞 思卡 尔 基 于飞 思卡 尔 基 于飞 思卡 尔 基 于飞 思卡 尔 MC9S12XS128MCU的 模块 讲解 及测 试 的 模块 讲解 及测 试 的 模块 讲解 及测 试 的 模块 讲解 及测 试 安徽工 业大学 安徽工 业大学 安徽工 业大学 安徽工 业大学 自动化 系 自动化 系 自动化 系 自动化 系 刘昌元 刘昌元 刘昌元 刘昌元/*-PWM中断服务程序-*/#pragm

21、a CODE_SEG_NEAR_SEGNON_BANKEDvoidinterrupt 57 PWM_INT() LED_1=0; /关闭指示灯1light_2(); /指示灯2闪烁PWMSDN_PWMIF=1; /清中断标志位/*-功能子函数-*/*-延时函数-*/voiddelay(uint Tim e) uint i,j;for(i=0;iTim e;i+)for(j=0;jTim e;j+);/*-指示灯函数-*/voidlight_1() ucharcycle_tim e=4; /定义循环次数while(cycle_tim e-) LED_1=1;delay(tim e);LED_1=

22、0;delay(tim e);voidlight_2()基 于飞 思卡 尔 基 于飞 思卡 尔 基 于飞 思卡 尔 基 于飞 思卡 尔 MC9S12XS128MCU的 模块 讲解 及测 试 的 模块 讲解 及测 试 的 模块 讲解 及测 试 的 模块 讲解 及测 试 安徽工 业大学 安徽工 业大学 安徽工 业大学 安徽工 业大学 自动化 系 自动化 系 自动化 系 自动化 系 刘昌元 刘昌元 刘昌元 刘昌元 ucharcycle_tim e=8; /定义循环次数while(cycle_tim e-) LED_2=1;delay(300);LED_2=0;delay(300);/*-端口初始化-

23、*/voidPort_initial() DDRB=0x03; /定义B0-B1口为输出/*-PWM初始化-*/voidPWM_initial() /晶振为16MHz PWMPOL_PPOL0=1; /设置通道0起始极性高电平PWMPOL_PPOL2=1; /设置通道2起始极性高电平PWMCLK_PCLK0=1; /设置通道0选择SA做时钟源PWMCLK_PCLK2=1; /设置通道2选择SB做时钟源PWMPRCLK=0x44; /A、B时钟为总线时钟16分频=16MHz/16=1MHzPWMCAE_CAE0=1; /设置通道0波形中央对齐PWMCAE_CAE2=1; /设置通道2波形中央对齐

24、PWMSCLA=100; /设置SA时钟分频系数为100,SA=1/(2*100)=5kHz=0.2m sPWMSCLB=100; /设置SB时钟分频系数为100,SA=1/(2*100)=5kHz=0.2m sPWMPER0=100; /通道0PWM周期=100*0.2m s=20m sPWMPER2=250; /通道2PWM周期=100*0.2m s=20m sPWMDTY0=50; /通道0占空比=PWMDTY0/PWMPER0=50%PWMDTY2=125; /通道2占空比=PWMDTY2/PWMPER2=50%PWME_PWME0=1; /打开通道0PWME_PWME2=1; /打开

25、通道2PWMSDN_PWM7ENA=1; /打开PWM紧急关闭功能PWMSDN_PWMIE=1; /打开PWM中断PWMSDN_PWM7INL=1; /高电平有效,即通道7输入高电平关闭PWM通道PWMSDN_PWMLVL=1; /通道关闭时强制输出高电平基 于飞 思卡 尔 基 于飞 思卡 尔 基 于飞 思卡 尔 基 于飞 思卡 尔 MC9S12XS128MCU的 模块 讲解 及测 试 的 模块 讲解 及测 试 的 模块 讲解 及测 试 的 模块 讲解 及测 试 安徽工 业大学 安徽工 业大学 安徽工 业大学 安徽工 业大学 自动化 系 自动化 系 自动化 系 自动化 系 刘昌元 刘昌元 刘昌

26、元 刘昌元第四章 : TIM模块(定时器模块)其实我们在前面已经学习了一个定时器模块了,周期中断定时器。这里我们再来学习一下另外一个定时器模块,TIM模块,可能大家会好奇这两者有区别吗?当然有,不过对于定时用的话区别不大,但是这个模块特有的功能是周期中断定时器模块无法比拟的,等学习完大家测试过后就会有体会了,下面我们就来学一下TIM模块,老方法,先熟悉大致功能再熟悉其相关寄存器的使用和配置,说实话128单片机的难点就在如何配置寄存器,寄存器太多,太繁琐。但这也是它的精妙之处,经常使用某一个模块,就会很熟悉的,到时候又会觉得它很方便了。概述:这个定时器是由一个16位的可编程的计数器(带有预分频功

27、能)组成。这个定时器用途很多,它可以在对输入波形测量的同时产生输出波形,脉冲宽度可以从毫秒级到秒级之前改变。这个定时器包含8个输入捕捉/输出比较通道和一个脉冲累加器输入捕捉功能可以用来检测跳沿信号并进行时间记录,输出比较功能可以用来形成输出信号和定时来产生软件延时。16位的脉冲累加器可以用来做事件计数器和可控的累加器。脉冲累加器在事件计数模式下共享定时器的通道7。对于所有寄存器的存取需要在一个时钟周期里完成。单独访问寄存器的高字节和低字节和对寄存器进行整字的访问结果可能是不一样的。综上,TIM模块有如下特点:18个输入捕捉/输出比较通道2可以对时钟进行预分频316位的计数器416位的脉冲累加器

28、操作模式:停止模式:定时器关闭,因为此刻时钟被停止了。冻结模式:只要控制器寄存器TSCR1中的冻结位TSFRZ没有被置1,则定时器保持运行。等待模式:只要控制器寄存器TSCR1中的等待位TSWAI没有被置1,则定时器保持运行。正常模式:只要控制器寄存器TSCR1中的控制位TEN没有被清0,则定时器保持运行。TIM模块的结构框图如下:基 于飞 思卡 尔 基 于飞 思卡 尔 基 于飞 思卡 尔 基 于飞 思卡 尔 MC9S12XS128MCU的 模块 讲解 及测 试 的 模块 讲解 及测 试 的 模块 讲解 及测 试 的 模块 讲解 及测 试 安徽工 业大学 安徽工 业大学 安徽工 业大学 安徽工

29、 业大学 自动化 系 自动化 系 自动化 系 自动化 系 刘昌元 刘昌元 刘昌元 刘昌元从以上结构图上可以看出TIM模块总共有8个外部引脚:IOC0IOC7其中IOC7是输入捕捉和输出比较的共享引脚,同时也可以被配置成脉冲累加器的输入引脚。IOC6IOC0是输入捕捉和输出比较的共享引脚。有1个定时器溢出中断,8个通道中断,1个脉冲累加器溢出中断和1个脉冲累加输入中断。它可以由预分频器对总线时钟分频。接下来我们就来学习一下TIM模块的各个寄存器。 Tim er Input Capture/Output Com pare Select (TIOS)定时器输入捕捉/输出比较选择寄存器该寄存器共有8位

30、分别对应IOC0IOC7这8个通道,通过配置该位来决定相应的通道是作为输入捕捉使用还是作为输出比较使用。(置0相应的通道被用作输入捕捉引脚置1相应的通道被用作输出比较引脚)Tim er Com pare ForceRegister(CFORC)定时器强制比较寄存器基 于飞 思卡 尔 基 于飞 思卡 尔 基 于飞 思卡 尔 基 于飞 思卡 尔 MC9S12XS128MCU的 模块 讲解 及测 试 的 模块 讲解 及测 试 的 模块 讲解 及测 试 的 模块 讲解 及测 试 安徽工 业大学 安徽工 业大学 安徽工 业大学 安徽工 业大学 自动化 系 自动化 系 自动化 系 自动化 系 刘昌元 刘昌

31、元 刘昌元 刘昌元向该寄存器的任何一位写1时会导致相应通道发生强制输出比较,这和正常情况下它的TC通道上发生输出比较效果一样,唯一不同的是强制输出比较时中断标志位没有置1。Output Com pare 7MaskRegister(OC7M)输出比较7掩码寄存器置位该寄存后相应通道7事件发生后,其通道数据寄存器中的数值会被传输到相应的定时器通道端口。通道7事件包括定时器的溢出和定时器通道的输出成功发生了比较。OC7M7:0:置事件7发生后,输出比较7数据寄存器中的值不会被传输到定时器各通道的相应端口。置1事件7发生后,输出比较7数据寄存器中的值会被传输到定时器各通道的相应端口。 Output

32、Com pare 7DataRegister(OC7D)输出比较7数据寄存器这个寄存器就是和上面那个输出比较7掩码寄存器配合使用的,该寄存器中可以存放相应的数值,如果OC7M寄存器置位,一旦通道7事件发生(这个事件可以是定时器的溢出,或者是通道7上成功发生了一次输出比较),输出比较7数据寄存器OC7D中的值就会被传输到定时器端口数据寄存器中。 Tim er Count Register(TCNT)定时器计数寄存器这是16位主定时器的加计数器,最好是对它进行16位的字访问,如果分成高低字节访问得出的结果是不一样的。注意:该寄存器在任何时刻可以被读取,正常情况下写该寄存器是无基 于飞 思卡 尔 基

33、 于飞 思卡 尔 基 于飞 思卡 尔 基 于飞 思卡 尔 MC9S12XS128MCU的 模块 讲解 及测 试 的 模块 讲解 及测 试 的 模块 讲解 及测 试 的 模块 讲解 及测 试 安徽工 业大学 安徽工 业大学 安徽工 业大学 安徽工 业大学 自动化 系 自动化 系 自动化 系 自动化 系 刘昌元 刘昌元 刘昌元 刘昌元效的。Tim er System Control Register1(TSCR1)定时器系统控制寄存器1 TEN:定时器使能位,置0关闭主定时器,包括计数器,这样可以用来减小功耗。置1允许定时器正常工作 TSWAI:等待模式下定时器模块停止位,置0等待模式下,定时器继

34、续工作。置1当单片机进入等待模式后关闭定时器模块,定时器中断不能够用来让CPU退出等待模式,该位对脉冲累加器也会有影响。 TSFRZ:冻结模式下定时器模块停止位,置0冻结模式下,定时器继续工作。置1当单片机进入冻结模式后关闭定时器计数器,这对仿真非常有用。该位不能够停止脉冲累加器。 TFFCA:定时器快速清除所有标志位,置0定时器各标志寄存器的标志位采用正常方式清除。置1每读一次输入捕捉通道或者每写一次输出比较通道,标志寄存器TFLG1中的通道标志位CnF将会被清除。对于标志寄存器TFLG2,每一次对脉冲累计控制寄存器PACNT的访问都会清除标志寄存器PAFLG中的PAOVF位和PAIF位。这

35、可以有效的节省软件开支,即在中断服务程序中无需添加额外的清中断标志位的指令,但是要避免意外操作造成标志位的误清除。 PRNT:精准定时器控制位,置0不启动精准定时器,使用主定时器。置1启用精准定时器,此时PTPSR寄存器中的所有位被用来对精准定时器进行预分频。 Tim er System Control Register2(TSCR2)定时器系统控制寄存器2 TOI:定时器溢出中断使能位,置0禁止溢出中断发生置1允许定时器溢出时发生中断。 TCRE:定时器计数器复位使能位,置0当输出比较7事件发生一次成的输出比较时计数器不复位。置1当输出比较7事件发生一次成的输出比较时计数器发生复位。(其实我

36、个人觉得没必要用它,除非特别需要,所以一般情况下将它清0即可) PR2:0:定时器预分频选择位,这3位用来设置对总线时钟的分频,分频系数如下表:基 于飞 思卡 尔 基 于飞 思卡 尔 基 于飞 思卡 尔 基 于飞 思卡 尔 MC9S12XS128MCU的 模块 讲解 及测 试 的 模块 讲解 及测 试 的 模块 讲解 及测 试 的 模块 讲解 及测 试 安徽工 业大学 安徽工 业大学 安徽工 业大学 安徽工 业大学 自动化 系 自动化 系 自动化 系 自动化 系 刘昌元 刘昌元 刘昌元 刘昌元由上表可知:通过设置最高可以对总线时钟进行128分频。至于选择多少分频,我们自己可以配置。Tim er TogleOnOverflowRegister1(TTOV)定时器通道溢出翻转寄存器只有在输出比较模式下,该寄存器的设置才会生效,当置1时它会优先于强制输出比较但是并不优先于通道7事件。置0禁止通道输比较的溢出翻转功能置1使能通道输出比较的溢出翻转功能。

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

当前位置:首页 > 企业管理 > 管理学资料

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


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

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

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