




已阅读5页,还剩90页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第六讲MC9S12单片机I O接口和功能模块 本讲内容简介 1 通用I O接口模块2 模数转换A D模块3 脉冲宽度调制PWM模块4 增强型定时器ECT模块5 同步外设接口SPI模块6 串行通信接口SCI模块 每个模块对应的技术文档 I O口模块S12MEBIV3 PDFS12DTB128PIMV2 PDF串行通信模块S12SCIV2 PDFS12SPIV4 PDFS12IICV2 PDFECT模块S12ECT16B8CV1 PDFA D模块S12ATD10B8CV2 PDFPWM模块S12PWM8B8CV1 PDFMSCAN模块S12MSCANV2 PDF 1 通用I O接口 MC9S12DG128B单片机I O口PORTA连接按键PORTB连接发光二极管PORTE特殊功能PORTJ中断输入 没有PJ0 PJ5PORTP中断输入 没有PP6PORTM没有PM6 PM7PORTTPORTS没有PS4 PS7PORTAD只能输入 1 通用I O接口 I O口作为输入使用设置方向寄存器 DDRx 为输入 0X00 随时读取I O口的数据寄存器 PORTx I O口作为输出使用设置方向寄存器 DDRx 为输出 0XFF 设置驱动能力寄存器 非必须 拉电阻选择 非必须 随时写入I O口数据寄存器 PORTx 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为0 xFF 此时等灭 在大循环冲设置PTA第6位为高电平 产生中断 灯低4个亮 高4个不亮 使用单步运行查看效果 见exp13 2 模数转换ATD模块 A D转换的基本概念模数转换定义 将时间连续 幅值也连续的模拟信号转换为间离散 幅值也离散的数字信号模数转换精度模数转换精度是指二进制的位数 9S12的AD模块有两种精度可选 分别为8位精度 0 255 和10位精度 0 1023 逐次逼近型A D转换器的原理逐次逼近型A D由一个比较器和D A转换器通过逐次比较逻辑构成 从MSB开始 顺序地对每一位将输入电压与内置D A转换器输出进行比较 经n次比较而输出数字值 其电路规模属于中等 9S12的A D模块主要特性 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 PAD6 AN0 PAD0 51 57 模拟量输入通道6 0 通用数字输入端口 不可以被用作外部触发引脚 PAD0通过50K滑动变阻器接到VCC 调可变电阻可以调试A D转换 控制寄存器2 ATDCTL2 ADPU A D模块的电源管理 1 正常模式 0 低功耗模式 AFFC 标志位快速清零 1 对转换结果寄存器访问会自动清除标志位 0 正常模式 访问结果寄存器前读状态寄存器1可以清楚转换完成标志CCF AWAI 等待时进入低功耗模式 1 进入 0 正常工作 ETRIGLE ETRIGP 外部触发的边沿 极性控制 ETRIGE 上两位的使能位 允许在PAD7输入外部触发信号 1 允许 0 禁止 ASCIE A D队列转换完成中断允许 1 允许 并使标志位ASCIF 1 0 禁止 ASCIF A D队列转换完成中断标志 控制寄存器3 ATDCTL3 S8C S4C S2C S1C 定义转换队列的长度 默认长度为4 FIFO 结果寄存器先进先出模式 1 FIFO模式 转换结果是连续存放的 0 非FIFO模式 转换结果放在对应的寄存器中 FRZ1 FRZ0 背景调试冻结模式允许 这两个控制位就决定了 当遇到断点时 A D模块怎样反应 控制寄存器4 ATDCTL4 SRES8 转换精度选择 1 8位精度 0 10位精度 SMP1 SMP0 采样时间选择 可选择2 4 8 16个A D时钟周期 PRS4 PRS3 PRS2 PRS1 PRS0 A D时钟分频因子的选择 A D时钟的计算公式如右图 注意 A D模块的时钟频率要在500KHz和2MHz之间 所以在选择分频因子时一定要注意 控制寄存器5 ATDCTL5 DJM 16位结果寄存器数据的对齐方式 1 右对齐 0 左对齐 DSGN 结果寄存器中数据有无符号 1 有符号 0 无符号 SRES8 DJM和DSGN三位配合起来使用 决定了结果寄存器中数据的格式 一共有8种情况 SCAN 连续转换队列的模式 此位定义了A D转换是连续进行还是只进行一次 1 连续队列转换 0 单次队列转换 MULT 当这位为0时 ATD的队列控制器只从指定的输入通道进行采样 可以使用ATDCTL5寄存器中的CC CB和CA三位来指定需要采样的模拟量输入通道 当这位为1时 则对多个的通道进行采样 每次采样的通道数量由S8C S4C S2C和S1C控制位来指定 第一个采样通道由CC CB和CA控制位来指定 其它采样通道由通道选择码CC CB和CA的增加来决定 CC CB CA 模拟输入通道选择码 和MULT配合使用 状态寄存器0 ATDSTAT0 SCF 队列完成标志 置位条件 当一个队列转换完毕后 如果处在SCAN模式 则每次都置位 清零条件 对此位写一 写ATDCTL5 开始一个新的对列 AFFC 1 标志快速清除 且读结果寄存器 ETORF 外部触发溢出标志 置位条件 处于边沿触发模式时 如果第一个边沿触发的队列转换正在进行 而这时却检测到了第二个有效的边沿 清零条件 对此位写一 写控制寄存器2 3或4 终止当前队列 写控制寄存器5 开始一个新队列 FIFOR FIFO溢出标志 如果转换完成标志 CCF 在没有被清零时结果寄存器被写入新值 覆盖 则置位 清零条件 对此位写一 写控制寄存器5 开始一个新队列 1 有FIFO溢出 0 无FIFO溢出 CC2 CC1 CC0 转换计数器 代表了哪个结果寄存器将要接收当前转换的结果 非FIFO模式 FIFO 0 这3位的初始值为0 计数完成后又会回到初始值 FIFO模式 FIFO 1 转换计数器处于循环计数状态 状态寄存器1 ATDSTAT1 CCFx x通道的转换完成标志 1 完成队列中的第x个转换 结果存储在ATDDRx寄存器中 0 转换未完成 清零条件 写控制寄存器5 开始一个新队列 AFFC 1 对结果寄存器访问 AFFC 0 首先读状态寄存器1 然后访问结果寄存器 输入允许寄存器 ATDDIEN IENx 通道x输入数字允许 这8个控制位控制了从模拟量输入端口到数据寄存器的数字输入缓冲区 1 缓冲区有效 0 无效 当端口作为模拟量输入端口时 也可以打开数字缓冲区 但是会增加功耗 数字输入寄存器PORTAD PTADx A D模块的第x个通道 ANx 的数字输入 当对应通道的数字输入允许时 此位返回了相应引脚上的电平逻辑值 注意 引脚上的电平必须和VRH或VRL匹配 否则将返回一个不确定的值 如果响应通道的输入缓冲区无效 IENx 0 读取操作只返回1 复位后 寄存器值等于 FF 注意 PORTAD端口模拟量和数字量是可以复用的 当输入模拟量时 会把模拟信号直接送到A D转换器 当输入数字量时 会把外部数字信号送到PORTAD寄存器以供读取 A D转换结果寄存器 ATDDRx ATDDR0 ATDDR7 0 7通道的结果寄存器 A D转换的结果需要从这几个寄存器中读取 每个16位寄存器可以分成2个8位的寄存器来读取 分别为ATDDRxH和ATDDRxL 注意转换结果在这8个16位寄存器中的存储格式 以10位左 右对齐为例 左对齐10位数据右对齐10位数据另外还要注意有符号数据和无符号数据的区别 A D转换综合举例 使用教学板上电位器调试并观察A D转换结果 请见exp14 3 脉冲宽度调制PWM模块 PWM的基本概念PWM PulseWidthModulate 即脉宽调制 脉宽调制波是一种可用程序来控制波形占空比 周期 相位的波形 它在电动机驱动 D A变换等场合有着广泛的应用 周期 占空比 相位 周期指上图中的 占空比为t 相位指高低电平 9S12PWM模块特性 7个周期 占空比可编程的PWM通道专用的PWM计数器PWM功能的软件使能和禁止软件选择脉冲极性PWM波形输出对齐方式分为左对齐和居中对齐可以两个通道级联以获得更高的精度可选择4个时钟源 4个时钟源均为独立的分频设置紧急关断功能 9S12PWM模块外部引脚 共7个外部引脚PWM0 5 4 3 2 1 80 79 PWM7 78 9S12PWM模块的时钟 四个时钟源CLOCKA CLOCKB CLOCKSA CLOCKSB 其中CLOCKA B 可以把总线时钟进行1 2 4 8 16 32 64 128分频 ClockA的预分频因子通过PWMPRCLK寄存器中的PCKA2 PCKA1和PCKA0来选择 ClockB的预分频因子通过PWMPRCLK寄存器中的PCKB2 PCKB1和PCKB0来选择 总线时钟 CLOCKA CLOCKB CLOCKSA CLOCKSB 分频 分频 分频 分频 9S12PWM模块的时钟 CLOCKSA SB 从CLOCKA B 进行分频的比例因子可以为1 2 4 8 16 32 64 128 256 最大可以进行512分频 计算公式为 CLOCKSA SB CLOCKA B 2 PRESCALER通道0 1 4 5可选CLOCKA或CLOCKSA 通道2 3 6 7可选CLOCKB或CLOCKSB 9S12PWM模块的计数器 每个通道的计时器都有一个8位计数器 一个8位周期寄存器和一个8位占空比寄存器 输出波形的周期受周期寄存器的控制 当计数器的计数值等于周期寄存器的值时 PWM波周期结束 PWM的波形还跟占空比寄存器 输出极性和对齐方式有关 PWMCNTx计数寄存器在PWM通道工作时也可以被写入 但是暂时产生无效的波形 9S12PWM模块的允许控制 PWM的允许位相当于 开关 可以允许和禁止相应通道的PWM输出 每个PWM通道都对应一个允许 PWMEx 只有PWMEx 1时 对应的通道才输出波形 计数器计数结束的那一刻 只要PWMEx为高电平 则会自动开始下一个波形的输出 9S12PWM模块的极性控制 每个PWM通道都对应一个极性设置位 决定了PWM波的输出首先是高电平还是低电平 当PPOLx被置位时 对应的通道首先输出高电平 直到计数器计数到占空比寄存器的值后变为低电平 反之则首先输出低电平 直到计数器计数到占空比寄存器的值后变为高电平 左对齐的输出波型 PWMCAE寄存器中的CAEx位是输出格式的控制位 CAEx 0 则对应通道的输出格式是左对齐的 当使用左对齐格式输出时 8位的计数器只使用加法计数 当计数器加法计数到占空比寄存器中的值时 PWM通道输出波形的电平就发生变化 当计数器加法计数到周期寄存器中的值时 计数器复位 输出波形电平发生变化 然后再次读取占空比和周期寄存器中的值作为下次计数参考使用 注意 计数器是从0开始计数的 直到周期寄存器中的值 1 左对齐的输出波型 PWM波形频率和占空比的计算 PWMx频率 Clock A B SA orSB PWMPERx若Polarity 0 PPOLx 0 DutyCycle PWMPERx PWMDTYx PWMPERx 100 若Polarity 1 PPOLx 1 DutyCycle PWMDTYx PWMPERx 100 左对齐的输出波型 下面举一个左对齐输出的例子 假设时钟源频率 10MHz 周期 100ns PPOLx 0 PWMPERx 4 PWMDTYx 1 所以 PWMx的频率 10MHz 4 2 5MHz PWMx的周期 400ns PWMx的占空比 3 4 100 75 居中对齐的输出波型 CAEx 1 则对应通道的输出格式是居中对齐的 在这个模式下 计数器既进行加法计数也进行减法计数 当计数器加法计数到占空比寄存器中的值时 PWM通道输出波形的电平就发生变化 当加法计数到周期寄存器中的值时 计数器会从加法计数改变为减法计数 当计数器再次减法计数到占空比寄存器中的值时 PWM通道输出波形的电平再次发生变化 当计数器继续减法计数到 00时 计数器重新变为加法计数器 然后再次读取占空比和周期寄存器中的值作为下次计数参考使用 居中对齐的输出波型 用时钟源的频率除以周期寄存器中值的2倍 得到的结果就是当前PWM输出波形的频率 PWMxFrequency Clock A B SA orSB 2 PWMPERx 若Polarity 0 PPOLx 0 DutyCycle PWMPERx PWMDTYx PWMPERx 100 若Polarity 1 PPOLx 1 DutyCycle PWMDTYx PWMPERx 100 居中对齐的输出波型 下面举一个居中对齐输出的例子 假设时钟源频率 10MHz 周期 10ns PPOLx 0 PWMPERx 4 PWMDTYx 1 所以 PWMx的频率 10MHz 4 2 5MHz PWMx的周期 400ns PWMx的占空比 3 4 100 75 9S12PWM模块的通道级联 如果需要PWM输出波形的精度更高 则可以把2个8位PWM通道级联起来组成1个16位通道 PWMCTL寄存器中有4个控制位 可以完成这个级联的功能 CON67 CON45 CON23和CON01可以把相应的两个通道级联起来 注意级联后高8位和低8位的区别 控制寄存器的区别 允许控制寄存器 PWME 当PWMEx被置位后 PWM输出就会立即开始 但是直到PWM模块时钟的下一个周期到来之时 才可以输出正确的波形 而在这之前的波形可能会是无效的 当处于级联模式时 8个8位PWM通道组成4个16位的PWM通道 PWME1 PWME3 PWME5和PWME7对这4个通道进行控制 而其它控制位处于无效状态 PWMEx 通道有效选择位 1 允许PWM输出 0 禁止 极性寄存器 PWMPOL PWMPOL寄存器随时都可以进行设置 如果某PWM通道在输出波形的过程中 波形的极性发生了改变 那么在两组波形的连接处可能会出现缩短或者拉伸了的不正常波形 PPOLx 通道x的输出极性 1 先高后低 0 先低后高 时钟选择寄存器 PWMCLK PCLK7 PWM通道7时钟源选择 1 ClockSB 0 ClockB PCLK6 PWM通道6时钟源选择 1 ClockSB 0 ClockB PCLK5 PWM通道5时钟源选择 1 ClockSA 0 ClockA PCLK4 PWM通道4时钟源选择 1 ClockSA 0 ClockA PCLK3 PWM通道3时钟源选择 1 ClockSB 0 ClockB PCLK2 PWM通道2时钟源选择 1 ClockSB 0 ClockB PCLK1 PWM通道1时钟源选择 1 ClockSA 0 ClockA PCLK0 PWM通道0时钟源选择 1 ClockSA 0 ClockA 预分频时钟选择寄存器 此寄存器用来选择ClockA和B的预分频因子 PWMPRCLK寄存器随时都可以进行设置 如果某PWM通道在输出波形的过程中 此通道的所使用时钟的频率发生了改变 那么在两组波形的连接处可能会出现缩短或者拉伸了的不正常波形 PCKB2 PCKB1 PCKB0 ClockB预分频因子的选择PCKA2 PCKA1 PCKA0 ClockA预分频因子的选择 居中对齐允许寄存器 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的时钟选择位 极性控制位 输出允许位和对齐方式选择位才有效 通道x的相应寄存器均无效 1 级联模式0 非级联模式PFRZ 冻结模式PWM计数器停止 1 停止 0 继续运行 比例因子寄存器A PWMSCLA 此寄存器用来提供产生时钟ClockSA的比例因子 ClockSA是由ClockA经过一系列运算得来的 公式 ClockSA ClockA 2 PWMSCLA 当PWMSCLA 0时 默认比例因子为256 此时ClockSA的频率等于ClockA的频率除以512 比例因子寄存器B PWMSCLB 此寄存器用来提供产生时钟ClockSB的比例因子 ClockSB是由ClockB经过一系列运算得来的 公式如下 ClockSB ClockB 2 PWMSCLB 当PWMSCLB 0时 默认比例因子为256 此时ClockSB的频率等于ClockB的频率除以512 x通道计数寄存器 PWMCNTx 每个PWM通道都有一个独立的加法 减法计数器 计数器的频率跟时钟源的频率有关 可以在任意时刻来读取计数器里的值 而计数器的工作不会受到影响 注意我们刚才讲过的左 居中对齐方式时 计数器的计数方式 对计数寄存器进行写操作将使它复位 计数器会立即开始加法计数 从周期寄存器和占空比寄存器的缓冲区里得到周期和占空比值 然后根据设置的极性来输出 当相应的PWM通道被禁止输出 PWMEx 0 时 计数器不工作 当PWM通道允许时 计数器会以计数寄存器中的值为起点开始计数 周期寄存器 PWMPERx 每个PWM通道都有一个独立的周期寄存器 周期寄存器中的值对应PWM通道输出波形的周期 此寄存器具有双重缓存功能 新输入的值被送到缓冲区 而不是立即生效 到下一个有效周期开始时才会有效 所以PWM输出波形的周期在改变时不会产生无效波形 占空比寄存器 PWMDTYx 每个PWM通道都有一个独立的占空比寄存器 周期寄存器中的值对应PWM通道输出波形的周期 此寄存器同样是双重缓存的 注意 读取寄存器会得到最新一次写入的值 而不会返回当前的周期值 关断寄存器 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输入无变化 PWM的综合举例 利用PWM5通道来做DA转换输出变化的电压控制小灯的亮度 voidPWMInit void PWMPOL 0 x20 脉冲先高后低PWMCLK 0 x20 使用sa时钟源PWMPRCLK 0 x07 时钟a为总线8分频PWMCAE 0 x00 通道5为左对齐输出模式PWMCTL 0 x00 单独使用通道5 非级联PWMSCLA 0 x05 ClockSA ClockA 2 PWMSCLA SA为3kHzPWMPER5 0 x64 设定周期 PWM的综合举例 voidmain void unsignedchari unsignedlongj 10000 SET PLL 设置锁相环EnableInterrupts PWMInit 初始化PWMfor i 0 i 0 x64 i while j j 10000 while j j 10000 PWMDTY5 i 设定占空比PWME 0 x20 使能PWM 4 增强型定时器ECT模块 IC OC的定义 InputCapture OutputCompare输入捕获和输出比较IC 对外部的脉冲信号进行计数得到计数数值 根据数值可以计算出脉冲信号的宽度或周期 ECT模块有8个IC通道分别为IC0 IC7 IC0 IC3是标准的带有保持器的缓冲通道 而IC4 IC7不带有保持器 OC 输出具有精确宽度或周期的脉冲信号 通道为OC0 0C7 ECT模块的外部引脚 共有8个外部引脚 分别为IOC0 IOC7 与PORTT复用 ECT模块的组成 4个带有16位缓存的输入比较通道4个带有8位缓存的脉冲累加器 也可以作为2个16位的累加器使用带有4位预分频因子的16位模数递减计数器用户可选可抵御噪音的延迟计数器 三个例子 举三个例子讲述本节内容流水灯显示使用输入捕捉功能 对外来脉冲进行计数使用输出比较功能 输出一个具有一定宽度的高电平脉冲 voidTimerOverflow void unsignedchari 1 j 0 x80 while i 0 请见exp15 例一 流水灯的显示 例一 流水灯的显示 PORTB输出 调用函数 设置控制寄存器1 设置控制寄存器2 延时控制 ECT控制寄存器一 本例设置TSCR1 0 x80 TEN 1 主定时器使能 0 主定时器禁止 进入低功耗状态 TSWAI 0 等待模式时主定时器继续工作 方便调试 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 0 x0000 while TCNT 0 x0000 这两句的含义是 TCNT开始计数后值不为0 等待直到TCNT溢出返回0后 第一句继续 然后再等到到TCNT不为0 第二句继续 如果没有第二句 则有可能灯 隔一个亮一个 例二 输入捕捉 利用输入捕捉0通道对外来的方波信号进行捕捉 采用中断的形式 中断发生后 读取捕捉后的计数值 并用LED灯指示中断成功 通道0设置为输入捕捉 采用双沿触发 IC0开中断 可以进入中断服务程序 方波信号由PORTA BIT6产生 PORTA BIT6和IOC0硬件连接 例二 输入捕捉 IC0的初始化 voidic init void TSCR1 0 x90 主定时器使能TSCR2 0 x07 分频因子 128ICSYS 0 x02 IC缓冲使能TIOS 0 通道设置为输入捕获TCTL4 0 xff 采用上升 下降沿触发TIE 0 x00000001 通道0开中断 本例使用了例一未使用的过寄存器 ICSYS TIOS TCTL4和TIE 输入控制系统控制寄存器 ICSYS 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 锁存模式使能 IC OC选择寄存器 TIOS TIOS 0 设置相应的通道为输入捕获 IOSx 1 通道x为输出比较 0 通道x为输入捕获 控制寄存器3 4 TCTL3 4 EDGnA B 输入捕捉边沿控制 本例设置EDG0A 1 EDG0B 1 即IC0通道采用上升 下降沿都触发 n代表通道序号 定时器中断使能寄存器 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 i 6000 i PORTA BIT6 1 循环中设置信号为高电平 for i 0 i 6000 i PORTA BIT6 0 循环中设置信号为低电平 产生方波 例二 输入捕捉 方波信号已经成功得产生了 下面是中断服务程序 pragmaCODE SEGNON BANKEDvoidinterrupt8ic0 int void TFLG1 C0F 1 中断标志清除ic4 TC0 通过读TC0寄存器来响应中断 ic4为用户设置的变量ic4 ic4 ic40 ic40 ic4 得到脉冲宽度不需要考虑溢出PORTB 0 x55 用LED灯来指示已经进入了中断 以下放置其他代码 例三 输出比较 这里讲一个输出比较例子 目的是通过OC0通道输出一个有一定宽度的脉冲 OC0的初始化 voidoc init TSCR2 0 x07 128分频 定时器溢出中断禁止TIOS 0 xff 所有通道作为输出比较通道TIE 0 x00 中断全部禁止TSCR1 0 x90 主定时器使能TCTL2 0 xaa TC0低电平CFORC 0 xff 强制输出比较 例三 输出比较 voidmain 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 FOCx x通道强制输出比较在相应的寄存器位写入强制输出比较命令 会立即使相应的通道处于输出比较状态 定时器控制寄存器1 2 TCTL1 2 OMn 输出模式OLn 输出等级这8对控制位是用来指定输出比较的输出动作的 当OMn和OLn二者任意一个为1时 OCn对应的端口会有相应的输出 如果需要用OMn和OLn来控制相应定时器端口的输出 则OC7M中的对应位必须清零 5 同步外设接口SPI模块 串行通信的概念 所谓串行通信是指外设和计算机间使用一根数据信号线一位一位地传输数据 串行通信的优点 通信线路少 在远距离通信时可以极大地降低成本 所以适合于远距离数据传送 也常用于速度要求不高的近距离数据传送 5 同步外设接口SPI模块 常见串行通信 异步串行通信SCI 通用异步收发UART 同步串行外设接口SPIIIC Inter IntegratedCircuit 总线控制局域网CAN总线USBPS 2LIN LocalInterconnectNetwork 总线 同步和异步串行通信的区别 同步串行通信 使用时钟信号 SPI 以数据块 帧 为传输单位 双方使用同一时钟 主控方提供时钟 被控方接收时钟 数据格式 每个数据块前加1 2个同步字符 同步头 进行帧同步 一般采用CRC循环冗余校验码 同步通信的数据传输效率和传输速率较高 但硬件电路比较复杂 异步串行通信 不使用时钟信号 SCI 串行通信时的数据 控制和状态信息都使用同一根信号线传送 收发双方必须遵守共同的通信协议 通信规程 串行异步通信以字符为单位进行传输 串行通信的数据传输方式 9S12系列单片机SPI的定义 SPI SerialPeripheralInterface 串行外设接口 是一种高速高效的同步串行接口技术 这种接口技术主要用于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工作模式 主机模式 主机产生时钟信号 用来同步主从双方的移位寄存器 对主机来说 数据的收发是同步的 数据流向有可能是一个方向 从机模式 需要在时钟信号的作用下 SS必须有效 双工模式 三线同步传输 无论是主机模式还是从机模式都只用一个引脚传输数据 SPI模块的寄存器 SPI控制寄存器一SPICR1SPI控制寄存器二SPICR2SPI状态寄存器SPISRSPI波特率寄存器SPIBRSPI数据寄存器SPIDR SPI控制寄存器一 SPIE SPI中断使能位 1 中断允许 0 中断禁止 SPE SPI系统使能位 1 使用SPI 0 不使用SPI SPTIE 发送中断使能 1 允许 0 禁止 MSTR 主从模式选择位 1 主机 0 从机 CPOL 时钟极性位 1 有效时钟为低 空闲为高 0 有效时钟为高 空闲为低 主从机必须匹配 SPI控制寄存器1 SPICR1 CPHA SPI时钟相位控制 1 主机在SPSCK的第一个跳变开始驱动MOSI 从机应用它来启动数据发送 在连结几次SPI传送期间 从机的SS脚可保持为低电平 0 SS下跳用于启动从机数据发送 而第一个SPSCK跳变捕捉最高位 在一次SPI传送完毕 从机的SS脚必须返回高电平 SSOE 从机选择输出使能 跟MODF配合使用 LSBFE 最低位先发使能 1 先发最低位 0 先发最高位 SS非下降沿启动 时钟信号启动 SPI控制寄存器二 MODFEN 模式错误使能位 主机模式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的状态 并且只读 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 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的片选信号 微控制器工作于主模式 向SPIDR写入数据启动SPI发送模块后 MCU发送的数据进入74HC164的移位寄存器中 请见exp17 SPI1的MOSI 时钟 片选 接到74HC164 74HC164 串入并出 74HC244八同相三态线驱动器 接8段LED的驱动电路 低电平使某段发光 SCI 串行通信接口 总线接口 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的其他特性可以在寄存器的讲解时体会 SCI的寄存器波特率寄存器SCIBDH和SCIBDL 波特率计算公式 BR 两寄存器组合值 1 8191 注意此寄存器的赋值方法 如果只对SCIBDH赋值是无效的 必须先对SCIBDH赋值 再对SCIBDL赋值才可以产生有效的BR 如果不使用SCIBDH 则可以直接给SCIBDL赋值 因为SCIBDH复位后默认为0 相当于赋0值 下面举个设置波特率为9600的例子 波特率寄存器SCIBDH和SCIBDL 设置波特率实质上是计算公式中BR的值 再把BR的值赋给波特率寄存器 BR的值计算是有技巧的 可以用一个公式完成 BR值 PLL频率 2 目标波特率 16 注意PLL频率 2即总线频率 使用PLL 总线频率 PLL频率 2 不使用 则总线频率 晶振频率 2 所以 如果需要设置SCI0波特率为9600 并假设PLL时钟频率 40M的话 赋值程序为 SCI0BDL unsignedchar 40000000UL 2 9600 16 SCI0BDH不使用 SCI控制寄存器1 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 禁止 SCI控制寄存器1 SCICR1 PT 奇偶校验类型 1 奇校验 0 偶校验 一般此寄存器可以按默认值设置 SCI控制寄存器2 SCICR2 TIE 传送寄存器空中断使能 1 中断允许 0 中断禁止 参考状态寄存器的TDRE位
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 油船租赁合同(标准版)
- 居见服务合同(标准版)
- 院墙翻新改造方案范本
- 训练厅钢结构施工方案
- 纺纱织造与染整施工方案
- 基地修缮工程施工方案
- 晋城钢结构车棚施工方案
- 码头引桥拆除方案范本
- 陕西园林假山的施工方案
- 钢结构厂房的施工方案
- GB/T 7713.4-2025信息与文献编写规则第4部分:数据论文
- 法律职业资格考试客观题(试卷一)试题与参考答案(2025年)
- 狂犬疫苗使用培训课件
- 2025新疆伊犁州伊宁市中小学招聘各学科编外教师备考考试题库附答案解析
- 2023-2025年高考化学试题分类汇编:有机化合物(原卷版)
- 【2025年】郴州社区专职工作人员招聘考试笔试试卷【附答案】
- 2025发展对象考试题库附含答案
- 2025广东广州市越秀区大东街道办事处经济发展办招聘辅助人员(统计员岗)1人笔试备考试题及答案解析
- 2025-2026学年第一学期学校教导处工作计划:扎根常规提质效稳中求进促提升
- 主体结构劳务分包工程(八标段)施工组织设计
- 营养与慢性伤口愈合的关系
评论
0/150
提交评论