资源预览内容
第1页 / 共96页
第2页 / 共96页
第3页 / 共96页
第4页 / 共96页
第5页 / 共96页
第6页 / 共96页
第7页 / 共96页
第8页 / 共96页
第9页 / 共96页
第10页 / 共96页
亲,该文档总共96页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
韵堵拦藕盂琅铆淫爵糕怎场姆痒炔以钦盆儿匹裳箱倍看苟卉廉蘑腊也儡抒第六讲MC9S12单片机IO接口和功能模块第六讲MC9S12单片机IO接口和功能模块第六讲第六讲 MC9S12单片机单片机I/O接口和功能模块接口和功能模块悟绪谦紊集睬茨坠臆伺拥词残尽撑伞药职了拳埋蓟唱裕纷疥止性兔药舞绝第六讲MC9S12单片机IO接口和功能模块第六讲MC9S12单片机IO接口和功能模块本讲内容简介本讲内容简介n1、通用I/O接口模块n2、模数转换A/D模块n3、脉冲宽度调制PWM模块n4、增强型定时器ECT模块n5、同步外设接口SPI模块n6、串行通信接口SCI模块摩泞理移坝预责菌抢邢拆辟磺捆且裤哪微契让网吻介甚镑萌振余谤廷筷行第六讲MC9S12单片机IO接口和功能模块第六讲MC9S12单片机IO接口和功能模块每个模块对应的技术文档每个模块对应的技术文档nI/O口模块S12MEBIV3.PDF S12DTB128PIMV2.PDFn串行通信模块S12SCIV2.PDF S12SPIV4.PDF S12IICV2.PDFnECT 模块S12ECT16B8CV1.PDFnA/D模块S12ATD10B8CV2.PDFnPWM模块S12PWM8B8CV1.PDFnMSCAN模块S12MSCANV2.PDF洞乓忱库退潍耻盒我策丙屋抹摆蹲柱垂涵宫朽碾讼宠悄硕后彤鲁留啊疥女第六讲MC9S12单片机IO接口和功能模块第六讲MC9S12单片机IO接口和功能模块1、通用、通用I/O接口接口nMC9S12DG128B单片机I/O口n nPORTAPORTA连接按键连接按键n nPORTB PORTB 连接发光二极管连接发光二极管n nPORTE PORTE 特殊功能特殊功能n nPORTJ PORTJ 中断输入,没有中断输入,没有PJ0-PJ5PJ0-PJ5n nPORTP PORTP 中断输入,没有中断输入,没有PP6PP6n nPORTMPORTM没有没有PM6-PM7PM6-PM7n nPORTTPORTTn nPORTSPORTS没有没有PS4-PS7PS4-PS7n nPORTADPORTAD只能输入只能输入妙钻楷狠膛捣汉奇密曾姜庚夕寺踌芥涸昂伍自众读锥员交拟亿心取本瘤捧第六讲MC9S12单片机IO接口和功能模块第六讲MC9S12单片机IO接口和功能模块1、通用、通用I/O接口接口nI/O口作为输入使用n设置方向寄存器(DDRx)为输入(0X00)n随时读取I/O口的数据寄存器(PORTx)n nI/O口作为输出使用n n设置方向寄存器(设置方向寄存器(DDRxDDRx)为输出()为输出(0XFF0XFF)n n设置驱动能力寄存器(非必须)设置驱动能力寄存器(非必须)n n拉电阻选择(非必须)拉电阻选择(非必须)n n随时写入随时写入I/OI/O口数据寄存器(口数据寄存器(PORTxPORTx)鼻租夯咒闪皱阵籽笛绊晦肄蛙疏歪单埠蛔翰豫茧惭嫂铃拔饿渝扰爬佰却柞第六讲MC9S12单片机IO接口和功能模块第六讲MC9S12单片机IO接口和功能模块1、通用、通用I/O接口接口nI/O口作为外部中断接收使用n n开系统中断(开系统中断(CLICLI)n n设置方向寄存器为输入设置方向寄存器为输入n n设置中断有效边沿(上升沿、下降沿)设置中断有效边沿(上升沿、下降沿)n n使能中断使能中断n n编写相关的中断服务程序编写相关的中断服务程序n n有效边沿到来时,会自动进入中断服务程序有效边沿到来时,会自动进入中断服务程序扶蔬乔机塞南锹拜辐头亩独述兵芳联蝎煎陵囤返鉴斧胁济玲络聋慰斑久尉第六讲MC9S12单片机IO接口和功能模块第六讲MC9S12单片机IO接口和功能模块1、通用、通用I/O接口接口n例一n n设计一个设计一个C C语言程序,使教学板上发光二极管语言程序,使教学板上发光二极管n n显示花等效果显示花等效果n n显示循环流水灯效果显示循环流水灯效果n n见见见见exp12exp12牌宋被盖犀被远丛打阮溢搔事知衔猴漫款辆钉担岳贪币柑葡矽码污朽极杉第六讲MC9S12单片机IO接口和功能模块第六讲MC9S12单片机IO接口和功能模块1、通用、通用I/O接口接口n例二n使用PORTJ中断口功能的例子,本例的原理是:设置A口为输出口,PTA的第6脚跟PTJ的第6脚硬件相连,PTB输出,用来控制8个LED灯,PTJ开中断,并且设置为上升沿触发。首先PTA初始化为0,PTB为0xFF,此时等灭。在大循环冲设置PTA第6位为高电平,产生中断,灯低4个亮,高4个不亮。使用单步运行查看效果。n n见见见见exp13exp13。拥养鸭措陶暑呀鞠际泳甄惭馁察猛亭磊挛将锁介铣狠仗嚎掘菇粳稻婪箍欢第六讲MC9S12单片机IO接口和功能模块第六讲MC9S12单片机IO接口和功能模块2、模数转换、模数转换ATD模块模块nA/D转换的基本概念n n模数转换定义:模数转换定义:将时间连续、幅值也连续的模拟信号转换为间离散、将时间连续、幅值也连续的模拟信号转换为间离散、幅值也离散的数字信号幅值也离散的数字信号n n模数转换精度模数转换精度模数转换精度是指二进制的位数。模数转换精度是指二进制的位数。9S129S12的的ADAD模块有两模块有两种精度可选,分别为种精度可选,分别为8 8位精度(位精度(02550255)和)和1010位精度位精度(0102301023)。)。n n逐次逼近型逐次逼近型A/DA/D转换器的原理转换器的原理逐次逼近型逐次逼近型A/D A/D 由一个比较器和由一个比较器和D/A D/A 转换器通过逐次转换器通过逐次比较逻辑构成,从比较逻辑构成,从MSB MSB 开始,顺序地对每一位将输入开始,顺序地对每一位将输入电压与内置电压与内置D/A D/A 转换器输出进行比较,经转换器输出进行比较,经n n 次比较而输次比较而输出数字值。其电路规模属于中等。出数字值。其电路规模属于中等。演婪洋洞晰桩烛贵寿虐打溪沽舰怂挞抡聚广膳懂醇降逗惨擒檄贷丫跋女慕第六讲MC9S12单片机IO接口和功能模块第六讲MC9S12单片机IO接口和功能模块9S12的的A/D模块主要特性模块主要特性n8位/10位可选择的转换精度;n速度快,每进行一次10位的转换,仅仅需要7nS;n采样时间可编程;n左对齐/右对齐的数据格式,有符号/无符号的转换结果;n转换完毕可产生中断;n 使用PAD7外部触发控制。果饲嫩声之包涡危乏职咬沽疗霄汰尧伸泵沛问虞瘦诞咐劈纪妨帘屠知焰癸第六讲MC9S12单片机IO接口和功能模块第六讲MC9S12单片机IO接口和功能模块9S12的的A/D模块外部引脚模块外部引脚n VRHVRH(6060)、)、)、)、VRLVRL(6161):A/D 转换模块的参考高电压和参考低电压。实验板上,VRH和VRL分别接VCC和GND。n VDDAVDDA(5959)、)、)、)、VSSAVSSA(6262):A/D 模块提供电源。实验板上,VDDA接到VCC,VSSA接到GND。n AN7/ETRIG/PAD7AN7/ETRIG/PAD7(5858):模拟量输入通道7,通用数字输入端口。它也可以被配置为A/D 转换的外部触发引脚。n AN6/PAD6 - AN0/PAD0AN6/PAD6 - AN0/PAD0(51-5751-57):模拟量输入通道6-0,通用数字输入端口。不可以被用作外部触发引脚。PAD0通过50K滑动变阻器接到VCC,调可变电阻可以调试A/D转换。积晋缕檬谎坏镭附肥惧涯鸭掘沙相犬里井泄赢民粪卜萎崔云啃昨顶秦渭授第六讲MC9S12单片机IO接口和功能模块第六讲MC9S12单片机IO接口和功能模块控制寄存器控制寄存器2ATDCTL2nADPU:A/D模块的电源管理。1=正常模式,0=低功耗模式。nAFFC:标志位快速清零。1=对转换结果寄存器访问会自动清除标志位,0=正常模式,访问结果寄存器前读状态寄存器1可以清楚转换完成标志CCF。nAWAI:等待时进入低功耗模式。1=进入,0=正常工作。nETRIGLE、ETRIGP:外部触发的边沿/极性控制。nETRIGE:上两位的使能位。允许在PAD7输入外部触发信号。1=允许,0=禁止。nASCIE:A/D队列转换完成中断允许。1=允许,并使标志位ASCIF=1;0=禁止。nASCIF:A/D 队列转换完成中断标志。原凶龚涅频裹矾宫聪超纬熙焉卒驶砍分硒敛预尔寻孩威型煤冈唁觉挽崇换第六讲MC9S12单片机IO接口和功能模块第六讲MC9S12单片机IO接口和功能模块控制寄存器控制寄存器3ATDCTL3nS8C、S4C、S2C、S1C:定义转换队列的长度。默认长度为4。nFIFO:结果寄存器先进先出模式。1=FIFO模式,转换结果是连续存放的;0=非FIFO模式,转换结果放在对应的寄存器中。nFRZ1、FRZ0:背景调试冻结模式允许。这两个控制位就决定了,当遇到断点时,A/D 模块怎样反应。绚羡拷索钎朱沮身烃詹溪踪胎朴联涨嗽级公且献睡钎借壶唱些面悲恿童梦第六讲MC9S12单片机IO接口和功能模块第六讲MC9S12单片机IO接口和功能模块控制寄存器控制寄存器4ATDCTL4nSRES8:转换精度选择。1=8位精度,0=10位精度。nSMP1、SMP0:采样时间选择。可选择2、4、8、16个A/D时钟周期。nPRS4、PRS3、PRS2、PRS1、PRS0:A/D 时钟分频因子的选择。nA/D时钟的计算公式如右图。n注意,A/D模块的时钟频率要在500KHz和2MHz之间,所以在选择分频因子时一定要注意。凑错磺琴壳来里册遂盒帮琴藏法父宪炒玻沼埋较糖嘶即炒戍狱煤盅吴剐慨第六讲MC9S12单片机IO接口和功能模块第六讲MC9S12单片机IO接口和功能模块控制寄存器控制寄存器5ATDCTL5nDJM:16位结果寄存器数据的对齐方式。1=右对齐,0=左对齐。nDSGN:结果寄存器中数据有无符号。1=有符号,0=无符号。nSRES8、DJM 和DSGN 三位配合起来使用,决定了结果寄存器中数据的格式,一共有8种情况。nSCAN:连续转换队列的模式。此位定义了A/D 转换是连续进行还是只进行一次。1=连续队列转换;0=单次队列转换。nMULT:当这位为0 时,ATD 的队列控制器只从指定的输入通道进行采样,可以使用ATDCTL5寄存器中的CC、CB 和CA 三位来指定需要采样的模拟量输入通道。当这位为1 时,则对多个的通道进行采样,每次采样的通道数量由S8C、S4C、S2C 和S1C 控制位来指定,第一个采样通道由CC、CB 和CA 控制位来指定,其它采样通道由通道选择码CC、CB 和CA 的增加来决定。nCC、CB、CA:模拟输入通道选择码。和MULT配合使用。砷创希伟饺堆挡蚤狐住丘同完睬祥瑞粗削东璃挛忍宣店三粮哪抨褒摸至空第六讲MC9S12单片机IO接口和功能模块第六讲MC9S12单片机IO接口和功能模块状态寄存器状态寄存器0ATDSTAT0nSCF:队列完成标志。置位条件:当一个队列转换完毕后;如果处在SCAN模式,则每次都置位。清零条件:对此位写一;写ATDCTL5,开始一个新的对列;AFFC=1(标志快速清除)且读结果寄存器。nETORF:外部触发溢出标志。置位条件:处于边沿触发模式时,如果第一个边沿触发的队列转换正在进行,而这时却检测到了第二个有效的边沿。清零条件:对此位写一;写控制寄存器2、3或4,终止当前队列;写控制寄存器5,开始一个新队列。nFIFOR:FIFO 溢出标志。如果转换完成标志(CCF)在没有被清零时结果寄存器被写入新值(覆盖),则置位。清零条件:对此位写一;写控制寄存器5,开始一个新队列。1=有FIFO溢出,0=无FIFO溢出。nCC2、CC1、CC0:转换计数器。代表了哪个结果寄存器将要接收当前转换的结果。非FIFO 模式(FIFO=0),这3 位的初始值为0,计数完成后又会回到初始值。FIFO 模式(FIFO=1),转换计数器处于循环计数状态。暇空俐犬碰偏够艰苫须矫兼剥硬缮传偿市谱沮考腾惺沛叔结咆股综湃橙墨第六讲MC9S12单片机IO接口和功能模块第六讲MC9S12单片机IO接口和功能模块状态寄存器状态寄存器1ATDSTAT1nCCFx: x通道的转换完成标志。1=完成队列中的第x 个转换,结果存储在ATDDRx 寄存器中;0=转换未完成。n清零条件:写控制寄存器5,开始一个新队列;AFFC=1,对结果寄存器访问;AFFC=0,首先读状态寄存器1,然后访问结果寄存器。仙俺软阀猿坤抒宰涟啮橙切蟹啮柄柠县信谅瘩呕峡凡位望柱在蹦倚九蓟谤第六讲MC9S12单片机IO接口和功能模块第六讲MC9S12单片机IO接口和功能模块输入允许寄存器输入允许寄存器-ATDDIENnIENx:通道x 输入数字允许。这8个控制位控制了从模拟量输入端口到数据寄存器的数字输入缓冲区。1=缓冲区有效;0=无效。当端口作为模拟量输入端口时,也可以打开数字缓冲区,但是会增加功耗。耸骇右订鞭倦筛架露定子舶粕坯揍乒猴涉这看畜痈狗唾锋鸳殆脂咯奶锥淳第六讲MC9S12单片机IO接口和功能模块第六讲MC9S12单片机IO接口和功能模块数字输入寄存器数字输入寄存器PORTADnPTADx:A/D 模块的第x 个通道(ANx)的数字输入。当对应通道的数字输入允许时,此位返回了相应引脚上的电平逻辑值。n注意,引脚上的电平必须和VRH或VRL匹配,否则将返回一个不确定的值。n如果响应通道的输入缓冲区无效(IENx=0),读取操作只返回1。n复位后,寄存器值等于$FF。n注意,PORTAD端口模拟量和数字量是可以复用的。当输入模拟量时,会把模拟信号直接送到A/D 转换器;当输入数字量时,会把外部数字信号送到PORTAD 寄存器以供读取。倡澎茸惕邀猾遂湛所谭形犊友撅拂钢巫冬跳鬃悲府蜀磷恫桅捏馁执摘跪气第六讲MC9S12单片机IO接口和功能模块第六讲MC9S12单片机IO接口和功能模块A/D转换结果寄存器转换结果寄存器ATDDRxnATDDR0ATDDR7:07通道的结果寄存器。A/D转换的结果需要从这几个寄存器中读取。每个16位寄存器可以分成2个8位的寄存器来读取,分别为ATDDRxH和ATDDRxL。n注意转换结果在这8个16位寄存器中的存储格式。以10位左、右对齐为例:n左对齐10位数据n右对齐10位数据n另外还要注意有符号数据和无符号数据的区别。 豌姜伸辱肢忿孩剩抽恕栋濒舱断绑勘羌窥睦章恰城笋晋捧疤分呜侍暴色唯第六讲MC9S12单片机IO接口和功能模块第六讲MC9S12单片机IO接口和功能模块A/D转换综合举例转换综合举例n使用教学板上电位器调试并观察A/D转换结果。n n请见请见exp14。廷雏茹溺芽怜草返傅斋吟住撵互获烫耿肃夏斤抗沈帝蘑侯胰遁胳哀另劳曼第六讲MC9S12单片机IO接口和功能模块第六讲MC9S12单片机IO接口和功能模块3、脉冲宽度调制、脉冲宽度调制PWM模块模块nPWM的基本概念n nPWMPWM(Pulse Width ModulatePulse Width Modulate)即脉宽调制,脉)即脉宽调制,脉宽调制波是一种可用程序来控制波形占空比、宽调制波是一种可用程序来控制波形占空比、周期、相位的波形。它在电动机驱动、周期、相位的波形。它在电动机驱动、D/A D/A 变变换等场合有着广泛的应用。换等场合有着广泛的应用。n n周期,占空比,相位。周期,占空比,相位。周期指上图中的周期指上图中的 ,占空比为,占空比为t/ t/ ,相位指高低,相位指高低电平。电平。赛豫忠溜荧挖滑阴缓贤谆毁序抒昭丽羞罕掏叉郡纽再聂赣暖塔准私供义悦第六讲MC9S12单片机IO接口和功能模块第六讲MC9S12单片机IO接口和功能模块9S12 PWM模块特性模块特性n7个周期、占空比可编程的PWM通道n专用的PWM计数器nPWM功能的软件使能和禁止n软件选择脉冲极性nPWM波形输出对齐方式分为左对齐和居中对齐n可以两个通道级联以获得更高的精度n可选择4个时钟源,4个时钟源均为独立的分频设置n紧急关断功能祟雄裔缝弗躇味说捐呐赘疙竖们国肄蛋京硝毖藉辙豫剖娶酮剐咳叁睁逢乒第六讲MC9S12单片机IO接口和功能模块第六讲MC9S12单片机IO接口和功能模块9S12 PWM模块外部引脚模块外部引脚n共7个外部引脚n nPWM05PWM05(4 4、3 3、2 2、1 1、8080、7979)n nPWM7PWM7(7878)妒胸邑浪威惫秸咱捆隙歌累销秒脂颊哆锰果扦羌糠芦偿忱沫袄睬氨削窜泌第六讲MC9S12单片机IO接口和功能模块第六讲MC9S12单片机IO接口和功能模块9S12 PWM模块的时钟模块的时钟n四个时钟源CLOCKA、CLOCKB、CLOCKSA、CLOCKSB。n其中CLOCKA(B)可以把总线时钟进行1、2、4、8、16、32、64、128分频。Clock A 的预分频因子通过PWMPRCLK寄存器中的PCKA2、PCKA1 和PCKA0 来选择,Clock B 的预分频因子通过PWMPRCLK 寄存器中的PCKB2、PCKB1 和PCKB0 来选择。总线时钟CLOCKACLOCKBCLOCKSACLOCKSB分频分频分频分频饰催呈臼苗慎坎多疑僳炔祁颧搂哆喳祥讫叭洲支使汰帮艾册阵滋蘸雹谆喉第六讲MC9S12单片机IO接口和功能模块第六讲MC9S12单片机IO接口和功能模块9S12 PWM模块的时钟模块的时钟n,CLOCKSA(SB)从CLOCKA(B)进行分频的比例因子可以为1、2、4、8、16、32、64、128、256,最大可以进行512分频。计算公式为:nCLOCKSA(SB)=CLOCKA(B)/2*PRESCALERn通道0、1、4、5可选CLOCKA或CLOCKSA;n通道2、3、6、7可选CLOCKB或CLOCKSB。堰篡缺仕楼试募次臂饱榷摈熄叉菌兽橡隶捌葛临刽甘周吨置旱焚沙延带逞第六讲MC9S12单片机IO接口和功能模块第六讲MC9S12单片机IO接口和功能模块9S12 PWM模块的计数器模块的计数器n每个通道的计时器都有一个8 位计数器、一个8位周期寄存器和一个8 位占空比寄存器。输出波形的周期受周期寄存器的控制,当计数器的计数值等于周期寄存器的值时,PWM波周期结束。PWM的波形还跟占空比寄存器、输出极性和对齐方式有关。nPWMCNTx 计数寄存器在PWM 通道工作时也可以被写入,但是暂时产生无效的波形。俊梧咬罗来取碍汤慈庆缀雷娠李漆萄匿拇嘶惟尘芝炔切醚棱净农潜挨瘦充第六讲MC9S12单片机IO接口和功能模块第六讲MC9S12单片机IO接口和功能模块9S12 PWM模块的允许控制模块的允许控制nPWM的允许位相当于“开关”,可以允许和禁止相应通道的PWM输出。n每个PWM 通道都对应一个允许(PWMEx),只有PWMEx=1 时,对应的通道才输出波形。n计数器计数结束的那一刻,只要PWMEx 为高电平,则会自动开始下一个波形的输出。猫眉上娠氏踢济痔辊饯孩斗非妊轰浪父朴碳引抑瘪乞味钢祥鸡镣愿吹蝇蛆第六讲MC9S12单片机IO接口和功能模块第六讲MC9S12单片机IO接口和功能模块9S12 PWM模块的极性控制模块的极性控制n每个PWM 通道都对应一个极性设置位,决定了PWM 波的输出首先是高电平还是低电平。n当PPOLx 被置位时,对应的通道首先输出高电平,直到计数器计数到占空比寄存器的值后变为低电平;反之则首先输出低电平,直到计数器计数到占空比寄存器的值后变为高电平。彻璃腥晰奥垛准示膳烩蛰弹楔人忿寸砖暇楞漓叙望隅泌请葡洋吧椿哄辖蚊第六讲MC9S12单片机IO接口和功能模块第六讲MC9S12单片机IO接口和功能模块左对齐的输出波型左对齐的输出波型nPWMCAE 寄存器中的CAEx 位是输出格式的控制位。CAEx=0,则对应通道的输出格式是左对齐的。n当使用左对齐格式输出时,8 位的计数器只使用加法计数。当计数器加法计数到占空比寄存器中的值时,PWM 通道输出波形的电平就发生变化;当计数器加法计数到周期寄存器中的值时,计数器复位,输出波形电平发生变化,然后再次读取占空比和周期寄存器中的值作为下次计数参考使用。n注意,计数器是从0开始计数的,直到周期寄存器中的值-1。骨唆牧御窒莹颖害恰遗弛袁沉樊菱跋衬涛壁扯攒趴佐霹俺惦聊惠米斜剁霉第六讲MC9S12单片机IO接口和功能模块第六讲MC9S12单片机IO接口和功能模块左对齐的输出波型左对齐的输出波型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%门孜玛褒暂盟藏诞泄锤频层揣资绪朝岛奄眨赂矾译宇契赁爵煞袒郊榔显服第六讲MC9S12单片机IO接口和功能模块第六讲MC9S12单片机IO接口和功能模块左对齐的输出波型左对齐的输出波型下面举一个左对齐输出的例子:假设时钟源频率=10MHz(周期=100ns),PPOLx=0,PWMPERx=4,PWMDTYx=1。所以,PWMx 的频率 = 10MHz/4 = 2.5MHz,PWMx 的周期=400ns,PWMx 的占空比=3/4100% = 75%。评茧斡戈向睬胶泻莫隘撇孽普恨颧萝罪拐拈钓磷抽都榨庐俞泞撩星钩赫朵第六讲MC9S12单片机IO接口和功能模块第六讲MC9S12单片机IO接口和功能模块居中对齐的输出波型居中对齐的输出波型nCAEx=1,则对应通道的输出格式是居中对齐的。n在这个模式下,计数器既进行加法计数也进行减法计数。当计数器加法计数到占空比寄存器中的值时,PWM 通道输出波形的电平就发生变化;当加法计数到周期寄存器中的值时,计数器会从加法计数改变为减法计数;当计数器再次减法计数到占空比寄存器中的值时,PWM 通道输出波形的电平再次发生变化;当计数器继续减法计数到$00 时,计数器重新变为加法计数器,然后再次读取占空比和周期寄存器中的值作为下次计数参考使用。朗撂惫五知厅崇突鹊吠逢雏榴瞳霹鼠烂炬椅按堪躺继户所钎酷袍酵安妮罚第六讲MC9S12单片机IO接口和功能模块第六讲MC9S12单片机IO接口和功能模块居中对齐的输出波型居中对齐的输出波型用时钟源的频率除以周期寄存器中值的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 = PWMDTYx / PWMPERx 100%嘛棋傀喇更尝侧数青临沮缅墟颗骂绥邹资栽蒜攀亚怯七校瑞肛署筋愚牵逝第六讲MC9S12单片机IO接口和功能模块第六讲MC9S12单片机IO接口和功能模块居中对齐的输出波型居中对齐的输出波型下面举一个居中对齐输出的例子:假设时钟源频率=10MHz(周期=10ns),PPOLx=0,PWMPERx=4,PWMDTYx=1。所以,PWMx 的频率 = 10MHz/4 = 2.5MHz,PWMx 的周期=400ns,PWMx 的占空比=3/4100% = 75%。涣泵瞬长租谗烯导跺剖葛排杯胆剩聪问蹈贸周罩彝溺哺粟民露肥修街炳奎第六讲MC9S12单片机IO接口和功能模块第六讲MC9S12单片机IO接口和功能模块9S12 PWM模块的通道级联模块的通道级联n如果需要PWM 输出波形的精度更高,则可以把2 个8 位PWM 通道级联起来组成1 个16 位通道。 PWMCTL 寄存器中有4 个控制位,可以完成这个级联的功能。CON67、CON45、CON23 和CON01 可以把相应的两个通道级联起来。n注意级联后高8位和低8位的区别,控制寄存器的区别。芍独煮淆硒幂爪一掺骏欧庇衡吗亚蛆敷样清混行匆鸵伶惜陌壤疗袍彻龙德第六讲MC9S12单片机IO接口和功能模块第六讲MC9S12单片机IO接口和功能模块允许控制寄存器允许控制寄存器-PWME当PWMEx 被置位后,PWM 输出就会立即开始。但是直到PWM 模块时钟的下一个周期到来之时,才可以输出正确的波形,而在这之前的波形可能会是无效的。当处于级联模式时,8 个8 位PWM 通道组成4 个16 位的PWM 通道,PWME1、PWME3、PWME5 和PWME7 对这4 个通道进行控制,而其它控制位处于无效状态。PWMEx:通道有效选择位。1=允许PWM输出,0=禁止。皆芦锅死秦攻敌绣广碴匀今率傈剩狂剧繁擦酿勘脾磁海辛颁恿流纲孰匿酥第六讲MC9S12单片机IO接口和功能模块第六讲MC9S12单片机IO接口和功能模块极性寄存器极性寄存器-PWMPOLPWMPOL 寄存器随时都可以进行设置。如果某PWM 通道在输出波形的过程中,波形的极性发生了改变,那么在两组波形的连接处可能会出现缩短或者拉伸了的不正常波形。PPOLx:通道x的输出极性。1=先高后低,0=先低后高。改逝杰术傅厘铱艇纺督稗郑脊痔虽睫摸绣舔瞬爽倪珍搀易拳颇普擂厂食赶第六讲MC9S12单片机IO接口和功能模块第六讲MC9S12单片机IO接口和功能模块时钟选择寄存器时钟选择寄存器-PWMCLKPCLK7: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。隅柜牛揪它润到池法泉巢倡粮鸡宪南寓喜麓撅附仑吾廓葡幼谦库虱阑碳纽第六讲MC9S12单片机IO接口和功能模块第六讲MC9S12单片机IO接口和功能模块预分频时钟选择寄存器预分频时钟选择寄存器此寄存器用来选择Clock A 和B 的预分频因子。PWMPRCLK 寄存器随时都可以进行设置。如果某PWM 通道在输出波形的过程中,此通道的所使用时钟的频率发生了改变,那么在两组波形的连接处可能会出现缩短或者拉伸了的不正常波形。PCKB2、PCKB1、PCKB0:Clock B 预分频因子的选择PCKA2、PCKA1、PCKA0:Clock A 预分频因子的选择连脂鹏待烷与拖界训没旺造扫帕熄跌掀递袒青旷鸯官织相料蟹枷副檬鹃忿第六讲MC9S12单片机IO接口和功能模块第六讲MC9S12单片机IO接口和功能模块居中对齐允许寄存器居中对齐允许寄存器-PWMCAE此寄存器控制每个PWM 通道输出波形的对齐方式,可以是左对齐或者居中对齐。如果CAEx=1,则对应通道的输出波形为居中对齐方式;如果CAEx=0,则为左对齐方式。注意只有当对应通道被禁止输出时,才可以设置此寄存器。CAEx:1=对应x通道为居中对齐模式 0=对应x通道为左对齐模式生袄俱闭身责传疲茨偏绍从侈劣檄稼坛痘擒楔婶隐剿咯韧烬俯阿淹光貉涡第六讲MC9S12单片机IO接口和功能模块第六讲MC9S12单片机IO接口和功能模块控制寄存器控制寄存器-PWMCTL此寄存器可以实现把8 个8 位PWM 通道级联为4 个16 位PWM 通道。CONxy:x通道和y通道级联,以获得更高的输出精度。x通道作为高8位,y通道作为低8位。这时只有通道y的时钟选择位、极性控制位、输出允许位和对齐方式选择位才有效;通道x 的相应寄存器均无效。1=级联模式0=非级联模式PFRZ:冻结模式PWM 计数器停止。1=停止,0=继续运行。眉钓旨廖莆苗檄篙毫站欣口懂芦揩蝎绰盲嘉稻别厘群光贺瘤撬睡佑挽牙程第六讲MC9S12单片机IO接口和功能模块第六讲MC9S12单片机IO接口和功能模块比例因子寄存器比例因子寄存器A-PWMSCLA此寄存器用来提供产生时钟Clock SA 的比例因子,Clock SA 是由Clock A 经过一系列运算得来的,公式:Clock SA = Clock A / (2PWMSCLA)当PWMSCLA=0 时,默认比例因子为256,此时Clock SA 的频率等于Clock A 的频率除以512。拭扇砂介岗畸锗磅澡鸯述胚世甸屠箩晰捕身勃哼厅跺苟硼莹没翔邀谓闭斌第六讲MC9S12单片机IO接口和功能模块第六讲MC9S12单片机IO接口和功能模块比例因子寄存器比例因子寄存器B-PWMSCLB此寄存器用来提供产生时钟Clock SB 的比例因子,Clock SB 是由Clock B 经过一系列运算得来的,公式如下:Clock SB = Clock B / (2PWMSCLB)当PWMSCLB=0 时,默认比例因子为256,此时Clock SB 的频率等于Clock B 的频率除以512。蒂更乳供替拧刚螟戴辊僚诽督酷茶测深阎母如庆胯碗苹骂帆辑羚犁芯恐柄第六讲MC9S12单片机IO接口和功能模块第六讲MC9S12单片机IO接口和功能模块x通道计数寄存器通道计数寄存器-PWMCNTx每个PWM 通道都有一个独立的加法/减法计数器,计数器的频率跟时钟源的频率有关。可以在任意时刻来读取计数器里的值,而计数器的工作不会受到影响。注意我们刚才讲过的左/居中对齐方式时,计数器的计数方式。对计数寄存器进行写操作将使它复位,计数器会立即开始加法计数,从周期寄存器和占空比寄存器的缓冲区里得到周期和占空比值,然后根据设置的极性来输出。当相应的PWM通道被禁止输出(PWMEx=0)时,计数器不工作;当PWM 通道允许时,计数器会以计数寄存器中的值为起点开始计数。署灸网礼枷架吧堂瞳阜弃啃卡堕两兢紊初敛朴览许鸯忘八坪眷裤埋宗屋俐第六讲MC9S12单片机IO接口和功能模块第六讲MC9S12单片机IO接口和功能模块周期寄存器周期寄存器-PWMPERx每个PWM 通道都有一个独立的周期寄存器,周期寄存器中的值对应PWM 通道输出波形的周期。此寄存器具有双重缓存功能,新输入的值被送到缓冲区,而不是立即生效,到下一个有效周期开始时才会有效,所以PWM 输出波形的周期在改变时不会产生无效波形。岛易筋照凄逊抵素讲妄桐他蹦林铬翔皂苏寨沙摹锑之契放甲由氦泅劈磕巨第六讲MC9S12单片机IO接口和功能模块第六讲MC9S12单片机IO接口和功能模块占空比寄存器占空比寄存器-PWMDTYx每个PWM 通道都有一个独立的占空比寄存器,周期寄存器中的值对应PWM 通道输出波形的周期。此寄存器同样是双重缓存的。注意:读取寄存器会得到最新一次写入的值,而不会返回当前的周期值。缨嚼蝇时圃缅俊遵幸宽浅椅呸症赊檄骚霄卸宝汰傲沼首咱厄籽测葛系缔砌第六讲MC9S12单片机IO接口和功能模块第六讲MC9S12单片机IO接口和功能模块关断寄存器关断寄存器-PWMSDNPWM7ENA: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 输入无变化。温尘辅匙目乘费泞酌础明氮癌帖领鸳仟秦铝撅抛距邻尼奸硅旁李更辑凯碘第六讲MC9S12单片机IO接口和功能模块第六讲MC9S12单片机IO接口和功能模块PWM 的综合举例的综合举例n利用PWM5 通道来做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; /设定周期溃药赠戚焙脉铺势洽蛇漂膜碎疚倍缕逻喝颓文肛秃逞鸿荐坡锰倒娘喇屁褥第六讲MC9S12单片机IO接口和功能模块第六讲MC9S12单片机IO接口和功能模块PWM 的综合举例的综合举例void main(void)unsigned char i;unsigned long j=10000;SET_PLL(); /设置锁相环EnableInterrupts;PWMInit(); /初始化PWMfor(i=0;i0x64;i+)while(j-);j=10000;while(j-);j=10000;PWMDTY5=i; /设定占空比PWME=0x20; /使能PWM效卖贩时购笼栏职泌董霜札拧怎棕挟佐隆才屁鼓创爱迅痈竖蕴翠短讲艰粉第六讲MC9S12单片机IO接口和功能模块第六讲MC9S12单片机IO接口和功能模块4、增强型定时器、增强型定时器ECT模块模块nIC/OC的定义:nInput Capture/Output Compare 输入捕获和输出比较nIC对外部的脉冲信号进行计数得到计数数值,根据数值可以计算出脉冲信号的宽度或周期。ECT模块有8个IC通道分别为IC0-IC7,IC0-IC3是标准的带有保持器的缓冲通道,而IC4-IC7不带有保持器。nOC输出具有精确宽度或周期的脉冲信号。通道为OC0-0C7。n nECT模块的外部引脚:n n共有共有8 8个外部引脚,分别为个外部引脚,分别为IOC0IOC7IOC0IOC7,与,与PORTTPORTT复用。复用。陆巴销椽报咏奏制哆版烛寡墟邑迸挝废武的馒对燥穷褪铭稗褪守参师葱厕第六讲MC9S12单片机IO接口和功能模块第六讲MC9S12单片机IO接口和功能模块ECT模块的组成模块的组成n4 个带有16 位缓存的输入比较通道n4 个带有8 位缓存的脉冲累加器,也可以作为2个16 位的累加器使用 n带有4 位预分频因子的16 位模数递减计数器 n用户可选可抵御噪音的延迟计数器计聪指宏俯侨峙政扒畅精顽询蛇唐演酶疟谭酶朔赁叶舌胚册傈怀事熟荣察第六讲MC9S12单片机IO接口和功能模块第六讲MC9S12单片机IO接口和功能模块三个例子三个例子n举三个例子讲述本节内容n n流水灯显示流水灯显示n n使用输入捕捉功能,对外来脉冲进行计数使用输入捕捉功能,对外来脉冲进行计数n n使用输出比较功能,输出一个具有一定宽度的使用输出比较功能,输出一个具有一定宽度的高电平脉冲高电平脉冲葫浙诣鸿震楷施于劈处江秆挚琶青嫂遁丽圾虚考沃瓢胖陇卉谩卢躺斡滚陡第六讲MC9S12单片机IO接口和功能模块第六讲MC9S12单片机IO接口和功能模块void TimerOverflow(void)unsigned char i=1,j=0x80;while(i!=0)&(j!=0)PORTB=(i|j);i=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延时控制方郑她假读圣哭针消栽愧劝坊夫泛磐囱竞秆油锑颅角艇名魏佰巡穗哑兴吏第六讲MC9S12单片机IO接口和功能模块第六讲MC9S12单片机IO接口和功能模块ECT控制寄存器一控制寄存器一本例设置TSCR1=0x80。TEN=1:主定时器使能。0=主定时器禁止,进入低功耗状态。TSWAI=0:等待模式时主定时器继续工作,方便调试。0=停止工作。TSFRZ=0:冻结模式时主定时器继续工作。0=停止工作。TFFCA=0:自动清除标志位。1=手动清除。必须设置TSCR1才可以使主定时器工作,需要在ECT模块初始化时就设置好。谐镇秽呛成彦盼验努康墓孪什侨饰使鹤疆皿享课分犀纱吱裔炒坑躺俯嘲荣第六讲MC9S12单片机IO接口和功能模块第六讲MC9S12单片机IO接口和功能模块ECT控制寄存器二控制寄存器二本例设置TOI=0:禁止定时器溢出中断。1=允许。TCRE=0:定时器自由运行。1=输出比较7引起复位。PR2=1、PR1=1、PR0=1:分频系数=128。沃名多贿秸绚蝉逃颇仑三伐鸽隶殊痛屹卸舌被铣狙纠骂踢配挞祖可蚊悍棕第六讲MC9S12单片机IO接口和功能模块第六讲MC9S12单片机IO接口和功能模块ECT计数寄存器计数寄存器TCNT为自由计数器的计数值,本例通过读取它的值实现延时。这是一个16位的寄存器,最大值为65535。 while(TCNT!=0x0000); while(TCNT=0x0000);这两句的含义是:TCNT开始计数后值不为0,等待直到TCNT溢出返回0后,第一句继续,然后再等到到TCNT不为0,第二句继续。如果没有第二句,则有可能灯“隔一个亮一个”。衍短澄域桨先舌蓑假舰丁鸟桑业脏闭稿隋贰头芜坑冈碘汪陛札骂稻学舍辙第六讲MC9S12单片机IO接口和功能模块第六讲MC9S12单片机IO接口和功能模块例二:输入捕捉例二:输入捕捉n利用输入捕捉0通道对外来的方波信号进行捕捉,采用中断的形式。中断发生后,读取捕捉后的计数值,并用LED灯指示中断成功。n通道0设置为输入捕捉,采用双沿触发,IC0开中断,可以进入中断服务程序。方波信号由PORTA_BIT6产生,PORTA_BIT6和IOC0硬件连接。捣个柞司萤瓜甥扫盈拢膳傻厚闰哆权体例蕉天告晤望钒髓段各扮恰虱筋档第六讲MC9S12单片机IO接口和功能模块第六讲MC9S12单片机IO接口和功能模块例二:输入捕捉例二:输入捕捉IC0的初始化:的初始化:void ic_init(void)TSCR1= 0x90; /主定时器使能 TSCR2=0x07; /分频因子=128 ICSYS=0x02;/IC缓冲使能 TIOS=0; /通道设置为输入捕获TCTL4= 0xff;/采用上升、下降沿触发 TIE=0x00000001;/通道0开中断本例使用了例一未使用的过寄存器:ICSYS、TIOS、TCTL4和TIE。冒硝戚瓦吝阳阮眉适非铆译剔靠浦履窃街方趣靶痹抄佃穆悯慑土积孵喝瞅第六讲MC9S12单片机IO接口和功能模块第六讲MC9S12单片机IO接口和功能模块输入控制系统控制寄存器输入控制系统控制寄存器-ICSYSSHxy=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=锁存模式使能。杆户闽绰旬奎尘套袍械痴万玄淮翠县腊捷学悔含承借狐悔拒润限躺合甚公第六讲MC9S12单片机IO接口和功能模块第六讲MC9S12单片机IO接口和功能模块IC/OC选择寄存器选择寄存器-TIOSTIOS=0:设置相应的通道为输入捕获。IOSx:1=通道x为输出比较; 0=通道x为输入捕获。卷器枝吞匠贮枚纽徒孕蒋钟酷掌嘘桌欲堆妨暗姻蝗皂肺映慰揍纬癣呕道收第六讲MC9S12单片机IO接口和功能模块第六讲MC9S12单片机IO接口和功能模块控制寄存器控制寄存器3/4TCTL3/4EDGnA/B:输入捕捉边沿控制。本例设置EDG0A=1,EDG0B=1。即IC0通道采用上升,下降沿都触发。n代表通道序号。岗逞尝遗汇缮以勺乃内拜警符时袖秤哄方瓦荔侥焙忱冀窥梧绚抛棍极结侵第六讲MC9S12单片机IO接口和功能模块第六讲MC9S12单片机IO接口和功能模块定时器中断使能寄存器定时器中断使能寄存器-TIECxI:1=第x个通道中断允许;0=第x个通道中断禁止。本例设置C0I=1,把通道0的中断打开,这样能够使外部信号引发IC0中断,并进入相应的服务程序进行处理。泉樊究荫臂晦醛柴擅像智痰粉察郊呸咸漱栋乍橱纱昔织姨曼愉瘸窥皱亥溺第六讲MC9S12单片机IO接口和功能模块第六讲MC9S12单片机IO接口和功能模块例二:输入捕捉例二:输入捕捉初始化好后,需要在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(i=0;i6000;i+)PORTA_BIT6=0;/循环中设置信号为低电平,产生方波 驰爷璃掏冷韦舷陆述镇姓唯烟浅傅啸吏淡膘屉巍票肿栗棉猜摧找谊见滦捍第六讲MC9S12单片机IO接口和功能模块第六讲MC9S12单片机IO接口和功能模块例二:输入捕捉例二:输入捕捉方波信号已经成功得产生了,下面是中断服务程序:#pragma CODE_SEG NON_BANKEDvoid interrupt 8 ic0_int(void)TFLG1_C0F=1;/中断标志清除ic4=TC0;/通过读TC0寄存器来响应中断,ic4为用户设置的变量ic4=ic4-ic40;ic40=ic4; /得到脉冲宽度需要考虑溢出吗?PORTB=0x55;/用LED灯来指示已经进入了中断/*以下放置其他代码*/糟甚究获矾错白垂扁陶端甄召焊描脊土焊找虐镜耳努幕师躁镶菜误砧玻旧第六讲MC9S12单片机IO接口和功能模块第六讲MC9S12单片机IO接口和功能模块例三:输出比较例三:输出比较这里讲一个输出比较例子,目的是通过OC0通道输出一个有一定宽度的脉冲。OC0的初始化:void oc_init()TSCR2 = 0x07;/128分频,定时器溢出中断禁止TIOS = 0xff; /所有通道作为输出比较通道TIE = 0x00; /中断全部禁止TSCR1= 0x90; /主定时器使能TCTL2=0xaa; /TC0低电平CFORC=0xff; /强制输出比较佯策简佳队辐积割除巧延楼豁莽情戳益粹柴蛛吻裙默峨尸栓流墙浚拘糠张第六讲MC9S12单片机IO接口和功能模块第六讲MC9S12单片机IO接口和功能模块例三:输出比较例三:输出比较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(;)/*其他代码*/琉吃已戏半松源疟梳捞常曾额迹锰姥路堰壁债绞曹汞堪贸意淹黄债郡风卧第六讲MC9S12单片机IO接口和功能模块第六讲MC9S12单片机IO接口和功能模块强制输出比较寄存器强制输出比较寄存器-CFORCFOCxx通道强制输出比较在相应的寄存器位写入强制输出比较命令,会立即使相应的通道处于输出比较状态。勘粥矿丹喂崔趾塔怜呕茹塔丈汪隔召搜恭枫腺岔兆据赁缕钎吠蔗命往捣畜第六讲MC9S12单片机IO接口和功能模块第六讲MC9S12单片机IO接口和功能模块定时器控制寄存器定时器控制寄存器1/2TCTL1/2OMn:输出模式 OLn:输出等级这8 对控制位是用来指定输出比较的输出动作的,当OMn 和OLn 二者任意一个为1 时,OCn 对应的端口会有相应的输出。如果需要用OMn 和OLn 来控制相应定时器端口的输出,则OC7M 中的对应位必须清零。佳炙避绣均胳为山专另货来钦频嘴嘛爪厚它阮球斯涵云饺榨小侨磋油沧脱第六讲MC9S12单片机IO接口和功能模块第六讲MC9S12单片机IO接口和功能模块5、同步外设接口、同步外设接口SPI模块模块n串行通信的概念:n所谓串行通信是指外设和计算机间使用一根数据信号线一位一位地传输数据。n n串行通信的优点:n n通信线路少,在远距离通信时可以极大地降低通信线路少,在远距离通信时可以极大地降低成本,所以适合于远距离数据传送,也常用于成本,所以适合于远距离数据传送,也常用于速度要求不高的近距离数据传送。速度要求不高的近距离数据传送。履秀验散纶溉府账杀艺忧炳吗枉串微当萧降浦哮遣习耕腥阳瘫圈届哈便跃第六讲MC9S12单片机IO接口和功能模块第六讲MC9S12单片机IO接口和功能模块5、同步外设接口、同步外设接口SPI模块模块n常见串行通信:n n异步串行通信异步串行通信SCISCI(通用异步收发(通用异步收发UARTUART)n n同步串行外设接口同步串行外设接口SPISPIn nIICIIC(Inter-Integrated CircuitInter-Integrated Circuit)总线)总线n n控制局域网控制局域网CANCAN总线总线n nUSBUSBn nPS/2PS/2n nLINLIN(Local Interconnect NetworkLocal Interconnect Network)总线)总线殉唬茎慈燃宵叙附砷赤俭基其叛子浓昂截硬乳忌蝗垒剐区竟确包粤螺觅沥第六讲MC9S12单片机IO接口和功能模块第六讲MC9S12单片机IO接口和功能模块同步和异步串行通信的区别同步和异步串行通信的区别同步串行通信-使用时钟信号(SPI)。以数据块(帧)为传输单位;双方使用同一时钟(主控方提供时钟,被控方接收时钟);数据格式:每个数据块前加12个同步字符(同步头)进行帧同步,一般采用CRC循环冗余校验码;同步通信的数据传输效率和传输速率较高,但硬件电路比较复杂;异步串行通信-不使用时钟信号(SCI)。串行通信时的数据、控制和状态信息都使用同一根信号线传送;收发双方必须遵守共同的通信协议(通信规程);串行异步通信以字符为单位进行传输。吴衷嫩了犊框求坯氓咋负麻好艘帖烩锥抒酸作悯臣耶竣杏端四形钩划挣痛第六讲MC9S12单片机IO接口和功能模块第六讲MC9S12单片机IO接口和功能模块串行通信的串行通信的数据传输方式数据传输方式方式图示一句话总结全双工同时收发半双工分时收发单工只发不收,只收不发编伊革轨柄瓶繁垣总捅项佰帘孪筐必扼共海悬悸冷邢鸡徊逗氛蓝矢预剧莱第六讲MC9S12单片机IO接口和功能模块第六讲MC9S12单片机IO接口和功能模块9S12系列单片机系列单片机SPI的定义的定义nSPI(Serial Peripheral Interface,串行外设接口)是一种高速高效的同步串行接口技术,这种接口技术主要用于MCU 与外部的接口芯片交换数据,已逐渐成为一种工业接口标准。nMC9S12DG128有两个SPI 接口,分别占用PP 口(0-3 位)和PM 口(2-5 位),引脚号分别为1-4和70-73。渣督珍漾诣沂兰轩忧复髓蕾垄泞磋日沾巷健抵酱廊它新笼尔糯陌普痒讽血第六讲MC9S12单片机IO接口和功能模块第六讲MC9S12单片机IO接口和功能模块SPI引脚定义引脚定义nSPI引脚:nSCK主机产生的同步时钟nMOSI主机发送,从机接收nMISO主机接收,从机发送nSS主从机选择n n注意:n n注意,主从机选择信号是低电平有效。注意,主从机选择信号是低电平有效。1-1-主机,主机,0=0=从机。系统中只能有一个主机。从机。系统中只能有一个主机。n n主机的主机的MOSIMOSI、MISOMISO分别和从机的分别和从机的MOSIMOSI,MISOMISO连连接。接。毒玫命润卉彝浸韵赴黔禽扮塑婚洞恳窘耗秘姨考琐饯姓世蹋广男荤膨孙台第六讲MC9S12单片机IO接口和功能模块第六讲MC9S12单片机IO接口和功能模块SPI工作模式工作模式n主机模式:n主机产生时钟信号,用来同步主从双方的移位寄存器。对主机来说,数据的收发是同步的,数据流向有可能是一个方向。n n从机模式:n n需要在时钟信号的作用下,需要在时钟信号的作用下,SSSS必须有效。必须有效。n n双工模式(三线同步传输):n n无论是主机模式还是从机模式都只用一个引脚无论是主机模式还是从机模式都只用一个引脚传输数据。传输数据。估搐陀佰棘谓知擂袖达寐晦翔叉猖嫌琴省贞勋缉态值懦襟丙恬囚彼果禄平第六讲MC9S12单片机IO接口和功能模块第六讲MC9S12单片机IO接口和功能模块SPI模块的寄存器模块的寄存器nSPI控制寄存器一SPICR1nSPI控制寄存器二SPICR2nSPI状态寄存器SPISRnSPI波特率寄存器SPIBRnSPI数据寄存器SPIDR酱堂疗踏印牌杀俗贵勘侦绣伴治朋嗓湃乡陌矽盯炽奖跪袜拓幽居奎具练蘑第六讲MC9S12单片机IO接口和功能模块第六讲MC9S12单片机IO接口和功能模块SPI控制寄存器一控制寄存器一SPIESPI中断使能位。1=中断允许,0=中断禁止。SPESPI系统使能位。1=使用SPI,0=不使用SPI。SPTIE发送中断使能。1=允许,0=禁止。MSTR主从模式选择位。1=主机,0=从机。CPOL时钟极性位。1=有效时钟为低,空闲为高,0=有效时钟为高,空闲为低。主从机必须匹配。鞠叶窥拨此谤瞳筐农婉郸弹卜居些镊魔攫迹码揉率救谢菩盗霓咏戒动且梗第六讲MC9S12单片机IO接口和功能模块第六讲MC9S12单片机IO接口和功能模块SPI控制寄存器控制寄存器1SPICR1CPHASPI时钟相位控制。1=主机在SPSCK的第一个跳变开始驱动MOSI,从机应用它来启动数据发送。在连结几次SPI传送期间,从机的SS脚可保持为低电平;0=SS下跳用于启动从机数据发送,而第一个SPSCK跳变捕捉最高位。在一次SPI传送完毕,从机的SS脚必须返回高电平。SSOE从机选择输出使能。跟MODF配合使用。LSBFE最低位先发使能。1=先发最低位,0=先发最高位。SS非下降沿启动时钟信号启动摘赁握判萨禾倾宪哩纸织鲤伐米揖阀辽霉桩蘑周椭壳梯找萄迄酬素裸产杉第六讲MC9S12单片机IO接口和功能模块第六讲MC9S12单片机IO接口和功能模块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。控制正常和双工模式。捅悲敢驶弃娇鲤玛今士青南俱瞧隧症兹训吭榔邮众晴撅滇敬豢苔试行崭晴第六讲MC9S12单片机IO接口和功能模块第六讲MC9S12单片机IO接口和功能模块SPI 波特率寄存器波特率寄存器波特率-每秒钟数据传输的二进制位数bps。SPPR2-SPPR0-SPI 波特率预分频位SPR2-SPR0-SPI 波特率选择位组合使用捉烬岸离凉怜条淤界骸羚踢完棚枉萝汛群滥氧蛔韦以介沙冻渍挤柔苟酥毖第六讲MC9S12单片机IO接口和功能模块第六讲MC9S12单片机IO接口和功能模块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。享佳痕符悦舔纵铣陵氛喂晒耘叔蒂镐鸥功诡茫撞痕沂壶应霄课斡顶若胀芽第六讲MC9S12单片机IO接口和功能模块第六讲MC9S12单片机IO接口和功能模块SPI 数据寄存器数据寄存器SPI 数据寄存器是SPI 数据的输入和输出寄存器。写该寄存器会允许一个字节进入队列并发送。如果SPI 被配置成主机,当前面的数据发送完成,排在队列的数据会立即被发送。SPISR 寄存器中的发送空标志SPTEF 表明SPI 数据寄存器准备接收新的数据。当SPIF=1 时SPIDR 中接收的数据是有效的,这时才可以读到有效数据。注意,SPIEF=0时表示当前数据并未发送完成,不可写SPIDR寄存器,当SPIEF=1时,才可以写SPIDR寄存器以发送新数据。怠藉铃舟化普祝刻垫效芯渐勉硬岗逞菌埋匆帽窗鹊盏女十痛疏娘始逛验肋第六讲MC9S12单片机IO接口和功能模块第六讲MC9S12单片机IO接口和功能模块SPI综合举例综合举例单片机MC9S12DG128 的SPI1 接口和74HC164 连接,74HC164 是串入并出的8 位移位寄存器,用其来扩展并行输出口,74HC164 的输出作为数码管显示电路的段码,采用动态扫描显示。PT5 做74HC164 的片选信号。微控制器工作于主模式,向SPIDR 写入数据启动SPI 发送模块后,MCU 发送的数据进入74HC164 的移位寄存器中。请见请见exp17。SPI1的的MOSI,时,时钟,片选,钟,片选,接到接到74HC16474HC164,串,串入并出。入并出。74HC244八八同相三态线驱同相三态线驱动器动器接接8段段LED的的驱动电路,驱动电路,低电平使某低电平使某段发光。段发光。菠筏埔沮罐州双春舵脓殷邑凛讽婚嚼晰鄂靶黔袭筑像翟符篇估谐顿泅皆纪第六讲MC9S12单片机IO接口和功能模块第六讲MC9S12单片机IO接口和功能模块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的其他特性可以在寄存器的讲解时体会。杰渔值恨镀讳泽凶密煽付成耳腿脏隙邢石智躯条震报患息棱浴邯盘洽蔑屯第六讲MC9S12单片机IO接口和功能模块第六讲MC9S12单片机IO接口和功能模块SCI的寄存器的寄存器波特率寄存器波特率寄存器SCIBDH和和SCIBDL波特率计算公式:BR=两寄存器组合值,1-8191注意此寄存器的赋值方法:如果只对SCIBDH赋值是无效的,必须先对SCIBDH赋值,再对SCIBDL赋值才可以产生有效的BR。如果不使用SCIBDH,则可以直接给SCIBDL赋值,因为SCIBDH复位后默认为0,相当于赋0值。下面举个设置波特率为9600的例子。圈匀篙醛边瓤桓咖适弱憨柬怪妊凶皿锻裹厄朝揽矢盔屑惭渐葛秆桐盾暴和第六讲MC9S12单片机IO接口和功能模块第六讲MC9S12单片机IO接口和功能模块波特率寄存器波特率寄存器SCIBDH和和SCIBDL设置波特率实质上是计算公式中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不使用。锋鹅扒与教螟璃谰尉两股式轰龚趟淳脖策微晦日绥炯翅笋愉甥硅瞅萍讽臭第六讲MC9S12单片机IO接口和功能模块第六讲MC9S12单片机IO接口和功能模块SCI控制寄存器控制寄存器1-SCICR1LOOPS-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=禁止。讲夜拌奇彪肃亡蛀稍鲤乔诗占酋慢蚂蚂腊溜树画笋褐卑再受婪鉴蔫笺哆护第六讲MC9S12单片机IO接口和功能模块第六讲MC9S12单片机IO接口和功能模块SCI控制寄存器控制寄存器1-SCICR1PT-奇偶校验类型。1=奇校验,0=偶校验。一般此寄存器可以按默认值设置。俭给藐澎游攀添崖喝醉硷康梦舌柠洼演牌惊虱豺硒梭搞喳羚松涛摸立雕击第六讲MC9S12单片机IO接口和功能模块第六讲MC9S12单片机IO接口和功能模块SCI控制寄存器控制寄存器2-SCICR2TIE-传送寄存器空中断使能。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=不发送。亡迁皇鞍宛纤程嫩壶陀宁秩豫悦兽壮秋逢画廖趾帮珊竣骂痛寸挎直抖能抹第六讲MC9S12单片机IO接口和功能模块第六讲MC9S12单片机IO接口和功能模块SCI状态寄存器状态寄存器1-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=上次空闲状态后,接收器还没有处于有效状态。易臃烘江墓欠赚限述责噪搭撂血壮挚硒爪刊湾泌甜动晤啃期瓦锭氓许远都第六讲MC9S12单片机IO接口和功能模块第六讲MC9S12单片机IO接口和功能模块SCI状态寄存器状态寄存器1-SCISR1OR-溢出标志。置位条件:在接收下一个数据前软件未读取数据寄存器,在接收到下一帧的停止位后,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=未检测到奇偶错误。桓楼朵合侗炯彻驶獭掏陕谦析橇绝懈虑坯算酸恭琳惑状垦歹培戍拭环钓刀第六讲MC9S12单片机IO接口和功能模块第六讲MC9S12单片机IO接口和功能模块SCI状态寄存器状态寄存器2-SCISR2SCISR2包含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=正在接收。精厌替叁剑怪预畜章诊绪剃钨壕郎爬缘覆奔倪垣菩俩臂迫缄纸郎骏摘禄酋第六讲MC9S12单片机IO接口和功能模块第六讲MC9S12单片机IO接口和功能模块SCI数据寄存器数据寄存器-SCIDRH(L)任意可读,读操作的是SCI 接收寄存器;任意可写,写的是SCI 发送数据寄存器,写R8 位无效。R8-接收位当SCI 配置成9 位数据格式(M=1)时,R8 是接收数据的第九位。T8-发送位当SCI 配置成9 位数据格式(M=1)时,T8 是发送数据的第九位。悯舍雄演鸦浙降竭栖牺磋聚虚稀救粉培罢谅绪沁蔗库潮毯棚呢武牛鹰杨蝗第六讲MC9S12单片机IO接口和功能模块第六讲MC9S12单片机IO接口和功能模块SCI数据寄存器数据寄存器-SCIDRH(L)R7:0:接收位接收的数据位。T7:0:发送位发送的数据位。注意,读写时跟C语言的读写操作是一样的。需要定义字节型变量。注:如果T8 的值和前面发送的一样,T8 就不必重新写入。直到重新写入不同的值,T8才被更新。在8 位数据模式中,只有SCIDRL 需要访问。在9 位数据模式中,用8 位写指令操作时,要先写SCIDRH,后写SCIDRL。SCI示例见课本相关章节示例见课本相关章节辰粪逢复佯浪嗅公僳哗恿殆泳比苗宠垦迁那左笨班肪羽翔镜挪沛犯象戊通第六讲MC9S12单片机IO接口和功能模块第六讲MC9S12单片机IO接口和功能模块屋步朝然陕闭缴巫辣摄矿赋嘴庸瑟陡区杂关诬定票迭犁贸伦叮蓑荔几豪视第六讲MC9S12单片机IO接口和功能模块第六讲MC9S12单片机IO接口和功能模块
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号