1、4.1 本章的知识点和技能点本章的知识点和技能点知识点技能点v振荡电路的工作原理振荡电路的工作原理v内存管理内存管理v数据表格的建立与访问数据表格的建立与访问v无源蜂鸣器的控制电路无源蜂鸣器的控制电路v汇编语言汇编语言v声光报警器的设计声光报警器的设计vI/O口控制口控制v汇编语言编程汇编语言编程v程序调试能力程序调试能力vCodeWarrior以及以及BDM的进一步使用的进一步使用v万用表、示波器在静态测试中的使用万用表、示波器在静态测试中的使用4.2 任务描述任务描述汽车的防盗报警器开启后,当有外力施加在汽车的防盗报警器开启后,当有外力施加在汽车上,汽车的车灯会闪烁,且发出响亮的报警声。汽
2、车上,汽车的车灯会闪烁,且发出响亮的报警声。有一些家电产品当完成任务后指示灯会闪烁,同时有一些家电产品当完成任务后指示灯会闪烁,同时蜂鸣器鸣叫。本任务就是要完成上面所述的蜂鸣器鸣叫。本任务就是要完成上面所述的声光报声光报警警,使,使LED1、LED2、LED3、LED4循环点亮,循环点亮,同时使蜂鸣器鸣叫。同时使蜂鸣器鸣叫。4.3 任务分析任务分析 一个完整的声光报警器必须包括传感器、指示灯、音响设备等部分,本例为了简化任务,不考虑传感器的设计和检测,只考虑指示灯和音响设备,我们可以用MC9S08AC16通用功能板上的LED作为指示灯,用蜂鸣器作为音响设备来设计我们的声光报警器。MC9S08A
3、C16通用功能板上的蜂鸣器是一种12V供电的无源蜂鸣器,要使其发出声音,必须使控制它的信号周期性的高低变化,也就是说控制信号必须是脉冲信号,并且蜂鸣器的音色由脉冲信号的频率决定。另外,LED的闪烁控制虽然已经在前面几个例子实现过,但是如果把前面的代码直接移植过来,将会导致无法控制蜂鸣器,因此也必须寻找新的控制方法。其中的一种方法是增加一个计数变量,当计数变量达到某个值后使LED的状态取反,同时使计数变量复位准备下一次的计数。4.4 实操训练:时钟电路的静态测试实操训练:时钟电路的静态测试 CodeWarrior软件软件 MC9S08AC16 通用功能板,通用功能板,1块块/人人 BDM工具,工
4、具,1个个/人人 万用表,万用表,1只只/人人 示波器,示波器,1台台/人人4.4.1 任务所需工具任务所需工具4.4 实操训练:时钟电路的静态测试实操训练:时钟电路的静态测试4.4.2 静态测试注意事项静态测试注意事项确保放置实验板的区域没有其他的东西;确保确保放置实验板的区域没有其他的东西;确保实验台和双手是干燥的。实验台和双手是干燥的。用数字万用表测试电压时需要选择用交流挡还用数字万用表测试电压时需要选择用交流挡还是直流挡,还要正确选择其量程;用模拟万用表是直流挡,还要正确选择其量程;用模拟万用表测试直流电压时还需要分清正负极,红笔接正极,测试直流电压时还需要分清正负极,红笔接正极,黑笔
5、接负极。黑笔接负极。实验板通电后不要用手触摸和实验板通电后不要用手触摸和N端、端、L端、端、L1端连通的裸露部分,否则将触电。端连通的裸露部分,否则将触电。4.4.3 实验步骤实验步骤步骤1:选择接入8MHz的外部晶振。步骤2:用BDM向单片机写入时钟测试程序ClockTest.mcp(该程序可以在随书光盘的文件夹“单片机技术初步实践例子程序MC9S08AC16通用功能板例子程序第4章”中获得),如果正常工作,则LED1亮。4.4.3 实验步骤实验步骤步骤3:晶振电路的静态测试。v通电,用万用表测试晶振两端的对地电压,把结果记录在课本的表4-17中;v断电,把示波器的信号线和晶振电路输出端连接
6、好;v通电,观察晶振电路输出端的波形,把结果记录在课本的表4-17中,记录的波形图必须标出振幅和周期。4.5 知识链接知识链接1:内部时钟发生器模块:内部时钟发生器模块ICG4.5.1内部时钟发生器模块结构图内部时钟发生器模块结构图v内部时钟发生器模块内部时钟发生器模块ICG由由外部时钟电路外部时钟电路、振荡器振荡器、内部参考时钟内部参考时钟、锁频环锁频环模块、模块、时钟选择时钟选择模块、模块、分频器分频器等组成。等组成。4.5.2 内部时钟发生器模块工作原理内部时钟发生器模块工作原理v晶体谐振器、晶体谐振器、RC振荡电路、外部时钟等外部参考时振荡电路、外部时钟等外部参考时钟钟ICGERCLK
7、或者内部参考时钟或者内部参考时钟ICGIRCLK经过锁频经过锁频环的升频后输出时钟环的升频后输出时钟ICGDCLK,时钟选择模块选择,时钟选择模块选择ICGERCLK或者或者ICGDCLK作为时钟源,经过分频器作为时钟源,经过分频器分频后输出时钟分频后输出时钟ICGOUT。4.5.3 时钟源与锁频环时钟源与锁频环vHCS08时钟模块的时钟源有两个时钟模块的时钟源有两个外部晶振和内外部晶振和内部参考时钟。部参考时钟。采用内部时钟可以提高系统的可靠性,降低成本,但是精采用内部时钟可以提高系统的可靠性,降低成本,但是精度不高;度不高;采用外部晶振,可以提高精度,但是会增加成本,同时,采用外部晶振,可
8、以提高精度,但是会增加成本,同时,当外部晶振频率太高时还会产生较大的电磁干扰当外部晶振频率太高时还会产生较大的电磁干扰v内部锁频环内部锁频环FLL(Frequency Locked Loop)频率合成频率合成器模块。这个模块的作用是用频率较低且较稳定的时器模块。这个模块的作用是用频率较低且较稳定的时钟来产生高频时钟。钟来产生高频时钟。采用锁频环技术可以用较低的参考时钟产生频率较高的时采用锁频环技术可以用较低的参考时钟产生频率较高的时钟,降低对外部的电磁干扰;钟,降低对外部的电磁干扰;当参考时钟一定的情况下,启用锁频环电路会增加功耗;当参考时钟一定的情况下,启用锁频环电路会增加功耗;单片机上电后
9、,如果启用锁频环电路,需要一定的时间锁单片机上电后,如果启用锁频环电路,需要一定的时间锁频环电路才能够输出稳定的时钟,也就是说单片机上电后需频环电路才能够输出稳定的时钟,也就是说单片机上电后需要一段时间才能够正常的工作。要一段时间才能够正常的工作。4.5.4 内部时钟发生器模块工作模式内部时钟发生器模块工作模式v时钟发生器模块共有时钟发生器模块共有5种工作模式种工作模式停止模式停止模式(Off)自时钟模式自时钟模式(SCM)使用锁频环的内时钟模式使用锁频环的内时钟模式(FEI)禁用锁频环的外时钟模式禁用锁频环的外时钟模式(FBE)使用锁频环的外时钟模式使用锁频环的外时钟模式(FEE)(1)停止
10、模式(停止模式(Off)v在该模式下,内部时钟发生器模块在该模式下,内部时钟发生器模块ICG停止工作,停止工作,ICGOUT是一个固定的电平,即在该模式下没有时钟是一个固定的电平,即在该模式下没有时钟脉冲输出。脉冲输出。(2)自时钟模式(自时钟模式(SCM)v内部参考时钟内部参考时钟ICGICLK经过工作于开环模式的锁频经过工作于开环模式的锁频环后产生时钟环后产生时钟ICGDCLK,ICGDCLK经过分频后作为经过分频后作为内部时钟发生器的输出时钟内部时钟发生器的输出时钟ICGOUT。系统最快的启动方式系统最快的启动方式单片机复位后默认的工作模式单片机复位后默认的工作模式时钟精度不高时钟精度不
11、高(3)使用锁频环的内时钟模式使用锁频环的内时钟模式(FEI)v内部参考时钟内部参考时钟ICGICLK经过工作于闭环模式的锁频经过工作于闭环模式的锁频环后产生时钟环后产生时钟ICGDCLK,ICGDCLK经过分频后作为经过分频后作为内部时钟发生器的输出时钟内部时钟发生器的输出时钟ICGOUT。系统成本降低系统成本降低时钟频率可调整范围大时钟频率可调整范围大精度较高精度较高(4)禁用锁频环的外时钟模式禁用锁频环的外时钟模式(FBE)v外部的晶体谐振器、外部的晶体谐振器、RC振荡电路、外部时钟等产生振荡电路、外部时钟等产生的时钟经过内部振荡电路后产生外部参考时钟的时钟经过内部振荡电路后产生外部参考
12、时钟ICGERCLK,ICGERCLK经过分频后作为内部时钟经过分频后作为内部时钟发生器的输出时钟发生器的输出时钟ICGOUT。最精确、最省电最精确、最省电能达到的总线频率不高,最大只能为能达到的总线频率不高,最大只能为8 8 MHzMHz(5)使用锁频环的外时钟模式使用锁频环的外时钟模式(FEE)v外部的晶体谐振器、外部的晶体谐振器、RC振荡电路、外部时钟等产生振荡电路、外部时钟等产生的时钟经过内部振荡电路后产生外部参考时钟的时钟经过内部振荡电路后产生外部参考时钟ICGERCLK,ICGERCLK经过工作于闭环模式的锁经过工作于闭环模式的锁频环后产生时钟频环后产生时钟ICGDCLK,ICGD
13、CLK经过分频后作经过分频后作为内部时钟发生器的输出时钟为内部时钟发生器的输出时钟ICGOUT。功耗和精度方面都处于中间状态功耗和精度方面都处于中间状态4.5.5 系统时钟分配系统时钟分配 vICG模块为系统的其他功能模块如中央处理器模块为系统的其他功能模块如中央处理器CPU、实时时钟中断模块实时时钟中断模块RTI、后台调试模块、后台调试模块BDC、定时器、定时器模块模块TPM、模、模/数转换模块数转换模块ADC等提供工作的时钟,等提供工作的时钟,ICG模块的输出时钟模块的输出时钟2分频后作为总线时钟分频后作为总线时钟BUSCLK,即即Ficg=2*Fbus。4.5.6 外部振荡电路连接外部振
14、荡电路连接 v外部晶振的电路连接外部晶振的电路连接EXTAL是内部振荡器的输入是内部振荡器的输入引脚,引脚,XTAL是输出引脚;串是输出引脚;串联电阻联电阻RS和反馈电阻和反馈电阻RF应该应该是低感应系数的电阻,是低感应系数的电阻,RS一般一般可以不接,可以不接,RF的取值范围为的取值范围为1M22M;C1和和C2应尽量应尽量选用高频性能好的陶瓷电容,选用高频性能好的陶瓷电容,取值一般为取值一般为6pF40pF。布板。布板时,晶振、时,晶振、C1和和C2应该尽可能应该尽可能的靠近单片机。的靠近单片机。例子:外部选择例子:外部选择8MHz的晶振,的晶振,则则RF选择选择8.2M,C1和和C2选选
15、择择22pF,RS不接。不接。4.5.6 外部振荡电路连接外部振荡电路连接 v外部时钟的电路连接外部时钟的电路连接将时钟信号直接连接将时钟信号直接连接EXTALEXTAL引引脚,而脚,而XTALXTAL悬空悬空 4.5.7 时钟发生器模块寄存器时钟发生器模块寄存器 vHCS08HCS08单片机中和时钟发生器模块相关的寄存器有以下单片机中和时钟发生器模块相关的寄存器有以下6 6个,具体说明请看课本个,具体说明请看课本P59P596363:ICGICG控制寄存器控制寄存器1 1(ICGC1ICGC1););ICGICG控制寄存器控制寄存器2 2(ICGC2ICGC2););ICGICG状态寄存器状
16、态寄存器1 1(ICGS1ICGS1););ICGICG状态寄存器状态寄存器2 2(ICGS2ICGS2););ICGICG滤波寄存器(滤波寄存器(ICGFLTHICGFLTH和和ICGFLTLICGFLTL););ICGICG微调寄存器(微调寄存器(ICGTRMICGTRM)。)。v单片机中所有的功能模块都有配套的寄存器,这些寄存单片机中所有的功能模块都有配套的寄存器,这些寄存器负责设置功能模块的各种参数。器负责设置功能模块的各种参数。4.5.8 时钟发生器模块设置举例时钟发生器模块设置举例(1)重要的计算表格重要的计算表格:ICGOUT频率频率fICGOUT计算表计算表 1 确保确保fIC
17、GDCLK fICGOUT*R不超过极限值不超过极限值fICGDCLKmax40MHz。工作模式工作模式fICGOUT1P说明说明SCMfICGDCLK/R无效无效复位后复位后fICGOUT8MHzFEI(fIRG/7)*64*N/R64典型情况,典型情况,fIRG243kHzFBEfext/R无效无效fext为晶振或外部为晶振或外部时钟的频率时钟的频率FEEfext*P*N/RRange=0;P=64Range=1;P=1同上同上(1)重要的计算表格重要的计算表格:MFD和和RFD编码表编码表MFD倍频因子倍频因子NRFD分频因子分频因子R00040001001600120108010401
18、110011810012100161011410132110161106411118111128(2)ICG设置的步骤设置的步骤第一步:根据功耗、时钟频率精度、时钟频率范围、成本选择合适的工作模式;第二步:根据总线频率确定ICGOUT频率;第三步:根据ICGOUT频率选择合适的P、N、R值;第四步:根据工作模式和P、N、R值设置ICG的各个寄存器。(3)ICG设置举例设置举例:例子:例子1 FEI应用,应用,fIRG243kHz,fBUS8MHz。分析:分析:vfICGOUT=2*fBUS=16MHz,vfI C G O U T=(fI R G/7)*P*N/R,其中其中fI R G243kH
19、z=243*1024Hz,P=64,vN/R=fICGOUT/(fIRG/7)*P)=7.033,约等于约等于7,v选择选择N=14,R=2。和和ICG相关的寄存器设置如下相关的寄存器设置如下:vCGC1=$28(%00101000)vICGC2=$51(%00110001)vICGS1=$xx。只读,清中断标志位除外。只读,清中断标志位除外vICGS2=$xx。只读,在执行对时钟要求严格的任务时,。只读,在执行对时钟要求严格的任务时,需要确认需要确认DCOS1vICGFLTLU/L=$xx。在本模式中无效。在本模式中无效。(3)ICG设置举例设置举例:例子:例子1FEI应用,应用,fIRG2
20、43kHz,fBUS8MHz。汇编代码如下所示:汇编代码如下所示:vLDA#$28vSTAICGC1vLDA#$51vSTAICGC2vBRCLR ICGS1_ LOCK,ICGS1,*;等待等待锁频环锁定输出时钟锁频环锁定输出时钟(3)ICG设置举例设置举例:例子:例子2 FBE应用,应用,fext8MHz,fBUS4MHz。分析:分析:vfICGOUT=2*fBUS=8MHz,vfICGOUT=fext/R,vR=fICGOUT/fext=1,v另外由于外部晶振的频率为另外由于外部晶振的频率为8MHz,属于高频晶振,因此,属于高频晶振,因此选择选择P=1。和和ICG相关的寄存器设置如下相关
21、的寄存器设置如下:vICGC1=$70(%01110000)。vICGC2=$00(%00000000)。vICGS1=$xx。只读,清中断标志位除外。只读,清中断标志位除外。vICGS2=$xx。只读,在执行对时钟要求严格的任务时,。只读,在执行对时钟要求严格的任务时,需要确认需要确认DCOS1。vICGFLTLU/L=$xx。在本模式中无效。在本模式中无效。vICGTRM=$xx。在本模式中无效。在本模式中无效。(3)ICG设置举例设置举例:例子:例子2FBE应用,应用,fext8MHz,fBUS4MHz。汇编代码如下所示:汇编代码如下所示:vLDA#$70vSTAICGC1vLDA#$0
22、0vSTAICGC2vBRCLR ICGS1_ERCS,ICGS1,*;等待外等待外部的晶振时钟稳定下来部的晶振时钟稳定下来4.6 实操训练:时钟电路的静态测试(续)实操训练:时钟电路的静态测试(续)CodeWarrior软件软件 MC9S08AC16 通用功能板,通用功能板,1块块/人人 BDM工具,工具,1个个/人人 万用表,万用表,1只只/人人 示波器,示波器,1台台/人人4.6.1 任务所需工具任务所需工具4.6 实操训练:时钟电路的静态测试实操训练:时钟电路的静态测试4.6.2 静态测试注意事项静态测试注意事项确保放置实验板的区域没有其他的东西;确保确保放置实验板的区域没有其他的东西
23、;确保实验台和双手是干燥的。实验台和双手是干燥的。用数字万用表测试电压时需要选择用交流挡还用数字万用表测试电压时需要选择用交流挡还是直流挡,还要正确选择其量程;用模拟万用表是直流挡,还要正确选择其量程;用模拟万用表测试直流电压时还需要分清正负极,红笔接正极,测试直流电压时还需要分清正负极,红笔接正极,黑笔接负极。黑笔接负极。实验板通电后不要用手触摸和实验板通电后不要用手触摸和N端、端、L端、端、L1端连通的裸露部分,否则将触电。端连通的裸露部分,否则将触电。4.6.3 实验步骤实验步骤步骤4:用BDM向单片机写入蜂鸣器控制程序SoundAlarm.mcp,观察现象,用示波器观察并记录蜂鸣器1的
24、控制三极管的基极波形,把结果记录在课本的表4-18中,波形图必须标出振幅和周期。v程序简单说明:v本程序使ICG模块工作于FBE模式,并形成4MHz的总线频率。v蜂鸣器驱动脉冲频率为4KHz的,蜂鸣器1控制引脚PTC2的电平跳变频率为8KHz(构造一个方波信号需要两次跳变)。v由于暂时没有启用定时器的功能,故只能在主程序的主循环中构造具有500个时钟周期T的延时(4M/8K=500)。v使PTC2的电平跳变由以下三行语句的程序段实现:vLDA PTCDvEOR#$04vSTAPTCDv执行这段程序的时间间隔为:3233(233)613502T,这个时间间隔和我们要求的500T基本吻合。4.6.
25、3 实验步骤实验步骤步骤5:选择16MHz的外部晶振,观察现象,用示波器观察并记录蜂鸣器1的控制三极管的基极波形,把结果记录在课本表4-18中,波形图必须标出振幅和周期,比较前后两次的不同。步骤6:修改蜂鸣器控制程序,把蜂鸣器驱动脉冲的频率改为1500Hz。4.7 知识链接知识链接2:存储器管理存储器管理 4.8 知识链接知识链接3:指令寻址方式指令寻址方式4.8.1 指令寻址方式的定义指令寻址方式的定义一条指令一定存在操作码,一般也存在操作数。一条指令一定存在操作码,一般也存在操作数。操作码控制操作码控制CPU执行一定的操作,而这些操作执行一定的操作,而这些操作需要使用的数据就是操作数。操作
26、码在程序计需要使用的数据就是操作数。操作码在程序计数器数器PC所指向的所指向的FLASH中可以获得,而操作数中可以获得,而操作数也需要通知也需要通知CPU按照一定的方式取得,这就叫按照一定的方式取得,这就叫做做“寻址方式寻址方式”。寻址方式是由操作数的获取方式决定,和操作寻址方式是由操作数的获取方式决定,和操作码无关。码无关。4.8.2 4.8.2 指令寻址方式的种类指令寻址方式的种类寻址方寻址方式式隐含隐含(INH)立即数立即数(IMM)直接直接(DIR)扩展扩展(EXT)变址变址(IX)变址变址1(IX1)变址变址2(IX2)助记符助记符INCXLDA#$55LDA$80LDA$400LD
27、A,XLDA$5,XLDA$150,X操作码操作码5CA6B6C6F6E6D6操作数操作数 558004 00 1001 504.9 实操训练:声光报警器程序设计实操训练:声光报警器程序设计 CodeWarrior软件软件 MC9S08AC16 通用功能板,通用功能板,1块块/人人 BDM工具,工具,1个个/人人4.9.1 任务所需工具任务所需工具4.9 实操训练:声光报警器程序设计实操训练:声光报警器程序设计4.9.2 静态测试注意事项静态测试注意事项确保放置实验板的区域没有其他的东西;确保确保放置实验板的区域没有其他的东西;确保实验台和双手是干燥的。实验台和双手是干燥的。实验板通电后不要用
28、手触摸和实验板通电后不要用手触摸和N端、端、L端、端、L1端连通的裸露部分,否则将触电。端连通的裸露部分,否则将触电。4.9.3 实验步骤实验步骤步骤7:用BDM向单片机写入LED控制程序LightAlarm.mcp,观察现象。本程序主要的特点是引进了表格。数据表格的建立vLedControlTbl ;LED控制表格vFCB%11111110;表格的0号元素,已知地址为$C000vFCB%11111101;表格的1号元素vFCB%11111011;表格的2号元素vFCB%11110111;表格的3号元素数据表格的访问。访问数据表格时可以用扩展寻址方式,也可以用带16位偏移量的变址寻址方式(IX
29、2),后者在遍历时经常被使用。扩展寻址示例:vLDALedControlTbl+1;相当于LDA$C001 vSTAPTBD;PTBD=%11111101带16位偏移量的变址寻址方式(IX2)示例:vLDX#2TvLDALedControlTbl,X;相当于LDALedControlTbl+2vSTAPTBD;PTBD=%111110114.9.3 实验步骤实验步骤步骤8:按照课本图4-3-10所示的流程图,把蜂鸣器控制程序SoundAlarm.mcp和LED控制程序LightAlarm.mcp整合后形成新的控制程序SoundLightAlarm.mcp,使蜂鸣器鸣叫的同时LED也循环点亮。步骤9:修改单片机控制程序,使蜂鸣器时叫时停,且叫的时候灯一直亮,蜂鸣器不叫的时候,灯闪烁。