96
第第第 第第第 MC9S12 MC9S12 第第第 第第第 I/O I/O 第第第第第第第 第第第第第第第

第六讲 MC9S12 单片机 I/O 接口和功能模块

  • Upload
    ashton

  • View
    97

  • Download
    0

Embed Size (px)

DESCRIPTION

第六讲 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 模块 - PowerPoint PPT Presentation

Citation preview

Page 1: 第六讲  MC9S12 单片机 I/O 接口和功能模块

第六讲 第六讲 MC9S12MC9S12 单片单片机机

I/OI/O 接口和功能模块接口和功能模块

Page 2: 第六讲  MC9S12 单片机 I/O 接口和功能模块

本讲内容简介本讲内容简介 11 、通用、通用 I/OI/O 接口模块接口模块 22 、模数转换、模数转换 A/DA/D 模块模块 33 、脉冲宽度调制、脉冲宽度调制 PWMPWM 模块模块 44 、增强型定时器、增强型定时器 ECTECT 模块模块 55 、同步外设接口、同步外设接口 SPISPI 模块模块 66 、串行通信接口、串行通信接口 SCISCI 模块模块

Page 3: 第六讲  MC9S12 单片机 I/O 接口和功能模块

每个模块对应的技术文档每个模块对应的技术文档 I/O 口模块

S12MEBIV3.PDF S12DTB128PIMV2.PDF 串行通信模块

S12SCIV2.PDF S12SPIV4.PDF S12IICV2.PDF ECT 模块

S12ECT16B8CV1.PDF A/D 模块

S12ATD10B8CV2.PDF PWM 模块

S12PWM8B8CV1.PDF MSCAN 模块

S12MSCANV2.PDF

Page 4: 第六讲  MC9S12 单片机 I/O 接口和功能模块

11 、通用、通用 I/OI/O 接口接口 MC9S12DG128BMC9S12DG128B 单片机单片机 I/OI/O 口口

PORTAPORTA 连接按键连接按键 PORTB PORTB 连接发光二极管连接发光二极管 PORTE PORTE 特殊功能特殊功能 PORTJ PORTJ 中断输入,没有中断输入,没有 PJ0-PJ5PJ0-PJ5 PORTP PORTP 中断输入,没有中断输入,没有 PP6PP6 PORTMPORTM 没有没有 PM6-PM7PM6-PM7 PORTTPORTT PORTSPORTS 没有没有 PS4-PS7PS4-PS7 PORTADPORTAD 只能输入只能输入

Page 5: 第六讲  MC9S12 单片机 I/O 接口和功能模块

11 、通用、通用 I/OI/O 接口接口 I/OI/O 口作为输入使用口作为输入使用

设置方向寄存器(设置方向寄存器( DDRxDDRx )为输入()为输入( 0X000X00 )) 随时读取随时读取 I/OI/O 口的数据寄存器(口的数据寄存器( PORTxPORTx ))

I/OI/O 口作为输出使用口作为输出使用 设置方向寄存器(设置方向寄存器( DDRxDDRx )为输出()为输出( 0XFF0XFF )) 设置驱动能力寄存器(非必须)设置驱动能力寄存器(非必须) 拉电阻选择(非必须)拉电阻选择(非必须) 随时写入随时写入 I/OI/O 口数据寄存器(口数据寄存器( PORTxPORTx ))

Page 6: 第六讲  MC9S12 单片机 I/O 接口和功能模块

11 、通用、通用 I/OI/O 接口接口 I/OI/O 口作为外部中断接收使用口作为外部中断接收使用

开系统中断(开系统中断( CLICLI )) 设置方向寄存器为输入设置方向寄存器为输入 设置中断有效边沿(上升沿、下降沿)设置中断有效边沿(上升沿、下降沿) 使能中断使能中断 编写相关的中断服务程序编写相关的中断服务程序 有效边沿到来时,会自动进入中断服务程序有效边沿到来时,会自动进入中断服务程序

Page 7: 第六讲  MC9S12 单片机 I/O 接口和功能模块

11 、通用、通用 I/OI/O 接口接口 例一例一

设计一个设计一个 CC 语言程序,使教学板上发光二极管语言程序,使教学板上发光二极管 显示花等效果显示花等效果 显示循环流水灯效果显示循环流水灯效果

见见 exp12exp12

Page 8: 第六讲  MC9S12 单片机 I/O 接口和功能模块

11 、通用、通用 I/OI/O 接口接口 例二例二

使用 PORTJ 中断口功能的例子,本例的原理是:设置 A 口为输出口, PTA 的第 6 脚跟 PTJ 的第 6 脚硬件相连, PTB 输出,用来控制 8个 LED 灯, PTJ 开中断,并且设置为上升沿触发。首先 PTA 初始化为 0 , PTB 为 0xFF ,此时等灭。在大循环冲设置 PTA 第 6 位为高电平,产生中断,灯低 4 个亮,高 4 个不亮。使用单步运行查看效果。

见见 exp13exp13 。。

Page 9: 第六讲  MC9S12 单片机 I/O 接口和功能模块

22 、模数转换、模数转换 ATDATD 模块模块 A/DA/D 转换的基本概念转换的基本概念

模数转换定义:模数转换定义:将时间连续、幅值也连续的模拟信号转换为间离散、将时间连续、幅值也连续的模拟信号转换为间离散、幅值也离散的数字信号幅值也离散的数字信号

模数转换精度模数转换精度模数转换精度是指二进制的位数。模数转换精度是指二进制的位数。 9S129S12 的的 ADAD 模块有模块有两种精度可选,分别为两种精度可选,分别为 88 位精度(位精度( 0—2550—255 )和)和 1010 位位精度(精度( 0—10230—1023 )。)。

逐次逼近型逐次逼近型 A/DA/D 转换器的原理转换器的原理逐次逼近型逐次逼近型 A/D A/D 由一个比较器和由一个比较器和 D/A D/A 转换器通过逐转换器通过逐次比较逻辑构成,从次比较逻辑构成,从 MSB MSB 开始,顺序地对每一位将输开始,顺序地对每一位将输入电压与内置入电压与内置 D/A D/A 转换器输出进行比较,经转换器输出进行比较,经 n n 次比次比较而输出数字值。其电路规模属于中等。较而输出数字值。其电路规模属于中等。

Page 10: 第六讲  MC9S12 单片机 I/O 接口和功能模块

9S129S12 的的 A/DA/D 模块主要特性模块主要特性

88 位位 /10/10 位可选择的转换精度;位可选择的转换精度; 速度快,每进行一次速度快,每进行一次 1010 位的转换,位的转换,

仅仅需要仅仅需要 7nS7nS ;; 采样时间可编程;采样时间可编程; 左对齐左对齐 // 右对齐的数据格式,有符号右对齐的数据格式,有符号 //

无符号的转换结果;无符号的转换结果; 转换完毕可产生中断;转换完毕可产生中断; 使用使用 PAD7PAD7 外部触发控制。外部触发控制。

Page 11: 第六讲  MC9S12 单片机 I/O 接口和功能模块

9S129S12 的的 A/DA/D 模块外部引脚模块外部引脚 VRHVRH (( 6060 )、)、 VRLVRL (( 6161 )):: A/D A/D 转换模块转换模块

的参考高电压和参考低电压。实验板上,的参考高电压和参考低电压。实验板上, VRHVRH和和 VRLVRL 分别接分别接 VCCVCC 和和 GNDGND 。。

VDDAVDDA (( 5959 )、)、 VSSAVSSA (( 6262 )):: A/D A/D 模块提模块提供电源。实验板上,供电源。实验板上, VDDAVDDA 接到接到 VCCVCC ,, VSSAVSSA接到接到 GNDGND 。。

AN7/ETRIG/PAD7AN7/ETRIG/PAD7 (( 5858 )):模拟量输入通道:模拟量输入通道77 ,通用数字输入端口。它也可以被配置为,通用数字输入端口。它也可以被配置为 A/D A/D 转换的外部触发引脚。转换的外部触发引脚。

AN6/PAD6 - AN0/PAD0AN6/PAD6 - AN0/PAD0 (( 51-5751-57 )):模拟量:模拟量输入通道输入通道 6-06-0 ,通用数字输入端口。不可以被用,通用数字输入端口。不可以被用作外部触发引脚。作外部触发引脚。 PAD0PAD0 通过通过 50K50K 滑动变阻器接滑动变阻器接到到 VCCVCC ,调可变电阻可以调试,调可变电阻可以调试 A/DA/D 转换。转换。

Page 12: 第六讲  MC9S12 单片机 I/O 接口和功能模块

控制寄存器控制寄存器 2—ATDCTL22—ATDCTL2 ADPUADPU :: A/DA/D 模块的电源管理。模块的电源管理。 1=1= 正常模式,正常模式, 0=0= 低低

功耗模式。功耗模式。 AFFCAFFC :标志位快速清零。:标志位快速清零。 1=1= 对转换结果寄存器访问对转换结果寄存器访问

会自动清除标志位,会自动清除标志位, 0=0= 正常模式,访问结果寄存器前正常模式,访问结果寄存器前读状态寄存器读状态寄存器 11 可以清楚转换完成标志可以清楚转换完成标志 CCFCCF 。。

AWAIAWAI :等待时进入低功耗模式。:等待时进入低功耗模式。 1=1= 进入,进入, 0=0= 正常正常工作。工作。

ETRIGLEETRIGLE 、、 ETRIGPETRIGP :外部触发的边沿:外部触发的边沿 // 极性控制。极性控制。 ETRIGEETRIGE :上两位的使能位。允许在:上两位的使能位。允许在 PAD7PAD7 输入外部触输入外部触

发信号。发信号。 1=1=允许,允许, 0=0=禁止。禁止。 ASCIEASCIE :: A/DA/D队列转换完成中断允许。队列转换完成中断允许。 1=1=允许,并使允许,并使

标志位标志位 ASCIF=1ASCIF=1 ;; 0=0=禁止。禁止。 ASCIFASCIF :: A/D A/D 队列转换完成中断标志。队列转换完成中断标志。

Page 13: 第六讲  MC9S12 单片机 I/O 接口和功能模块

控制寄存器控制寄存器 3—ATDCTL33—ATDCTL3 S8CS8C 、、 S4CS4C 、、 S2CS2C 、、 S1CS1C :定义转换队列:定义转换队列

的长度。默认长度为的长度。默认长度为 44 。。 FIFOFIFO :结果寄存器先进先出模式。:结果寄存器先进先出模式。 1=FIF1=FIF

OO 模式,转换结果是连续存放的;模式,转换结果是连续存放的; 0=0= 非非 FIFIFOFO 模式,转换结果放在对应的寄存器中。模式,转换结果放在对应的寄存器中。

FRZ1FRZ1 、、 FRZ0FRZ0 :背景调试冻结模式允许。:背景调试冻结模式允许。这两个控制位就决定了,当遇到断点时,这两个控制位就决定了,当遇到断点时,A/D A/D 模块怎样反应。模块怎样反应。

Page 14: 第六讲  MC9S12 单片机 I/O 接口和功能模块

控制寄存器控制寄存器 4—ATDCTL44—ATDCTL4 SRES8SRES8 :转换精度选择。:转换精度选择。 1=81=8 位精度,位精度, 0=100=10 位精位精

度。度。 SMP1SMP1 、、 SMP0SMP0 :采样时间选择。可选择:采样时间选择。可选择 22 、、 44 、、 88 、、

1616 个个 A/DA/D 时钟周期。时钟周期。 PRS4PRS4 、、 PRS3PRS3 、、 PRS2PRS2 、、 PRS1PRS1 、、 PRS0PRS0 :: A/D A/D 时时钟分频因子的选择。钟分频因子的选择。

A/DA/D 时钟的计算公式如右图。时钟的计算公式如右图。 注意,注意, A/DA/D 模块的时钟频率要在模块的时钟频率要在 500KHz500KHz 和和 2MHz2MHz之间,所以在选择分频因子时一定要注意。之间,所以在选择分频因子时一定要注意。

Page 15: 第六讲  MC9S12 单片机 I/O 接口和功能模块

控制寄存器控制寄存器 5—ATDCTL55—ATDCTL5 DJMDJM :: 1616 位结果寄存器数据的对齐方式。位结果寄存器数据的对齐方式。 1=1= 右对齐,右对齐, 0=0= 左对左对

齐。齐。 DSGNDSGN :结果寄存器中数据有无符号。:结果寄存器中数据有无符号。 1=1= 有符号,有符号, 0=0= 无符号。无符号。 SRES8SRES8 、、 DJM DJM 和和 DSGN DSGN 三位配合起来使用,决定了结果寄存三位配合起来使用,决定了结果寄存

器中数据的格式,一共有器中数据的格式,一共有 88 种情况。种情况。 SCANSCAN :连续转换队列的模式。此位定义了:连续转换队列的模式。此位定义了 A/D A/D 转换是连续进转换是连续进

行还是只进行一次。行还是只进行一次。 1=1= 连续队列转换;连续队列转换; 0=0= 单次队列转换。单次队列转换。 MULTMULT :当这位为:当这位为 0 0 时,时, ATD ATD 的队列控制器只从指定的输入的队列控制器只从指定的输入

通道进行采样,可以使用通道进行采样,可以使用 ATDCTL5ATDCTL5 寄存器中的寄存器中的 CCCC 、、 CB CB 和和 CCA A 三位来指定需要采样的模拟量输入通道。当这位为三位来指定需要采样的模拟量输入通道。当这位为 1 1 时,则时,则对多个的通道进行采样,每次采样的通道数量由对多个的通道进行采样,每次采样的通道数量由 S8CS8C 、、 S4CS4C 、、S2C S2C 和和 S1C S1C 控制位来指定,第一个采样通道由控制位来指定,第一个采样通道由 CCCC 、、 CB CB 和和 CCA A 控制位来指定,其它采样通道由通道选择码控制位来指定,其它采样通道由通道选择码 CCCC 、、 CB CB 和和 CA CA 的增加来决定。的增加来决定。

CCCC 、、 CBCB 、、 CACA :模拟输入通道选择码。和:模拟输入通道选择码。和 MULTMULT 配合使用。配合使用。

Page 16: 第六讲  MC9S12 单片机 I/O 接口和功能模块

状态寄存器状态寄存器 0—ATDSTAT00—ATDSTAT0 SCFSCF :队列完成标志。置位条件:当一个队列转换完毕后;如果:队列完成标志。置位条件:当一个队列转换完毕后;如果处在处在 SCANSCAN 模式,则每次都置位。清零条件:对此位写一;写模式,则每次都置位。清零条件:对此位写一;写 AATDCTL5TDCTL5 ,开始一个新的对列;,开始一个新的对列; AFFC=1AFFC=1 (标志快速清除)且(标志快速清除)且读结果寄存器。读结果寄存器。

ETORFETORF :外部触发溢出标志。置位条件:处于边沿触发模式时,:外部触发溢出标志。置位条件:处于边沿触发模式时,如果第一个边沿触发的队列转换正在进行,而这时却检测到了第如果第一个边沿触发的队列转换正在进行,而这时却检测到了第二个有效的边沿。清零条件:对此位写一;写控制寄存器二个有效的边沿。清零条件:对此位写一;写控制寄存器 22 、、 33或或 44 ,终止当前队列;写控制寄存器,终止当前队列;写控制寄存器 55 ,开始一个新队列。,开始一个新队列。

FIFORFIFOR :: FIFO FIFO 溢出标志。如果转换完成标志(溢出标志。如果转换完成标志( CCFCCF )在没有)在没有被清零时结果寄存器被写入新值(覆盖),则置位。清零条件:被清零时结果寄存器被写入新值(覆盖),则置位。清零条件:对此位写一;写控制寄存器对此位写一;写控制寄存器 55 ,开始一个新队列。,开始一个新队列。 1=1= 有有 FIFOFIFO溢出,溢出, 0=0= 无无 FIFOFIFO溢出。溢出。

CC2CC2 、、 CC1CC1 、、 CC0CC0 :转换计数器。代表了哪个结果寄存器将要:转换计数器。代表了哪个结果寄存器将要接收当前转换的结果。非接收当前转换的结果。非 FIFO FIFO 模式(模式( FIFO=0FIFO=0 ),这),这 3 3 位的位的初始值为初始值为 00 ,计数完成后又会回到初始值。,计数完成后又会回到初始值。 FIFO FIFO 模式(模式( FIFOFIFO=1=1 ),转换计数器处于循环计数状态。),转换计数器处于循环计数状态。

Page 17: 第六讲  MC9S12 单片机 I/O 接口和功能模块

状态寄存器状态寄存器 1—ATDSTAT11—ATDSTAT1 CCFxCCFx : : xx 通道的转换完成标志。通道的转换完成标志。 1=1= 完成完成队列中的第队列中的第 x x 个转换,结果存储在个转换,结果存储在 ATDDATDDRx Rx 寄存器中;寄存器中; 0=0= 转换未完成。转换未完成。

清零条件:写控制寄存器清零条件:写控制寄存器 55 ,开始一个新,开始一个新队列;队列; AFFC=1AFFC=1 ,对结果寄存器访问;,对结果寄存器访问; AFAFFC=0FC=0 ,首先读状态寄存器,首先读状态寄存器 11 ,然后访问结,然后访问结果寄存器。果寄存器。

Page 18: 第六讲  MC9S12 单片机 I/O 接口和功能模块

输入允许寄存器输入允许寄存器 --ATDDIEN--ATDDIEN IENxIENx :通道:通道 x x 输入数字允许。这输入数字允许。这 88 个控个控

制位控制了从模拟量输入端口到数据寄存制位控制了从模拟量输入端口到数据寄存器的数字输入缓冲区。器的数字输入缓冲区。 1=1= 缓冲区有效;缓冲区有效; 00== 无效。无效。当端口作为模拟量输入端口时,也可以打当端口作为模拟量输入端口时,也可以打开数字缓冲区,但是会增加功耗。开数字缓冲区,但是会增加功耗。

Page 19: 第六讲  MC9S12 单片机 I/O 接口和功能模块

数字输入寄存器数字输入寄存器 PORTADPORTAD PTADxPTADx :: A/D A/D 模块的第模块的第 x x 个通道(个通道( ANxANx )的数字输入。)的数字输入。当对应通道的数字输入允许时,此位返回了相应引脚上的当对应通道的数字输入允许时,此位返回了相应引脚上的电平逻辑值。电平逻辑值。

注意,引脚上的电平必须和注意,引脚上的电平必须和 VRHVRH或或 VRLVRL匹配,否则将匹配,否则将返回一个不确定的值。返回一个不确定的值。

如果响应通道的输入缓冲区无效(如果响应通道的输入缓冲区无效( IENx=0IENx=0 ),读取操作),读取操作只返回只返回 11 。。

复位后,寄存器值等于复位后,寄存器值等于 $FF$FF 。。 注意,注意, PORTADPORTAD 端口模拟量和数字量是可以复用的。当端口模拟量和数字量是可以复用的。当

输入模拟量时,会把模拟信号直接送到输入模拟量时,会把模拟信号直接送到 A/D A/D 转换器;当转换器;当输入数字量时,会把外部数字信号送到输入数字量时,会把外部数字信号送到 PORTAD PORTAD 寄存器寄存器以供读取。以供读取。

Page 20: 第六讲  MC9S12 单片机 I/O 接口和功能模块

A/DA/D 转换结果寄存器—转换结果寄存器— ATDDRATDDRxx

ATDDR0—ATDDR7 : 0—7 通道的结果寄存器。 A/D 转换的结果需要从这几个寄存器中读取。每个 16 位寄存器可以分成 2 个 8 位的寄存器来读取,分别为 ATDDRxH和 ATDDRxL 。

注意转换结果在这 8 个 16 位寄存器中的存储格式。以 10位左、右对齐为例:

左对齐 10 位数据

右对齐 10 位数据

另外还要注意有符号数据和无符号数据的区别。

√√ √√ √√ √√ √√ √√ √√ √√ √√ √√ ×× ×× ×× ×× ×× ××

×× ×× ×× ×× ×× ×× √√ √√ √√ √√ √√ √√ √√ √√ √√ √√

Page 21: 第六讲  MC9S12 单片机 I/O 接口和功能模块

A/DA/D 转换综合举例转换综合举例 使用教学板上电位器调试并观察使用教学板上电位器调试并观察 A/DA/D 转换转换

结果。结果。 请见请见 exp14exp14 。。

Page 22: 第六讲  MC9S12 单片机 I/O 接口和功能模块

33 、脉冲宽度调制、脉冲宽度调制 PWMPWM 模块模块 PWMPWM 的基本概念的基本概念

PWMPWM (( Pulse Width ModulatePulse Width Modulate )即脉宽调)即脉宽调制,脉宽调制波是一种可用程序来控制波形占制,脉宽调制波是一种可用程序来控制波形占空比、周期、相位的波形。它在电动机驱动、空比、周期、相位的波形。它在电动机驱动、D/A D/A 变换等场合有着广泛的应用。变换等场合有着广泛的应用。

周期,占空比,相位。周期,占空比,相位。周期指上图中的周期指上图中的 ττ ,占空比为,占空比为 t/ τt/ τ ,相位指高,相位指高低电平。低电平。

Page 23: 第六讲  MC9S12 单片机 I/O 接口和功能模块

9S12 PWM9S12 PWM 模块特性模块特性 77 个周期、占空比可编程的个周期、占空比可编程的 PWMPWM 通道通道 专用的专用的 PWMPWM 计数器计数器 PWMPWM 功能的软件使能和禁止功能的软件使能和禁止 软件选择脉冲极性软件选择脉冲极性 PWMPWM波形输出对齐方式分为左对齐和居中对齐波形输出对齐方式分为左对齐和居中对齐 可以两个通道级联以获得更高的精度可以两个通道级联以获得更高的精度 可选择可选择 44 个时钟源,个时钟源, 44 个时钟源均为独立的分频个时钟源均为独立的分频

设置设置 紧急关断功能紧急关断功能

Page 24: 第六讲  MC9S12 单片机 I/O 接口和功能模块

9S12 PWM9S12 PWM 模块外部引脚模块外部引脚 共共 77 个外部引脚个外部引脚

PWM0—5PWM0—5 (( 44 、、 33 、、 22 、、 11 、、 8080 、、7979 ))

PWM7PWM7 (( 7878 ))

Page 25: 第六讲  MC9S12 单片机 I/O 接口和功能模块

9S12 PWM9S12 PWM 模块的时钟模块的时钟 四个时钟源四个时钟源 CLOCKACLOCKA 、、 CLOCKBCLOCKB 、、 CLOCKSCLOCKS

AA 、、 CLOCKSBCLOCKSB 。。 其中其中 CLOCKACLOCKA (( BB )可以把总线时钟进行)可以把总线时钟进行 11 、、

22 、、 44 、、 88 、、 1616 、、 3232 、、 6464 、、 128128 分频。分频。 CloClock A ck A 的预分频因子通过的预分频因子通过 PWMPRCLKPWMPRCLK 寄存器寄存器中的中的 PCKA2PCKA2 、、 PCKA1 PCKA1 和和 PCKA0 PCKA0 来选择,来选择, CClock B lock B 的预分频因子通过的预分频因子通过 PWMPRCLK PWMPRCLK 寄存寄存器中的器中的 PCKB2PCKB2 、、 PCKB1 PCKB1 和和 PCKB0 PCKB0 来选择。来选择。

总线时钟

CLOCKA

CLOCKB

CLOCKSA

CLOCKSB

分频

分频

分频

分频

Page 26: 第六讲  MC9S12 单片机 I/O 接口和功能模块

9S12 PWM9S12 PWM 模块的时钟模块的时钟 ,, CLOCKSACLOCKSA (( SBSB )从)从 CLOCKACLOCKA (( BB )进行分)进行分频的比例因子可以为频的比例因子可以为 11 、、 22 、、 44 、、 88 、、 1616 、、 3232 、、6464 、、 128128 、、 256256 ,最大可以进行,最大可以进行 512512 分频。计算公分频。计算公式为:式为: CLOCKSACLOCKSA (( SBSB )) =CLOCKA=CLOCKA (( BB )) /2*PRESCALER/2*PRESCALER

通道通道 00 、、 11 、、 44 、、 55 可选可选 CLOCKACLOCKA或或 CLOCKSACLOCKSA ;; 通道通道 22 、、 33 、、 66 、、 77 可选可选 CLOCKBCLOCKB或或 CLOCKSBCLOCKSB 。。

Page 27: 第六讲  MC9S12 单片机 I/O 接口和功能模块

9S12 PWM9S12 PWM 模块的计数器模块的计数器 每个通道的计时器都有一个每个通道的计时器都有一个 8 8 位计数器、位计数器、

一个一个 88 位周期寄存器和一个位周期寄存器和一个 8 8 位占空比寄位占空比寄存器。输出波形的周期受周期寄存器的控存器。输出波形的周期受周期寄存器的控制,当计数器的计数值等于周期寄存器的制,当计数器的计数值等于周期寄存器的值时,值时, PWMPWM 波周期结束。波周期结束。 PWMPWM 的波形的波形还跟占空比寄存器、输出极性和对齐方式还跟占空比寄存器、输出极性和对齐方式有关。有关。

PWMCNTx PWMCNTx 计数寄存器在计数寄存器在 PWM PWM 通道工通道工作时也可以被写入,但是暂时产生无效的作时也可以被写入,但是暂时产生无效的波形。波形。

Page 28: 第六讲  MC9S12 单片机 I/O 接口和功能模块

9S12 PWM9S12 PWM 模块的允许控制模块的允许控制 PWMPWM 的允许位相当于“开关”,可以允许和的允许位相当于“开关”,可以允许和禁止相应通道的禁止相应通道的 PWMPWM 输出。输出。

每个每个 PWM PWM 通道都对应一个允许(通道都对应一个允许( PWMEPWMExx ),只有),只有 PWMEx=1 PWMEx=1 时,对应的通道才输时,对应的通道才输出波形。出波形。

计数器计数结束的那一刻,只要计数器计数结束的那一刻,只要 PWMEx PWMEx 为为高电平,则会自动开始下一个波形的输出。高电平,则会自动开始下一个波形的输出。

Page 29: 第六讲  MC9S12 单片机 I/O 接口和功能模块

9S12 PWM9S12 PWM 模块的极性控制模块的极性控制 每个每个 PWM PWM 通道都对应一个极性设置位,通道都对应一个极性设置位,决定了决定了 PWM PWM 波的输出首先是高电平还是波的输出首先是高电平还是低电平。低电平。

当当 PPOLx PPOLx 被置位时,对应的通道首先输被置位时,对应的通道首先输出高电平,直到计数器计数到占空比寄存出高电平,直到计数器计数到占空比寄存器的值后变为低电平;反之则首先输出低器的值后变为低电平;反之则首先输出低电平,直到计数器计数到占空比寄存器的电平,直到计数器计数到占空比寄存器的值后变为高电平。值后变为高电平。

Page 30: 第六讲  MC9S12 单片机 I/O 接口和功能模块

左对齐的输出波型左对齐的输出波型 PWMCAE PWMCAE 寄存器中的寄存器中的 CAEx CAEx 位是输出格式的控制位是输出格式的控制

位。位。 CAEx=0CAEx=0 ,则对应通道的输出格式是左对齐的。,则对应通道的输出格式是左对齐的。 当使用左对齐格式输出时,当使用左对齐格式输出时, 8 8 位的计数器只使用加位的计数器只使用加法计数。当计数器加法计数到占空比寄存器中的值时,法计数。当计数器加法计数到占空比寄存器中的值时,PWM PWM 通道输出波形的电平就发生变化;当计数器加通道输出波形的电平就发生变化;当计数器加法计数到周期寄存器中的值时,计数器复位,输出波法计数到周期寄存器中的值时,计数器复位,输出波形电平发生变化,然后再次读取占空比和周期寄存器形电平发生变化,然后再次读取占空比和周期寄存器中的值作为下次计数参考使用。中的值作为下次计数参考使用。

注意,计数器是从注意,计数器是从 00 开始计数的,直到周期寄存器中开始计数的,直到周期寄存器中的值的值 -1-1 。。

Page 31: 第六讲  MC9S12 单片机 I/O 接口和功能模块

左对齐的输出波型左对齐的输出波型

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 / PWMPERx] × 100%

Page 32: 第六讲  MC9S12 单片机 I/O 接口和功能模块

左对齐的输出波型左对齐的输出波型下面举一个左对齐输出的例子:

假设时钟源频率 =10MHz (周期 =100ns ), PPOLx=0 , PWMPERx=4 , PWMDTYx=1 。

所以, PWMx 的频率 = 10MHz/4 = 2.5MHz , PWMx 的周期 =400ns , PWMx 的占空比 =3/4×100% = 75% 。

Page 33: 第六讲  MC9S12 单片机 I/O 接口和功能模块

居中对齐的输出波型居中对齐的输出波型 CAEx=1CAEx=1 ,则对应通道的输出格式是居中对齐的。,则对应通道的输出格式是居中对齐的。 在这个模式下,计数器既进行加法计数也进行减法在这个模式下,计数器既进行加法计数也进行减法

计数。当计数器加法计数到占空比寄存器中的值时,计数。当计数器加法计数到占空比寄存器中的值时,PWM PWM 通道输出波形的电平就发生变化;当加法计通道输出波形的电平就发生变化;当加法计数到周期寄存器中的值时,计数器会从加法计数改数到周期寄存器中的值时,计数器会从加法计数改变为减法计数;当计数器再次减法计数到占空比寄变为减法计数;当计数器再次减法计数到占空比寄存器中的值时,存器中的值时, PWM PWM 通道输出波形的电平再次发通道输出波形的电平再次发生变化;当计数器继续减法计数到生变化;当计数器继续减法计数到 $00 $00 时,计数器时,计数器重新变为加法计数器,然后再次读取占空比和周期重新变为加法计数器,然后再次读取占空比和周期寄存器中的值作为下次计数参考使用。寄存器中的值作为下次计数参考使用。

Page 34: 第六讲  MC9S12 单片机 I/O 接口和功能模块

居中对齐的输出波型居中对齐的输出波型

用时钟源的频率除以周期寄存器中值的 2 倍,得到的结果就是当前 PWM 输出波形的频率。

PWMx Frequency = Clock(A, B, SA, or SB) / (2×PWMPERx)若 Polarity = 0 (PPOLx=0)

Duty Cycle = [(PWMPERx-PWMDTYx)/PWMPERx] × 100%若 Polarity = 1 (PPOLx=1)

Duty Cycle = [PWMDTYx / PWMPERx] × 100%

Page 35: 第六讲  MC9S12 单片机 I/O 接口和功能模块

居中对齐的输出波型居中对齐的输出波型下面举一个居中对齐输出的例子:

假设时钟源频率 =10MHz (周期 =10ns ), PPOLx=0 , PWMPERx=4 , PWMDTYx=1 。

所以, PWMx 的频率 = 10MHz/4 = 2.5MHz , PWMx 的周期 =400ns , PWMx 的占空比 =3/4×100% = 75% 。

Page 36: 第六讲  MC9S12 单片机 I/O 接口和功能模块

9S12 PWM9S12 PWM 模块的通道级联模块的通道级联 如果需要如果需要 PWM PWM 输出波形的精度更高,则输出波形的精度更高,则

可以把可以把 2 2 个个 8 8 位位 PWM PWM 通道级联起来组通道级联起来组成成 1 1 个个 16 16 位通道。 位通道。 PWMCTL PWMCTL 寄存器中寄存器中有有 4 4 个控制位,可以完成这个级联的功能。个控制位,可以完成这个级联的功能。CON67CON67 、、 CON45CON45 、、 CON23 CON23 和和 CON01 CON01 可以把相应的两个通道级联起来。可以把相应的两个通道级联起来。

注意级联后高注意级联后高 88 位和低位和低 88 位的区别,控制位的区别,控制寄存器的区别。寄存器的区别。

Page 37: 第六讲  MC9S12 单片机 I/O 接口和功能模块

允许控制寄存器允许控制寄存器 --PWME--PWME

当 PWMEx 被置位后, PWM 输出就会立即开始。但是直到 PWM 模块时钟的下一个周期到来之时,才可以输出正确的波形,而在这之前的波形可能会是无效的。

当处于级联模式时, 8 个 8 位 PWM 通道组成 4 个 16 位的 PWM 通道, PWME1 、 PWME3 、 PWME5 和 PWME7 对这 4 个通道进行控制,而其它控制位处于无效状态。PWMEx :通道有效选择位。 1=允许 PWM 输出, 0=禁止。

Page 38: 第六讲  MC9S12 单片机 I/O 接口和功能模块

极性寄存器极性寄存器 --PWMPOL--PWMPOL

PWMPOL 寄存器随时都可以进行设置。如果某 PWM 通道在输出波形的过程中,波形的极性发生了改变,那么在两组波形的连接处可能会出现缩短或者拉伸了的不正常波形。PPOLx :通道 x 的输出极性。 1= 先高后低, 0= 先低后高。

Page 39: 第六讲  MC9S12 单片机 I/O 接口和功能模块

时钟选择寄存器时钟选择寄存器 --PWMCLK--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 。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 。

Page 40: 第六讲  MC9S12 单片机 I/O 接口和功能模块

预分频时钟选择寄存器预分频时钟选择寄存器

此寄存器用来选择 Clock A 和 B 的预分频因子。PWMPRCLK 寄存器随时都可以进行设置。如果某

PWM 通道在输出波形的过程中,此通道的所使用时钟的频率发生了改变,那么在两组波形的连接处可能会出现缩短或者拉伸了的不正常波形。

PCKB2 、 PCKB1 、 PCKB0 : Clock B 预分频因子的选择

PCKA2 、 PCKA1 、 PCKA0 : Clock A 预分频因子的选择

Page 41: 第六讲  MC9S12 单片机 I/O 接口和功能模块

居中对齐允许寄存器居中对齐允许寄存器 --PWMCA--PWMCAEE

此寄存器控制每个 PWM 通道输出波形的对齐方式,可以是左对齐或者居中对齐。如果 CAEx=1 ,则对应通道的输出波形为居中对齐方式;如果 CAEx=0 ,则为左对齐方式。注意只有当对应通道被禁止输出时,才可以设置此寄存器。

CAEx : 1= 对应 x 通道为居中对齐模式 0= 对应 x 通道为左对齐模式

Page 42: 第六讲  MC9S12 单片机 I/O 接口和功能模块

控制寄存器控制寄存器 --PWMCTL--PWMCTL

此寄存器可以实现把 8 个 8 位 PWM 通道级联为 4 个 16 位 PWM 通道。CONxy : x 通道和 y 通道级联,以获得更高的输出精度。x 通道作为高 8 位, y 通道作为低 8 位。这时只有通道 y 的时钟选择位、极性控制位、输出允许位和对齐方式选择位才有效;通道 x 的相应寄存器均无效。

1=级联模式0= 非级联模式

PFRZ :冻结模式 PWM 计数器停止。 1=停止, 0=继续运行。

Page 43: 第六讲  MC9S12 单片机 I/O 接口和功能模块

比例因子寄存器比例因子寄存器 A--PWMSCLAA--PWMSCLA

此寄存器用来提供产生时钟 Clock SA 的比例因子, Clock SA 是由 Clock A 经过一系列运算得来的,公式:

Clock SA = Clock A / (2×PWMSCLA)

当 PWMSCLA=0 时,默认比例因子为 256 ,此时 Clock SA 的频率等于 Clock A 的频率除以 512 。

Page 44: 第六讲  MC9S12 单片机 I/O 接口和功能模块

比例因子寄存器比例因子寄存器 B--PWMSCLBB--PWMSCLB

此寄存器用来提供产生时钟 Clock SB 的比例因子, Clock SB 是由 Clock B 经过一系列运算得来的,公式如下:

Clock SB = Clock B / (2×PWMSCLB)

当 PWMSCLB=0 时,默认比例因子为 256 ,此时 Clock SB 的频率等于 Clock B 的频率除以 512 。

Page 45: 第六讲  MC9S12 单片机 I/O 接口和功能模块

xx 通道计数寄存器通道计数寄存器 --PWMCNTx--PWMCNTx

每个 PWM 通道都有一个独立的加法 /减法计数器,计数器的频率跟时钟源的频率有关。可以在任意时刻来读取计数器里的值,而计数器的工作不会受到影响。★注意我们刚才讲过的左 /居中对齐方式时,计数器的计数方式。

对计数寄存器进行写操作将使它复位,计数器会立即开始加法计数,从周期寄存器和占空比寄存器的缓冲区里得到周期和占空比值,然后根据设置的极性来输出。当相应的 PWM 通道被禁止输出( PWMEx=0 )时,计数器不工作;当PWM 通道允许时,计数器会以计数寄存器中的值为起点开始计数。

Page 46: 第六讲  MC9S12 单片机 I/O 接口和功能模块

周期寄存器周期寄存器 --PWMPERx--PWMPERx

每个 PWM 通道都有一个独立的周期寄存器,周期寄存器中的值对应 PWM 通道输出波形的周期。

此寄存器具有双重缓存功能,新输入的值被送到缓冲区,而不是立即生效,到下一个有效周期开始时才会有效,所以 PWM 输出波形的周期在改变时不会产生无效波形。

Page 47: 第六讲  MC9S12 单片机 I/O 接口和功能模块

占空比寄存器占空比寄存器 --PWMDTYx--PWMDTYx

每个 PWM 通道都有一个独立的占空比寄存器,周期寄存器中的值对应 PWM 通道输出波形的周期。

此寄存器同样是双重缓存的。

注意:读取寄存器会得到最新一次写入的值,而不会返回当前的周期值。

Page 48: 第六讲  MC9S12 单片机 I/O 接口和功能模块

关断寄存器关断寄存器 --PWMSDN--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 通道才开始运行。PWMIE : PWM 中断允许。 1=允许, 0=禁止。PWMIF : PWM 中断标志。当 PWM7ENA 被置位时, PWM 通道7 上电平的任意变化将产生中断并使 PWMIF 置位。

1=PWM7IN 输入有变化。 0=PWM7IN 输入无变化。

Page 49: 第六讲  MC9S12 单片机 I/O 接口和功能模块

PWM PWM 的综合举例的综合举例 利用利用 PWM5 PWM5 通道来做通道来做 DA DA 转换输出变化转换输出变化

的电压控制小灯的亮度。的电压控制小灯的亮度。void PWMInit(void){PWMPOL=0x20; // 脉冲先高后低PWMCLK=0x20; // 使用 sa 时钟源PWMPRCLK=0x07; // 时钟 a 为总线 8 分频PWMCAE=0x00; // 通道 5 为左对齐输出模式PWMCTL=0x00; // 单独使用通道 5, 非级联PWMSCLA=0x05;

//Clock SA=Clock A/(2*PWMSCLA),SA 为 3kHzPWMPER5=0x64; // 设定周期}

Page 50: 第六讲  MC9S12 单片机 I/O 接口和功能模块

PWM PWM 的综合举例的综合举例void main(void){

unsigned char i;unsigned long j=10000;SET_PLL(); // 设置锁相环EnableInterrupts;PWMInit(); // 初始化 PWMfor(i=0;i<0x64;i++){

while(j--);j=10000;while(j--);j=10000;PWMDTY5=i; // 设定占空比PWME=0x20; // 使能 PWM

}}

Page 51: 第六讲  MC9S12 单片机 I/O 接口和功能模块

44 、增强型定时器、增强型定时器 ECTECT 模块模块 IC/OCIC/OC 的定义:的定义:

Input Capture/Output Compare Input Capture/Output Compare 输入捕获和输出输入捕获和输出比较比较

IC—IC— 对外部的脉冲信号进行计数得到计数数值,根据对外部的脉冲信号进行计数得到计数数值,根据数值可以计算出脉冲信号的宽度或周期。数值可以计算出脉冲信号的宽度或周期。 ECTECT 模块模块有有 88 个个 ICIC 通道分别为通道分别为 IC0-IC7IC0-IC7 ,, IC0-IC3IC0-IC3 是标准的是标准的带有保持器的缓冲通道,而带有保持器的缓冲通道,而 IC4-IC7IC4-IC7 不带有保持器。不带有保持器。

OC—OC— 输出具有精确宽度或周期的脉冲信号。通道为输出具有精确宽度或周期的脉冲信号。通道为OC0-0C7OC0-0C7 。。

ECTECT 模块的外部引脚:模块的外部引脚: 共有共有 88 个外部引脚,分别为个外部引脚,分别为 IOC0—IOC7IOC0—IOC7 ,与,与 PORTPORT

TT复用。复用。

Page 52: 第六讲  MC9S12 单片机 I/O 接口和功能模块

ECTECT 模块的组成模块的组成

4 4 个带有个带有 16 16 位缓存的输入比较通道位缓存的输入比较通道

4 4 个带有个带有 8 8 位缓存的脉冲累加器,也可以作为位缓存的脉冲累加器,也可以作为 22个个 16 16 位的累加器使用 位的累加器使用

带有带有 4 4 位预分频因子的位预分频因子的 16 16 位模数递减计数器 位模数递减计数器

用户可选可抵御噪音的延迟计数器用户可选可抵御噪音的延迟计数器

Page 53: 第六讲  MC9S12 单片机 I/O 接口和功能模块

三个例子三个例子 举三个例子讲述本节内容举三个例子讲述本节内容

流水灯显示流水灯显示 使用输入捕捉功能,对外来脉冲进行计数使用输入捕捉功能,对外来脉冲进行计数 使用输出比较功能,输出一个具有一定宽度的使用输出比较功能,输出一个具有一定宽度的

高电平脉冲高电平脉冲

Page 54: 第六讲  MC9S12 单片机 I/O 接口和功能模块

void TimerOverflow(void){

unsigned char i=1,j=0x80;while((i!=0)&&(j!=0)){PORTB=~(i|j);i<<=1;j>>=1;while(TCNT!=0x0000); // 延时while(TCNT==0x0000);}

}void main(void){

//SET_PLL(); //设置锁相环EnableInterrupts;TSCR1=0x80; //定时器使能TSCR2=0x07; //分频系数为 128DDRB=0xff;PORTB=0xff;for(;;){TimerOverflow();}

} // 请见 exp15

例一:流水灯的显示例一:流水灯的显示例一:流水灯的显示例一:流水灯的显示PORTB输出

调用函数

设置控制寄存器1

设置控制寄存器2

延时控制

Page 55: 第六讲  MC9S12 单片机 I/O 接口和功能模块

ECTECT 控制寄存器一控制寄存器一

本例设置 TSCR1=0x80。

TEN=1:主定时器使能。 0= 主定时器禁止,进入低功耗状态。

TSWAI=0:等待模式时主定时器继续工作,方便调试。 0= 停止工作。

TSFRZ=0:冻结模式时主定时器继续工作。 0= 停止工作。

TFFCA=0:自动清除标志位。 1= 手动清除。

必须设置 TSCR1 才可以使主定时器工作,需要在 ECT模块初始化时就设置好。

Page 56: 第六讲  MC9S12 单片机 I/O 接口和功能模块

ECTECT 控制寄存器二控制寄存器二

本例设置 TOI=0:禁止定时器溢出中断。 1= 允许。

TCRE=0:定时器自由运行。 1=输出比较 7引起复位。

PR2=1、 PR1=1、 PR0=1:分频系数 =128。

Page 57: 第六讲  MC9S12 单片机 I/O 接口和功能模块

ECTECT 计数寄存器计数寄存器

TCNT为自由计数器的计数值,本例通过读取它的值实现延时。

这是一个 16位的寄存器,最大值为 65535。 while(TCNT!=0x0000); while(TCNT==0x0000);这两句的含义是: TCNT开始计数后值不为 0,等待直到TCNT溢出返回 0后,第一句继续,然后再等到到 TCNT不为 0,第二句继续。如果没有第二句,则有可能灯“隔一个亮一个”。

Page 58: 第六讲  MC9S12 单片机 I/O 接口和功能模块

例二:输入捕捉例二:输入捕捉 利用输入捕捉利用输入捕捉 00 通道对外来的方波信号进通道对外来的方波信号进

行捕捉,采用中断的形式。中断发生后,行捕捉,采用中断的形式。中断发生后,读取捕捉后的计数值,并用读取捕捉后的计数值,并用 LEDLED 灯指示中灯指示中断成功。断成功。

通道通道 00 设置为输入捕捉,采用双沿触发,设置为输入捕捉,采用双沿触发, IIC0C0 开中断,可以进入中断服务程序。方波开中断,可以进入中断服务程序。方波信号由信号由 PORTA_BIT6PORTA_BIT6 产生,产生, PORTA_BITPORTA_BIT66 和和 IOC0IOC0 硬件连接。硬件连接。

Page 59: 第六讲  MC9S12 单片机 I/O 接口和功能模块

例二:输入捕捉例二:输入捕捉IC0 的初始化:void ic_init(void)

{

TSCR1= 0x90; // 主定时器使能

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

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

TIOS=0; //通道设置为输入捕获

TCTL4= 0xff; //采用上升、下降沿触发

TIE=0x00000001; //通道 0开中断

}

本例使用了例一未使用的过寄存器: ICSYS、 TIOS、 TCTL4和 TIE。

Page 60: 第六讲  MC9S12 单片机 I/O 接口和功能模块

输入控制系统控制寄存器输入控制系统控制寄存器 -ICSY-ICSYSS

SHxy=0:正常操作。 1=通道 x在通道 y上产生同样的动作。

TFMOD=0:只要产生正确的输入捕获事件, TFLG1中的 CxF位就置一。 1= 队列模式时才使用。

PACMX=0: 8位脉冲累加器溢出后自动回 0。 1=不自动回 0,停留在 0XFF。脉冲累加器对 IC通道捕获的有效边沿数量进行计数。

BUFEN=1:使用输入捕获缓冲区。 0=不使用。

LATQ=0:输入捕获队列模式使能。产生一次成功的输入捕获时, IC通道寄存器中保留的计数值会被送到保持器中,然后 IC寄存器会接收新的计数值。 1= 锁存模式使能。

Page 61: 第六讲  MC9S12 单片机 I/O 接口和功能模块

IC/OCIC/OC 选择寄存器选择寄存器 --TIOS--TIOS

TIOS=0: 设置相应的通道为输入捕获。

IOSx: 1=通道 x为输出比较;

0=通道 x为输入捕获。

Page 62: 第六讲  MC9S12 单片机 I/O 接口和功能模块

控制寄存器控制寄存器 3/4—TCTL3/43/4—TCTL3/4

EDGnA/B:输入捕捉边沿控制。

本例设置 EDG0A=1, EDG0B=1。即 IC0通道采用上升,下降沿都触发。

n代表通道序号。

Page 63: 第六讲  MC9S12 单片机 I/O 接口和功能模块

定时器中断使能寄存器定时器中断使能寄存器 -TIE-TIE

CxI: 1=第 x个通道中断允许; 0=第 x个通道中断禁止。

本例设置 C0I=1,把通道 0的中断打开,这样能够使外部信号引发 IC0中断,并进入相应的服务程序进行处理。

Page 64: 第六讲  MC9S12 单片机 I/O 接口和功能模块

例二:输入捕捉例二:输入捕捉初始化好后,需要在main 函数中调用初始化函数 ic_init()。以下是在main 函数中,如何使用 PORTA_BIT6来产生一个方波信号。DDRA=0xff; //设置 PORTA的方向寄存器,为输出PORTA=0x00; //PORTA的输出初始化为低电平DDRB=0xff; //PORTB设置为 LED灯的控制信号PORTB=0xff; //LED全灭for(;;){

for(i=0;i<6000;i++){

PORTA_BIT6=1;//循环中设置信号为高电平}for(i=0;i<6000;i++){PORTA_BIT6=0; //循环中设置信号为低电平,产生方波 }

}

Page 65: 第六讲  MC9S12 单片机 I/O 接口和功能模块

例二:输入捕捉例二:输入捕捉方波信号已经成功得产生了,下面是中断服务程序:

#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灯来指示已经进入了中断

/*以下放置其他代码 */

}

Page 66: 第六讲  MC9S12 单片机 I/O 接口和功能模块

例三:输出比较例三:输出比较这里讲一个输出比较例子,目的是通过 OC0通道输出一个有一

定宽度的脉冲。

OC0的初始化:void oc_init(){

TSCR2 = 0x07;//128分频,定时器溢出中断禁止TIOS = 0xff; // 所有通道作为输出比较通道TIE = 0x00; //中断全部禁止TSCR1= 0x90; // 主定时器使能TCTL2=0xaa; //TC0低电平CFORC=0xff; //强制输出比较

}

Page 67: 第六讲  MC9S12 单片机 I/O 接口和功能模块

例三:输出比较例三:输出比较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(;;){/*其他代码 */}

}

Page 68: 第六讲  MC9S12 单片机 I/O 接口和功能模块

强制输出比较寄存器强制输出比较寄存器 --CFORC--CFORC

FOCx—x通道强制输出比较

在相应的寄存器位写入强制输出比较命令,会立即使相应的通道处于输出比较状态。

Page 69: 第六讲  MC9S12 单片机 I/O 接口和功能模块

定时器控制寄存器定时器控制寄存器 1/2—TCTL11/2—TCTL1/2/2

OMn :输出模式 OLn :输出等级这 8 对控制位是用来指定输出比较的输出动作的,当OMn 和 OLn 二者任意一个为 1 时, OCn 对应的端口会有相应的输出。如果需要用 OMn 和 OLn 来控制相应定时器端口的输出,则OC7M 中的对应位必须清零。

Page 70: 第六讲  MC9S12 单片机 I/O 接口和功能模块

55 、同步外设接口、同步外设接口 SPISPI 模块模块 串行通信的概念:串行通信的概念:

所谓串行通信是指外设和计算机间使用一根数所谓串行通信是指外设和计算机间使用一根数据信号线一位一位地传输数据。据信号线一位一位地传输数据。

串行通信的优点:串行通信的优点: 通信线路少,在远距离通信时可以极大地降低通信线路少,在远距离通信时可以极大地降低

成本,所以适合于远距离数据传送,也常用于成本,所以适合于远距离数据传送,也常用于速度要求不高的近距离数据传送。速度要求不高的近距离数据传送。

Page 71: 第六讲  MC9S12 单片机 I/O 接口和功能模块

55 、同步外设接口、同步外设接口 SPISPI 模块模块 常见串行通信:常见串行通信:

异步串行通信异步串行通信 SCISCI (通用异步收发(通用异步收发 UARTUART )) 同步串行外设接口同步串行外设接口 SPISPI IICIIC (( Inter-Integrated CircuitInter-Integrated Circuit )总线)总线 控制局域网控制局域网 CANCAN总线总线 USBUSB PS/2PS/2 LINLIN (( Local Interconnect NetworkLocal Interconnect Network )总线)总线

Page 72: 第六讲  MC9S12 单片机 I/O 接口和功能模块

同步和异步串行通信的区别

同步串行通信 -使用时钟信号( SPI)。以数据块(帧)为传输单位;双方使用同一时钟(主控方提供时钟,被控方接收时钟);数据格式:每个数据块前加 1~2个同步字符(同步头)进行帧同步,一般采用 CRC循环冗余校验码;同步通信的数据传输效率和传输速率较高,但硬件电路比较复杂;

异步串行通信 -不使用时钟信号( SCI)。串行通信时的数据、控制和状态信息都使用同一根信号线传送;收发双方必须遵守共同的通信协议(通信规程);串行异步通信以字符为单位进行传输。

Page 73: 第六讲  MC9S12 单片机 I/O 接口和功能模块

串行通信的串行通信的数据传输方式

方式方式 图示图示 一句话总结一句话总结

全双工全双工 同时收发同时收发

半双工半双工 分时收发分时收发

单工单工 只发不收,只发不收,只收不发只收不发

Page 74: 第六讲  MC9S12 单片机 I/O 接口和功能模块

9S129S12 系列单片机系列单片机 SPISPI 的定义的定义 SPISPI (( Serial Peripheral InterfaceSerial Peripheral Interface ,串,串

行外设接口)是一种高速高效的同步串行行外设接口)是一种高速高效的同步串行接口技术,这种接口技术主要用于接口技术,这种接口技术主要用于 MCU MCU 与外部的接口芯片交换数据,已逐渐成为与外部的接口芯片交换数据,已逐渐成为一种工业接口标准。一种工业接口标准。

MC9S12DG128MC9S12DG128 有两个有两个 SPI SPI 接口,分别占接口,分别占用用 PP PP 口(口( 0-3 0-3 位)和位)和 PM PM 口(口( 2-5 2-5 位),位),引脚号分别为引脚号分别为 1-41-4 和和 70-7370-73 。。

Page 75: 第六讲  MC9S12 单片机 I/O 接口和功能模块

SPISPI 引脚定义引脚定义 SPISPI 引脚:引脚:

SCKSCK 主机产生的同步时钟主机产生的同步时钟 MOSIMOSI 主机发送,从机接收主机发送,从机接收 MISOMISO 主机接收,从机发送主机接收,从机发送 SSSS 主从机选择主从机选择

注意:注意: 注意,主从机选择信号是低电平有效。注意,主从机选择信号是低电平有效。 1-1-主机,主机,

0=0= 从机。系统中只能有一个主机。从机。系统中只能有一个主机。 主机的主机的 MOSIMOSI 、、 MISOMISO 分别和从机的分别和从机的 MOSIMOSI ,, MM

ISOISO 连接。连接。

Page 76: 第六讲  MC9S12 单片机 I/O 接口和功能模块

SPISPI 工作模式工作模式 主机模式:主机模式:

主机产生时钟信号,用来同步主从双方的移位主机产生时钟信号,用来同步主从双方的移位寄存器。对主机来说,数据的收发是同步的,寄存器。对主机来说,数据的收发是同步的,数据流向有可能是一个方向。数据流向有可能是一个方向。

从机模式:从机模式: 需要在时钟信号的作用下,需要在时钟信号的作用下, SSSS 必须有效。必须有效。

双工模式(三线同步传输):双工模式(三线同步传输): 无论是主机模式还是从机模式都只用一个引脚无论是主机模式还是从机模式都只用一个引脚传输数据。传输数据。

Page 77: 第六讲  MC9S12 单片机 I/O 接口和功能模块

SPISPI 模块的寄存器模块的寄存器

SPISPI 控制寄存器一控制寄存器一 SPICR1SPICR1 SPISPI 控制寄存器二控制寄存器二 SPICR2SPICR2 SPISPI 状态寄存器状态寄存器 SPISRSPISR SPISPI 波特率寄存器波特率寄存器 SPIBRSPIBR SPISPI 数据寄存器数据寄存器 SPIDRSPIDR

Page 78: 第六讲  MC9S12 单片机 I/O 接口和功能模块

SPISPI 控制寄存器一控制寄存器一

SPIE—SPI中断使能位。 1=中断允许, 0=中断禁止。

SPE—SPI系统使能位。 1=使用 SPI, 0=不使用 SPI。

SPTIE—发送中断使能。 1= 允许, 0= 禁止。

MSTR—主从模式选择位。 1= 主机, 0=从机。

CPOL—时钟极性位。 1=有效时钟为低,空闲为高, 0=有效时钟为高,空闲为低。主从机必须匹配。

Page 79: 第六讲  MC9S12 单片机 I/O 接口和功能模块

SPISPI 控制寄存器控制寄存器 1—SPICR11—SPICR1CPHA—SPI时钟相位控制。 1= 主机在 SPSCK的第一个跳变开始驱动MOSI,从机应用它来启动数据发送。在连结几次 SPI传送期间,从机的 SS脚可保持为低电平; 0=SS下跳用于启动从机数据发送,而第一个 SPSCK跳变捕捉最高位。在一次 SPI传送完毕,从机的 SS脚必须返回高电平。

SSOE—从机选择输出使能。跟 MODF配合使用。

LSBFE—最低位先发使能。 1=先发最低位, 0=先发最高位。

SS非下降沿启动

时钟信号启动

Page 80: 第六讲  MC9S12 单片机 I/O 接口和功能模块

SPISPI 控制寄存器二控制寄存器二

MODFEN—模式错误使能位。主机模式MODFEN=0,则 SS不作用于 SPI。如 8页表。从机模式下,无论MODFEN为何值, SS只作为输入。 1-SS引脚使用, 0-SS引脚不作用于 SPI。

BIDIROE--在双工模式下( SPC0=1)输出使能。 1-输出缓冲使能, 0-输出缓冲禁止。

SPISWAI--SPI 在等待模式下停止位。 1-等待模式停止, 0-等待模式正常工作。

SPC0--串行引脚控制位 0。控制正常和双工模式。

Page 81: 第六讲  MC9S12 单片机 I/O 接口和功能模块

SPI SPI 波特率寄存器波特率寄存器波特率 --每秒钟数据传输的二进制位数 bps。

SPPR2-SPPR0--SPI 波特率预分频位

SPR2-SPR0--SPI 波特率选择位组合使用

Page 82: 第六讲  MC9S12 单片机 I/O 接口和功能模块

SPI SPI 状态寄存器状态寄存器SPISR寄存器指示 SPI的状态,并且只读。

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=1时,首先读 SPISR的值,然后写 SPI控制寄存器 1。

Page 83: 第六讲  MC9S12 单片机 I/O 接口和功能模块

SPI SPI 数据寄存器数据寄存器

SPI 数据寄存器是 SPI 数据的输入和输出寄存器。写该寄存器会允许一个字节进入队列并发送。如果 SPI 被配置成主机,当前面的数据发送完成,排在队列的数据会立即被发送。 SPISR 寄存器中的发送空标志 SPTEF 表明 SPI 数据寄存器准备接收新的数据。当 SPIF=1 时 SPIDR 中接收的数据是有效的,这时才可以读到有效数据。

注意, SPIEF=0时表示当前数据并未发送完成,不可写 SPIDR寄存器,当SPIEF=1时,才可以写 SPIDR寄存器以发送新数据。

Page 84: 第六讲  MC9S12 单片机 I/O 接口和功能模块

SPISPI 综合举例综合举例单片机MC9S12DG128 的 SPI1 接口和 74HC164 连接, 74H

C164 是串入并出的 8 位移位寄存器,用其来扩展并行输出口, 74HC164 的输出作为数码管显示电路的段码,采用动态扫描显示。 PT5 做 74HC164 的片选信号。微控制器工作于主模式,向 SPIDR 写入数据启动 SPI 发送模块后,MCU 发送的数据进入 74HC164 的移位寄存器中。请见 exp17 。

SPI1 的 MOSI ,时钟,片选,接到74HC164

74HC164 ,串入并出。 74HC244 八

同相三态线驱动器

接 8 段 LED的驱动电路,低电平使某

段发光。

Page 85: 第六讲  MC9S12 单片机 I/O 接口和功能模块

SCISCI (串行通信接口)总线接口(串行通信接口)总线接口MC9S12DG128单片机有两个 SCI 模块。

SCI 模块仅仅复用了PS 口的 4 个 I/O 引脚( 0-3 位)作为 RXD0、 TXD0、 RXD1、 TXD1。当 SCI 接收器 /发送器被允许时, SCI 将控制 TxD 和 RxD 进入相应的操作,否则它们只能用作普通的 I/O 口。注意 SCI是异步串行通信口。

SCI的发送器与接收器都是双缓冲的。各自有工作使能和中断控制。可工作于全双工模式。

SCI的主要特性:

1、异步 2、全双工

3、不归零格式( NRZ) 4、 13个波特率控制位,选择更广

5、收、发双缓冲 6、具有 8个中断标志位的中断驱动操作

SCI的其他特性可以在寄存器的讲解时体会。

Page 86: 第六讲  MC9S12 单片机 I/O 接口和功能模块

SCISCI 的寄存器的寄存器波特率寄存器波特率寄存器 SCIBDHSCIBDH 和和 SCIBDLSCIBDL

波特率计算公式:BR=两寄存器组合值, 1-8191

注意此寄存器的赋值方法:如果只对 SCIBDH赋值是无效的,必须先对 SCIBDH赋值,再对 SCIBDL赋值才可以产生有效的 BR。如果不使用 SCIBDH,则可以直接给 SCIBDL赋值,因为 SCIBDH复位后默认为0,相当于赋 0值。

下面举个设置波特率为 9600的例子。

Page 87: 第六讲  MC9S12 单片机 I/O 接口和功能模块

波特率寄存器波特率寄存器 SCIBDHSCIBDH 和和 SCIBSCIBDLDL

设置波特率实质上是计算公式中 BR的值,再把BR的值赋给波特率寄存器。 BR的值计算是有技巧的,可以用一个公式完成。

BR值 = ((PLL 频率 / 2) / 目标波特率 / 16 )

注意 PLL 频率 /2 即总线频率。使用 PLL,总线频率 =PLL 频率 /2,不使用,则总线频率 =晶振频率 /2。

所以,如果需要设置 SCI0 波特率为 9600,并假设 PLL时钟频率 =40M的话,赋值程序为:

SCI0BDL = (unsigned char)((40000000UL / 2) / 9600 / 16 );

SCI0BDH不使用。

Page 88: 第六讲  MC9S12 单片机 I/O 接口和功能模块

SCISCI 控制寄存器控制寄存器 1-SCICR11-SCICR1

LOOPS-SCI回送模式。即“自发自收”。 1= 回送模式, 0=正常模式。

SCISWAI-等待模式停止控制。 1=等待模式 SCI 工作, 0=不工作。

RSRC-接收器来源。 1=来源于外部, 0=来源于内部。和 LOOPS配合。

M-数据字符长度。 1=数据位 9位, 0=数据位 8位。

WAKE- 唤醒条件位。 1=地址位唤醒(接收数据的最大显著位为 1), 0= 空闲线唤醒( RXD脚满足空闲条件)。

ILT-空闲线类型。这位决定 SCI什么时候开始计数“空闲字符”的位数。计数可从“起始位”或从“停止位”开始。从“起始位”开始计数,则“停止位”前的一串“ 1”可能产生错误的空闲线条件。从“停止位”开始计数,可避免错误的空闲线识别,但需要适当地同步发送操作。

PE- 奇偶校验使能。 1= 允许, 0= 禁止。

Page 89: 第六讲  MC9S12 单片机 I/O 接口和功能模块

SCISCI 控制寄存器控制寄存器 1-SCICR11-SCICR1PT- 奇偶校验类型。 1=奇校验, 0=偶校验。

一般此寄存器可以按默认值设置。

Page 90: 第六讲  MC9S12 单片机 I/O 接口和功能模块

SCISCI 控制寄存器控制寄存器 2-SCICR22-SCICR2

TIE- 传送寄存器空中断使能。 1=中断允许, 0=中断禁止。参考状态寄存器的 TDRE位。由 TDRE产生中断请求。

TCIE-发送完毕中断使能。 1=中断允许, 0=中断禁止。参考 TC位。

RIE-接收数据寄存器满中断使能。 1=中断允许, 0=中断禁止。参考 RDRF和 OR位。

ILIE-线路空闲中断使能。 1=中断允许, 0=中断禁止。参考 IDLE位。

TE-发送器使能。 1=发送使能, 0=发送禁止。

RE-接收器使能。 1=接收使能, 0=接收禁止。

RWU-接收器唤醒位。 1=唤醒允许并且关闭接收中断。通常,硬件通过自动清除RWU来唤醒接收器。 0=正常模式。

SBK- 传输终止位。 1=发送终止符, 0=不发送。

Page 91: 第六讲  MC9S12 单片机 I/O 接口和功能模块

SCISCI 状态寄存器状态寄存器 1-SCISR11-SCISR1

这个寄存器的 TDRE, TC, RDRF, IDLE和 OR位跟控制寄存器 2有关,控制寄存器 2中的对应位为中断使能位,状态寄存器 1中的位为中断状态位。

TDRE-发送数据寄存器空标志。当数据由 SCI数据寄存器移动到 SCI移位寄存器中时, TDRE=1。然后数据寄存器为空,可以接收新数据。通过读SCISR1 然后写 SCIDRL 来清 TDRE。TC-发送完成标志。当TC=1 时,读 SCISR1 然后写 SCIDRL 清除该位。当数据、报头或中止符进入队列并准备发送时, TC 自动被清除。 1=发送完毕, 0=正在发送。

RDRF-接收数据寄存器满标志。 1=数据寄存器接收到有效数据,可读; 0=数据寄存器中数据暂不可用。

IDLE-线路空闲标志。当 10 个连续的逻辑 1(M=0)或 11 个连续的逻辑 1(M=1)出现在接收器输入端, IDLE置位。。如果 IDLE 被清除,在一个空闲条件置位IDLE 前一个有效的帧必须再次置位 RDRF位。通过读 SCISR1 然后读 SCIDRL 来清除 IDLE。 1=接收空闲; 0=上次空闲状态后,接收器还没有处于有效状态。

Page 92: 第六讲  MC9S12 单片机 I/O 接口和功能模块

SCISCI 状态寄存器状态寄存器 1-SCISR11-SCISR1

OR-溢出标志。置位条件:在接收下一个数据前软件未读取数据寄存器,在接收到下一帧的停止位后, OR立即置位。移位寄存器中的数据丢失,但不会影响 SCIDR中的数据。可以通过读 SCISR1 然后读 SCIDRL 来清除。1=有溢出, 0=无溢出。

NF-噪声标志。 1=有噪声, 0=无噪声。通过读 SCISR1 然后读 SCIDRL 来清除NF 标志。

FE-接收器帧错误标志。当接收到的停止位是 0 时, FE=1。通过 SCISR1 然后读 SCIDRL 来清除 FE。 FE 禁止进一步的数据接收直到 FE 清除。 1= 检测到帧错误。 0= 未检测到帧错误。

PF- 奇偶错误标志。当奇偶使能位 PE=1 且接收数据的校验位和校验类型不符时, PF=1。读 SCISR1 然后读 SCIDRL 清除PF。 1= 检测到奇偶错误。0= 未检测到奇偶错误。

Page 93: 第六讲  MC9S12 单片机 I/O 接口和功能模块

SCISCI 状态寄存器状态寄存器 2-SCISR22-SCISR2

SCISR2包含 2个读写位, 1个只读位。

BK13-终止符长度。该位决定了发送的中止符长度是 10 或 11 位还是 13 或 14 位。帧错误的检测不影响该位。 1=中止符长度是 13 或 14 位。 0=中止符长度是 10 或 11 位。

TXDIR:单线模式下的发送器引脚数据检测。该位决定了 TXD 引脚在单线模式下是用来做输入还是输出。该位仅和单线模式有关。 1=单线模式下 TXD 引脚作为输入。 0=单线模式下 TXD 引脚作为输出。

RAF:接收器有效标志。当接收器在起始位的 RT1 时刻检测到逻辑 0 时,RAF=1。当接收器检测到空闲字符时 RAF 被清除。 0=没有接收操作。 1=正在接收。

Page 94: 第六讲  MC9S12 单片机 I/O 接口和功能模块

SCISCI 数据寄存器数据寄存器 -SCIDRH-SCIDRH(( LL ))

任意可读,读操作的是 SCI 接收寄存器;任意可写,写的是 SCI 发送数据寄存器,写 R8 位无效。

R8-接收位当 SCI 配置成 9 位数据格式(M=1)时, R8 是接收数据的第九位。T8-发送位当 SCI 配置成 9 位数据格式(M=1)时, T8 是发送数据的第九位。

Page 95: 第六讲  MC9S12 单片机 I/O 接口和功能模块

SCISCI 数据寄存器数据寄存器 -SCIDRH-SCIDRH(( LL ))R[7:0] :接收位

接收的数据位。T[7:0] :发送位发送的数据位。注意,读写时跟 C语言的读写操作是一样的。需要定义字节型变量。

注:如果 T8 的值和前面发送的一样, T8 就不必重新写入。直到重新写入不同的值, T8 才被更新。在 8 位数据模式中,只有 SCIDRL 需要访问。在 9 位数据模式中,用 8 位写指令操作时,要先写 SCIDRH,后写 SCIDRL。

SCISCI 示例见课本相关章节示例见课本相关章节

Page 96: 第六讲  MC9S12 单片机 I/O 接口和功能模块