第四章基础实验篇4-14基础实验篇本章将通过几个基本的实验,让读者熟悉HT66Fx0微控制器的外围单元与一些常见的元件特性;如I/O(跑马灯、霹雳灯、扫描式键盘、步进马达控制)、Timer/Counter、CompareMatch(蜂鸣器控制)、外部中断、PWM接口(LED亮度控制)、ADC转换接口、模拟比较器(光传感器)、I2C串行接口、省电模式与WDT控制等等。通过这些基础实验,除了让读者了解程序开发流程与熟悉工具使用之外,更重要的是希望能让读者对于HT66F50的控制及其内部各单元能有初步的认识!本章的实验内容包括:4444----1111LEDLEDLEDLED跑马灯实验跑马灯实验跑马灯实验跑马灯实验4444----2222LEDLEDLEDLED霹雳灯查表实验霹雳灯查表实验霹雳灯查表实验霹雳灯查表实验4444----3333单颗单颗单颗单颗七段数码管七段数码管七段数码管七段数码管控制实验控制实验控制实验控制实验4444----4444指拨开关与指拨开关与指拨开关与指拨开关与七段数码管七段数码管七段数码管七段数码管控制实验控制实验控制实验控制实验4444----5555按键控制实验按键控制实验按键控制实验按键控制实验4444----6666步进马达控制实验步进马达控制实验步进马达控制实验步进马达控制实验4444----77774×44×44×44×4键盘实验控制实验键盘实验控制实验键盘实验控制实验键盘实验控制实验4444----8888喇叭发声控制实验喇叭发声控制实验喇叭发声控制实验喇叭发声控制实验4444----9999CTMTimer/CounterCTMTimer/CounterCTMTimer/CounterCTMTimer/Counter模式控制实验模式控制实验模式控制实验模式控制实验4444----10101010STMSTMSTMSTM中断控制与中断控制与中断控制与中断控制与比较匹配比较匹配比较匹配比较匹配输出实验输出实验输出实验输出实验4444----11111111模拟模拟模拟模拟----数字转换数字转换数字转换数字转换((((ADCADCADCADC))))接口控制实验接口控制实验接口控制实验接口控制实验4444----12121212外部中断控制实验外部中断控制实验外部中断控制实验外部中断控制实验4444----13131313ETMETMETMETM单元单元单元单元PWMPWMPWMPWM输出控制实验输出控制实验输出控制实验输出控制实验4444----14141414模拟比较器模块与其中断控制实验模拟比较器模块与其中断控制实验模拟比较器模块与其中断控制实验模拟比较器模块与其中断控制实验4444----15151515WDTWDTWDTWDT控制实验控制实验控制实验控制实验4444----16161616省电模式实验省电模式实验省电模式实验省电模式实验4444----17171717IIII2222CCCC串行接口控制实验串行接口控制实验串行接口控制实验串行接口控制实验4444----18181818SPISPISPISPI串行接口控制实验串行接口控制实验串行接口控制实验串行接口控制实验4444----19191919ffffSYSSYSSYSSYS切换与切换与切换与切换与SLOWModeSLOWModeSLOWModeSLOWMode实验实验实验实验4-0本书实验相关事项提醒接下来各章节的实验内容,都必须搭配相关的硬件电路;为了简化书籍版面与电路图的单纯化,在此先将HT66F50的复位电路、振荡电路连接方式汇整于【图C:\DocumentsandSettings\winxp\桌面\BookHT46F2x\P.tif4-2A/DFlashMCUHT66F系列微控制器原理与实务-汇编语言实例说明424-0-1】,在后续各实验单元不再重复绘制此部分,所有电路的参考信号将直接以【图4-0-1】所拉出的标记符号()表示。0.1μFVCCPB0RESB10KΩPB1PB24MHzOSC1OSC2PB3PB432768HzXT1Xt2SRESSHXTSLXTSHXT’SLXT’PBRESETVDDVSS【图4-0-1】HT66F50微控制器电路另外,【图4-0-1】引脚也仅标示出I/O功能,其余功能请参考第一章的引脚图与引脚功能叙述。为了节省电路的连接以及避免I/O引脚的浪费,本书绝大多数的实验均是采用HIRC或LIRC的振荡电路,且采用系统内部的复位功能;因此【图4-0-1】中控制复位电路的SRES开关、控制HXT的SHXT与SHXT'开关、以及控制LXT的SLXT与SLXT'开关都应处于开路的状态;然在少数的实验中必须用到外部RESET的功能,读者就必第四章基础实验篇4-34须使SRES开关置于短路状态。由于HIRC/LIRC振荡方式的准确度稍差,易受电压、温度和制程的影响,若需要较高频率准确度的场合,建议读者改采HXT/LXT的振荡方式;此时需令(SHXT与SHXT'开关)/(SLXT与SLXT'开关)置于短路状态。在进行本书各章节实验时,除非特别的说明,否则有关“配置选项”的设定请读者一律按照以下的方式配置:系统操作电压:5V系统频率:选择ICE提供,频率4MHz硬件复位:系统内部复位IC包装:选择48QFN内部RC振荡电源:5V高频振荡来源:选择HIRCC:\DocumentsandSettings\winxp\桌面\BookHT46F2x\P.tif4-4A/DFlashMCUHT66F系列微控制器原理与实务-汇编语言实例说明42低频振荡来源:选择LIRCWDT频率来源:选择fSUBHIRC振荡频率:4MHz@Vdd=5V低电压复位功能:除能串行模块功能:除能WDT功能:除能WDT清除方式:单指令清除PB0引脚功能:I/O引脚功能第四章基础实验篇4-54-1LED跑马灯实验4444----1111----1111目目目目的的的的::::本实验将利用带进位循环左移(RLC)、带进位循环右移(RRC)指令,让八颗LED达到循序点亮、来回移动的效果。4444----1111----2222学习重点学习重点学习重点学习重点::::通过本实验,读者对于HT66F50的I/OPort定义、特性以及延迟子程序(DELAY)的时间计算都应有透彻的了解。另外,通过第一个简单的范例程序,请者应可参考第三章的操作程序,熟悉程序的开发过程与HTIDE-3000的操作环境。4444----1111----3333电路图电路图电路图电路图::::【图4-1-1】LED控制电路如【图4-1-1】所示,当HT66F50连接至LED的I/O引脚输出信号为“High”时,LED为正向偏压(ForwardBias),所以将呈现亮的状态;反之,当连接至LEDI/O引脚的状态为“Low”时,则并没有电流流过LED,所以LED不会亮!程序中利用带进位循环左移(RLC)、带进位循环右移指令(RRC)并搭配不同的延迟时间,让八颗LED达到循序点亮、来回移动的效果。读者可以通过降低电阻值(470Ω)来提高LED的亮度,但是要特别留意HT66Fx0原厂数据手册中,对于I/OPort所提供电流的限制:在VDD=5V的工作状态下,每个引脚的驱动电流为:SinkCurrent(IOL)=20mA、SourceCurrent(IOH)=-7.4mA;而在VDD=3V时,每个引脚的驱动电流为:IOL=9mA、IOH=-3.2mA;整颗微控制器所能提供I/O驱动总电流量为:IOL=80mA、IOH=-80mA!C:\DocumentsandSettings\winxp\桌面\BookHT46F2x\P.tif4-6A/DFlashMCUHT66F系列微控制器原理与实务-汇编语言实例说明424444----1111----4444程序及流程图程序及流程图程序及流程图程序及流程图::::程序4-1LED跑马灯实验1;PROGRAM:4-1.ASM(4-1.PJT)2009.10272;FUNCTION:LEDSCANNINGDEMOPROGRAMBySteven3#INCLUDEHT66F50.INC4;=======================================================================================5MY_DATA.SECTION'DATA';==DATASECTION==6DEL1DB?;DELAYLOOPCOUNT17DEL2DB?;DELAYLOOPCOUNT28DEL3DB?;DELAYLOOPCOUNT39;=======================================================================================10LED_PORTEQUPC;DEFINELED_PORT11LED_PORTCEQUPCC;DEFINELED_PORTCONTROLREG.12MY_CODE.SECTIONAT0'CODE';==PROGRAMSECTION==13ORG00H;HT66F50RESETVECTOR14MAIN:15MOVA,08h;CP1DISABLE16MOVCP1C,A17CLRLED_PORTC;CONFIGLED_PORTASO/PMODE18CLRLED_PORT;SETINITIALLEDSTATE19SETC;SETCARRYFLAG(STATUS.0)20RIGHT:21RRCLED_PORT;SHIFTRIGHT22MOVA,100;SETDALAYFACTOR23CALLDELAY;DELAY100*1mS24SNZLED_PORT.0;ISALLLEDsHAVEBEENLIT?25JMPRIGHT;NO.CONTINUERIGHTSHIFT.第四章基础实验篇4-7426LEFT:27RLCLED_PORT;SHIFTLEFT28MOVA,200;SETDALAYFACTOR29CALLDELAY;DELAY200*1mS30SNZLED_PORT.7;ISALLLEDsHAVEBEENLIT?31JMPLEFT;NO.CONTINUELEFTSHIFT.32JMPRIGHT;REPEATTHERIGHTPROCESS.33;========================================================================================34;PROC:DELAY35;FUNC:DEALYABOUTACC*1mS@fSYS=4MHz(1006×DEL1)+1)Cycles!36;PARA:ACC:DELAYFACTOR37;REG:DEL1,DEL2,DEL338;========================================================================================39DELAYPROC40MOVDEL1,A;SETDEL1COUNTER41DEL_1:MOVA,342MOVDEL2,A;SETDEL2COUNTER43DEL_2:MOVA,11044MOVDEL3,A;SETDEL3COUNTER45DEL_3:SDZDEL3;DEL3DOWNCOUNT46JMPDEL_347SDZDEL2;DEL2DOWNCOUNT48JMPDEL_249SDZDEL1;DEL1DOWNCOUNT50JMPDEL_151RET52DELAYENDP程程程程程程程程程程程程序序序序序序序序序序序序解解解解解解解解解解解解说说说说说说说说说说说说::::::::::::5~8依序定义变量地址。10~11定义LED_PORT为PC、定义LED_PORTC为PCC。13声明内存地址由000h开始(HT66Fx0ResetVector)。15~16关闭CP1模拟