第六讲MC9S12单片机IO接口和功能模块.ppt

上传人:本田雅阁 文档编号:3120952 上传时间:2019-07-13 格式:PPT 页数:96 大小:746.52KB
返回 下载 相关 举报
第六讲MC9S12单片机IO接口和功能模块.ppt_第1页
第1页 / 共96页
第六讲MC9S12单片机IO接口和功能模块.ppt_第2页
第2页 / 共96页
第六讲MC9S12单片机IO接口和功能模块.ppt_第3页
第3页 / 共96页
第六讲MC9S12单片机IO接口和功能模块.ppt_第4页
第4页 / 共96页
第六讲MC9S12单片机IO接口和功能模块.ppt_第5页
第5页 / 共96页
点击查看更多>>
资源描述

《第六讲MC9S12单片机IO接口和功能模块.ppt》由会员分享,可在线阅读,更多相关《第六讲MC9S12单片机IO接口和功能模块.ppt(96页珍藏版)》请在三一文库上搜索。

1、第六讲 MC9S12单片机 I/O接口和功能模块,本讲内容简介,1、通用I/O接口模块 2、模数转换A/D模块 3、脉冲宽度调制PWM模块 4、增强型定时器ECT模块 5、同步外设接口SPI模块 6、串行通信接口SCI模块,每个模块对应的技术文档,I/O口模块 S12MEBIV3.PDF S12DTB128PIMV2.PDF 串行通信模块 S12SCIV2.PDF S12SPIV4.PDF S12IICV2.PDF ECT 模块 S12ECT16B8CV1.PDF A/D模块 S12ATD10B8CV2.PDF PWM模块 S12PWM8B8CV1.PDF MSCAN模块 S12MSCANV2

2、.PDF,1、通用I/O接口,MC9S12DG128B单片机I/O口 PORTA 连接按键 PORTB 连接发光二极管 PORTE 特殊功能 PORTJ 中断输入,没有PJ0-PJ5 PORTP 中断输入,没有PP6 PORTM 没有PM6-PM7 PORTT PORTS 没有PS4-PS7 PORTAD 只能输入,1、通用I/O接口,I/O口作为输入使用 设置方向寄存器(DDRx)为输入(0X00) 随时读取I/O口的数据寄存器(PORTx) I/O口作为输出使用 设置方向寄存器(DDRx)为输出(0XFF) 设置驱动能力寄存器(非必须) 拉电阻选择(非必须) 随时写入I/O口数据寄存器(P

3、ORTx),1、通用I/O接口,I/O口作为外部中断接收使用 开系统中断(CLI) 设置方向寄存器为输入 设置中断有效边沿(上升沿、下降沿) 使能中断 编写相关的中断服务程序 有效边沿到来时,会自动进入中断服务程序,1、通用I/O接口,例一 设计一个C语言程序,使教学板上发光二极管 显示花等效果 显示循环流水灯效果 见exp12,1、通用I/O接口,例二 使用PORTJ中断口功能的例子,本例的原理是:设置A口为输出口,PTA的第6脚跟PTJ的第6脚硬件相连,PTB输出,用来控制8个LED灯,PTJ开中断,并且设置为上升沿触发。首先PTA初始化为0,PTB为0xFF,此时等灭。在大循环冲设置PT

4、A第6位为高电平,产生中断,灯低4个亮,高4个不亮。使用单步运行查看效果。 见exp13。,2、模数转换ATD模块,A/D转换的基本概念 模数转换定义: 将时间连续、幅值也连续的模拟信号转换为间离散、幅值也离散的数字信号 模数转换精度 模数转换精度是指二进制的位数。9S12的AD模块有两种精度可选,分别为8位精度(0255)和10位精度(01023)。 逐次逼近型A/D转换器的原理 逐次逼近型A/D 由一个比较器和D/A 转换器通过逐次比较逻辑构成,从MSB 开始,顺序地对每一位将输入电压与内置D/A 转换器输出进行比较,经n 次比较而输出数字值。其电路规模属于中等。,9S12的A/D模块主要

5、特性,8位/10位可选择的转换精度; 速度快,每进行一次10位的转换,仅仅需要7nS; 采样时间可编程; 左对齐/右对齐的数据格式,有符号/无符号的转换结果; 转换完毕可产生中断; 使用PAD7外部触发控制。,9S12的A/D模块外部引脚,VRH(60)、VRL(61):A/D 转换模块的参考高电压和参考低电压。实验板上,VRH和VRL分别接VCC和GND。 VDDA(59)、VSSA(62):A/D 模块提供电源。实验板上,VDDA接到VCC,VSSA接到GND。 AN7/ETRIG/PAD7(58):模拟量输入通道7,通用数字输入端口。它也可以被配置为A/D 转换的外部触发引脚。 AN6/

6、PAD6 - AN0/PAD0(51-57):模拟量输入通道6-0,通用数字输入端口。不可以被用作外部触发引脚。PAD0通过50K滑动变阻器接到VCC,调可变电阻可以调试A/D转换。,控制寄存器2ATDCTL2,ADPU:A/D模块的电源管理。1=正常模式,0=低功耗模式。 AFFC:标志位快速清零。1=对转换结果寄存器访问会自动清除标志位,0=正常模式,访问结果寄存器前读状态寄存器1可以清楚转换完成标志CCF。 AWAI:等待时进入低功耗模式。1=进入,0=正常工作。 ETRIGLE、ETRIGP:外部触发的边沿/极性控制。 ETRIGE:上两位的使能位。允许在PAD7输入外部触发信号。1=

7、允许,0=禁止。 ASCIE:A/D队列转换完成中断允许。1=允许,并使标志位ASCIF=1;0=禁止。 ASCIF:A/D 队列转换完成中断标志。,控制寄存器3ATDCTL3,S8C、S4C、S2C、S1C:定义转换队列的长度。默认长度为4。 FIFO:结果寄存器先进先出模式。1=FIFO模式,转换结果是连续存放的;0=非FIFO模式,转换结果放在对应的寄存器中。 FRZ1、FRZ0:背景调试冻结模式允许。这两个控制位就决定了,当遇到断点时,A/D 模块怎样反应。,控制寄存器4ATDCTL4,SRES8:转换精度选择。1=8位精度,0=10位精度。 SMP1、SMP0:采样时间选择。可选择2

8、、4、8、16个A/D时钟周期。 PRS4、PRS3、PRS2、PRS1、PRS0:A/D 时钟分频因子的选择。 A/D时钟的计算公式如右图。 注意,A/D模块的时钟频率要在500KHz和2MHz之间,所以在选择分频因子时一定要注意。,控制寄存器5ATDCTL5,DJM:16位结果寄存器数据的对齐方式。1=右对齐,0=左对齐。 DSGN:结果寄存器中数据有无符号。1=有符号,0=无符号。 SRES8、DJM 和DSGN 三位配合起来使用,决定了结果寄存器中数据的格式,一共有8种情况。 SCAN:连续转换队列的模式。此位定义了A/D 转换是连续进行还是只进行一次。1=连续队列转换;0=单次队列转

9、换。 MULT:当这位为0 时,ATD 的队列控制器只从指定的输入通道进行采样,可以使用ATDCTL5寄存器中的CC、CB 和CA 三位来指定需要采样的模拟量输入通道。当这位为1 时,则对多个的通道进行采样,每次采样的通道数量由S8C、S4C、S2C 和S1C 控制位来指定,第一个采样通道由CC、CB 和CA 控制位来指定,其它采样通道由通道选择码CC、CB 和CA 的增加来决定。 CC、CB、CA:模拟输入通道选择码。和MULT配合使用。,状态寄存器0ATDSTAT0,SCF:队列完成标志。置位条件:当一个队列转换完毕后;如果处在SCAN模式,则每次都置位。清零条件:对此位写一;写ATDCT

10、L5,开始一个新的对列;AFFC=1(标志快速清除)且读结果寄存器。 ETORF:外部触发溢出标志。置位条件:处于边沿触发模式时,如果第一个边沿触发的队列转换正在进行,而这时却检测到了第二个有效的边沿。清零条件:对此位写一;写控制寄存器2、3或4,终止当前队列;写控制寄存器5,开始一个新队列。 FIFOR:FIFO 溢出标志。如果转换完成标志(CCF)在没有被清零时结果寄存器被写入新值(覆盖),则置位。清零条件:对此位写一;写控制寄存器5,开始一个新队列。1=有FIFO溢出,0=无FIFO溢出。 CC2、CC1、CC0:转换计数器。代表了哪个结果寄存器将要接收当前转换的结果。非FIFO 模式(

11、FIFO=0),这3 位的初始值为0,计数完成后又会回到初始值。FIFO 模式(FIFO=1),转换计数器处于循环计数状态。,状态寄存器1ATDSTAT1,CCFx: x通道的转换完成标志。1=完成队列中的第x 个转换,结果存储在ATDDRx 寄存器中;0=转换未完成。 清零条件:写控制寄存器5,开始一个新队列;AFFC=1,对结果寄存器访问;AFFC=0,首先读状态寄存器1,然后访问结果寄存器。,输入允许寄存器-ATDDIEN,IENx:通道x 输入数字允许。这8个控制位控制了从模拟量输入端口到数据寄存器的数字输入缓冲区。1=缓冲区有效;0=无效。 当端口作为模拟量输入端口时,也可以打开数字

12、缓冲区,但是会增加功耗。,数字输入寄存器PORTAD,PTADx:A/D 模块的第x 个通道(ANx)的数字输入。当对应通道的数字输入允许时,此位返回了相应引脚上的电平逻辑值。 注意,引脚上的电平必须和VRH或VRL匹配,否则将返回一个不确定的值。 如果响应通道的输入缓冲区无效(IENx=0),读取操作只返回1。 复位后,寄存器值等于$FF。 注意,PORTAD端口模拟量和数字量是可以复用的。当输入模拟量时,会把模拟信号直接送到A/D 转换器;当输入数字量时,会把外部数字信号送到PORTAD 寄存器以供读取。,A/D转换结果寄存器ATDDRx,ATDDR0ATDDR7:07通道的结果寄存器。A

13、/D转换的结果需要从这几个寄存器中读取。每个16位寄存器可以分成2个8位的寄存器来读取,分别为ATDDRxH和ATDDRxL。 注意转换结果在这8个16位寄存器中的存储格式。以10位左、右对齐为例: 左对齐10位数据 右对齐10位数据 另外还要注意有符号数据和无符号数据的区别。,A/D转换综合举例,使用教学板上电位器调试并观察A/D转换结果。 请见exp14。,3、脉冲宽度调制PWM模块,PWM的基本概念 PWM(Pulse Width Modulate)即脉宽调制,脉宽调制波是一种可用程序来控制波形占空比、周期、相位的波形。它在电动机驱动、D/A 变换等场合有着广泛的应用。 周期,占空比,相

14、位。 周期指上图中的,占空比为t/ ,相位指高低电平。,9S12 PWM模块特性,7个周期、占空比可编程的PWM通道 专用的PWM计数器 PWM功能的软件使能和禁止 软件选择脉冲极性 PWM波形输出对齐方式分为左对齐和居中对齐 可以两个通道级联以获得更高的精度 可选择4个时钟源,4个时钟源均为独立的分频设置 紧急关断功能,9S12 PWM模块外部引脚,共7个外部引脚 PWM05(4、3、2、1、80、79) PWM7(78),9S12 PWM模块的时钟,四个时钟源CLOCKA、CLOCKB、CLOCKSA、CLOCKSB。 其中CLOCKA(B)可以把总线时钟进行1、2、4、8、16、32、6

15、4、128分频。Clock A 的预分频因子通过PWMPRCLK寄存器中的PCKA2、PCKA1 和PCKA0 来选择,Clock B 的预分频因子通过PWMPRCLK 寄存器中的PCKB2、PCKB1 和PCKB0 来选择。,总线时钟,CLOCKA,CLOCKB,CLOCKSA,CLOCKSB,分频,分频,分频,分频,9S12 PWM模块的时钟,,CLOCKSA(SB)从CLOCKA(B)进行分频的比例因子可以为1、2、4、8、16、32、64、128、256,最大可以进行512分频。计算公式为: CLOCKSA(SB)=CLOCKA(B)/2*PRESCALER 通道0、1、4、5可选CL

16、OCKA或CLOCKSA; 通道2、3、6、7可选CLOCKB或CLOCKSB。,9S12 PWM模块的计数器,每个通道的计时器都有一个8 位计数器、一个8位周期寄存器和一个8 位占空比寄存器。输出波形的周期受周期寄存器的控制,当计数器的计数值等于周期寄存器的值时,PWM波周期结束。PWM的波形还跟占空比寄存器、输出极性和对齐方式有关。 PWMCNTx 计数寄存器在PWM 通道工作时也可以被写入,但是暂时产生无效的波形。,9S12 PWM模块的允许控制,PWM的允许位相当于“开关”,可以允许和禁止相应通道的PWM输出。 每个PWM 通道都对应一个允许(PWMEx),只有PWMEx=1 时,对应

17、的通道才输出波形。 计数器计数结束的那一刻,只要PWMEx 为高电平,则会自动开始下一个波形的输出。,9S12 PWM模块的极性控制,每个PWM 通道都对应一个极性设置位,决定了PWM 波的输出首先是高电平还是低电平。 当PPOLx 被置位时,对应的通道首先输出高电平,直到计数器计数到占空比寄存器的值后变为低电平;反之则首先输出低电平,直到计数器计数到占空比寄存器的值后变为高电平。,左对齐的输出波型,PWMCAE 寄存器中的CAEx 位是输出格式的控制位。CAEx=0,则对应通道的输出格式是左对齐的。 当使用左对齐格式输出时,8 位的计数器只使用加法计数。当计数器加法计数到占空比寄存器中的值时

18、,PWM 通道输出波形的电平就发生变化;当计数器加法计数到周期寄存器中的值时,计数器复位,输出波形电平发生变化,然后再次读取占空比和周期寄存器中的值作为下次计数参考使用。 注意,计数器是从0开始计数的,直到周期寄存器中的值-1。,左对齐的输出波型,PWM波形频率和占空比的计算: PWMx 频率= Clock(A, B, SA, or SB) / PWMPERx 若Polarity = 0 (PPOLx=0) Duty Cycle = (PWMPERx-PWMDTYx)/PWMPERx 100% 若Polarity = 1 (PPOLx=1) Duty Cycle = PWMDTYx / PWM

19、PERx 100%,左对齐的输出波型,下面举一个左对齐输出的例子: 假设时钟源频率=10MHz(周期=100ns),PPOLx=0,PWMPERx=4,PWMDTYx=1。 所以,PWMx 的频率 = 10MHz/4 = 2.5MHz,PWMx 的周期=400ns,PWMx 的占空比=3/4100% = 75%。,居中对齐的输出波型,CAEx=1,则对应通道的输出格式是居中对齐的。 在这个模式下,计数器既进行加法计数也进行减法计数。当计数器加法计数到占空比寄存器中的值时,PWM 通道输出波形的电平就发生变化;当加法计数到周期寄存器中的值时,计数器会从加法计数改变为减法计数;当计数器再次减法计数

20、到占空比寄存器中的值时,PWM 通道输出波形的电平再次发生变化;当计数器继续减法计数到$00 时,计数器重新变为加法计数器,然后再次读取占空比和周期寄存器中的值作为下次计数参考使用。,居中对齐的输出波型,用时钟源的频率除以周期寄存器中值的2 倍,得到的结果就是当前PWM输出波形的频率。 PWMx Frequency = Clock(A, B, SA, or SB) / (2PWMPERx) 若Polarity = 0 (PPOLx=0) Duty Cycle = (PWMPERx-PWMDTYx)/PWMPERx 100% 若Polarity = 1 (PPOLx=1) Duty Cycle

21、= PWMDTYx / PWMPERx 100%,居中对齐的输出波型,下面举一个居中对齐输出的例子: 假设时钟源频率=10MHz(周期=10ns),PPOLx=0,PWMPERx=4,PWMDTYx=1。 所以,PWMx 的频率 = 10MHz/4 = 2.5MHz,PWMx 的周期=400ns,PWMx 的占空比=3/4100% = 75%。,9S12 PWM模块的通道级联,如果需要PWM 输出波形的精度更高,则可以把2 个8 位PWM 通道级联起来组成1 个16 位通道。 PWMCTL 寄存器中有4 个控制位,可以完成这个级联的功能。CON67、CON45、CON23 和CON01 可以把

22、相应的两个通道级联起来。 注意级联后高8位和低8位的区别,控制寄存器的区别。,允许控制寄存器-PWME,当PWMEx 被置位后,PWM 输出就会立即开始。但是直到PWM 模块时钟的下一个周期到来之时,才可以输出正确的波形,而在这之前的波形可能会是无效的。 当处于级联模式时,8 个8 位PWM 通道组成4 个16 位的PWM 通道,PWME1、PWME3、PWME5 和PWME7 对这4 个通道进行控制,而其它控制位处于无效状态。 PWMEx:通道有效选择位。1=允许PWM输出,0=禁止。,极性寄存器-PWMPOL,PWMPOL 寄存器随时都可以进行设置。如果某PWM 通道在输出波形的过程中,波

23、形的极性发生了改变,那么在两组波形的连接处可能会出现缩短或者拉伸了的不正常波形。 PPOLx:通道x的输出极性。1=先高后低,0=先低后高。,时钟选择寄存器-PWMCLK,PCLK7:PWM 通道7 时钟源选择。1=Clock SB ;0=Clock B。 PCLK6:PWM 通道6 时钟源选择。1=Clock SB ;0=Clock B。 PCLK5:PWM 通道5 时钟源选择。1=Clock SA ;0=Clock A。 PCLK4:PWM 通道4 时钟源选择。1=Clock SA ;0=Clock A。 PCLK3:PWM 通道3 时钟源选择。1=Clock SB ;0=Clock B。

24、 PCLK2:PWM 通道2 时钟源选择。1=Clock SB ;0=Clock B。 PCLK1:PWM 通道1 时钟源选择。1=Clock SA ;0=Clock A。 PCLK0:PWM 通道0 时钟源选择。1=Clock SA ;0=Clock A。,预分频时钟选择寄存器,此寄存器用来选择Clock A 和B 的预分频因子。 PWMPRCLK 寄存器随时都可以进行设置。如果某PWM 通道在输出波形的过程中,此通道的所使用时钟的频率发生了改变,那么在两组波形的连接处可能会出现缩短或者拉伸了的不正常波形。 PCKB2、PCKB1、PCKB0:Clock B 预分频因子的选择 PCKA2、P

25、CKA1、PCKA0:Clock A 预分频因子的选择,居中对齐允许寄存器-PWMCAE,此寄存器控制每个PWM 通道输出波形的对齐方式,可以是左对齐或者居中对齐。如果CAEx=1,则对应通道的输出波形为居中对齐方式;如果CAEx=0,则为左对齐方式。注意只有当对应通道被禁止输出时,才可以设置此寄存器。 CAEx: 1=对应x通道为居中对齐模式 0=对应x通道为左对齐模式,控制寄存器-PWMCTL,此寄存器可以实现把8 个8 位PWM 通道级联为4 个16 位PWM 通道。 CONxy:x通道和y通道级联,以获得更高的输出精度。 x通道作为高8位,y通道作为低8位。这时只有通道y的时钟选择位、

26、极性控制位、输出允许位和对齐方式选择位才有效;通道x 的相应寄存器均无效。 1=级联模式 0=非级联模式 PFRZ:冻结模式PWM 计数器停止。1=停止,0=继续运行。,比例因子寄存器A-PWMSCLA,此寄存器用来提供产生时钟Clock SA 的比例因子,Clock SA 是由Clock A 经过一系列运算得来的,公式: Clock SA = Clock A / (2PWMSCLA) 当PWMSCLA=0 时,默认比例因子为256,此时Clock SA 的频率等于Clock A 的频率除以512。,比例因子寄存器B-PWMSCLB,此寄存器用来提供产生时钟Clock SB 的比例因子,Clo

27、ck SB 是由Clock B 经过一系列运算得来的,公式如下: Clock SB = Clock B / (2PWMSCLB) 当PWMSCLB=0 时,默认比例因子为256,此时Clock SB 的频率等于Clock B 的频率除以512。,x通道计数寄存器-PWMCNTx,每个PWM 通道都有一个独立的加法/减法计数器,计数器的频率跟时钟源的频率有关。可以在任意时刻来读取计数器里的值,而计数器的工作不会受到影响。 注意我们刚才讲过的左/居中对齐方式时,计数器的计数方式。 对计数寄存器进行写操作将使它复位,计数器会立即开始加法计数,从周期寄存器和占空比寄存器的缓冲区里得到周期和占空比值,然

28、后根据设置的极性来输出。当相应的PWM通道被禁止输出(PWMEx=0)时,计数器不工作;当PWM 通道允许时,计数器会以计数寄存器中的值为起点开始计数。,周期寄存器-PWMPERx,每个PWM 通道都有一个独立的周期寄存器,周期寄存器中的值对应PWM 通道输出波形的周期。 此寄存器具有双重缓存功能,新输入的值被送到缓冲区,而不是立即生效,到下一个有效周期开始时才会有效,所以PWM 输出波形的周期在改变时不会产生无效波形。,占空比寄存器-PWMDTYx,每个PWM 通道都有一个独立的占空比寄存器,周期寄存器中的值对应PWM 通道输出波形的周期。 此寄存器同样是双重缓存的。 注意:读取寄存器会得到

29、最新一次写入的值,而不会返回当前的周期值。,关断寄存器-PWMSDN,PWM7ENA:PWM 紧急关断允许 当此位为1 时,通道7 会被强制配置为输入端口,并且允许紧急关断。只有当此位为1时,寄存器中的其它位才有意义。 PWM7INL: 紧急关断通道7的有效电平。1=高电平,0=低电平。 PWM7IN: PWM 通道7 的输入电平状态。 PWMLVL: PWM 紧急关断后的输出电平。1=高,0=低。 PWMRSTRT: PWM 重新启动。只有在当PWM 通道7 处于无效状态(非紧急关闭)时,才可以重新启动PWM 模块。把PWMRSTRT 置一,当计数器返回0 时,PWM 通道才开始运行。 PW

30、MIE: PWM 中断允许。1=允许,0=禁止。 PWMIF: PWM 中断标志。当PWM7ENA 被置位时,PWM 通道7 上电平的任意变化将产生中断并使PWMIF 置位。 1=PWM7IN输入有变化。0=PWM7IN 输入无变化。,PWM 的综合举例,利用PWM5 通道来做DA 转换输出变化的电压控制小灯的亮度。,void PWMInit(void) PWMPOL=0x20; /脉冲先高后低 PWMCLK=0x20; /使用sa 时钟源 PWMPRCLK=0x07; /时钟a 为总线8 分频 PWMCAE=0x00; /通道5 为左对齐输出模式 PWMCTL=0x00; /单独使用通道5,

31、非级联 PWMSCLA=0x05; /Clock SA=Clock A/(2*PWMSCLA),SA 为3kHz PWMPER5=0x64; /设定周期 ,PWM 的综合举例,void main(void) unsigned char i; unsigned long j=10000; SET_PLL(); /设置锁相环 EnableInterrupts; PWMInit(); /初始化PWM for(i=0;i0x64;i+) while(j-); j=10000; while(j-); j=10000; PWMDTY5=i; /设定占空比 PWME=0x20; /使能PWM ,4、增强型定

32、时器ECT模块,IC/OC的定义: Input Capture/Output Compare 输入捕获和输出比较 IC对外部的脉冲信号进行计数得到计数数值,根据数值可以计算出脉冲信号的宽度或周期。ECT模块有8个IC通道分别为IC0-IC7,IC0-IC3是标准的带有保持器的缓冲通道,而IC4-IC7不带有保持器。 OC输出具有精确宽度或周期的脉冲信号。通道为OC0-0C7。 ECT模块的外部引脚: 共有8个外部引脚,分别为IOC0IOC7,与PORTT复用。,ECT模块的组成,4 个带有16 位缓存的输入比较通道 4 个带有8 位缓存的脉冲累加器,也可以作为2个16 位的累加器使用 带有4

33、位预分频因子的16 位模数递减计数器 用户可选可抵御噪音的延迟计数器,三个例子,举三个例子讲述本节内容 流水灯显示 使用输入捕捉功能,对外来脉冲进行计数 使用输出比较功能,输出一个具有一定宽度的高电平脉冲,void TimerOverflow(void) unsigned char i=1,j=0x80; while(i!=0) /请见exp15,例一:流水灯的显示,例一:流水灯的显示,PORTB输出,调用函数,设置控制寄存器1,设置控制寄存器2,延时控制,ECT控制寄存器一,本例设置TSCR1=0x80。 TEN=1:主定时器使能。0=主定时器禁止,进入低功耗状态。 TSWAI=0:等待模式

34、时主定时器继续工作,方便调试。0=停止工作。 TSFRZ=0:冻结模式时主定时器继续工作。0=停止工作。 TFFCA=0:自动清除标志位。1=手动清除。 必须设置TSCR1才可以使主定时器工作,需要在ECT模块初始化时就设置好。,ECT控制寄存器二,本例设置TOI=0:禁止定时器溢出中断。1=允许。 TCRE=0:定时器自由运行。1=输出比较7引起复位。 PR2=1、PR1=1、PR0=1:分频系数=128。,ECT计数寄存器,TCNT为自由计数器的计数值,本例通过读取它的值实现延时。 这是一个16位的寄存器,最大值为65535。 while(TCNT!=0x0000); while(TCNT

35、=0x0000); 这两句的含义是:TCNT开始计数后值不为0,等待直到TCNT溢出返回0后,第一句继续,然后再等到到TCNT不为0,第二句继续。 如果没有第二句,则有可能灯“隔一个亮一个”。,例二:输入捕捉,利用输入捕捉0通道对外来的方波信号进行捕捉,采用中断的形式。中断发生后,读取捕捉后的计数值,并用LED灯指示中断成功。 通道0设置为输入捕捉,采用双沿触发,IC0开中断,可以进入中断服务程序。方波信号由PORTA_BIT6产生,PORTA_BIT6和IOC0硬件连接。,例二:输入捕捉,IC0的初始化: void ic_init(void) TSCR1= 0x90; /主定时器使能 TSC

36、R2=0x07; /分频因子=128 ICSYS=0x02; /IC缓冲使能 TIOS=0; /通道设置为输入捕获 TCTL4= 0xff; /采用上升、下降沿触发 TIE=0x00000001; /通道0开中断 本例使用了例一未使用的过寄存器:ICSYS、TIOS、TCTL4和TIE。,输入控制系统控制寄存器-ICSYS,SHxy=0:正常操作。1=通道x在通道y上产生同样的动作。 TFMOD=0:只要产生正确的输入捕获事件,TFLG1中的CxF位就置一。1=队列模式时才使用。 PACMX=0:8位脉冲累加器溢出后自动回0。1=不自动回0,停留在0XFF。脉冲累加器对IC通道捕获的有效边沿数

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

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

39、(i=0;i6000;i+) PORTA_BIT6=0; /循环中设置信号为低电平,产生方波 ,例二:输入捕捉,方波信号已经成功得产生了,下面是中断服务程序: #pragma CODE_SEG NON_BANKED void interrupt 8 ic0_int(void) TFLG1_C0F=1;/中断标志清除 ic4=TC0; /通过读TC0寄存器来响应中断,ic4为用户设置的变量 ic4=ic4-ic40;ic40=ic4; /得到脉冲宽度需要考虑溢出吗? PORTB=0x55; /用LED灯来指示已经进入了中断 /*以下放置其他代码*/ ,例三:输出比较,这里讲一个输出比较例子,目的

40、是通过OC0通道输出一个有一定宽度的脉冲。,OC0的初始化: void oc_init() TSCR2 = 0x07;/128分频,定时器溢出中断禁止 TIOS = 0xff; /所有通道作为输出比较通道 TIE = 0x00; /中断全部禁止 TSCR1= 0x90; /主定时器使能 TCTL2=0xaa; /TC0低电平 CFORC=0xff; /强制输出比较 ,例三:输出比较,void main(void) EnableInterrupts; oc_init(); /初始化函数调用 asm_main(); TCTL2_OM0=1; TCTL2_OL0=1; /OC0高电平 CFORC_F

41、OC0=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 对应的端口会有相应的输出。 如果需要用OMn 和OLn 来控

42、制相应定时器端口的输出,则OC7M 中的对应位必须清零。,5、同步外设接口SPI模块,串行通信的概念: 所谓串行通信是指外设和计算机间使用一根数据信号线一位一位地传输数据。 串行通信的优点: 通信线路少,在远距离通信时可以极大地降低成本,所以适合于远距离数据传送,也常用于速度要求不高的近距离数据传送。,5、同步外设接口SPI模块,常见串行通信: 异步串行通信SCI(通用异步收发UART) 同步串行外设接口SPI IIC(Inter-Integrated Circuit)总线 控制局域网CAN总线 USB PS/2 LIN(Local Interconnect Network)总线,同步和异步串

43、行通信的区别,同步串行通信-使用时钟信号(SPI)。以数据块(帧)为传输单位;双方使用同一时钟(主控方提供时钟,被控方接收时钟);数据格式:每个数据块前加12个同步字符(同步头)进行帧同步,一般采用CRC循环冗余校验码;同步通信的数据传输效率和传输速率较高,但硬件电路比较复杂; 异步串行通信-不使用时钟信号(SCI)。串行通信时的数据、控制和状态信息都使用同一根信号线传送;收发双方必须遵守共同的通信协议(通信规程);串行异步通信以字符为单位进行传输。,串行通信的数据传输方式,9S12系列单片机SPI的定义,SPI(Serial Peripheral Interface,串行外设接口)是一种高速

44、高效的同步串行接口技术,这种接口技术主要用于MCU 与外部的接口芯片交换数据,已逐渐成为一种工业接口标准。 MC9S12DG128有两个SPI 接口,分别占用PP 口(0-3 位)和PM 口(2-5 位),引脚号分别为1-4和70-73。,SPI引脚定义,SPI引脚: SCK 主机产生的同步时钟 MOSI 主机发送,从机接收 MISO 主机接收,从机发送 SS 主从机选择 注意: 注意,主从机选择信号是低电平有效。1-主机,0=从机。系统中只能有一个主机。 主机的MOSI、MISO分别和从机的MOSI,MISO连接。,SPI工作模式,主机模式: 主机产生时钟信号,用来同步主从双方的移位寄存器。

45、对主机来说,数据的收发是同步的,数据流向有可能是一个方向。 从机模式: 需要在时钟信号的作用下,SS必须有效。 双工模式(三线同步传输): 无论是主机模式还是从机模式都只用一个引脚传输数据。,SPI模块的寄存器,SPI控制寄存器一 SPICR1 SPI控制寄存器二 SPICR2 SPI状态寄存器 SPISR SPI波特率寄存器 SPIBR SPI数据寄存器 SPIDR,SPI控制寄存器一,SPIESPI中断使能位。1=中断允许,0=中断禁止。 SPESPI系统使能位。1=使用SPI,0=不使用SPI。 SPTIE发送中断使能。1=允许,0=禁止。 MSTR主从模式选择位。1=主机,0=从机。

46、CPOL时钟极性位。1=有效时钟为低,空闲为高,0=有效时钟为高,空闲为低。主从机必须匹配。,SPI控制寄存器1SPICR1,CPHASPI时钟相位控制。1=主机在SPSCK的第一个跳变开始驱动MOSI,从机应用它来启动数据发送。在连结几次SPI传送期间,从机的SS脚可保持为低电平;0=SS下跳用于启动从机数据发送,而第一个SPSCK跳变捕捉最高位。在一次SPI传送完毕,从机的SS脚必须返回高电平。 SSOE从机选择输出使能。跟MODF配合使用。,LSBFE最低位先发使能。1=先发最低位,0=先发最高位。,SS非下降沿启动,时钟信号启动,SPI控制寄存器二,MODFEN模式错误使能位。主机模式

47、MODFEN=0,则SS不作用于SPI。如8页表。从机模式下,无论MODFEN为何值,SS只作为输入。1-SS引脚使用,0-SS引脚不作用于SPI。 BIDIROE-在双工模式下(SPC0=1)输出使能。1-输出缓冲使能,0-输出缓冲禁止。 SPISWAI-SPI 在等待模式下停止位。1-等待模式停止,0-等待模式正常工作。 SPC0-串行引脚控制位0。控制正常和双工模式。,SPI 波特率寄存器,波特率-每秒钟数据传输的二进制位数bps。,SPPR2-SPPR0-SPI 波特率预分频位 SPR2-SPR0-SPI 波特率选择位,组合使用,SPI 状态寄存器,SPISR寄存器指示SPI的状态,并

48、且只读。,SPIF-SPIF 中断标志。1-中断发生,有数据存储到SPI数据寄存器-SPIDR;0-传输未完成。注意对此位清零的方法:当SPIF=1时,首先读SPISR的值,然后访问数据寄存器SPIDR。 SPTEF-SPI 发送空中断标志。1-SPI数据寄存器空(数据已发送);0-SPI数据寄存器非空。注意对此位清零的方法:当SPTEF=1时,首先读SPISR的值,然后写数据寄存器SPIDR。 MODF-模式错误标志。1-发生错误,0-无错误。当SPI 配置成主机模式并且模式错误检测使能(SPICR2 的MODFEN 位置位)时,如果SS 输入变低,该位置位。注意对此位清零的方法:当MODF

49、=1时,首先读SPISR的值,然后写SPI控制寄存器1。,SPI 数据寄存器,SPI 数据寄存器是SPI 数据的输入和输出寄存器。写该寄存器会允许一个字节进入队列并发送。如果SPI 被配置成主机,当前面的数据发送完成,排在队列的数据会立即被发送。SPISR 寄存器中的发送空标志SPTEF 表明SPI 数据寄存器准备接收新的数据。当SPIF=1 时SPIDR 中接收的数据是有效的,这时才可以读到有效数据。 注意,SPIEF=0时表示当前数据并未发送完成,不可写SPIDR寄存器,当SPIEF=1时,才可以写SPIDR寄存器以发送新数据。,SPI综合举例,单片机MC9S12DG128 的SPI1 接口和74HC164 连接,74HC164 是串入并出的8 位移位寄存器,用其来扩展并行输出口,74HC164 的输出作为数码管显示电路的段码,采用动态扫描显示。PT5 做74HC164 的片选信号。微控制器工作于

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

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1