寄存器69uuu.com

69uuu.com  时间:2021-04-09  阅读:()
增强A/D型Flash单片机HT66F0172/HT66F0174版本:V1.
50日期:2017-08-252017-08-25Rev.
1.
502HT66F0172/HT66F0174增强A/D型Flash单片机2017-08-25目录特性6CPU特性6周边特性6概述7选型表7方框图8引脚图8引脚说明9极限参数10直流电气特性11交流电气特性13A/D转换器电气特性.
14LVD&LVR电气特性.
15上电复位特性16系统结构16时序和流水线结构16程序计数器17堆栈18算术逻辑单元–ALU18Flash程序存储器19结构19特殊向量19查表19查表范例20在线烧录21片上调试21数据存储器22结构22特殊功能寄存器24间接寻址寄存器–IAR0,IAR124间接寻址指针–MP0,MP1.
24存储区指针–BP25累加器–ACC25程序计数器低字节寄存器–PCL.
25表格寄存器–TBLP,TBHP,TBLH.
25状态寄存器–STATUS.
26EEPROM数据寄存器(仅存在于HT66F0174)28EEPROM数据寄存器结构.
28EEPROM寄存器.
28从EEPROM中读取数据.
30Rev.
1.
503HT66F0172/HT66F0174增强A/D型Flash单片机2017-08-25写数据到EEPROM.
30写保护30EEPROM中断.
30编程注意事项31振荡器32振荡器概述32系统时钟配置32外部晶体/陶瓷振荡器–HXT.
33内部8MHzRC振荡器–HIRC.
34外部32.
768kHz晶体振荡器–LXT.
34内部32kHz振荡器–LIRC35辅助振荡器35工作模式和系统时钟36系统时钟36系统工作模式37控制寄存器38快速唤醒39工作模式切换40静态电流的注意事项44唤醒44编程注意事项44看门狗定时器45看门狗定时器时钟源45看门狗定时器控制寄存器45看门狗定时器操作46复位和初始化47复位功能47复位初始状态50输入/输出端口53上拉电阻53PA口唤醒54输入/输出端口控制寄存器.
55输入/输出引脚结构.
56编程注意事项57定时器模块–TM.
57简介57TM操作58TM时钟源58TM中断58TM外部引脚58TM输入/输出引脚控制寄存器.
58编程注意事项59Rev.
1.
504HT66F0172/HT66F0174增强A/D型Flash单片机2017-08-25周期型TM–PTM.
60周期型TM操作60周期型TM寄存器介绍61周期型TM工作模式65A/D转换器.
74A/D简介74A/D转换寄存器介绍75A/D操作79A/D输入引脚80A/D转换步骤80编程注意事项81A/D转换功能81A/D转换应用范例82中断84中断寄存器84中断操作89外部中断90时基中断91多功能中断93A/D转换器中断93TM中断93EEPROM中断(仅存在于HT66F0174)93LVD中断93中断唤醒功能94编程注意事项94低电压检测–LVD95LVD寄存器95LVD操作96配置选项96应用电路97指令集98简介98指令周期98数据的传送98算术运算98逻辑和移位运算98分支和控制转换99位运算99查表运算99其它运算99指令集概要100惯例100Rev.
1.
505HT66F0172/HT66F0174增强A/D型Flash单片机2017-08-25指令定义103封装信息11520-pinSOP(300mil)外形尺寸.
11620-pinSSOP(150mil)外形尺寸117Rev.
1.
506HT66F0172/HT66F0174增强A/D型Flash单片机2017-08-25特性CPU特性工作电压:fSYS=8MHz:2.
2V~5.
5VfSYS=12MHz:2.
7V~5.
5VfSYS=16MHz:3.
3V~5.
5VfSYS=20MHz:4.
5V~5.
5VVDD=5V,系统时钟为20MHz时,指令周期为0.
2μs提供暂停和唤醒功能,以降低功耗四种振荡器类型:外部晶振–HXT外部32.
768kHz晶振–LXT(仅存在于HT66F0174)内部RC–HIRC内部32kHzRC–LIRC多种工作模式:正常、低速、空闲和休眠内部集成8MHz振荡器,无需外接元件所有指令都可在1或2个指令周期内完成查表指令63条指令8层堆栈位操作指令周边特性Flash程序存储:2K*16RAM数据存储:128*8TrueEEPROM存储器:64*8(仅存在于HT66F0174)看门狗定时器功能18个双向I/O口2个引脚与外部中断口共用两组10-bitPTM双时基功能可提供固定时间的中断信号8通道12-bit的A/D转换器低电压复位功能低电压检测功能封装类型:20-pinSOP/SSOPRev.
1.
507HT66F0172/HT66F0174增强A/D型Flash单片机2017-08-25概述该单片机是8位高性能精简指令集的Flash型单片机,具有一系列功能和特性,其Flash存储器可多次编程的特性给用户提供了极大的方便.
存储器方面,还包含了一个RAM数据存储器和一个可用于存储序列号、校准数据等非易失性数据的TrueEEPROM存储器.
在模拟特性方面,该单片机包含一个多通道12位A/D转换器.
还带有两个使用灵活的定时器模块,可提供定时功能、脉冲产生功能及PWM产生等功能.
内部看门狗定时器、低电压复位和低电压检测等内部保护特性,外加优秀的抗干扰和ESD保护性能,确保单片机在恶劣的电磁干扰环境下可靠地运行.
该单片机提供了丰富的HXT、LXT、HIRC和LIRC振荡器功能选项,且内建完整的系统振荡器,无需外接元件.
其在不同工作模式之间动态切换的能力,为用户提供了一个优化单片机操作和减少功耗的手段.
外加时基功能、I/O使用灵活等其它特性,使这款单片机可以广泛应用于各种产品中,例如电子测量仪器、环境监控、手持式测量工具、家庭应用、电子控制工具、马达控制等方面.
选型表对此系列的芯片而言,大多数的特性参数都是一样的.
下表列出了各单片机的主要特性.
型号VDD振荡器类型ROMRAMEEPROMI/O外部中断A/D堆栈时基封装形式HT66F01722.
2V~5.
5VHXTHIRCLIRC2K*16128*8—18212-bit*88√20SOP/SSOPHT66F01742.
2V~5.
5VHXTHIRCLIRCLXT2K*16128*864*818212-bit*88√20SOP/SSOPRev.
1.
508HT66F0172/HT66F0174增强A/D型Flash单片机2017-08-25方框图8-bitRISCMCUCoreI/OTimerModulesFlashProgramMemoryEEPROMDataMemoryFlash/EEPROMProgrammingCircuitryRAMDataMemoryTimeBaseLowVoltageResetWatchdogTimerInterruptControllerResetCircuitHXT/LXTOscillators12-bitA/DConverterLowVoltageDetectHIRC/LIRCOscillators注:HT66F0172无LXT振荡器及EEPROM.
引脚图HT66F017220SOP-A/SSOP-AVDD&AVDDPB0/INT0/AN0PB1/INT1/AN1PB2/TCK0/AN2PA4/TCK1/AN3PA5/AN4/VREFPA6/AN5PA7/TP1/AN6PB3/AN7PB4/CLOVSS&AVSSPC0/OSC1PC1/OSC2PC2PA0/TP0/ICPDA/OCDSDAPA1PA2/ICPCK/OCDSCKPA3PB6PB52019181716151413121112345678910HT66F017220SOP-A/SSOP-AVDD&AVDDPB0/INT0/AN0PB1/INT1/AN1PB2/TCK0/AN2PA4/TCK1/AN3PA5/AN4/VREFPA6/AN5PA7/TP1/AN6PB3/AN7PB4/CLOVSS&AVSSPC0/OSC1PC1/OSC2PC2PA0/TP0/ICPDA/OCDSDAPA1PA2/ICPCK/OCDSCKPA3PB6PB52019181716151413121112345678910注:1.
若共用引脚同时有多种输出,"/"号右侧的引脚名具有更高的优先级.
2.
VDD&AVDD指的是VDD和AVDD为同一个引脚.
3.
VSS&AVSS指的是VSS和AVSS为同一个引脚.
Rev.
1.
509HT66F0172/HT66F0174增强A/D型Flash单片机2017-08-25引脚说明除了电源引脚外,该系列单片机的所有引脚都以它们的端口名称进行标注,例如PA0、PA1等,用于描述这些引脚的数字输入/输出功能.
然而,这些引脚也与其它功能共用,如模数转换器、定时器模块等.
每个引脚的功能如下表所述,而引脚配置的详细内容见规格书其它章节.
引脚名称功能OPI/TO/T引脚说明PA0/TP0/ICPDA/OCDSDAPA0PAWUPAPUSTCMOS通用I/O口,可通过寄存器设置上拉电阻和唤醒功能TP0TMPC—CMOSTM0输出ICPDA—STCMOS在线烧录数据/地址输入/输出OCDSDA—STCMOSOCDS数据/地址输入/输出,用于EV芯片PA1PA1PAPUPAWUSTCMOS通用I/O口,可通过寄存器设置上拉电阻和唤醒功能PA2/ICPCK/OCDSCKPA2PAPUPAWUSTCMOS通用I/O口,可通过寄存器设置上拉电阻和唤醒功能ICPCK—ST—在线烧录时钟输入引脚OCDSCK—ST—OCDS时钟输入引脚,用于EV芯片PA3PA3PAPUPAWUSTCMOS通用I/O口,可通过寄存器设置上拉电阻和唤醒功能PA4/TCK1/AN3PA4PAPUPAWUSTCMOS通用I/O口,可通过寄存器设置上拉电阻和唤醒功能TCK1TM1C0ST—TM1时钟输入AN3ACERLAN—A/D通道3PA5/AN4/VREFPA5PAPUPAWUSTCMOS通用I/O口,可通过寄存器设置上拉电阻和唤醒功能AN4ACERLAN—A/D通道4VREFADCR1AN—A/D转换参考电压输入PA6/AN5PA6PAPUPAWUSTCMOS通用I/O口,可通过寄存器设置上拉电阻和唤醒功能AN5ACERLAN—A/D通道5PA7/TP1/AN6PA7PAPUPAWUSTCMOS通用I/O口,可通过寄存器设置上拉电阻和唤醒功能TP1TMPC—CMOSTM1输出AN6ACERLAN—A/D通道6PB0/INT0/AN0/XT1PB0PBPUSTCMOS通用I/O口,可通过寄存器设置上拉电阻INT0INTC0INTEGST—外部中断0AN0ACERLAN—A/D通道0XT1COLXT—LXT振荡器引脚PB1/INT1/AN1/XT2PB1PBPUSTCMOS通用I/O口,可通过寄存器设置上拉电阻INT1INTC2INTEGST—外部中断1AN1ARERLST—A/D通道1XT2CO—LXTLXT振荡器引脚Rev.
1.
5010HT66F0172/HT66F0174增强A/D型Flash单片机2017-08-25引脚名称功能OPI/TO/T引脚说明PB2/TCK0/AN2PB2PBPUSTCMOS通用I/O口,可通过寄存器设置上拉电阻TCK0TM0C0ST—TM0时钟输入AN2ACERLAN—A/D通道2PB3/AN7PB3PBPUSTCMOS通用I/O口,可通过寄存器设置上拉电阻AN7ACERLAN—A/D通道7PB4/CLOPB4PBPUSTCMOS通用I/O口,可通过寄存器设置上拉电阻CLOTMPC—CMOS系统时钟输出PB5PB5PBPUSTCMOS通用I/O口,可通过寄存器设置上拉电阻PB6PB6PBPUSTCMOS通用I/O口,可通过寄存器设置上拉电阻PC0/OSC1PC0PCPUSTCMOS通用I/O口,可通过寄存器设置上拉电阻OSC1COHXT—HXT振荡器引脚PC1/OSC2PC1PCPUSTCMOS通用I/O口,可通过寄存器设置上拉电阻OSC2CO—HXTHXT振荡器引脚PC2PC2PCPUSTCMOS通用I/O口,可通过寄存器设置上拉电阻VSSVSS—PWR—电源电压负极,接地AVSSAVSS—PWR—ADC电压接地端VDDVDD—PWR—电源电压正极AVDDAVDD—PWR—ADC电压正极注:I/T:输入类型;O/T:输出类型OP:通过寄存器或配置选项(CO)设置PWR:电源;ST:施密特触发输入CMOS:CMOS输出;AN:模拟输入脚HXT:高频晶体振荡器LXT:低频晶体振荡器XT1,XT2引脚仅存在于HT66F0174.
极限参数电源供应电压.
VSS-0.
3V~VSS+6.
0V输入电压.
VSS-0.
3V~VDD+0.
3V储存温度.
50C~125C工作温度.
40C~85CIOH总电流100mAIOL总电流.
100mA总功耗.
500mW注:这里只强调额定功率,超过极限参数所规定的范围将对芯片造成损害,无法预期芯片在上述标示范围外的工作状态,而且若长期在标示范围外的条件下工作,可能影响芯片的可靠性.
Rev.
1.
5011HT66F0172/HT66F0174增强A/D型Flash单片机2017-08-25直流电气特性Ta=25C符号参数测试条件最小典型最大单位VDD条件VDD工作电压(HXT)—fSYS=8MHz2.
2—5.
5VfSYS=12MHz2.
7—5.
5VfSYS=16MHz3.
3—5.
5VfSYS=20MHz4.
5—5.
5V工作电压(HIRC)—fSYS=8MHz2.
2—5.
5VIDD1工作电流,正常模式,fSYS=fH(HXT)3V无负载,fH=4MHz,ADCoff,WDT使能—0.
71.
1mA5V—1.
82.
7mA3V无负载,fH=8MHz,ADCoff,WDT使能—1.
01.
5mA5V—2.
54.
0mA3V无负载,fH=12MHz,ADCoff,WDT使能—1.
52.
5mA5V—3.
55.
5mA3.
3V无负载,fH=16MHz,ADCoff,WDT使能—2.
03.
0mA5V—4.
57.
0mA5V无负载,fH=20MHz,ADCoff,WDT使能—5.
58.
5mAIDD2工作电流,正常模式fSYS=fH(HIRC)3V无负载,fH=8MHz,ADCoff,WDT使能—2.
02.
8mA5V—3.
04.
5mAIDD3工作电流,低速模式fSYS=fL=fLXT,fSUB=LXT3V无负载,fSYS=LXT,ADCoff,WDT使能,LXTLP=0—1020μA5V—3050μA3V无负载,fSYS=LXT,ADCoff,WDT使能,LXTLP=1—1020μA5V—4060μAIDD4工作电流,低速模式fSYS=fL=fLIRC,fSUB=LIRC3V无负载,fSYS=LIRC,ADCoff,WDT使能—1020μA5V—3050μAIDD5工作电流,正常模式fH=8MHz(HIRC)3V无负载,fSYS=fH/2,ADCoff,WDT使能—1.
72.
4mA5V—2.
64.
4mA3V无负载,fSYS=fH/4,ADCoff,WDT使能1.
62.
4mA5V—2.
44.
0mA3V无负载,fSYS=fH/8,ADCoff,WDT使能1.
52.
2mA5V—2.
23.
6mA3V无负载,fSYS=fH/16,ADCoff,WDT使能1.
42.
0mA5V—2.
03.
2mA3V无负载,fSYS=fH/32,ADCoff,WDT使能1.
31.
8mA5V—1.
82.
8mA3V无负载,fSYS=fH/64,ADCoff,WDT使能—1.
21.
6mA5V—1.
62.
4mARev.
1.
5012HT66F0172/HT66F0174增强A/D型Flash单片机2017-08-25符号参数测试条件最小典型最大单位VDD条件IIDLE01静态电流(IDLE0模式)(LXTon)3V无负载,ADCoff,WDT使能,LXTLP=0—510μA5V—1632μA3V无负载,ADCoff,WDT使能,LXTLP=1—510μA5V—1632μAIIDLE02静态电流(IDLE0模式)(LIRCon)3V无负载,ADCoff,WDT使能,LVR除能—1.
33.
0μA5V—2.
25.
0μAIIDLE03静态电流(IDLE0模式)(LXTandLIRCon)3V无负载,ADCoff,WDT使能,LXTLP=0—612μA5V—1836μA3V无负载,ADCoff,WDT使能,LXTLP=1—612μA5V—1836μAIIDLE11静态电流(IDLE1模式)(HXTon)3V无负载,ADCoff,WDT使能,fSYS=4MHzon—0.
40.
8mA5V—0.
81.
6mAIIDLE12静态电流(IDLE1模式)(HXTon)3V无负载,ADCoff,WDT使能,fSYS=8MHzon—0.
51.
0mA5V—1.
02.
0mAIIDLE12A静态电流(IDLE1模式)(HIRCon)3V无负载,ADCoff,WDT使能,fSYS=8MHzon—0.
81.
6mA5V—1.
02.
0mAIIDLE13静态电流(IDLE1模式)(HXTon)3V无负载,ADCoff,WDT使能,fSYS=12MHzon—0.
61.
2mA5V—1.
22.
4mAIIDLE14静态电流(IDLE1模式)(HXTon)3.
3V无负载,ADCoff,WDT使能,fSYS=16MHzon—1.
02.
0mA5V—2.
04.
0mAIIDLE15静态电流(IDLE1模式)(HXTon)5V无负载,ADCoff,WDT使能,fSYS=20MHzon—2.
55.
0mAISLEEP0静态电流(SLEEP模式)(LIRCoff)3V无负载,ADCoff,WDT除能,LVR除能—0.
11.
0μA5V—0.
32.
0μAISLEEP11静态电流(SLEEP1模式)(LXTon)3V无负载,ADCoff,WDT使能LXTLP=0,LVR除能—510μA5V—1632μAISLEEP12静态电流(SLEEP1模式)(LXTon)3V无负载,ADCoff,WDT使能LXTLP=1,LVR除能—510μA5V—1530μAISLEEP13静态电流(SLEEP1模式)(LIRCon)3V无负载,ADCoff,WDT使能,LVR除能—1.
35.
0μA5V—2.
210μAVIL输入/输出口或其它输入引脚的低电平输入电压5V—0—1.
5V——0—0.
2VDDVVIH输入/输出口或其它输入引脚的高电平输入电压5V—3.
5—5.
0V——0.
8VDD—VDDVIOL输入/输出口灌电流3VVOL=0.
1VDD816—mA5VVOL=0.
1VDD1632—mAIOH输入/输出口源电流3VVOH=0.
9VDD-3.
75-7.
5—mA5VVOH=0.
9VDD-7.
5-15—mARPHI/O口上拉电阻3V—2060100kΩ5V—103050kΩRev.
1.
5013HT66F0172/HT66F0174增强A/D型Flash单片机2017-08-25交流电气特性Ta=25C符号参数测试条件最小典型最大单位VDD条件fCPU工作时钟2.
2V~5.
5V—DC—8MHz2.
7V~5.
5V—DC—12MHz3.
3V~5.
5V—DC—16MHz4.
5V~5.
5V—DC—20MHzfSYS系统时钟(HXT)2.
2V~5.
5V—0.
4—8MHz2.
7V~5.
5V—0.
4—12MHz3.
3V~5.
5V—0.
4—16MHz4.
5V~5.
5V—0.
4—20MHzfHIRC系统时钟(HIRC)3V/5VTa=25C-2%8+2%MHz3V/5VTa=0C~70C-5%8+5%MHz2.
2V~5.
5VTa=0C~70C-7%8+7%MHz2.
2V~5.
5VTa=-40C~85C-10%8+10%MHzfLIRC系统时钟(LIRC)5VTa=25C-10%32+10%kHz2.
2V~5.
5VTa=-40C~85C-30%32+60%kHztTIMERTCKn输入脉宽——0.
3——μstINT中断脉宽——10——μstEERDEEPROM读取时间———24tSYStEEWREEPROM写入时间———24mstSST系统启动时间(上电复位)———128—tSYS系统启动时间(由HALT模式唤醒,fSYS在HALT模式下关闭)—fSYS=HIRC—16—fSYS=LIRC—2—系统启动时间(由HALT模式唤醒,fSYS在HALT模式下开启)———2—tRSTD系统复位延迟时间(上电复位,LVR复位,LVR软件复位(LVRC),WDT软件复位(WDTC))——2550100ms系统复位延迟时间(WDT正常复位)——8.
316.
733.
3ms注:1.
tSYS=1/fSYS.
2.
为保证HIRC振荡器频率的精确度,建议在VDD和VSS之间连接一个0.
1μF的电容,并尽可能靠近单片机.
Rev.
1.
5014HT66F0172/HT66F0174增强A/D型Flash单片机2017-08-25A/D转换器电气特性Ta=25C符号参数测试条件最小典型最大单位VDD条件AVADA/D转换器工作电压——2.
2—5.
5VVADIA/D转换器输入电压——0—VREFmAVREFA/D输入参考电压——2—AVDDVVBG参考缓冲电压——-3%1.
25+3%VDNL1A/D非线性微分误差2.
2V~2.
7VVREF=AVDD=VDDtADCK=8μs,Ta=25C—±15—LSB2.
7V~5.
5VVREF=AVDD=VDDtADCK=0.
5μs,Ta=25C-3—+3LSBDNL2A/D非线性微分误差2.
7VVREF=AVDD=VDDtADCK=0.
5μs,Ta=-40C~85C-4—+4LSB3V5VINL1A/D非线性积分误差2.
2V~2.
7VVREF=AVDD=VDDtADCK=8μs,Ta=25C—±16—LSB2.
7V~5.
5VVREF=AVDD=VDDtADCK=0.
5μs,Ta=25C-4—+4LSBINL2A/D非线性积分误差2.
7VVREF=AVDD=VDDtADCK=0.
5μs,Ta=-40C~85C-8—+8LSB3V5VIADC打开A/D增加的功耗3V无负载(tADCK=0.
5μs)—0.
91.
35mA5V—1.
21.
8mAIBG使用VBG增加的功耗———200300μAtADCKA/D转换器时钟周期2.
2V~2.
7V—8—10μs2.
7V~5.
5V—0.
5—10μstADCA/D转换时间(包括采样和保持时间)—12-bitA/D转换—16—tADCKtADSA/D转换器采样时间———4—tADCKtON2STA/D转换器On-to-Start时间——2——μstBGSVBG开启到稳定的时间——200——μsRev.
1.
5015HT66F0172/HT66F0174增强A/D型Flash单片机2017-08-25LVD&LVR电气特性Ta=25C符号参数测试条件最小典型最大单位VDD条件VLVR1低电压复位电压—LVR使能,VLVR=2.
10V-5%2.
10+5%VVLVR2LVR使能,VLVR=2.
55V2.
55VVLVR3LVR使能,VLVR=3.
15V3.
15VVLVR4LVR使能,VLVR=3.
80V3.
80VVLVD1低电压检测电压—LVDEN=1,VLVD=2.
0V-5%2.
00+5%VVLVD2LVDEN=1,VLVD=2.
2V2.
20VVLVD3LVDEN=1,VLVD=2.
4V2.
40VVLVD4LVDEN=1,VLVD=2.
7V2.
70VVLVD5LVDEN=1,VLVD=3.
0V3.
00VVLVD6LVDEN=1,VLVD=3.
3V3.
30VVLVD7LVDEN=1,VLVD=3.
6V3.
60VVLVD8LVDEN=1,VLVD=4.
0V4.
00VILVR使用LVR增加的功耗3VLVR除能→LVR使能—3045μA5V—6090μAILVD使用LVD增加的功耗3VLVD除能→LVD使能(LVR除能)—4060μA5V—75115μA3VLVD除能→LVD使能(LVR使能)—3045μA5V—6090μAtLVR低电压复位脉宽——120240480μstLVD低电压中断脉宽——204590μstLVDSLVDO稳定时间—LVR使能,LVDoff→on15——μs—LVR除能,LVDoff→on15——μstSRESET软件复位脉宽——4590120μsRev.
1.
5016HT66F0172/HT66F0174增强A/D型Flash单片机2017-08-25上电复位特性Ta=25C符号参数测试条件最小典型最大单位VDD条件VPOR上电复位电压————100mVRRVDD上电复位电压速率——0.
035——V/mstPORVDD保持为VPOR的最小时间—VDD和VSS间无电容2——μs—VDD和VSS间加电容10——μsTimeVDDVPORRRVDDtPOR系统结构内部系统结构是Holtek单片机具有良好性能的主要因素.
由于采用RISC结构,此单片机具有高运算速度和高性能的特点.
通过流水线的方式,指令的取得和执行同时进行,此举使得除了跳转和调用指令外,其它指令都能在一个指令周期内完成.
8位ALU参与指令集中所有的运算,它可完成算术运算、逻辑运算、移位、递增、递减和分支等功能,而内部的数据路径则是以通过累加器和ALU的方式加以简化.
有些寄存器在数据存储器中被实现,且可以直接或间接寻址.
简单的寄存器寻址方式和结构特性,确保了在提供具有最大可靠度和灵活性的I/O和A/D控制系统时,仅需要少数的外部器件.
使得这些单片机适用于低成本和大批量生产的控制应用.
时序和流水线结构主系统时钟由HXT,LXT,HIRC或LIRC振荡器提供,它被细分为T1~T4四个内部产生的非重叠时序.
在T1时间,程序计数器自动加一并抓取一条新的指令.
剩下的时间T2~T4完成译码和执行功能,因此,一个T1~T4时钟周期构成一个指令周期.
虽然指令的抓取和执行发生在连续的指令周期,但单片机流水线结构会保证指令在一个指令周期内被有效执行.
除非程序计数器的内容被改变,如子程序的调用或跳转,在这种情况下指令将需要多一个指令周期的时间去执行.
Rev.
1.
5017HT66F0172/HT66F0174增强A/D型Flash单片机2017-08-25FetchInst.
(PC)ExecuteInst.
(PC-1)FetchInst.
(PC+1)ExecuteInst.
(PC)FetchInst.
(PC+2)ExecuteInst.
(PC+1)PCPC+1PC+2fSYS(SystemClock)PhaseClockT1ProgramCounterPhaseClockT2PhaseClockT3PhaseClockT4Pipelining系统时序和流水线如果指令牵涉到分支,例如跳转或调用等指令,则需要两个指令周期才能完成指令执行.
需要一个额外周期的原因是程序先用一个周期取出实际要跳转或调用的地址,再用另一个周期去实际执行分支动作,因此用户需要特别考虑额外周期的问题,尤其是在执行时间要求较严格的时候.
ExecuteINST.
6FetchINST.
7FlushPipelineFetchINST.
6ExecuteINST.
2FetchINST.
3ExecuteINST.
1FetchINST.
2FetchINST.
1123456MOVA,[12H]CALLDELAYCPL[12H]::NOPDELAY:指令捕捉程序计数器在程序执行期间,程序计数器用来指向下一个要执行的指令地址.
除了"JMP"和"CALL"指令需要跳转到一个非连续的程序存储器地址之外,它会在每条指令执行完成以后自动加一.
只有较低的8位,即所谓的程序计数器低字节寄存器PCL,可以被用户直接读写.
当执行的指令要求跳转到不连续的地址时,如跳转指令、子程序调用、中断或复位等,单片机通过加载所需要的地址到程序寄存器来控制程序,对于条件跳转指令,一旦条件符合,在当前指令执行时取得的下一条指令将会被舍弃,而由一个空指令周期来取代.
程序计数器程序计数器高字节PCL寄存器PC10~PC8PCL7~PCL0程序计数器的低字节,即程序计数器的低字节寄存器PCL,可以通过程序控制,且它是可以读取和写入的寄存器.
通过直接写入数据到这个寄存器,一个程序短跳转可直接执行,然而只有低字节的操作是有效的,跳转被限制在存储器的当前页中,即256个存储器地址范围内,当这样一个程序跳转要执行时,会插入一个空指令周期.
程序计数器的低字节可由程序直接进行读取,PCL的使用可能引起程序跳转,因此需要额外的指令周期.
Rev.
1.
5018HT66F0172/HT66F0174增强A/D型Flash单片机2017-08-25堆栈堆栈是一个特殊的存储空间,用来存储程序计数器中的内容.
此单片机有8层堆栈,堆栈既不是数据部分也不是程序空间部分,而且它既不是可读取也不是可写入的.
当前层由堆栈指针(SP)加以指示,同样也是不可读写的.
在子程序调用或中断响应服务时,程序计数器的内容被压入到堆栈中.
当子程序或中断响应结束时,返回指令(RET或RETI)使程序计数器从堆栈中重新得到它以前的值.
当一个芯片复位后,堆栈指针将指向堆栈顶部.
ProgramCounterStackLevel1StackLevel2StackLevel3StackLevel8ProgramMemoryTopofStackStackPointerBottomofStack如果堆栈已满,且有非屏蔽的中断发生,中断请求标志会被置位,但中断响应将被禁止.
当堆栈指针减少(执行RET或RETI),中断将被响应.
这个特性提供程序设计者简单的方法来预防堆栈溢出.
然而即使堆栈已满,CALL指令仍然可以被执行,而造成堆栈溢出.
使用时应避免堆栈溢出的情况发生,因为这可能导致不可预期的程序分支指令执行错误.
若堆栈溢出,则首个存入堆栈的程序计数器数据将会丢失.
算术逻辑单元–ALU算术逻辑单元是单片机中很重要的部分,执行指令集中的算术和逻辑运算.
ALU连接到单片机的数据总线,在接收相关的指令码后执行需要的算术与逻辑操作,并将结果存储在指定的寄存器,当ALU计算或操作时,可能导致进位、借位或其它状态的改变,而相关的状态寄存器会因此更新内容以显示这些改变,ALU所提供的功能如下:算术运算:ADD,ADDM,ADC,ADCM,SUB,SUBM,SBC,SBCM,DAA逻辑运算:AND,OR,XOR,ANDM,ORM,XORM,CPL,CPLA移位运算:RRA,RR,RRCA,RRC,RLA,RL,RLCA,RLC递增和递减:INCA,INC,DECA,DEC分支判断:JMP,SZ,SZA,SNZ,SIZ,SDZ,SIZA,SDZA,CALL,RET,RETIRev.
1.
5019HT66F0172/HT66F0174增强A/D型Flash单片机2017-08-25Flash程序存储器程序存储器用来存放用户代码即储存程序.
程序存储器为FLASH类型意味着可以多次重复编程,方便用户使用同一芯片进行程序的修改.
使用适当的单片机编程工具,此所有单片机提供用户灵活便利的调试方法和项目开发规划及更新.
结构程序存储器的容量为2K*16位,程序存储器用程序计数器来寻址,其中也包含数据、表格和中断入口.
数据表格可以设定在程序存储器的任何地址,由表格指针来寻址.
000HResetInterruptVector004H024H7FFH16bits程序存储器结构特殊向量程序存储器内部某些地址保留用做诸如复位和中断入口等特殊用途.
地址000H是芯片复位后的程序起始地址.
在芯片复位之后,程序将跳到这个地址并开始执行.
查表程序存储器中的任何地址都可以定义成一个表格,以便储存固定的数据.
使用表格时,表格指针必须先行设定,其方式是将表格的地址放在表格指针寄存器TBLP和TBHP中.
这些寄存器定义表格总的地址.
在设定完表格指针后,表格数据可以使用"TABRD[m]"或"TABRDL[m]"指令从程序存储器页来查表读取.
当这些指令执行时,程序存储器中表格数据低字节,将被传送到使用者所指定的数据存储器[m],程序存储器中表格数据的高字节,则被传送到TBLH特殊寄存器,而高字节中未使用的位将被读取为"0".
下图是查表中寻址/数据流程:RegisterTBLHUserSelectedRegisterHighByteLowByteTBLPRegisterDataAddress16bitsProgramMemoryLastpageorTBHPRegisterRev.
1.
5020HT66F0172/HT66F0174增强A/D型Flash单片机2017-08-25指令表格地址b10b9b8b7b6b5b4b3b2b1b0TABRD[m]@10@9@8@7@6@5@4@3@2@1@0TABRDL[m]111@7@6@5@4@3@2@1@0表格存储单元注:b10~b0:表格地址位@7~@0:表格指针(TBLP)位@10~@8:表格指针(TBHP)位查表范例以下范例说明在该单片机中,表格指针和表格数据如何被定义和执行.
这个例子使用的表格数据用ORG伪指令储存在存储器的最后一页.
ORG指令"700H"指向的地址是2K程序存储器中最后一页的起始地址.
表格指针的初始值设为"06H",这可保证从数据表格读取的第一笔数据位于程序存储器地址706H,即最后一页起始地址后的第六个地址.
值得注意的是,假如"TABRD[m]"指令被使用,则表格指针指向TBHP+TBLP位址.
在这个例子中,表格数据的高字节等于零,而当"TABRDL[m]"指令被执行时,此值将会自动的被传送到TBLH寄存器.
TBLH寄存器为只读寄存器,不能重新储存,若主程序和中断服务程序都使用表格读取指令,应该注意它的保护.
使用表格读取指令,中断服务程序可能会改变TBLH的值,若随后在主程序中再次使用这个值,则会发生错误,因此建议避免同时使用表格读取指令.
然而在某些情况下,如果同时使用表格读取指令是不可避免的,则在执行任何主程序的表格读取指令前,中断应该先除能,另外要注意的是所有与表格相关的指令,都需要两个指令周期去完成操作.
表格读取程序范例tempreg1db;temporaryregister#1tempreg2db;temporaryregister#2::mova,06h;initializelowtablepointer–notethatthisaddress;isreferencedmovtblp,a;tothelastpageorpresentpagemova,07h;initialisehightablepointermovtbhp,a::tabrdtempreg1;transfersvalueintablereferencedbytablepointer;totempreg1dataatprog.
memoryaddress706H;transferredtotempreg1andTBLHdectblp;reducevalueoftablepointerbyonetabrdtempreg2;transfersvalueintablereferencedbytablepointer;totempreg2dataatprog.
memoryaddress705H;transferredtotempreg2andTBLH;inthisexamplethedata"1AH"istransferredto;totempreg1anddata"0FH"toregistertempreg2;thevalue_00H_willbetransferredtothehighbyte;registerTBLH::org700h;setsinitialaddressoflastpagedc00Ah,00Bh,00Ch,00Dh,00Eh,00Fh,01Ah,01BhRev.
1.
5021HT66F0172/HT66F0174增强A/D型Flash单片机2017-08-25在线烧录Flash型程序存储器提供用户便利地对同一芯片进行程序的更新和修改.
另外,Holtek单片机提供4线接口的在线烧录方式.
用户可将进行过烧录或未经过烧录的单片机芯片连同电路板一起制成,最后阶段进行程序的更新和程序的烧录,在无需去除或重新插入芯片的情况下方便地保持程序为最新版.
Holtek烧录器引脚名称MCU在线烧录引脚名称功能ICPDAPA0串行数据烧录ICPCKPA2时钟烧录VDDVDD电源VSSVSS地在烧录过程中,PA0和PA2脚进行数据和时钟烧录,用户必须确保这两个引脚没有连接到其它输出脚.
程序存储器和EEPROM存储器都可以通过4线的接口在线进行烧录.
其中一条用于数据串行下载或上传、一条用于串行时钟、两条用于提供电源.
芯片在线烧写的详细使用说明超出此文档的描述范围,将由专门的参考文献提供.
**Writer_VDDICPDAICPCKWriter_VSSTootherCircuitPA0PA2VSSVDDWriterConnectorSignalsMCUProgrammingPins注:*可能为电阻或电容.
若为电阻则其值必须大于1kΩ,若为电容则其必须小于1nF.
片上调试EV芯片用于单片机仿真.
此EV芯片提供片上调试功能(OCDS—On-chipDebugSupport)用于开发过程中的单片机调试.
除了片上调试功能方面,EVIC和实际MCU在功能上几乎是兼容的.
用户可将OCDSDA和OCDSCK引脚连接至HoltekHT-IDE开发工具,从而实现EVIC对实际IC的仿真.
OCDSDA引脚为OCDS数据/地址输入/输出脚,OCDSCK引脚为OCDS时钟输入脚.
当用户用EVIC进行调试时,实际单片机OCDSDA和OCDSCK引脚上的其它共用功能无效.
关于OCDS功能的详细描述,请参考"Holteke-Linkfor8-bitMCUOCDSUser'sGuide"文件.
Holteke-Link引脚名称EVIC引脚名称功能OCDSDAOCDSDA片上调试串行数据/地址,输入/输出OCDSCKOCDSCK片上调试时钟输入VDDVDD电源VSSVSS地Rev.
1.
5022HT66F0172/HT66F0174增强A/D型Flash单片机2017-08-25数据存储器数据存储器是内容可更改的8位RAM内部存储器,用来储存临时数据.
RAM数据存储器的容量为128*8位结构数据存储器分为两个区,第一部分是特殊功能数据存储器.
这些寄存器有固定的地址且与单片机的正确操作密切相关.
大多特殊功能寄存器都可在程序控制下直接读取和写入,但有些被加以保护而不对用户开放.
第二部分数据存储器是做一般用途使用,都可在程序控制下进行读取和写入.
容量Bank128*80:80H~FFH00HIAR001HMP002HIAR103HMP104H05HACC06HPCL07HTBLP08HTBLH09HTBHP0AHSTATUS0BHSMOD0CHLVDC0DHINTEG0EHWDTC0FHTBC10HINTC011HINTC112H19HPCPU18HPAWU1BH1AH1DH1CH1FHPAPAC1EH25H26H29H28H2BH2CH2DH35HTM1C134HTM1C036HTM1DHTM1DLTM1AHTM1AL37H3AHRead0only3BH3CHBP13H14HMFI015HMFI116H17H2FHTM0C12EHTM0C030H32HTM0DH31HTM0DLTM0AH33HTM0AL:Unused,readas00HINTC2MFI2UnusedUnusedEEAEEDPCPUPBPBC27HUnused2AHTM0RPLTM1RPL3DH3EHUnused3FHEECBank0Bank1Bank0Bank1TMPCCTRLLVRCPC38H39HPCCADRHADRLADCR0ADCR1ACERL22H23H24H20H21HUnusedUnusedTM0RPHTM1RPHPBPU40H7FHHT66F0174数据存储器结构--HT66F0174Rev.
1.
5023HT66F0172/HT66F0174增强A/D型Flash单片机2017-08-2500HIAR001HMP002HIAR103HMP104H05HACC06HPCL07HTBLP08HTBLH09HTBHP0AHSTATUS0BHSMOD0CHLVDC0DHINTEG0EHWDTC0FHTBC10HINTC011HINTC112H19HPCPU18HPAWU1BH1AH1DH1CH1FHPAPAC1EH25H26H29H28H2BH2CH2DH35HTM1C134HTM1C036HTM1DHTM1DLTM1AHTM1AL37H3AHRead0only3BH3CHBP13H14HMFI015HMFI116H17H2FHTM0C12EHTM0C030H32HTM0DH31HTM0DLTM0AH33HTM0AL:Unused,readas00HINTC2MFI2UnusedUnusedPCPUPBPBC27HUnused2AHTM0RPLTM1RPL3DH3EHUnused3FHBank0Bank1Bank0Bank1TMPCCTRLLVRCPC38H39HPCCADRHADRLADCR0ADCR1ACERL22H23H24H20H21HUnusedUnusedTM0RPHTM1RPHPBPU40H7FHUnusedUnused数据存储器结构--HT66F0172总的数据存储器被分为两个区.
大部分特殊功能数据寄存器均可在所有Bank被访问,处于"40H"地址的EEC寄存器却只能在Bank1中被访问到.
切换不同区域可通过设置区域指针(BP)实现.
所有单片机的数据存储器的起始地址都是"00H".
Rev.
1.
5024HT66F0172/HT66F0174增强A/D型Flash单片机2017-08-25特殊功能寄存器大部分特殊功能寄存器的细节将在相关功能章节描述,但有几个寄存器需在此章节单独描述.
间接寻址寄存器–IAR0,IAR1间接寻址寄存器IAR0和IAR1的地址虽位于数据存储区,但其并没有实际的物理地址.
间接寻址的方法准许使用间接寻址指针做数据操作,以取代定义实际存储器地址的直接存储器寻址方法.
在间接寻址寄存器(IAR0和IAR1)上的任何动作,将对间接寻址指针(MP0和MP1)所指定的存储器地址产生对应的读/写操作.
它们总是成对出现,可以共同访问数据存储器.
因为这些间接寻址寄存器不是实际存在的,直接读取将返回"00H"的结果,而直接写入此寄存器则不做任何操作.
间接寻址指针–MP0,MP1该单片机提供两个间接寻址指针,即MP0和MP1.
由于这些指针在数据存储器中能像普通的寄存器一般被操作,因此提供了一个寻址和数据追踪的有效方法.
当对间接寻址寄存器进行任何操作时,单片机指向的实际地址是由间接寻址指针所指定的地址.
MP0,IAR0用于访问Bank0,而MP1和IAR1可通过BP寄存器访问所有的Bank.
直接寻址只可用于Bank0,Bank1仅能通过MP1和IAR1进行间接寻址.
以下例子说明如何清除一个具有4RAM地址的区块,它们已事先定义成地址adres1到adres4.
间接寻址程序举例data.
sectiondataadres1dbadres2dbadres3dbadres4dbblockdbcode.
sectionat0codeorg00hstart:mova,04h;setupsizeofblockmovblock,amova,offsetadres1;AccumulatorloadedwithfirstRAMaddressmovmp0,a;setupmemorypointerwithfirstRAMaddressloop:clrIAR0;clearthedataataddressdefinedbymp0incmp0;incrementmemorypointersdzblock;checkiflastmemorylocationhasbeenclearedjmploopcontinue:在上面的例子中有一点值得注意,即并没有确定RAM地址.
Rev.
1.
5025HT66F0172/HT66F0174增强A/D型Flash单片机2017-08-25存储区指针–BP数据存储器被分为两个部分,即Bank0和Bank1.
可以通过设置存储区指针(BankPointer)值来访问不同的数据存储区.
BP指针的bit0用于选择数据存储区的Bank0或Bank1.
复位后,数据存储器会初始化到Bank0,但是在空闲/休眠模式下的WDT溢出复位,不会改变通用数据存储器的存储区号.
应该注意的是特殊功能数据存储器不受存储区的影响,也就是说,不论是在哪一个存储区,都能对特殊功能寄存器进行读写操作.
数据存储器的直接寻址总是访问Bank0,不影响存储区指针的值.
要访问Bank1,则必须要使用间接寻址方式.
BP寄存器Bit76543210NameDMBP0R/WR/WPOR0Bit7~1未使用,读为"0"Bit0DMBP0:数据存储区选择位0:Bank01:Bank1累加器–ACC对任何单片机来说,累加器是相当重要的,且与ALU所完成的运算有密切关系,所有ALU得到的运算结果都会暂时存在ACC累加器里.
若没有累加器,ALU必须在每次进行如加法、减法和移位的运算时,将结果写入到数据存储器,这样会造成程序编写和时间的负担.
另外数据传送也常常牵涉到累加器的临时储存功能,例如在使用者定义的一个寄存器和另一个寄存器之间传送数据时,由于两寄存器之间不能直接传送数据,因此必须通过累加器来传送数据.
程序计数器低字节寄存器–PCL为了提供额外的程序控制功能,程序计数器低字节设置在数据存储器的特殊功能区域内,程序员可对此寄存器进行操作,很容易的直接跳转到其它程序地址.
直接给PCL寄存器赋值将导致程序直接跳转到程序存储器的某一地址,然而由于寄存器只有8位长度,因此只允许在本页的程序存储器范围内进行跳转,而当使用这种运算时,要注意会插入一个空指令周期.
表格寄存器–TBLP,TBHP,TBLH这三个特殊功能寄存器对存储在程序存储器中的表格进行操作.
TBLP和TBHP为表格指针,指向表格数据存储的地址.
它们的值必须在任何表格读取指令执行前加以设定,由于它们的值可以被如"INC"或"DEC"的指令所改变,这就提供了一种简单的方法对表格数据进行读取.
表格读取数据指令执行之后,表格数据高字节存储在TBLH中.
其中要注意的是,表格数据低字节会被传送到使用者指定的地址.
Rev.
1.
5026HT66F0172/HT66F0174增强A/D型Flash单片机2017-08-25状态寄存器–STATUS这8位的状态寄存器由零标志位(Z)、进位标志位(C)、辅助进位标志位(AC)、溢出标志位(OV)、暂停标志位(PDF)和看门狗定时器溢出标志位(TO)组成.
这些算术/逻辑操作和系统运行标志位是用来记录单片机的运行状态.
除了PDF和TO标志外,状态寄存器中的位像其它大部分寄存器一样可以被改变.
任何数据写入到状态寄存器将不会改变TO或PDF标志位.
另外,执行不同的指令后,与状态寄存器有关的运算可能会得到不同的结果.
TO标志位只会受系统上电、看门狗溢出或执行"CLRWDT"或"HALT"指令影响.
PDF标志位只会受执行"HALT"或"CLRWDT"指令或系统上电影响.
Z、OV、AC和C标志位通常反映最近运算的状态.
C:当加法运算的结果产生进位,或减法运算的结果没有产生借位时,则C被置位,否则C被清零,同时C也会被带进位的移位指令所影响.
AC:当低半字节加法运算的结果产生进位,或高半字节减法运算的结果没有产生借位时,AC被置位,否则AC被清零.
Z:当算术或逻辑运算结果是零时,Z被置位,否则Z被清零.
OV:当运算结果高两位的进位状态异或结果为1时,OV被置位,否则OV被清零.
PDF:系统上电或执行"CLRWDT"指令会清零PDF,而执行"HALT"指令则会置位PDF.
TO:系统上电或执行"CLRWDT"或"HALT"指令会清零TO,而当WDT溢出则会置位TO.
另外,当进入一个中断程序或执行子程序调用时,状态寄存器不会自动压入到堆栈保存.
假如状态寄存器的内容是重要的且子程序可能改变状态寄存器的话,则需谨慎的去做正确的储存.
Rev.
1.
5027HT66F0172/HT66F0174增强A/D型Flash单片机2017-08-25STATUS寄存器Bit76543210Name——TOPDFOVZACCR/W——RRR/WR/WR/WR/WPOR——00xxxx"x":未知Bit7~6未使用,读为"0"Bit5TO:看门狗溢出标志位0:系统上电或执行"CLRWDT"或"HALT"指令后1:看门狗溢出发生Bit4PDF:暂停标志位0:系统上电或执行"CLRWDT"指令后1:执行"HALT"指令Bit3OV:溢出标志位0:无溢出1:运算结果高两位的进位状态异或结果为1Bit2Z:零标志位0:算术或逻辑运算结果不为01:算术或逻辑运算结果为0Bit1AC:辅助进位标志位0:无辅助进位1:在加法运算中低四位产生了向高四位进位,或减法运算中低四位不发生从高四位借位Bit0C:进位标志位0:无进位1:如果在加法运算中结果产生了进位,或在减法运算中结果不发生借位C也受循环移位指令的影响.
Rev.
1.
5028HT66F0172/HT66F0174增强A/D型Flash单片机2017-08-25EEPROM数据寄存器(仅存在于HT66F0174)此单片机的一个特性是内建EEPROM数据存储器.
"ElectricallyErasableProgrammableReadOnlyMemory"为电可擦可编程只读存储器,由于其非易失的存储结构,即使在电源掉电的情况下存储器内的数据仍然保存完好.
这种存储区扩展了ROM空间,对设计者来说增加了许多新的应用机会.
EEPROM可以用来存储产品编号、校准值、用户特定数据、系统配置参数或其它产品信息等.
EEPROM的数据读取和写入过程也会变的更简单.
EEPROM数据寄存器结构EEPROM数据寄存器容量为64*8.
由于映射方式与程序存储器和数据存储器不同,因此不能像其它类型的存储器一样寻址.
使用Bank0中的一个地址寄存器和一个数据寄存器以及Bank1中的一个控制寄存器,可以实现对EEPROM的单字节读写操作.
EEPROM寄存器有三个寄存器控制内部EEPROM数据存储器总的操作.
地址寄存器EEA、数据寄存器EED及控制寄存器EEC.
EEA和EED位于Bank0中,它们能像其它特殊功能寄存器一样直接被访问.
EEC位于Bank1中,不能被直接访问,仅能通过MP1和IAR1进行间接读取或写入.
由于EEC控制寄存器位于Bank1中的"40H",在EEC寄存器上的任何操作被执行前,MP1必须先设为"40H",BP被设为"01H".
EEPROM寄存器列表寄存器名称位76543210EEA——D5D4D3D2D1D0EEDD7D6D5D4D3D2D1D0EEC————WRENWRRDENRDEEA寄存器Bit76543210Name——D5D4D3D2D1D0R/W——R/WR/WR/WR/WR/WR/WPOR——000000Bit7~6未定义,读为"0"Bit5~0数据EEPROM地址数据EEPROM地址Bit5~Bit0Rev.
1.
5029HT66F0172/HT66F0174增强A/D型Flash单片机2017-08-25EED寄存器Bit76543210NameD7D6D5D4D3D2D1D0R/WR/WR/WR/WR/WR/WR/WR/WR/WPOR00000000Bit7~0EEPROM数据EEPROM数据Bit7~Bit0EEC寄存器Bit76543210Name————WRENWRRDENRDR/W————R/WR/WR/WR/WPOR————0000Bit7~4未定义,读为"0"Bit3WREN:数据EEPROM写使能位0:除能1:使能此位为数据EEPROM写使能位,向数据EEPROM写操作之前需将此位置高.
将此位清零时,则禁止向数据EEPROM写操作.
Bit2WR:EEPROM写控制位0:写周期结束1:写周期有效此位为数据EEPROM写控制位,由应用程序将此位置高将激活写周期.
写周期结束后,硬件自动将此位清零.
当WREN未先置高时,此位置高无效.
Bit1RDEN:数据EEPROM读使能位0:除能1:使能此位为数据EEPROM读使能位,向数据EEPROM读操作之前需将此位置高.
将此位清零时,则禁止向数据EEPROM读操作.
Bit0RD:EEPROM读控制位0:读周期结束1:读周期有效此位为数据EEPROM读控制位,由应用程序将此位置高将激活读周期.
读周期结束后,硬件自动将此位清零.
当RDEN未首先置高时,此位置高无效.
注:在同一条指令中WREN、WR、RDEN和RD不能同时置为"1".
WR和RD不能同时置为"1".
Rev.
1.
5030HT66F0172/HT66F0174增强A/D型Flash单片机2017-08-25从EEPROM中读取数据从EEPROM中读取数据,EEPROM中读取数据的地址要先放入EEA寄存器中.
EEC寄存器中的读使能位RDEN先置为高以使能读功能.
若EEC寄存器中的RD位被置高,一个读周期将开始.
若RD位已置为高而RDEN位还未被设置则不能开始读操作.
若读周期结束,RD位将自动清除为"0",数据可以从EED寄存器中读取.
数据在其它读或写操作执行前将一直保留在EED寄存器中.
应用程序将轮询RD位以确定数据可以有效地被读取.
写数据到EEPROM写数据至EEPROM,EEPROM中写入数据的地址要先放入EEA寄存器中.
写入的数据要存入EED寄存器中.
写数据至EEPROM,EEC寄存器中的写使能位WREN先置为高以使能写功能.
之后将WR位置为高,初始化一个写周期.
这两个指令必须连续执行.
在执行任何写操作之前,总中断位EMI要先清零,写周期开始后,再将EMI置为高.
需要注意的是若WR位已置为高而WREN位还未被设置则不能开始写操作.
由于控制EEPROM写周期是一个内部时钟,与单片机的系统时钟异步,所以数据写入EEPROM的时间将有所延迟.
可通过轮询EEC寄存器中的WR位或判断EEPROM中断以侦测写周期是否完成.
若写周期完成,WR位将自动清除为"0",通知用户数据已写入EEPROM.
因此,应用程序将轮询WR位以确定写周期是否结束.
写保护防止误写入的写保护有以下几种.
单片机上电后控制寄存器中的写使能位将被清除以杜绝任何写入操作.
上电后BP将重置为"0",这意味着数据存储区Bank0被选中.
由于EEPROM控制寄存器位于Bank1中,这增加了对写操作的保护措施.
在正常程序操作中确保控制寄存器中的写使能位被清除将能防止不正确的写操作.
EEPROM中断EEPROM写周期结束后将产生EEPROM写中断,需先通过设置相关中断寄存器的DEE位使能EEPROM中断.
由于EEPROM中断包含在多功能中断中,相应的多功能中断使能位需被设置.
当EEPROM写周期结束,DEF请求标志位及其相关多功能中断请求标志位将被置位.
若总中断,EEPROM和多功能中断使能且堆栈未满的情况下将跳转到相应的多功能中断向量中执行.
当中断被响应,只有多功能中断标志位将自动复位,而EEPROM中断标志将通过应用程序手动复位.
Rev.
1.
5031HT66F0172/HT66F0174增强A/D型Flash单片机2017-08-25编程注意事项必须注意的是数据不会无意写入EEPROM.
在没有写动作时写使能位被正常清零可以增强保护功能.
BP指针也可以正常清零以阻止进入EEPROM控制寄存器存在的Bank1.
尽管没有必要,写一个简单的读回程序以检查新写入的数据是否正确还是应该考虑的.
WREN位置位后,EEC寄存器中的WR位需立即置位,否则EEPROM写周期将不能被执行.
写数据时,WREN位置为"1"后,WR须立即设置为高,以确保正确地执行写周期.
写周期执行前总中断位EMI应先清零,写周期开始执行后再将此位重新使能.
程序举例从EEPROM中读取数据—轮询法MOVA,EEPROM_ADRES;userdefinedaddressMOVEEA,AMOVA,040H;setupmemorypointerMP1MOVMP1,A;MP1pointstoEECregisterMOVA,01H;setupBankPointerMOVBP,ASETIAR1.
1;setRDENbit,enablereadoperationsSETIAR1.
0;startReadCycle-setRDbitBACK:SZIAR1.
0;checkforreadcycleendJMPBACKCLRIAR1;disableEEPROMread/writeCLRBPMOVA,EED;movereaddatatoregisterMOVREAD_DATA,A写数据到EEPROM—轮询法MOVA,EEPROM_ADRES;userdefinedaddressMOVEEA,AMOVA,EEPROM_DATA;userdefineddataMOVEED,AMOVA,040H;setupmemorypointerMP1MOVMP1,A;MP1pointstoEECregisterMOVA,01H;setupBankPointerMOVBP,ASETIAR1.
3;setWRENbit,enablewriteoperationsSETIAR1.
2;startWriteCycle-setWRbitBACK:SZIAR1.
2;checkforwritecycleendJMPBACKCLRIAR1;disableEEPROMread/writeCLRBPRev.
1.
5032HT66F0172/HT66F0174增强A/D型Flash单片机2017-08-25振荡器不同的振荡器选择可以让使用者在不同的应用需求中实现更大范围的功能.
振荡器的灵活性使得在速度和功耗方面可以达到最优化.
振荡器选择是通过寄存器完成的.
振荡器概述振荡器除了作为系统时钟源,还作为看门狗定时器和时基功能的时钟源.
外部振荡器需要一些外围器件,而集成的两个内部振荡器不需要任何外围器件.
它们提供高速和低速系统振荡器.
较高频率的振荡器提供更高的性能,但要求有更高的功率,反之亦然.
动态切换快慢系统时钟的能力使单片机具有灵活而优化的性能/功耗比,此特性对功耗敏感的应用领域尤为重要.
类型名称频率引脚外部晶振HXT400kHz~20MHzOSC1/OSC2内部高速RCHIRC8MHz—外部低速晶振LXT32.
768kHzXT1/XT2内部低速RCLIRC32kHz—注:外部低速晶振(LXT)仅存在于HT66F0174振荡器类型系统时钟配置HT66F0174有四个系统振荡器,包括两个高速振荡器和两个低速振荡器.
高速振荡器有外部晶体/陶瓷振荡器和内部8MHzRC振荡器.
两个低速振荡器包括外部32.
768kHz振荡器和内部32kHz振荡器.
HT66F0172有三个系统振荡器,包括有两个高速振荡器和一个低速振荡器.
高速振荡器有外部晶体/陶瓷振荡器和内部8MHzRC振荡器.
低速振荡器为内部32kHz振荡器.
使用高速或低速振荡器作为系统时钟的选择是通过设置SMOD寄存器中的HLCLK位及CKS2~CKS0位决定的,系统时钟可动态选择.
高速或低速振荡器的实际时钟源经由配置选项选择.
低速或高速系统时钟频率由SMOD寄存器的HLCLK位及CKS2~CKS0位决定的.
请注意,两个振荡器必须做出选择,即一个高速和一个低速振荡器.
系统必须选择一个低速或高速的振荡器.
OSC1/OSC2和XT1/XT2脚用于连接外部晶振和外部低速晶振等元件.
Rev.
1.
5033HT66F0172/HT66F0174增强A/D型Flash单片机2017-08-25fHfH/64fH/32fH/16fH/8fH/4fH/26-stagePrescalerfSUBHighSpeedOscillationConfigurationOptionfSYSHLCLK,CKS2~CKS0bitsFastWakeupfromSLEEPModeorIDLEModeControl(forHXTonly)HighSpeedOscillationHXTHIRCLowSpeedOscillationLXTLIRCfLLowSpeedOscillationConfigurationOption注:HT66F0172不存在LXT振荡器系统时钟配置外部晶体/陶瓷振荡器–HXT外部高频晶体/陶瓷振荡器可通过配置选项选择.
对于晶体振荡器,只要简单地将晶体连接至OSC1和OSC2,则会产生振荡所需的相移及反馈,而不需其它外部器件.
为保证某些低频率的晶体振荡和陶瓷谐振器的振荡频率更精准,建议连接两个小容量电容C1和C2到VSS,具体数值与客户选择的晶体/陶瓷晶振有关.
为了确保振荡器的稳定性及减少噪声和串扰的影响,晶体振荡器及其相关的电阻和电容以及他们之间的连线都应尽可能的接近单片机.
OSC1OSC2RfTointernalcircuitsInternalOscillatorCircuitC1C2RpNote:1.
Rpisnormallynotrequired.
C1andC2arerequired.
2.
AlthoughnotshownOSC1/OSC2pinshaveaparasiticcapacitanceofaround7pF.
晶体/陶瓷振荡器--HXTRev.
1.
5034HT66F0172/HT66F0174增强A/D型Flash单片机2017-08-25晶体振荡器C1和C2值晶体频率C1C212MHz0pF0pF8MHz0pF0pF4MHz0pF0pF1MHz100pF100pF注:C1和C2数值仅作参考用晶体振荡器电容推荐值内部8MHzRC振荡器–HIRC内部RC振荡器是一个集成的系统振荡器,不需其它外部器件.
内部RC振荡器具有一种固定的频率:8MHz.
芯片在制造时进行调整且内部含有频率补偿电路,使得振荡频率因VDD、温度以及芯片制成工艺不同的影响减至最低程度.
如果选择了该内部时钟,无需额外的引脚.
在电源电压为3V或5V及温度为25C的条件下,8MHz频率的容差为2%.
如果选择了该内部时钟,无需额外的引脚.
PC0和PC1可以作为通用I/O口使用.
外部32.
768kHz晶体振荡器–LXT外部32.
768kHz晶体振荡器是一个低频振荡器,经由配置选项选择.
时钟频率固定为32.
768kHz,此时XT1和XT2间引脚必须连接32.
768kHz的晶体振荡器.
需要外部电阻和电容连接到32768Hz晶振以帮助起振.
对于那些要求精确频率的场合中,可能需要这些元件来对由制程产生的误差提供频率补偿.
在系统上电期间,LXT振荡器启动需要一定的延时.
当系统进入空闲/休眠模式,系统时钟关闭以降低功耗.
然而在某些应用,比如空闲/休眠模式下要保持内部定时器功能,必须提供额外的时钟,且与系统时钟无关.
然而,对于一些晶体,为了保证系统频率的启动与精度要求,需要外接两个小容量电容C1和C2,具体数值与客户选择的晶体规格有关.
外部并联的反馈电阻RP,是必需的.
一些配置选项决定是否XT1/XT2脚是用于LXT还是作为普通I/O口使用.
若LXT振荡器未被用于任何时钟源,XT1/XT2脚能被用作一般I/O口使用.
若LXT振荡器被用于一些时钟源,32.
768kHz晶体应被连接至XT1/XT2脚.
为了确保振荡器的稳定性及减少噪声和串扰的影响,晶体振荡器及其相关的电阻和电容以及他们之间的连线都应尽可能的接近单片机.
TointernalcircuitsInternalOscillatorCircuitC1C2RpNote:1.
Rp,C1andC2arerequired.
2.
Althoughnotshownpinshaveaparasiticcapacitanceofaround7pF.
InternalRCOscillator32.
768kHzXT1XT2外部LXT振荡器Rev.
1.
5035HT66F0172/HT66F0174增强A/D型Flash单片机2017-08-25LXT振荡器C1和C2值晶体频率C1C232.
768kHz10pF10pF注:1、C1和C2数值仅作参考用2、RP的建议值为5M~10MΩ32.
768kHz振荡器电容推荐值LXT振荡器低功耗功能LXT振荡器可以工作在快速启动模式或低功耗模式,可通过设置TBC寄存器中的LXTLP位进行模式选择.
LXTLP位LXT模式0快速启动1低功耗系统上电时会清零LXTLP位来快速启动LXT振荡器.
在快速启动模式,LXT振荡器将起振并快速稳定下来.
LXT振荡器完全起振后,可以通过设置LXTLP位为高进入低功耗模式.
振荡器可以继续运行,其间耗电将少于快速启动模式.
在功耗敏感的应用领域如电池应用方面,功耗必须限制为一个最小值.
为了降低功耗,建议系统上电2秒后,在应用程序中将LXTLP位设为"1".
应注意的是,无论LXTLP位是什么值,LXT振荡器会正常运作,不同的只是在低功耗模式时启动时间更长.
内部32kHz振荡器–LIRC内部32kHz系统振荡器也是一个低频振荡器,经由配置选项选择.
这种单片机有一个完全集成RC振荡器,它在5V电压下运行的典型频率值为32kHz且无需外部元件.
芯片在制造时进行调整且内部含有频率补偿电路,使得振荡器因电源电压、温度及芯片制成工艺不同的影响减至最低.
因此,内部32kHz振荡器频率在25C温度5V电压下的精度保持在10%以内.
辅助振荡器低速振荡器除了提供一个系统时钟源外,也用来为看门狗定时器,时基,定时器模块中断提供时钟来源.
Rev.
1.
5036HT66F0172/HT66F0174增强A/D型Flash单片机2017-08-25工作模式和系统时钟现今的应用要求单片机具有较高的性能及尽可能低的功耗,这种矛盾的要求在便携式电池供电的应用领域尤为明显.
高性能所需要的高速时钟将增加功耗,反之亦然.
此单片机提供高、低速两种时钟源,它们之间可以动态切换,用户可通过优化单片机操作来获得最佳性能/功耗比.
系统时钟单片机为CPU和外围功能操作提供了多种不同的时钟源.
用户使用配置选项和寄存器编程可获取多种时钟,进而使系统时钟获取最大的应用性能.
主系统时钟可来自高频时钟源fH或低频时钟源fL,通过SMOD寄存器中的HLCLK位及CKS2~CKS0位进行选择.
高频时钟来自HIRC或HXT振荡器,可通过配置选项选择,低频系统时钟源来自内部时钟fL,若fL被选择,可通过配置选项设定为LXT或LIRC振荡器.
对于HT66F0172,低频系统时钟源仅来自LIRC振荡器.
其它系统时钟还有高速系统振荡器的分频fH/2~fH/64.
另外两个内部时钟用于外围电路,次时钟源fSUB和时基时钟fTBC.
这两个时钟源来自LXT或LIRC振荡器,通过配置选项选择.
对于HT66F0172仅来自LIRC振荡器.
快速唤醒发生后,fSUB为单片机提供一个次时钟.
fHfH/64fH/32fH/16fH/8fH/4fH/26-stagePrescalerfSUBHighSpeedOscillationConfigurationOptionfSYSHLCLK,CKS2~CKS0bitsFastWake-upfromSLEEPModeorIDLEModeControl(forHXTonly)TBCKTimeBaseWDTfTBCfTBfSYS/4fSHighSpeedOscillationHXTHIRCLowSpeedOscillationfLLXTLIRCConfigurationOptionLowSpeedOscillation系统时钟选项注:当系统时钟源fSYS由fH到fL转换时,高速振荡器将停止以节省耗电.
因此,没有为外围电路提供fH~fH/64的频率.
(HT66F0172不存在LXT振荡器)Rev.
1.
5037HT66F0172/HT66F0174增强A/D型Flash单片机2017-08-25系统工作模式单片机有6种不同的工作模式,每种有它自身的特性,根据应用中不同的性能和功耗要求可选择不同的工作模式.
单片机正常工作有两种模式:正常模式和低速模式.
剩余的4种工作模式:休眠模式0、休眠模式1、空闲模式0和空闲模式1用于单片机CPU关闭时以节省耗电.
工作模式说明CPUfSYSfSUBfSfTBC正常模式OnfH~fH/64OnOnOn低速模式OnfLOnOnOn空闲模式0OffOffOnOnOn空闲模式1OffOnOnOnOn休眠模式0OffOffOffOffOff休眠模式1OffOffOnOnOff正常模式顾名思义,这是主要的工作模式之一,单片机的所有功能均可在此模式中实现且系统时钟由一个高速振荡器提供.
该模式下单片机正常工作的时钟源来自HXT或HIRC振荡器.
高速振荡器频率可被分为1~64的不等比率,实际的比率由SMOD寄存器中的CKS2~CKS0位及HLCLK位选择的.
单片机使用高速振荡器分频作为系统时钟可减少工作电流.
低速模式此模式的系统时钟虽为较低速时钟源,但单片机仍能正常工作.
该低速时钟源可来自fL.
单片机在此模式中运行所耗工作电流较低.
在低速模式下,fH关闭.
休眠模式0在HALT指令执行后且SMOD寄存器中IDLEN位为低时,系统进入休眠模式.
在休眠模式0中,CPU、fSUB及fS停止运行,看门狗定时器功能除能.
在该模式中LVDEN位需置为"0",否则将不能进入休眠模式0中.
休眠模式1在HALT指令执行后且SMOD寄存器中IDLEN位为低时,系统进入休眠模式.
在休眠模式1中,CPU停止运行.
然而若LVDEN位为"1"或看门狗定时器功能使能时,fSUB及fS继续运行.
空闲模式0执行HALT指令后且SMOD寄存器中IDLEN位为高,CTRL寄存器中FSYSON位为低时,系统进入空闲模式0.
在空闲模式0中,CPU停止,但一些外围功能如看门狗定时器和TMs将继续工作.
在空闲模式0中,系统振荡器停止.
空闲模式1执行HALT指令后且SMOD寄存器中IDLEN位为高,WDTC寄存器中FSYSON位为高时,系统进入空闲模式1.
在空闲模式1中,CPU停止,但会提供一个时钟源给一些外围功能如看门狗定时器和TMs.
在空闲模式1中,系统振荡器继续运行,该系统振荡器可以为高速或低速系统振荡器.
Rev.
1.
5038HT66F0172/HT66F0174增强A/D型Flash单片机2017-08-25控制寄存器寄存器SMOD用于控制单片机内部时钟.
SMOD寄存器Bit76543210NameCKS2CKS1CKS0FSTENLTOHTOIDLENHLCLKR/WR/WR/WR/WR/WRRR/WR/WPOR00000011Bit7~5CKS2~CKS0:当HLCLK为"0"时系统时钟选择位000:fL(fLXT或fLIRC)001:fL(fLXT或fLIRC)010:fH/64011:fH/32100:fH/16101:fH/8110:fH/4111:fH/2这三位用于选择系统时钟源.
除了LIRC或LXT振荡器提供的系统时钟源外,也可使用高频振荡器的分频作为系统时钟.
Bit4FSTEN:快速唤醒控制位(仅用于HXT)0:除能1:使能此位为快速唤醒控制位,用于决定单片机被唤醒后fSUB是否开始工作.
此位为高电平且fSUB可用时,fSUB时钟源可作为临时时钟,为系统提供一个较快速的唤醒时间.
Bit3LTO:低速振荡器就绪标志位0:未就绪1:就绪此位为低速系统振荡器就绪标志位,用于表明低速系统振荡器在系统上电复位或经唤醒后何时稳定下来.
当系统处于SLEEP0模式时,该标志为低.
若系统时钟来自LXT振荡器,系统唤醒后该位转换为高需128个时钟周期;若系统时钟来自LIRC振荡器,该位转换为高需1~2个时钟周期.
Bit2HTO:高速振荡器就绪标志位0:未就绪1:就绪此位为高速系统振荡器就绪标志位,用于表明高速系统振荡器何时稳定下来.
此标志在系统上电后经硬件清零,高速系统振荡器稳定后变为高电平.
因此,此位在单片机上电后由应用程序读取的总为"1".
该标志由休眠模式或空闲模式0中唤醒后会处于低电平状态,若使用HXT振荡器,该位将在128个时钟周期后变为高电平状态,若HIRC振荡器则只需15~16个时钟周期即可.
Bit1IDLEN:空闲模式控制位0:除能1:使能此位为空闲模式控制位,用于决定HALT指令执行后发生的动作.
若此位为高,当指令HALT执行后,单片机进入空闲模式.
若FSYSON位为高,在空闲模式1中CPU停止运行,系统时钟将继续工作以保持外围功能继续工作;若FSYSON为低,在空闲模式0中CPU和系统时钟都将停止运行.
若此位为低,单片机将在HALT指令执行后进入休眠模式.
Rev.
1.
5039HT66F0172/HT66F0174增强A/D型Flash单片机2017-08-25Bit0HLCLK:系统时钟选择位0:fH/2~fH/64或fL1:fH此位用于选择fH或fH/2~fH/64还是fL作为系统时钟.
该位为高时选择fH作为系统时钟,为低时则选择fH/2~fH/64或fL作为系统时钟.
当系统时钟由fH时钟向fL时钟转换时,fH将自动关闭以降低功耗.
CTRL寄存器Bit76543210NameFSYSON————LVRFLRFWRFR/WR/W————R/WR/WR/WPOR0————x00"x":未知Bit7FSYSON:IDLE模式时,fSYS控制位0:除能1:使能Bit6~3未使用,读为"0"Bit2LVRF:由LVR功能有效导致的复位0:未发生1:发生当一个特定的低电压复位状况发生时,此位置为"1".
只能通过应用程序清零.
Bit1LRF:LVRC控制寄存器软件复位标志位0:未发生1:发生如果LVRC寄存器包含了非定义LVR电压寄存器数值,会发生复位.
类似于软件复位功能.
此位置为"1".
只能通过应用程序清零.
Bit0WRF:WDTC控制寄存器软件复位标志位0:未发生1:发生当发生WDTC控制寄存器软件复位时,此位置为"1".
只能通过应用程序清零.
快速唤醒单片机进入休眠模式或空闲模式0后,系统时钟将停止以降低功耗.
然而单片机再次唤醒,原来的系统时钟重新起振、稳定且恢复正常工作需要一定的时间.
为确保单片机能够尽快的开始工作,系统提供了一个快速唤醒功能.
需提供一个临时时钟源fSUB先驱动系统直至原系统振荡器稳定,这个临时时钟可来自LXT或LIRC振荡器.
快速启动功能的时钟源为fSUB,该功能仅在休眠模式1和空闲模式0中有效.
当单片机由休眠模式0唤醒时,因fSUB已停止,故快速唤醒功能不受影响.
快速唤醒功能使能/除能由SMOD寄存器中FSTEN位控制的.
若HXT振荡器作为正常模式的系统时钟,且快速唤醒功能使能,系统唤醒将需1~2个tSUB时钟周期.
系统开始在fSUB时钟源下运行直至128个HXT时钟周期后HTO标志转换为高,系统将切换到HXT振荡器运行.
若系统振荡器选用HIRC,将系统从休眠模式或空闲模式0中唤醒需15~16个时钟周期;若选用LIRC,则需1~2个周期.
快速唤醒位FSTEN在这些情况下不受影响.
Rev.
1.
5040HT66F0172/HT66F0174增强A/D型Flash单片机2017-08-25系统振荡器FSTEN位唤醒时间(休眠模式0)唤醒时间(休眠模式1)唤醒时间(空闲模式0)唤醒时间(空闲模式1)HXT0128个HXT周期128个HXT周期1~2个HXT周期1128个HXT周期1~2个fSUB周期(系统在fSUB下运行512个HXT周期后切换到HXT振荡器运行)1~2个HXT周期HIRC*15~16个HIRC周期15~16个HIRC周期1~2个HIRC周期LIRC*1~2个LIRC周期1~2个LIRC周期1~2个LIRC周期LXT*128个LXT周期1~2个LXT周期1~2个LXT周期唤醒时间注:若看门狗定时器除能,意味着LXT和LIRC都关闭,当单片机由休眠模式0中唤醒时快速唤醒功能不可用.
工作模式切换单片机可在各个工作模式间自由切换,使得用户可根据所需选择最佳的性能/功耗比.
用此方式,对单片机工作的性能要求不高的情况下,可使用较低频时钟以减少工作电流,在便携式应用上延长电池的使用寿命.
简单来说,正常模式和低速模式间的切换仅需设置SMOD中的HLCLK位及CKS2~CKS0位即可实现,而正常模式/低速模式与休眠模式/空闲模式间的切换经由HALT指令实现.
当HALT指令执行后,单片机是否进入空闲模式或休眠模式由SMOD寄存器中的IDLEN位和CTRL寄存器中的FSYSON位决定的.
当HLCLK位变为低电平时,时钟源将由高速时钟源fH转换成时钟源fH/2~fH/64或fL.
若时钟源来自fL,高速时钟源将停止运行以节省耗电.
此时须注意,fH/16和fH/64内部时钟源也将停止运行,由此会影响到内部功能的工作.
所附流程图显示了单片机在不同工作模式间切换时的变化.
SLEEP0HALTinstructionisexecutedfSYSoffCPUstopIDLEN=0fTBCofffSUBoffWDT&LVDoffNORMALfSYS=fH~fH/64fHonCPUrunfSYSonfTBConfSUBonIDLE1HALTinstructionisexecutedCPUstopIDLEN=1FSYSON=1fSYSonfTBConfSUBonIDLE0HALTinstructionisexecutedCPUstopIDLEN=1FSYSON=0fSYSofffTBConfSUBonSLOWfSYS=fLfLonCPUrunfSYSonfTBConfSUBonfHoffSLEEP1HALTinstructionisexecutedfSYSoffCPUstopIDLEN=0fTBCofffSUBonWDTorLVDonRev.
1.
5041HT66F0172/HT66F0174增强A/D型Flash单片机2017-08-25正常模式切换到低速模式系统运行在正常模式时使用高速系统振荡器,因此较为耗电.
可通过设置SMOD寄存器中的HLCLK位为"0"及CKS2~CKS0位为"000"或"001"使系统时钟切换至运行在低速模式下.
此时将使用低速系统振荡器以节省耗电.
用户可在对性能要求不高的操作中使用此方法以减少耗电.
低速模式的时钟源来自LIRC或LXT振荡器,因此要求这些振荡器在所有模式切换动作发生前稳定下来.
该动作由SMOD寄存器中LTO位控制.
SLOWModeSLEEP0ModeSLEEP1ModeIDLE0ModeIDLE1ModeNORMALModeCKS2~CKS0=00xB&HLCLK=0WDTandLVDarealloffIDLEN=0HALTinstructionisexecutedWDTorLVDisonIDLEN=0HALTinstructionisexecutedIDLEN=1,FSYSON=0HALTinstructionisexecutedIDLEN=1,FSYSON=1HALTinstructionisexecutedRev.
1.
5042HT66F0172/HT66F0174增强A/D型Flash单片机2017-08-25低速模式切换到正常模式在低速模式系统使用LIRC或LXT低速振荡器.
切换到使用高速系统时钟振荡器的正常模式需设置HLCLK位为"1",也可设置HLCLK位为"0"但CKS2~CKS0需设为"010"、"011"、"100"、"101"、"110"或"111".
高频时钟需要一定的稳定时间,通过检测HTO位的状态可进行判断.
高速振荡器的稳定时间由所使用高速系统振荡器的类型决定.
NORMALModeSLEEP0ModeSLEEP1ModeIDLE0ModeIDLE1ModeSLOWModeCKS2~CKS0000B,001BasHLCLK=0orHLCLK=1WDTandLVDarealloffIDLEN=0HALTinstructionisexecutedWDTorLVDisonIDLEN=0HALTinstructionisexecutedIDLEN=1,FSYSON=0HALTinstructionisexecutedIDLEN=1,FSYSON=1HALTinstructionisexecuted进入休眠模式0进入休眠模式0的方法仅有一种——应用程序中执行"HALT"指令前需设置寄存器SMOD中IDLEN位为"0"且WDT和LVD功能除能.
在上述条件下执行该指令后,将发生的情况如下:系统时钟、WDT时钟和时基时钟停止运行,应用程序停止在"HALT"指令处.
数据存储器中的内容和寄存器将保持当前值.
WDT被清除并停止运行.
输入/输出口将保持当前值.
状态寄存器中暂停标志PDF将被置起,看门狗溢出标志TO将被清除.
Rev.
1.
5043HT66F0172/HT66F0174增强A/D型Flash单片机2017-08-25进入休眠模式1进入休眠模式1的方法仅有一种——应用程序中执行"HALT"指令前需设置寄存器SMOD中IDLEN位为"0"且WDT或LVD功能使能.
在上述条件下执行该指令后,将发生的情况如下:系统时钟和时基时钟停止运行,应用程序停止在"HALT"指令处.
WDT或LVD继续运行,其时钟源来自fSUB.
数据存储器中的内容和寄存器将保持当前值.
若WDT使能,WDT将被清零并重新开始计数.
输入/输出口将保持当前值.
状态寄存器中暂停标志PDF将被置起,看门狗溢出标志TO将被清除.
进入空闲模式0进入空闲模式0的方法仅有一种——应用程序中执行"HALT"指令前需设置寄存器SMOD中IDLEN位为"1"且CTRL寄存器中的FSYSON位为"0".
在上述条件下执行该指令后,将发生的情况如下:系统时钟停止运行,应用程序停止在"HALT"指令处,时基时钟fTBC和fSUB时钟将继续运行.
数据存储器中的内容和寄存器将保持当前值.
若WDT使能,WDT将被清零并重新开始计数输入/输出口将保持当前值.
状态寄存器中暂停标志PDF将被置起,看门狗溢出标志TO将被清除.
进入空闲模式1进入空闲模式1的方法仅有一种——应用程序中执行"HALT"指令前需设置寄存器SMOD中IDLEN位为"1"且CTRL寄存器中的FSYSON位为"1".
在上述条件下执行该指令后,将发生的情况如下:系统时钟、时基时钟和fSUB开启,应用程序停止在"HALT"指令处.
数据存储器中的内容和寄存器将保持当前值.
若WDT使能,WDT将被清零并重新开始计数.
输入/输出口将保持当前值.
状态寄存器中暂停标志PDF将被置起,看门狗溢出标志TO将被清除.
Rev.
1.
5044HT66F0172/HT66F0174增强A/D型Flash单片机2017-08-25静态电流的注意事项由于单片机进入休眠或空闲模式的主要原因是将MCU的电流降低到尽可能低,可能到只有几个微安的级别(空闲模式1除外),所以如果要将电路的电流降到最低,电路设计者还应有其它的考虑.
应该特别注意的是单片机的输入/输出引脚.
所有高阻抗输入脚都必须连接到固定的高或低电平,因为引脚浮空会造成内部振荡并导致耗电增加.
这也应用于有不同封装的单片机,因为它们可能含有未引出的引脚,这些引脚也必须设为输出或带有上拉电阻的输入.
另外还需注意单片机设为输出的I/O引脚上的负载.
应将它们设置在有最小拉电流的状态或将它们和其它的CMOS输入一样接到没有拉电流的外部电路上.
还应注意的是,如果使能配置选项中的LXT或LIRC振荡器,会导致耗电增加.
在空闲模式1中,系统时钟开启.
若系统时钟来自高速系统振荡器,额外的静态电流也可能会有几百微安.
唤醒系统进入休眠或空闲模式之后,可以通过以下几种方式唤醒:PA口下降沿系统中断WDT溢出若由WDT溢出唤醒,则会发生看门狗定时器复位.
这种唤醒方式会使系统复位,可以通过状态寄存器中TO和PDF位来判断它的唤醒源.
系统上电或执行清除看门狗的指令,会清零PDF;执行HALT指令,PDF将被置位.
看门狗计数器溢出将会置位TO标志并唤醒系统,这种复位会重置程序计数器和堆栈指针,其它标志保持原有状态.
PA口中的每个引脚都可以通过PAWU寄存器使能下降沿唤醒功能.
PA端口唤醒后,程序将在"HALT"指令后继续执行.
如果系统是通过中断唤醒,则有两种可能发生.
第一种情况是:相关中断除能或是中断使能且堆栈已满,则程序会在"HALT"指令之后继续执行.
这种情况下,唤醒系统的中断会等到相关中断使能或有堆栈层可以使用之后才执行.
第二种情况是:相关中断使能且堆栈未满,则中断可以马上执行.
如果在进入休眠或空闲模式之前中断标志位已经被设置为"1",则相关中断的唤醒功能将无效.
编程注意事项高速和低速振荡器使用相同的SST计数器.
例如,若系统从休眠模式0中唤醒,HIRC和LXT振荡器都需从关闭状态快速启动.
HIRC振荡器结束其SST周期后,LXT振荡器才开始使用SST计数器.
若单片机从休眠模式0唤醒后进入正常模式,高速系统振荡器需要一个SST周期.
在HTO为"1"后,单片机开始执行首条指令.
此时,若fSUB时钟来源于LXT振荡器,LXT振荡器可能不是稳定的,上电状态可能会发生类似情况,首条指令执行时LXT振荡器还未就绪.
若单片机从休眠模式1唤醒后进入正常模式,系统时钟源来自HXT振荡器且FSTEN为"1",唤醒后,系统时钟可切换至LIRC振荡器.
一些外围功能,如时基和TMs,采用系统时钟fSYS时,在系统时钟源由fH切换至fL时,以上这些功能的时钟源也要随之改变.
WDT时钟源为fS,fS的开启或关闭由WDT是否使能决定的.
Rev.
1.
5045HT66F0172/HT66F0174增强A/D型Flash单片机2017-08-25看门狗定时器看门狗定时器的功能在于防止如电磁的干扰等外部不可控制事件,所造成的程序不正常动作或跳转到未知的地址.
看门狗定时器时钟源WDT定时器时钟源来自于内部时钟fS,而fS的时钟源又由LXT或LIRC振荡器提供,可通过配置选项设置.
看门狗定时器的时钟源可分频为28~218以提供更大的溢出周期,分频比由WDTC寄存器中的WS2~WS0位来决定.
电压为5V时内部振荡器LIRC的周期大约为32kHz.
需要注意的是,这个特殊的内部时钟周期随VDD、温度和制成的不同而变化.
LXT振荡器由一个外部32.
768kHz晶振提供.
WDT功能是通过应用程序控制,通过应用程序来除能或使能.
看门狗定时器控制寄存器WDTC寄存器用于控制WDT功能的使能/除能及选择溢出周期.
寄存器控制看门狗定时器的整个工作.
WDTC寄存器Bit76543210NameWE4WE3WE2WE1WE0WS2WS1WS0R/WR/WR/WR/WR/WR/WR/WR/WR/WPOR01010011Bit7~3WE4~WE0:WDT软件控制位10101:除能01010:使能其他值:MCU复位若因外部环境噪声使WE[4:0]值发生改变,则在2~3个LIRC周期后产生复位,复位后CTRL寄存器中的WRF标志位会被置位.
Bit2~0WS2~WS0:WDT溢出周期选择位000:28/fSUB001:210/fSUB010:212/fSUB011:214/fSUB100:215/fSUB101:216/fSUB110:217/fSUB111:218/fSUB这三位控制WDT时钟源的分频比,从而实现对WDT溢出周期的控制.
Rev.
1.
5046HT66F0172/HT66F0174增强A/D型Flash单片机2017-08-25CTRL寄存器Bit76543210NameFSYSON————LVRFLRFWRFR/WR/W————R/WR/WR/WPOR0————x00"x":未知Bit7FSYSON:IDLE模式时,fSYS控制位具体描述见其它章节Bit6~3未使用,读为"0"Bit2LVRF:由LVR功能有效导致的复位具体描述见其它章节Bit1LRF:LVRC控制寄存器软件复位标志位具体描述见其它章节Bit0WRF:WDTC控制寄存器软件复位标志位0:未发生1:发生当发生WDTC控制寄存器软件复位时,此位被置为"1".
只能通过应用程序清零.
看门狗定时器操作当WDT溢出时,它产生一个芯片复位的动作.
这也就意味着正常工作期间,用户需在应用程序中看门狗溢出前有策略地清看门狗定时器以防止其产生复位,可使用清除看门狗指令实现.
无论什么原因,程序失常跳转到一个未知的地址或进入一个死循环,这些清除指令都不能被正确执行,此种情况下,看门狗将溢出以使单片机复位.
WDTC寄存器中的WE4~WE0位可用来控制看门狗定时器的使能/除能/复位,设置WE4~WE0为"10101B",WDT功能将被除能.
设置WE4~WE0为"01010B",WDT功能将被使能.
或因环境噪声,使这五位值改变为除01010B、10101B以外的其它值,将会在2~3个LIRC时钟周期后,复位MCU.
上电后WE4~WE0的默认值为01010B.
WDT功能控制WE4~WE0位WDT功能应用程序使能10101B除能01010B使能其它值复位MCU看门狗定时器使能/除能控制程序正常运行时,WDT溢出将导致芯片复位,并置位状态标志位TO.
若系统处于休眠或空闲模式,当WDT发生溢出时,状态寄存器中的TO,程序计数器PC和堆栈指针SP将被置位.
有三种方法可以用来清除WDT的内容.
第一种是通过WDT软件复位,即设置WE4~WE0位为除01010B、10101B以外的其它值,第二种是通过软件清除指令,而第三种是通过"HALT"指令.
该单片机只使用一条清看门狗指令"CLRWDT".
因此只要执行"CLRWDT"便清除WDT.
当设置分频比为218时,溢出周期最大.
例如,时钟源为32kHzLIRC振荡器,分频比为218时最大溢出周期约8s,分频比为28时最小溢出周期约7.
8ms.
Rev.
1.
5047HT66F0172/HT66F0174增强A/D型Flash单片机2017-08-25"CLRWDT"Instruction8-stageDividerWDTPrescalerWE4~WE0bitsWDTCRegisterResetMCULXTfSfS/288-to-1MUXCLRWS2~WS0(fS/28~fS/218)WDTTime-out(28/fS~218/fS)LIRCMUXLowSpeedOscillatorConfigurationoption"HALT"Instruction看门狗定时器复位和初始化复位功能是任何单片机中基本的部分,使得单片机可以设定一些与外部参数无关的先置条件.
最重要的复位条件是在单片机首次上电以后,经过短暂的延迟,内部硬件电路使得单片机处于预期的稳定状态并开始执行第一条程序指令.
上电复位以后,在程序执行之前,部分重要的内部寄存器将会被设定为预先设定的状态.
程序计数器就是其中之一,它会被清除为零,使得单片机从最低的程序存储器地址开始执行程序.
另一种复位为看门狗溢出单片机复位.
不同方式的复位操作会对寄存器产生不同的影响.
另一种复位为低电压复位即LVR复位,在电源供应电压低于LVR设定值时,系统会产生LVR复位.
复位功能单片机的几种复位方式将在此处做具体介绍.
上电复位这是最基本且不可避免的复位,发生在单片机上电后.
除了保证程序存储器从开始地址执行,上电复位也使得其它寄存器被设定在预设条件.
所有的输入/输出端口控制寄存器在上电复位时会保持高电平,以确保上电后所有引脚被设定为输入状态.
VDDtRSTD+tSSTRESInternalReset0.
9VDD上电复位时序图Rev.
1.
5048HT66F0172/HT66F0174增强A/D型Flash单片机2017-08-25低电压复位–LVR单片机具有低电压复位电路,用来监测它的电源电压.
LVR始终使能,并会设定一个电源复位低电压,VLVR.
例如在更换电池的情况下,单片机供应的电压可能会在0.
9V~VLVR之间,这时LVR将会自动复位单片机且CTRL寄存器中的LVRF标志位置位.
LVR包含以下的规格:有效的LVR信号,即在0.
9V~VLVR的低电压状态的时间,必须超过LVD&LVR电气特性中tLVR参数的值.
如果低电压存在不超过tLVR参数的值,则LVR将会忽略它且不会执行复位功能.
VLVR参数值通过LVRC寄存器设置.
若因为环境噪声或软件设置修改了LVRC寄存器的值,LVC将在2~3个LIRC时钟周期后复位单片机.
同时CTRL寄存器LRF位将被置"1".
上电复位后LVCR的初始值是01010101B.
注意当单片机进入空闲或休眠模式,LVR功能将自动关闭.
LVRInternalResettRSTD+tSST低电压复位时序图LVRC寄存器Bit76543210NameLVS7LVS6LVS5LVS4LVS3LVS2LVS1LVS0R/WR/WR/WR/WR/WR/WR/WR/WR/WPOR01010101Bit7~0LVS7~LVS0:LVR电压选择控制位01010101:2.
1V00110011:2.
55V10011001:3.
15V10101010:3.
8V其他值:单片机复位(LVCR恢复到上电复位值)当相应的低电压出现后,将会产生MCU复位.
复位操作将会在2~3个LIRC时钟周期后执行.
MCU复位后寄存器中的值与复位前保持不变.
除上述的四个值外,其它值都会产生MCU复位.
复位操作将会在2~3个LIRC时钟周期后执行.
注意的是此处MCU复位后,寄存器的值将恢复到上电复位值.
Rev.
1.
5049HT66F0172/HT66F0174增强A/D型Flash单片机2017-08-25CTRL寄存器Bit76543210NameFSYSON————LVRFLRFWRFR/WR/W————R/WR/WR/WPOR0————x00"x":未知Bit7FSYSON:IDLE模式时,fSYS控制位具体描述见其它章节Bit6~3未使用,读为"0"Bit2LVRF:由LVR功能有效导致的复位0:未发生1:发生当一个特定的低电压复位状况发生时,此位被置为"1".
只能通过应用程序清零.
Bit1LRF:LVRC控制寄存器软件复位标志位0:未发生1:发生如果LVRC寄存器被修改为非定义LVR电压寄存器数值,会发生复位.
类似于软件复位功能.
此位被置为"1".
只能通过应用程序清零.
Bit0WRF:WDTC控制寄存器软件复位标志位具体描述见其它章节正常运行时看门狗溢出复位除了看门狗溢出标志位TO将被设为"1"之外,正常运行时看门狗溢出复位和LVR复位相同.
WDTTime-outInternalResettRSTD+tSST正常运行时看门狗溢出时序图休眠或空闲时看门狗溢出复位休眠或空闲时看门狗溢出复位和其它种类的复位有些不同.
除了程序计数器与堆栈指针将被清"0"及TO位被设为"1"外,绝大部分的条件保持不变.
图中tSST的详细说明请参考交流电气特性.
WDTTime-outInternalResettSST休眠或空闲时看门狗溢出复位时序图Rev.
1.
5050HT66F0172/HT66F0174增强A/D型Flash单片机2017-08-25复位初始状态不同的复位形式以不同的途径影响复位标志位.
这些标志位,即PDF和TO位存放在状态寄存器中,由休眠或空闲模式功能或看门狗计数器等几种控制器操作控制.
复位标志位如下所示:TOPDF复位条件00上电复位uu正常模式或低速模式时的LVR复位1u正常模式或低速模式时的WDT溢出复位11空闲或休眠模式时的WDT溢出复位注:"u"代表不改变在单片机上电复位之后,各功能单元初始化的情形,列于下表.
项目复位后情况程序计数器清除为零中断所有中断被除能看门狗定时器WDT清除并重新计数定时模块所有定时模块/计数器停止输入/输出口I/O口设为输入模式堆栈指针堆栈指针指向堆栈顶端不同的复位形式对单片机内部寄存器的影响是不同的.
为保证复位后程序能正常执行,了解寄存器在特定条件复位后的设置是非常重要的.
下表即为不同方式复位后内部寄存器的状况.
若芯片有多种封装类型,表格反应较大的封装的情况.
Rev.
1.
5051HT66F0172/HT66F0174增强A/D型Flash单片机2017-08-25寄存器上电复位LVR复位WDT溢出(正常模式)WDT溢出(空闲/休眠模式)MP0xxxxxxxxxxxxxxxxxxxxxxxxuuuuuuuuMP1xxxxxxxxxxxxxxxxxxxxxxxxuuuuuuuuBP000uACCxxxxxxxxuuuuuuuuuuuuuuuuuuuuuuuuPCL00000000000000000000000000000000TBLPxxxxxxxxuuuuuuuuuuuuuuuuuuuuuuuuTBLHxxxxxxxxuuuuuuuuuuuuuuuuuuuuuuuuTBHPxxxuuuuuuuuuSTATUS--00xxxx--uuxxxx--1uuuuu--11uuuuSMOD000000110000001100000011uuuuuuuuLVDC--00-000--00-000--00-000--uu–uuuINTEG----0000----0000----0000----uuuuINTC0-0-00-00-0-00-00-0-00-00-u-uu-uuINTC1000000000000000000000000uuuuuuuuINTC2--00--00--00--00--00--00--uu--uuMFI0--00--00--00--00--00--00--uu--uuMFI1--00--00--00--00--00--00--uu--uuMFI2--00--00--00--00--00--00--uu--uuPA111111111111111111111111uuuuuuuuPAC111111111111111111111111uuuuuuuuPAPU000000000000000000000000uuuuuuuuPAWU000000000000000000000000uuuuuuuuTMPC000000000uuuWDTC010100110101001101010011uuuuuuuuTBC00110111001101110011011100110111EEA--000000--000000--000000--uuuuuuEED000000000000000000000000uuuuuuuuADRL(ADRFS=0)xxxx----xxxx----xxxx----uuuu----ADRL(ADRFS=1)xxxxxxxxxxxxxxxxxxxxxxxxuuuuuuuuADRH(ADRFS=0)xxxxxxxxxxxxxxxxxxxxxxxxuuuuuuuuADRH(ADRFS=1)xxxx----xxxx----xxxx----uuuuADCR00110-0000110-0000110-000uuuu-uuuADCR100-0-00000-0-00000-0-000uu-u-uuuACERL111111111111111111111111uuuuuuuuCTRL0----x000----0000----000u----uuuLVRC010101010101010101010101uuuuuuuuTM0C000000---00000---00000---uuuuu---TM0C1000000000000000000000000uuuuuuuuTM0DL000000000000000000000000uuuuuuuuTM0DH000000000000000000000000uuuuuuuuTM0AL000000000000000000000000uuuuuuuuRev.
1.
5052HT66F0172/HT66F0174增强A/D型Flash单片机2017-08-25寄存器上电复位LVR复位WDT溢出(正常模式)WDT溢出(空闲/休眠模式)TM0AH000000000000000000000000uuuuuuuuTM0RPL000000000000000000000000uuuuuuuuTM0RPH000000000000000000000000uuuuuuuuTM1C000000---00000---00000---uuuuu---TM1C1000000000000000000000000uuuuuuuuTM1DL000000000000000000000000uuuuuuuuTM1DH000000uuTM1AL000000000000000000000000uuuuuuuuTM1AH000000uuTM1RPL000000000000000000000000uuuuuuuuTM1RPH000000uuPC111111111uuuPCC111111111uuuPCPU000000000uuuPB-1111111-1111111-1111111-uuuuuuuPBC-1111111-1111111-1111111-uuuuuuuPBPU-0000000-0000000-0000000-uuuuuuuEEC----0000----0000----0000----uuuu注:"u"表示不改变"x"表示未知"-"表示未定义Rev.
1.
5053HT66F0172/HT66F0174增强A/D型Flash单片机2017-08-25输入/输出端口Holtek单片机的输入/输出口控制具有很大的灵活性.
大部分引脚可在用户程序控制下被设定为输入或输出.
所有引脚的上拉电阻设置以及指定引脚的唤醒设置也都由软件控制,这些特性也使得此类单片机在广泛应用上都能符合开发的需求.
该单片机提供PA~PC双向输入/输出口.
这些寄存器在数据存储器有特定的地址.
所有I/O口用于输入输出操作.
作为输入操作,输入引脚无锁存功能,也就是说输入数据必须在执行"MOVA,[m]",T2的上升沿准备好,m为端口地址.
对于输出操作,所有数据都是被锁存的,且保持不变直到输出锁存被重写.
输入/输出寄存器列表寄存器名称位76543210PAD7D6D5D4D3D2D1D0PACD7D6D5D4D3D2D1D0PAPUD7D6D5D4D3D2D1D0PAWUD7D6D5D4D3D2D1D0PB—D6D5D4D3D2D1D0PBC—D6D5D4D3D2D1D0PBPU—D6D5D4D3D2D1D0PCD2D1D0PCCD2D1D0PCPUD2D1D0上拉电阻许多产品应用在端口处于输入状态时需要外加一个上拉电阻来实现上拉的功能.
为了免去外部上拉电阻,当引脚规划为输入时,可由内部连接到一个上拉电阻.
这些上拉电阻可通过寄存器PAPU~PCPU来设置,它用一个PMOS晶体管来实现上拉电阻功能.
PAPU寄存器Bit76543210NameD7D6D5D4D3D2D1D0R/WR/WR/WR/WR/WR/WR/WR/WR/WPOR00000000Bit7~0D7~D0:PA口bit7~bit0上拉电阻控制位0:除能1:使能Rev.
1.
5054HT66F0172/HT66F0174增强A/D型Flash单片机2017-08-25PBPU寄存器Bit76543210Name—D6D5D4D3D2D1D0R/W—R/WR/WR/WR/WR/WR/WR/WPOR—0000000Bit7未定义,读为"0"Bit6~0D6~D0:PB口bit6~bit0上拉电阻控制位0:除能1:使能PCPU寄存器Bit76543210NameD2D1D0R/WR/WR/WR/WPOR000Bit7~3未定义,读为"0"Bit2~0D2~D0:PC口bit2~bit0上拉电阻控制位0:除能1:使能PA口唤醒当使用暂停指令"HALT"迫使单片机进入休眠或空闲模式,单片机的系统时钟将会停止以降低功耗,此功能对于电池及低功耗应用很重要.
唤醒单片机有很多种方法,其中之一就是使PA口的其中一个引脚从高电平转为低电平.
这个功能特别适合于通过外部开关来唤醒的应用.
PA口的每个引脚可以通过设置PAWU寄存器来单独选择是否具有唤醒功能.
PAWU寄存器Bit76543210NameD7D6D5D4D3D2D1D0R/WR/WR/WR/WR/WR/WR/WR/WR/WPOR00000000Bit7~0D7~D0:PA口bit7~bit0唤醒功能控制位0:除能1:使能Rev.
1.
5055HT66F0172/HT66F0174增强A/D型Flash单片机2017-08-25输入/输出端口控制寄存器每一个输入/输出口都具有各自的控制寄存器,即PAC~PCC,用来控制输入/输出状态.
从而每个I/O引脚都可以通过软件控制,动态的设置为CMOS输出或输入.
所有的I/O端口的引脚都各自对应于I/O端口控制的某一位.
若I/O引脚要实现输入功能,则对应的控制寄存器的位需要设置为"1".
这时程序指令可以直接读取输入脚的逻辑状态.
若控制寄存器相应的位被设定为"0",则此引脚被设置为CMOS输出.
当引脚设置为输出状态时,程序指令读取的是输出端口寄存器的内容.
注意,如果对输出口做读取动作时,程序读取到的是内部输出数据锁存器中的状态,而不是输出引脚上实际的逻辑状态.
PAC寄存器Bit76543210NameD7D6D5D4D3D2D1D0R/WR/WR/WR/WR/WR/WR/WR/WR/WPOR11111111Bit7~0PA口bit7~bit0输入/输出控制位0:输出1:输入PBC寄存器Bit76543210Name—D6D5D4D3D2D1D0R/W—R/WR/WR/WR/WR/WR/WR/WPOR—1111111Bit7未使用,读为"0"Bit6~0PB口bit6~bit0输入/输出控制位0:输出1:输入PCC寄存器Bit76543210NameD2D1D0R/WR/WR/WR/WPOR111Bit7~3未使用,读为"0"Bit2~0PC口bit2~bit0输入/输出控制位0:输出1:输入Rev.
1.
5056HT66F0172/HT66F0174增强A/D型Flash单片机2017-08-25输入/输出引脚结构下图为输入/输出引脚的内部结构图.
输入/输出引脚的准确逻辑结构图可能与此图不同,这里只是为了方便对I/O引脚功能的理解提供的一个参考.
图中的引脚共用结构并非针对所有单片机.
VDDMUXReadDataRegisterControlBitPull-HighOptionDataBusWriteControlRegisterChipResetReadControlRegisterWriteDataRegisterDataBitWeakPull-upDQCKSQDQCKSQI/OPinWake-upOptionSystemWake-upPAonly通用输入/输出端口VDDMUXReadDataRegisterControlBitPull-HighOptionDataBusWriteControlRegisterChipResetReadControlRegisterWriteDataRegisterDataBitA/DinputPinsACS1~ACS0ToA/DConverterWeakPull-upAnalogInputSelectorDQCKSQDQCKSQA/D输入输出结构Rev.
1.
5057HT66F0172/HT66F0174增强A/D型Flash单片机2017-08-25编程注意事项在编程中,最先要考虑的是端口的初始化.
复位之后,所有的输入/输出数据及端口控制寄存器都将被设为逻辑高.
所有输入/输出引脚默认为输入状态,而其电平则取决于其它相连接电路以及是否选择了上拉电阻.
如果端口控制寄存器PAC~PCC,某些引脚位被设定输出状态,这些输出引脚会有初始高电平输出,除非数据寄存器端口PA~PC在程序中被预先设定.
设置哪些引脚是输入及哪些引脚是输出,可通过设置正确的值到适当的端口控制寄存器,或使用指令"SET[m].
i"及"CLR[m].
i"来设定端口控制寄存器中个别的位.
注意,当使用这些位控制指令时,系统即将产生一个读-修改-写的操作.
单片机需要先读入整个端口上的数据,修改个别的位,然后重新把这些数据写入到输出端口.
A/D转换控制寄存器的上电初始状态默认PA4~PA7、PB0~PB3为模拟信号输入引脚,但A/D转换功能并没自动开启.
因些需注意若要将PA4~PA7、PB0~PB3用作数字信号输入引脚,或其它功能,需在程序中修改A/D转换控制寄存器值以关闭A/D功能.
另外需注意A/D通道使能,内部上拉电阻将自动断开.
PA口的每个引脚都带唤醒功能.
单片机处于休眠或空闲模式时,有很多方法可以唤醒单片机,其中之一就是通过PA任一引脚电平从高到低转换的方式,可以设置PA口一个或多个引脚具有唤醒功能.
定时器模块–TM控制和测量时间在任何单片机中都是一个很重要的部分.
每个单片机提供几个定时器模块(简称TM),来实现和时间有关的功能.
定时器模块是包括多种操作的定时单元,提供的操作有:定时/事件计数器,捕捉输入,比较匹配输出,单脉冲输出以及PWM输出等功能.
每个定时器模块有两个独立中断.
每个TM外加的输入输出引脚,扩大了定时器的灵活性,便于用户使用.
这里只介绍各种TM的共性,更多详细资料请参考相关定时器章节.
简介该单片机包含2个TM,分别命名为TM0和TM1,都为周期型定时器模块.
下表简单归纳了PTM的一些特性.
更多详细资料见后面一章.
功能PTM定时/计数器√捕捉输入√比较匹配输出√PWM通道数1单脉冲输出1PWM对齐方式边沿对齐PWM调节周期&占空比占空比或周期PTM功能概要TM0TM110-bitPTM10-bitPTMTM名称/类型参考Rev.
1.
5058HT66F0172/HT66F0174增强A/D型Flash单片机2017-08-25TM操作周期型TM提供从简单的定时操作到PWM信号产生等多种功能.
理解TM操作的关键是比较TM内独立运行的计数器的值与内部比较器的预置值.
当计数器的值与比较器的预置值相同时,则比较匹配,TM中断信号产生,清零计数器并改变TM输出引脚的状态.
用户选择内部时钟或外部时钟来驱动内部TM计数器.
TM时钟源驱动TM计数器的时钟源很多.
通过设置TM控制寄存器的TnCK2~TnCK0位,选择所需的时钟源.
该时钟源来自系统时钟fSYS或内部高速时钟fH或fTBC时钟源或外部TCKn引脚.
TCKn引脚时钟源用于允许外部信号作为TM时钟源或用于事件计数.
TM中断周期型TM拥有两个内部中断,分别是内部比较器A或比较器P,当比较匹配发生时产生TM中断.
当TM中断产生时,计数器清零并改变TM输出引脚的状态.
TM外部引脚每个TM都有一个TM输入引脚TCKn.
通过设置TMnC0寄存器中的TnCK2~TnCK0位,选择TM功能并将该引脚作为TM时钟源输入脚.
外部时钟源可通过该引脚来驱动内部TM.
外部TM输入脚也与其它功能共用,但是,如果设置适当值给TnCK2~TnCK0,该引脚会连接到内部TM.
TM引脚可选择上升沿有效或下降沿有效.
每个TM有一个输出引脚TPn.
当TM工作在比较匹配输出模式且比较匹配发生时,这些引脚会由TM控制切换到高电平或低电平或翻转.
外部TPn输出引脚也被TM用来产生PWM输出波形.
当TM输出引脚与其它功能共用时,TM输出功能需要通过寄存器先被设置.
寄存器中的一个单独位用于决定其相关引脚用于外部TM输出还是用于其它功能.
TM输入/输出引脚控制寄存器通过设置一个与TM输入/输出引脚相关的寄存器的一位,选择作为TM输入/输出功能或其它共用功能.
设定为高时,相关引脚用作TM输入/输出,清零时将保持原来的功能.
Rev.
1.
5059HT66F0172/HT66F0174增强A/D型Flash单片机2017-08-25TMPC寄存器Bit76543210NameCLOPT1CPT0CPR/WR/WR/WR/WPOR000Bit7CLOP:CLO引脚控制位0:除能1:使能Bit6~2未使用,读为"0"Bit1T1CP:TP1引脚控制位0:除能1:使能Bit0T0CP:TP0引脚控制位0:除能1:使能编程注意事项TM计数寄存器和捕捉/比较寄存器CCRA、CCRP为10-bit的寄存器,含有低字节和高字节结构.
高字节可直接访问,低字节则仅能通过一个内部8-bit的缓存器进行访问.
值得注意的是8-bit缓存器的存取数据及相关低字节的读写操作仅在其相应的高字节读取操作执行时发生.
CCRA和CCRP寄存器访问方式如下图所示,读写这些成对的寄存器需通过特殊的方式.
建议使用"MOV"指令按照以下步骤访问CCRA或CCRP低字节寄存器,TMxAL或TMxRPL,否则可能导致无法预期的结果.
TMCounterRegister(Readonly)TMxDLTMxDHTMxALTMxAH8-bitBufferTMCCRARegister(Read/Write)DataBusTMxRPLTMxRPHTMCCRPRegister(Read/Write)读写流程如下步骤所示:写数据至CCRA或CCRP步骤1.
写数据至低字节寄存器TMxAL或TMxRPL–注意,此时数据仅写入8-bit缓存器.
步骤2.
写数据至高字节寄存器TMxAH或TMxRPH–注意,此时数据直接写入高字节寄存器,同时锁存在8-bit缓存器中的数据写入低字节寄存器.
由计数器寄存器和CCRA或CCRP中读取数据步骤1.
由高字节寄存器TMxDH、TMxAH或TMxRPH读取数据–注意,此时高字节寄存器中的数据直接读取,同时由低字节寄存器读取的数据锁存至8-bit缓存器中.
步骤2.
由低字节寄存器TMxDL、TMxAL或TMxRPL读取数据–注意,此时读取8-bit缓存器中的数据.
Rev.
1.
5060HT66F0172/HT66F0174增强A/D型Flash单片机2017-08-25周期型TM–PTM周期型TM包括5种工作模式,即比较匹配输出、定时/事件计数器、捕捉输入、单脉冲输出和PWM输出模式.
周期型TM也由一个外部输入脚控制并驱动一个外部输出脚.
周期型TM操作这两个周期型TM都是10位宽度.
周期型TM核心是一个由用户选择的内部或外部时钟源驱动的10位向上计数器,它还包括两个内部比较器即比较器A和比较器P.
这两个比较器将计数器的值与CCRA和CCRP寄存器中的值进行比较.
CCRP比较器是10位宽度.
通过应用程序改变10位计数器值的唯一方法是使TnON位发生上升沿跳变清除计数器.
此外,计数器溢出或比较匹配也会自动清除计数器.
上述条件发生时,通常情况会产生TM中断信号.
周期型TM可工作在不同的模式,可由包括来自输入脚的不同时钟源驱动,也可以控制输出脚.
所有工作模式的设定都是通过设置相关寄存器来实现的.
CCRPCCRATnCCLRComparatorPMatchComparatorAMatchTnCK2~TnCK0TnONTnPAUb0~b910-bitComparatorP10-bitComparatorACounterClear10-bitCount-upCounterTnPFInterruptTnAFInterruptTPnPinInput/Outputb0~b9EdgeDetectorTnIO1,TnIO0TnM1,TnM0TnIO1,TnIO0TnPOLTnOCPolarityControlOutputControlTPnTCKn111000001010011100101110fSYS/4fSYSfH/16fH/64fTBCfH0101TnCAPTSTPnNote:TheTPn_0pinisonlyinternallyusedandisnotconnectedtotheexternalpin.
周期型TM方框图(n=0,1)Rev.
1.
5061HT66F0172/HT66F0174增强A/D型Flash单片机2017-08-25周期型TM寄存器介绍周期型TM的所有操作由一系列寄存器控制.
一对只读寄存器用来存放10位计数器的值,两对读/写寄存器存放10位CCRA和CCRP的值.
剩下两个控制寄存器用来设置不同的操作和控制模式.
寄存器名称位76543210TMnC0TnPAUTnCK2TnCK1TnCK0TnON———TMnC1TnM1TnM0TnIO1TnIO0TnOCTnPOLTnCAPTSTnCCLRTMnDLD7D6D5D4D3D2D1D0TMnDHD9D8TMnALD7D6D5D4D3D2D1D0TMnAHD9D8TMnRPLD7D6D5D4D3D2D1D0TMnRPHD9D810-bit周期型TM寄存器列表(n=0,1)TMnC0寄存器Bit76543210NameTnPAUTnCK2TnCK1TnCK0TnON———R/WR/WR/WR/WR/WR/W———POR00000———Bit7TnPAU:TMn计数器暂停控制位0:运行1:暂停通过设置此位为高可使计数器暂停,清零此位恢复正常计数器操作.
当处于暂停条件时,TM保持上电状态并继续耗电.
当此位由低到高转变时,计数器将保留其剩余值,直到此位再次改变为低电平,并从此值开始继续计数.
Bit6~4TnCK2~TnCK0:选择TMn计数时钟位000:fSYS/4001:fSYS010:fH/16011:fH/64100:fTBC101:fH110:TCKn上升沿111:TCKn下降沿此三位用于选择TM的时钟源.
外部引脚时钟源能被选择在上升沿或下降沿有效.
fSYS是系统时钟,fH和fTBC是其它的内部时钟源,细节方面请参考振荡器章节.
Bit3TnON:TMn计数器On/Off控制位0:Off1:On此位控制TM的总开关功能.
设置此位为高则使能计数器使其运行,清零此位则除能TM.
清零此位将停止计数器并关闭TM减少耗电.
当此位经由低到高转变时,内部计数器将复位清零;当此位经由高到低转换时,内部计数器将保持其剩余值,直到此位再次改变为高电平.
若TM处于比较匹配输出模式时(通过TnOC位指定),当TnON位经由低到高的转变时,TM输出脚将重置其初始值.
Bit2~0未定义,读为"0"Rev.
1.
5062HT66F0172/HT66F0174增强A/D型Flash单片机2017-08-25TMnC1寄存器Bit76543210NameTnM1TnM0TnIO1TnIO0TnOCTnPOLTnCAPTSTnCCLRR/WR/WR/WR/WR/WR/WR/WR/WR/WPOR00000000Bit7~6TnM1~TnM0:选择TMn工作模式位00:比较匹配输出模式01:捕捉输入模式10:PWM模式或单脉冲输出模式11:定时/计数器模式这两位设置TM需要的工作模式.
为了确保操作可靠,TM应在TnM1和TnM0位有任何改变前先关掉.
在定时/计数器模式,TM输出脚控制必须除能.
Bit5~4TnIO1~TnIO0:选择TPn输出功能位比较匹配输出模式00:无变化01:输出低10:输出高11:输出翻转PWM模式/单脉冲输出模式00:强制无效状态01:强制有效状态10:PWM输出11:单脉冲输出捕捉输入模式00:在TPn或TCKn上升沿输入捕捉01:在TPn或TCKn下降沿输入捕捉10:在TPn或TCKn双沿输入捕捉11:输入捕捉除能定时/计数器模式未使用此两位用于决定在一定条件达到时TM输出脚如何改变状态.
这两位值的选择决定TM运行在哪种模式下.
在比较匹配输出模式下,TnIO1和TnIO0位决定当从比较器A比较匹配输出发生时TM输出脚如何改变状态.
当从比较器A比较匹配输出发生时TM输出脚能设为切换高、切换低或翻转当前状态.
若此两位同时为0时,这个输出将不会改变.
TM输出脚的初始值通过TMnC1寄存器的TnOC位设置取得.
注意,由TnIO1和TnIO0位得到的输出电平必须与通过TnOC位设置的初始值不同,否则当比较匹配发生时,TM输出脚将不会发生变化.
在TM输出脚改变状态后,通过TnON位由低到高电平的转换复位至初始值.
在PWM模式,TnIO1和TnIO0用于决定比较匹配条件发生时怎样改变TM输出脚的状态.
PWM输出功能通过这两位的变化进行更新.
仅在TMn关闭时改变TnIO1和TnIO0位的值是很有必要的.
若在TM运行时改变TnIO1和TnIO0的值,PWM输出的值是无法预料的.
Bit3TnOC:TPn输出控制位比较匹配输出模式0:初始低1:初始高PWM模式/单脉冲输出模式0:低有效1:高有效这是TM输出脚输出控制位.
它取决于TM此时正运行于比较匹配输出模式还是PWM模式/单脉冲输出模式.
若TM处于定时/计数器模式,则其不受影响.
在比较匹配输出模式时,比较匹配发生前其决定TM输出脚的逻辑电平值.
在PWM模式时,其决定PWM信号是高有效还是低有效.
Rev.
1.
5063HT66F0172/HT66F0174增强A/D型Flash单片机2017-08-25Bit2TnPOL:TPn输出极性控制位0:同相1:反相此位控制TPn输出脚的极性.
此位为高时TM输出脚反相,为低时TM输出脚同相.
若TM处于定时/计数器模式时其不受影响.
Bit1TnCAPTS:选择TMn捕捉触发源0:来自TPn引脚1:来自TCKn引脚Bit0TnCCLR:选择TMn计数器清零条件位0:TMn比较器P匹配1:TMn比较器A匹配此位用于选择清除计数器的方法.
周期型TM包括两个比较器--比较器A和比较器P,两者都可以用作清除内部计数器.
TnCCLR位设为高,计数器在比较器A比较匹配发生时被清除;此位设为低,计数器在比较器P比较匹配发生或计数器溢出时被清除.
计数器溢出清除的方法仅在CCRP被清除为0时才能生效.
TnCCLR位在PWM模式、单脉冲或输入捕捉模式时未使用.
TMnDL寄存器Bit76543210NameD7D6D5D4D3D2D1D0R/WRRRRRRRRPOR00000000Bit7~0TMnDL:TMn计数器低字节寄存器bit7~bit0TMn10-bit计数器bit7~bit0TMnDH寄存器Bit76543210NameD9D8R/WRRPOR00Bit7~2未定义,读为"0"Bit1~0TMnDH:TMn计数器高字节寄存器bit1~bit0TMn10-bit计数器bit9~bit8TMnAL寄存器Bit76543210NameD7D6D5D4D3D2D1D0R/WR/WR/WR/WR/WR/WR/WR/WR/WPOR00000000Bit7~0TMnAL:TMnCCRA低字节寄存器bit7~bit0TMn10-bitCCRAbit7~bit0Rev.
1.
5064HT66F0172/HT66F0174增强A/D型Flash单片机2017-08-25TMnAH寄存器Bit76543210NameD9D8R/WR/WR/WPOR00Bit7~2未定义,读为"0"Bit1~0TMnAH:TMnCCRA高字节寄存器bit1~bit0TMn10-bitCCRAbit9~bit8TMnRPL寄存器Bit76543210NameD7D6D5D4D3D2D1D0R/WR/WR/WR/WR/WR/WR/WR/WR/WPOR00000000Bit7~0TMnRPL:TMnCCRP低字节寄存器bit7~bit0TMn10-bitCCRPbit7~bit0TMnRPH寄存器Bit76543210NameD9D8R/WR/WR/WPOR00Bit7~2未定义,读为"0"Bit1~0TMnRPH:TMnCCRP高字节寄存器bit1~bit0TMn10-bitCCRPbit9~bit8Rev.
1.
5065HT66F0172/HT66F0174增强A/D型Flash单片机2017-08-25周期型TM工作模式周期型TM有五种工作模式,即比较匹配输出模式、PWM输出模式、单脉冲输出模式、捕捉输入模式或定时/计数器模式.
通过设置TMnC1寄存器的TnM1和TnM0位选择任意模式.
比较匹配输出模式为使TM工作在此模式,TMnC1寄存器的TnM1和TnM0位需要设置为"00".
当工作在该模式,一旦计数器使能并开始计数,有三种方法来清零,分别是:计数器溢出,比较器A比较匹配发生和比较器P比较匹配发生.
当TnCCLR位为低,有两种方法清除计数器.
一种是比较器P比较匹配发生,另一种是CCRP所有位设置为零并使得计数器溢出.
此时,比较器A和比较器P的请求标志位TnAF和TnPF将分别置起.
如果TMnC1寄存器的TnCCLR位设置为高,当比较器A比较匹配发生时计数器被清零.
此时,即使CCRP寄存器的值小于CCRA寄存器的值,仅TnAF中断请求标志产生.
所以当TnCCLR为高时,不会产生TnPF中断请求标志.
在比较匹配输出模式中,CCRA寄存器值不能设为"0".
正如该模式名所言,当比较匹配发生后,TM输出脚状态改变.
当比较器A比较匹配发生后TnAF中断请求标志产生时,TM输出脚状态改变.
比较器P比较匹配发生时产生的TnPF标志不影响TM输出脚.
TM输出脚状态改变方式由TMnC1寄存器中TnIO1和TnIO0位决定.
当比较器A比较匹配发生时,TnIO1和TnIO0位决定TM输出脚输出高,低或翻转当前状态.
TM输出脚初始值,既可以通过TnON位由低到高电平的变化设置,也可以由TnOC设置.
注意,若TnIO1和TnIO0位同时为0时,引脚输出不变.
Rev.
1.
5066HT66F0172/HT66F0174增强A/D型Flash单片机2017-08-25CounterValue0x3FFCCRPCCRATnONTnPAUTnPOLCCRPInt.
FlagTnPFCCRAInt.
FlagTnAFTMO/PPinTimeCCRP=0CCRP>0CounteroverflowCCRP>0CounterclearedbyCCRPvaluePauseResumeStopCounterRestartTnCCLR=0;TnM[1:0]=00OutputpinsettoinitialLevelLowifTnOC=0OutputTogglewithTnAFflagNoteTnIO[1:0]=10ActiveHighOutputselectHereTnIO[1:0]=11ToggleOutputselectOutputnotaffectedbyTnAFflag.
RemainsHighuntilresetbyTnONbitOutputPinResettoInitialvalueOutputcontrolledbyotherpin-sharedfunctionOutputInvertswhenTnPOLishigh比较器匹配输出模式--TnCCLR=0(n=0或1)注:1.
TnCCLR=0,比较器P匹配将清除计数器2.
TM输出脚仅由TnAF标志位控制3.
在TnON上升沿TM输出脚复位至初始值Rev.
1.
5067HT66F0172/HT66F0174增强A/D型Flash单片机2017-08-25CounterValue0x3FFCCRPCCRATnONTnPAUTnPOLCCRPInt.
FlagTnPFCCRAInt.
FlagTnAFTMO/PPinTimeCCRA=0CCRA=0CounteroverflowCCRA>0CounterclearedbyCCRAvaluePauseResumeStopCounterRestartTnCCLR=1;TnM[1:0]=00OutputpinsettoinitialLevelLowifTnOC=0OutputTogglewithTnAFflagNoteTnIO[1:0]=10ActiveHighOutputselectHereTnIO[1:0]=11ToggleOutputselectOutputnotaffectedbyTnAFflag.
RemainsHighuntilresetbyTnONbitOutputPinResettoInitialvalueOutputcontrolledbyotherpin-sharedfunctionOutputInvertswhenTnPOLishighTnPFnotgeneratedNoTnAFflaggeneratedonCCRAoverflowOutputdoesnotchange比较器匹配输出模式--TnCCLR=1(n=0或1)注:1.
TnCCLR=1,比较器A匹配将清除计数器2.
TM输出脚仅由TnAF标志位控制3.
在TnON上升沿TM输出脚复位至初始值4.
当TnCCLR=1时,不会产生TnPF标志Rev.
1.
5068HT66F0172/HT66F0174增强A/D型Flash单片机2017-08-25定时/计数器模式为使TM工作在此模式,TMnC1寄存器的TnM1和TnM0位需要设置为"11".
定时/计数器模式与比较输出模式操作方式相同,并产生同样的中断请求标志.
不同的是,在定时/计数器模式下TM输出脚未使用.
因此,比较匹配输出模式中的描述和时序图可以适用于此功能.
该模式中未使用的TM输出脚用作普通I/O脚或其它功能.
PWM输出模式为使TM工作在此模式,TMnC1寄存器的TnM1和TnM0位需要设置为"10",且TnIO1和TnIO0位也需要设置为"10".
TM的PWM功能在马达控制,加热控制,照明控制等方面十分有用.
给TM输出脚提供一个频率固定但占空比可调的信号,将产生一个有效值等于DC均方根的AC方波.
由于PWM波形的周期和占空比可调,其波形的选择就极其灵活.
在PWM模式中,TnCCLR位对PWM周期无影响.
CCRP和CCRA寄存器都用于控制PWM方波.
CCRP寄存器通过清除内部计数从而控制PWM周期,CCRA寄存器设置PWM的占空比.
PWM波形的周期和占空比由CCRP和CCRA寄存器的值控制.
当比较器A或比较器P比较匹配发生时,CCRA和CCRP中断标志位分别产生.
TMnC1寄存器的TnOC位选择PWM波形的极性,TnIO1和TnIO0位使能PWM输出或强制TM输出脚为高电平或低电平.
TnPOL位用于PWM输出波形的极性反相控制.
10-bitPTM,PWM模式,边沿对齐模式CCRP1~10230000BPeriod1~10231024DutyCCRA若fSYS=16MHz,TM时钟源选择fSYS/4,CCRP=512且CCRA=128,PTMPWM输出频率=(fSYS/4)/512=fSYS/2048=7.
8125kHz,duty=128/512=25%,若由CCRA寄存器定义的Duty值等于或大于Period值,PWM输出占空比为100%.
Rev.
1.
5069HT66F0172/HT66F0174增强A/D型Flash单片机2017-08-25CounterValueCCRPCCRATnONTnPAUTnPOLCCRPInt.
FlagTnPFCCRAInt.
FlagTnAFTMO/PPin(TnOC=1)TimeCounterclearedbyCCRPPauseResumeCounterStopifTnONbitlowCounterResetwhenTnONreturnshighTnDPX=0;TnM[1:0]=10PWMDutyCyclesetbyCCRAPWMresumesoperationOutputcontrolledbyotherpin-sharedfunctionOutputInvertswhenTnPOL=1PWMPeriodsetbyCCRPTMO/PPin(TnOC=0)PWM模式(n=0或1)注:1.
CCRP清除计数器2.
计数器清除并决定PWM周期3.
当TnIO[1:0]=00或01,PWM功能不变4.
TnCCLR位对PWM功能无影响Rev.
1.
5070HT66F0172/HT66F0174增强A/D型Flash单片机2017-08-25单脉冲输出模式为使TM工作在此模式,TnM1和TnM0位需要设置为"10",并且相应的TnIO1和TnIO0需要设置为"11".
正如模式名所言,单脉冲输出模式,在TM输出脚将产生一个脉冲输出.
通过应用程序控制TnON位由低到高的转变来触发脉冲前沿输出.
而处于单脉冲模式时,TnON位可由TCKn脚自动由低转变为高,进而依次初始化单脉冲输出.
当TnON位转变为高电平时,计数器将开始运行,并产生脉冲前沿.
通过应用程序使TnON位清零或比较器A比较匹配发生时,产生脉冲下降沿.
而比较器A比较匹配发生时,会自动清除TnON位并产生单脉冲输出下降沿.
CCRA的值通过这种方式控制脉冲宽度.
比较器A比较匹配发生时,也会产生TM中断.
TnON位在计数器重启时会发生由低到高的转变,此时计数器才复位至零.
在单脉冲模式中,CCRP寄存器和TnCCLR位未使用.
LeadingEdgeTnONbit01S/WCommandSET"TnON"orTCKnPinTransitionTnONbit10S/WCommandCLR"TnON"orCCRAMatchComparePulseWidth=CCRAValueTrailingEdgeTMnOutputPin单脉冲产生示意图(n=0或1)Rev.
1.
5071HT66F0172/HT66F0174增强A/D型Flash单片机2017-08-25CounterValueCCRPCCRATnONTnPAUTnPOLCCRPInt.
FlagTnPFCCRAInt.
FlagTnAFTMO/PPin(TnOC=1)TimeCounterstoppedbyCCRAPauseResumeCounterStopsbysoftwareCounterResetwhenTnONreturnshighTnM[1:0]=10;TnIO[1:0]=11PulseWidthsetbyCCRAOutputInvertswhenTnPOL=1NoCCRPInterruptsgeneratedTMO/PPin(TnOC=0)TCKnpinSoftwareTriggerClearedbyCCRAmatchTCKnpinTriggerAuto.
setbyTCKnpinSoftwareTriggerSoftwareClearSoftwareTriggerSoftwareTrigger单脉冲模式(n=0或1)注:1.
通过CCRA匹配停止计数器2.
CCRP未使用3.
通过TCKn脚或设置TnON位为高来触发脉冲4.
TCKn脚有效沿会自动置位TnON5.
单脉冲模式中,TnIO[1:0]需置位"11",且不能更改Rev.
1.
5072HT66F0172/HT66F0174增强A/D型Flash单片机2017-08-25捕捉输入模式为使TM工作在此模式,TMnC1寄存器的TnM1和TnM0位需要设置为"01".
此模式使能外部信号捕捉并保存内部计数器当前值,因此被用于诸如脉冲宽度测量的应用中.
TPn或TCKn引脚上的外部信号,通过设置TMnC1寄存器的TnCAPTS位选择.
可通过设置TMnC0寄存器的TnIO1和TnIO0位选择有效边沿类型,即上升沿,下降沿或双沿有效.
计数器在TnON位由低到高转变时启动并通过应用程序初始化.
当TPn或TCKn引脚出现有效边沿转换时,计数器当前值被锁存到CCRA寄存器,并产生TM中断.
不考虑TPn或TCKn引脚事件,计数器继续工作直到TnON位发生下降沿跳变.
当CCRP比较匹配发生时计数器复位至零;CCRP的值通过这种方式控制计数器的最大值.
当比较器PCCRP比较匹配发生时,也会产生TM中断.
记录CCRP溢出中断信号的值可以测量长脉宽.
通过设置TnIO1和TnIO0位选择TPn或TCKn引脚为上升沿,下降沿或双沿有效.
不考虑TPn或TCKn引脚事件,如果TnIO1和TnIO0位都设为高,不会产生捕捉操作,但计数器继续运行.
当TPn或TCKn引脚与其它功能共用,TM工作在输入捕捉模式时需多加注意.
这是因为如果引脚被设为输出,那么该引脚上的任何电平转变都可能执行输入捕捉操作.
TnCCLR,TnOC和TnPOL位在此模式中未使用.
Rev.
1.
5073HT66F0172/HT66F0174增强A/D型Flash单片机2017-08-25CounterValueYYCCRPTnONTnPAUCCRPInt.
FlagTnPFCCRAInt.
FlagTnAFCCRAValueTimeCounterclearedbyCCRPPauseResumeCounterResetTnM[1:0]=01TMcapturepinTPnorTCKnXXCounterStopTnIO[1:0]ValueXXYYXXYYActiveedgeActiveedgeActiveedge00–Risingedge01–Fallingedge10–Bothedges11–DisableCapture捕捉输入模式(n=0或1)注:1.
TnM[1:0]=01并通过TnIO[1:0]位设置有效边沿2.
TM捕捉输入脚的有效边沿将计数器的值转移到CCRA中3.
TnCCLR位未使用4.
无输出功能–TnOC和TnPOL位未使用5.
计数器值由CCRP决定,在CCRP为"0"时,计数器计数值可达最大Rev.
1.
5074HT66F0172/HT66F0174增强A/D型Flash单片机2017-08-25A/D转换器对于大多数电子系统而言,处理现实世界的模拟信号是共同的需求.
为了完全由单片机来处理这些信号,首先需要通过A/D转换器将模拟信号转换成数字信号.
将A/D转换器电路集成入单片机,可有效的减少外部器件,随之而来,具有降低成本和减少器件空间需求的优势.
A/D简介此单片机都包含一个多通道的A/D转换器,它们可以直接接入外部模拟信号(来自传感器或其它控制信号)并直接将这些信号转换成12位的数字量.
输入通道数A/D通道选择位输入引脚8ACS4,ACS2~ACS0AN0~AN7下图显示了A/D转换器内部结构和相关的寄存器.
A/DConverterPB0/AN0PB1/AN1PB2/AN2PA4/AN3PA5/AN4PA6/AN5PA7/AN6PB3/AN7A/DReferenceVoltageADRLADRHA/DDataRegistersV125ENSTARTEOCBADOFFVSSPA5/VREFADCK2~ADCK0fSYSACE7~ACE0ACS4,ACS2~ACS01.
25VA/DClockVDDADOFFBitVREFSBitADRFSbit2N(N=0~6)A/D转换器结构Rev.
1.
5075HT66F0172/HT66F0174增强A/D型Flash单片机2017-08-25A/D转换寄存器介绍A/D转换器的所有工作由五个寄存器控制.
一对只读寄存器来存放12位ADC数据的值.
剩下三个控制寄存器设置A/D转换器的操作和控制功能.
寄存器名称位76543210ADRL(ADRFS=0)D3D2D1D0————ADRL(ADRFS=1)D7D6D5D4D3D2D1D0ADRH(ADRFS=0)D11D10D9D8D7D6D5D4ADRH(ADRFS=1)D11D10D9D8ADCR0STARTEOCBADOFFADRFS—ACS2ACS1ACS0ADCR1ACS4V125EN—VREFS—ADCK2ADCK1ADCK0ACERLACE7ACE6ACE5ACE4ACE3ACE2ACE1ACE0A/D转换寄存器列表A/D转换器数据寄存器–ADRL,ADRH对于具有12位A/D转换器的单片机,需要两个数据寄存器存放转换结果,一个高字节寄存器ADRH和一个低字节寄存器ADRL.
在A/D转换完毕后,单片机可以直接读取这些寄存器以获得转换结果.
D0~D11是A/D换转数据结果位.
未使用的位读为"0".
ADRFSADRHADRL76543210765432100D11D10D9D8D7D6D5D4D3D2D1D0000010000D11D10D9D8D7D6D5D4D3D2D1D0A/D数据寄存器A/D转换器控制寄存器–ADCR0,ADCR1,ACERL寄存器ADCR0,ADCR1和ACERL用来控制A/D转换器的功能和操作.
这些8位的寄存器定义包括选择连接至内部A/D转换器的模拟通道,数字化数据格式,A/D时钟源,并控制和监视A/D转换器的开始和转换结束状态.
寄存器ADCR0的ACS4、ACS2~ACS0位定义A/D转换器输入通道编号.
由于每个单片机只包含一个实际的模数转换电路,因此这8个模拟输入中的每一个都需要分别被发送到转换器.
ACS4、ACS2~ACS0位的功能决定选择哪个模拟输入通道或內部1.
25V被连接到内部A/D转换器.
ACERL控制寄存器中的ACE7~ACE0位,用来定义哪些引脚为A/D转换器的模拟输入,哪些引脚不作为A/D转换输入.
相应位设为高将选择A/D输入功能,清零将选择I/O或其它引脚共用功能.
当引脚作为A/D输入时,其原来的I/O或其它引脚共用功能消失,此外,其内部上拉电阻也将自动断开.
Rev.
1.
5076HT66F0172/HT66F0174增强A/D型Flash单片机2017-08-25ADCR0寄存器Bit76543210NameSTARTEOCBADOFFADRFS—ACS2ACS1ACS0R/WR/WRR/WR/W—R/WR/WR/WPOR0110—000Bit7START:启动A/D转换位0→1→0:启动0→1:重置A/D转换,并且设置EOCB为"1"此位用于初始化A/D转换过程.
通常此位为低,但如果设为高再被清零,将初始化A/D转换过程.
当此位为高,将重置A/D转换器.
Bit6EOCB:A/D转换结束标志0:A/D转换结束1:A/D转换中此位用于表明A/D转换过程的完成.
当转换正在进行时,此位为高.
Bit5ADOFF:ADC模块电源开/关控制位0:ADC模块电源开1:ADC模块电源关此位控制A/D内部功能的电源.
该位被清零将使能A/D转换器.
如果该位设为高将关闭A/D转换器以降低功耗.
由于A/D转换器在不执行转换动作时都会产生一定的功耗,所以这在电源敏感的电池应用中需要多加注意.
注:1.
建议在进入空闲/休眠模式前,设置ADOFF=1以减少功耗.
Bit4ADRFS:ADC数据格式控制位0:ADC数据高字节是ADRH的bit7~bit0,低字节是ADRL的bit7~bit41:ADC数据高字节是ADRH的bit3~bit0,低字节是ADRL的bit7~bit0此位控制存放在两个A/D数据寄存器中的12位A/D转换结果的格式.
细节方面请参考A/D数据寄存器章节.
Bit3未定义,读为"0"Bit2~0ACS2,ACS1,ACS0:选择A/D通道(ACS4为"0")位000:AN0001:AN1010:AN2011:AN3100:AN4101:AN5110:AN6111:AN7这三位是A/D通道选择控制位.
由于只包含一个内部A/D转换电路,因此通过这些位将8个A/D输入连接到转换器.
如果ADCR1寄存器中的ACS4设为高,内部1.
25V电路将被连接到内部A/D转换器.
Rev.
1.
5077HT66F0172/HT66F0174增强A/D型Flash单片机2017-08-25ADCR1寄存器Bit76543210NameACS4V125EN—VREFS—ADCK2ADCK1ADCK0R/WR/WR/W—R/W—R/WR/WR/WPOR00—0—000Bit7ACS4:选择内部1.
25V作为ADC输入控制位0:除能1:使能此位使能1.
25V连接到A/D转换器.
V125EN位必须先被置位使能1.
25V电压能隙电路被用于A/D转换器.
当ACS4设为高,1.
25V带隙电压将连接到A/D转换器,其它A/D输入通道断开.
Bit6V125EN:内部1.
25V控制位0:除能1:使能此位控制连接到A/D转换器的内部充电泵电路开/关功能.
当此位设为高,带隙电压1.
25V连接至A/D转换器.
如果1.
25V未连接至A/D转换器且LVR/LVD除能,带隙参考电压电路自动关闭以减少功耗.
当1.
25V打开连接至A/D转换器,在A/D转换动作执行前,带隙电路稳定需一段时间tBG.
Bit5未定义,读为"0"Bit4VREFS:选择ADC参考电压0:内部ADC电源1:VREF引脚此位用于选择A/D转换器的参考电压.
如果该位设为高,A/D转换器参考电压来源于外部VREF引脚.
如果该位设为低,内部参考电压来源于电源电压VDD.
当选择为VREF引脚时,与此引脚共用的其它功能将被除能.
注:ADOFF=1将关闭ADC模块的电源.
ADC参考电压,选择VREF引脚(VREFS=1)时AN1无法使用.
Bit3未定义,读为"0"Bit2~0ADCK2,ADCK1,ADCK0:选择ADC时钟源000:fSYS001:fSYS/2010:fSYS/4011:fSYS/8100:fSYS/16101:fSYS/32110:fSYS/64111:未定义这三位用于选择A/D转换器的时钟源.
Rev.
1.
5078HT66F0172/HT66F0174增强A/D型Flash单片机2017-08-25ACERL寄存器Bit76543210NameACE7ACE6ACE5ACE4ACE3ACE2ACE1ACE0R/WR/WR/WR/WR/WR/WR/WR/WR/WPOR11111111Bit7ACE7:定义PB3是否为A/D输入0:不是A/D输入1:A/D输入,AN7Bit6ACE6:定义PA7是否为A/D输入0:不是A/D输入1:A/D输入,AN6Bit5ACE5:定义PA6是否为A/D输入0:不是A/D输入1:A/D输入,AN5Bit4ACE4:定义PA5是否为A/D输入0:不是A/D输入1:A/D输入,AN4Bit3ACE3:定义PA4是否为A/D输入0:不是A/D输入1:A/D输入,AN3Bit2ACE2:定义PB2是否为A/D输入0:不是A/D输入1:A/D输入,AN2Bit1ACE1:定义PB1是否为A/D输入0:不是A/D输入1:A/D输入,AN1Bit0ACE0:定义PB0是否为A/D输入0:不是A/D输入1:A/D输入,AN0Rev.
1.
5079HT66F0172/HT66F0174增强A/D型Flash单片机2017-08-25A/D操作ADCR0寄存器中的START位,用于打开和复位A/D转换器.
当单片机设定此位从逻辑低到逻辑高,然后再到逻辑低,就会开始一个模数转换周期.
当START位从逻辑低到逻辑高,但不再回到逻辑低时,ADCR0寄存器中的EOCB位置"1",复位模数转换器.
START位用于控制内部模数换转器的开启动作.
ADCR0寄存器中的EOCB位用于表明模数转换过程的完成.
在转换周期结束后,EOCB位会被单片机自动地置为"0".
此外,也会置位中断控制寄存器内相应的A/D中断请求标志位,如果中断使能,就会产生对应的内部中断信号.
A/D内部中断信号将引导程序到相应的A/D内部中断入口.
如果A/D内部中断被禁止,可以让单片机轮询ADCR0寄存器中的EOCB位,检查此位是否被清除,以作为另一种侦测A/D转换周期结束的方法.
A/D转换器的时钟源为系统时钟fSYS分频,而分频系数由ADCR1寄存器中的ADCK2~ADCK0位决定.
虽然A/D时钟源是由系统时钟fSYS,ADCK2~ADCK0位决定,但可选择的最大A/D时钟源则有一些限制.
允许的A/D时钟周期tADCK的范围为0.
5s~10s,选择系统时钟时就必须小心.
如果系统时钟速度为4MHz时,ADCK2~ADCK0位不能设为"000"或"110".
必须保证设定的A/D转换时钟周期不小于时钟周期的最小值或大于时钟周期的最大值,否则将会产生不准确的A/D转换值.
使用者可以参考下面的表格,被标上星号*的数值是不允许的,因为它们的A/D转换时钟周期小于规定的最小值.
fSYSA/D时钟周期(tADCK)ADCK2,ADCK1,ADCK0=000(fSYS)ADCK2,ADCK1,ADCK0=001(fSYS/2)ADCK2,ADCK1,ADCK0=010(fSYS/4)ADCK2,ADCK1,ADCK0=011(fSYS/8)ADCK2,ADCK1,ADCK0=100(fSYS/16)ADCK2,ADCK1,ADCK0=101(fSYS/32)ADCK2,ADCK1,ADCK0=110(fSYS/64)ADCK2,ADCK1,ADCK0=1111MHz1μs2μs4μs8μs16μs*32μs*64μs*未定义2MHz500ns1μs2μs4μs8μs16μs*32μs*未定义4MHz250ns*500ns1μs2μs4μs8μs16μs*未定义8MHz125ns*250ns*500ns1μs2μs4μs8μs未定义12MHz83ns*167ns*333ns*667ns1.
33μs2.
67μs5.
33μs未定义A/D时钟周期范例ADCR0寄存器的ADOFF位用于控制A/D转换电路电源的开/关.
该位必须清零以开启A/D转换器电源.
即使通过清除ACERL寄存器的ACE7~ACE0位,选择无引脚作为A/D输入,如果ADOFF设为"0",那么仍然会产生功耗.
因此当未使用A/D转换器功能时,在功耗敏感的应用中建议设置ADOFF为高以减少功耗.
A/D转换器参考电压来自正电源电压AVDD或外部参考源引脚VREF,可通过VREFS位来选择.
由于VREF引脚与其它功能共用,当VREFS设为高,选择VREF引脚功能且其它引脚功能将自动除能.
Rev.
1.
5080HT66F0172/HT66F0174增强A/D型Flash单片机2017-08-25A/D输入引脚所有的A/D模拟输入引脚都与PA端口的I/O引脚及其它功能共用.
使用ACERL寄存器中的ACE7~ACE0位,可以将它们设置为A/D转换器模拟输入脚或具有其它功能.
如果引脚的对应位ACE7~ACE0设为高,那么该引脚作为A/D转换输入且原引脚功能除能.
通过这种方式,引脚的功能可由程序来控制,灵活地切换引脚功能.
如果将引脚设为A/D输入,则通过寄存器编程设置的所有上拉电阻会自动断开.
请注意,PAC、PBC端口控制寄存器不需要为使能A/D输入而先设定为输入模式,当ACE7~ACE0位使能A/D输入时,端口控制寄存器的状态将被重置.
A/D转换器有自己的参考电压引脚VREF,而通过设置ADCR1寄存器的VREFS位,参考电压也可以选择来自电源电压引脚.
模拟输入值一定不能超过VREF值.
AN0AN71.
25VV125ENBufferPA5/VREFVDDVREFSVREF12-bitADCBandgapReferenceVoltageInputVoltageACS4,ACS2~ACS0A/D输入结构A/D转换步骤下面概述实现A/D转换过程的各个步骤.
步骤1通过ADCR1寄存器中的ADCK2~ADCK0位,选择所需的A/D转换时钟.
步骤2清零ADCR0寄存器中的ADOFF位使能A/D.
步骤3通过ADCR1和ADCR0寄存器中的ACS4、ACS2~ACS0位,选择连接至内部A/D转换器的通道.
步骤4通过ACERL寄存器中的ACE7~ACE0位,选择哪些引脚规划为A/D输入引脚.
步骤5如果要使用中断,则中断控制寄存器需要正确地设置,以确保A/D转换功能是激活的.
总中断控制位EMI需要置位为"1",以及A/D转换器中断位ADE也需要置位为"1".
步骤6现在可以通过设定ADCR0寄存器中的START位从"0"到"1"再回到"0",开始模数转换的过程.
注意,该位需初始化为"0".
Rev.
1.
5081HT66F0172/HT66F0174增强A/D型Flash单片机2017-08-25步骤7可以轮询ADCR0寄存器中的EOCB位,检查模数转换过程是否完成.
当此位成为逻辑低时,表示转换过程已经完成.
转换完成后,可读取A/D数据寄存器ADRL和ADRH获得转换后的值.
另一种方法是,若中断使能且堆栈未满,则程序等待A/D中断发生.
注:若使用轮询ADCR0寄存器中EOCB位的状态的方法来检查转换过程是否结束时,则中断使能的步骤可以省略.
下列时序图表示模数转换过程中不同阶段的图形与时序.
由应用程序控制开始A/D转换过程后,单片机的内部硬件就会开始进行转换,在这个过程中,程序可以继续其它功能.
A/D转换时间为16tADCK,tADCK为A/D时钟周期.
tADCA/Dconversiontime0011B0010BSTARTEOCBACS4,ACS2~ACS0Power-onResetEndofA/Dconversion1:Defineportconfiguration2:SelectanalogchannelStartofA/DconversionResetA/DconverterA/DsamplingtimetADS0000BStartofA/DconversionResetA/Dconverter0001BStartofA/DconversionResetA/DconverterEndofA/DconversionA/DsamplingtimetADSoffonontON2STtADCA/DconversiontimeoffADOFFADCModuleONA/D转换时序图编程注意事项在编程时,如果A/D转换器未使用,通过设置ADCR0寄存器中的ADOFF为高,关闭A/D内部电路以减少电源功耗.
此时,不考虑输入脚的模拟电压,内部A/D转换器电路不产生功耗.
如果A/D转换器输入脚用作普通I/O脚,必须特别注意,输入电压为无效逻辑电平也可能增加功耗.
A/D转换功能单片机含有一组12位的A/D转换器,它们转换的最大值可达FFFH.
由于模拟输入最大值等于VDD或VREF的电压值,因此每一位可表示VDD或VREF/4096的模拟输入值.
1LSB=(VDD或VREF)÷4096通过下面的等式可估算A/D转换器输入电压值:A/D输入电压=A/D数字输出值*(VDD或VREF)÷4096下图显示A/D转换器模拟输入值和数字输出值之间理想的转换功能.
除了数字化数值0,其后的数字化数值会在精确点之前的0.
5LSB处改变,而数字化数值的最大值将在VDD或VREF之前的1.
5LSB处改变.
Rev.
1.
5082HT66F0172/HT66F0174增强A/D型Flash单片机2017-08-25FFEH()A/DConversionResultFFFHFFDH03H02H01H0.
5LSB01234093409440954096AnalogInputVoltage1.
5LSBVDDorVREF4096理想的A/D转换功能A/D转换应用范例下面两个范例程序用来说明怎样使用A/D转换.
第一个范例是轮询ADCR0寄存器中的EOCB位来判断A/D转换是否完成;第二个范例则使用中断的方式判断.
范例:使用查询EOCB的方式来检测转换结束clrADE;disableADCinterruptmova,03HmovADCR1,a;selectfSYS/8asA/Dclockandswitchoff1.
25VclrADOFFmova,FFh;setupACERLtoconfigurepinsAN0~AN7movACERL,amova,00hmovADCR0,a;enableandconnectAN0channeltoA/Dconverter::Start_conversion:clrSTARTsetSTART;resetA/DclrSTART;startA/DPolling_EOC:szEOCB;polltheADCR0registerEOCBbittodetectendofA/Dconversionjmppolling_EOC;continuepollingmova,ADRL;readlowbyteconversionresultvaluemovadrl_buffer,a;saveresulttouserdefinedregistermova,ADRH;readhighbyteconversionresultvaluemovadrh_buffer,a;saveresulttouserdefinedregister:jmpstart_conversion;startnextA/DconversionRev.
1.
5083HT66F0172/HT66F0174增强A/D型Flash单片机2017-08-25范例:使用中断的方式来检测转换结束clrADE;disableADCinterruptmova,03HmovADCR1,a;selectfSYS/8asA/Dclockandswitchoff1.
25VclrADOFFmova,FFh;setupACERLtoconfigurepinsAN0~AN7movACERL,amova,00hmovADCR0,a;enableandconnectAN0channeltoA/Dconverter::Start_conversion:clrSTARTsetSTART;resetA/DclrSTART;startA/DclrADF;clearADCinterruptrequestflagsetADE;enableADCinterruptsetEMI;enableglobalinterrupt::;ADCinterruptserviceroutineADC_:movacc_stack,a;saveACCtouserdefinedmemorymova,STATUSmovstatus_stack,a;saveSTATUStouserdefinedmemory::mova,ADRL;readlowbyteconversionresultvaluemovadrl_buffer,a;saveresulttouserdefinedregistermova,ADRH;readhighbyteconversionresultvaluemovadrh_buffer,a;saveresulttouserdefinedregister::EXIT_ISR:mova,status_stackmovSTATUS,a;restoreSTATUSfromuserdefinedmemorymova,acc_stack;restoreACCfromuserdefinedmemoryclrADF;clearADCinterruptflagretiRev.
1.
5084HT66F0172/HT66F0174增强A/D型Flash单片机2017-08-25中断中断是单片机一个重要功能.
当外部事件或内部功能如定时器模块或A/D转换器有效,并且产生中断时,系统会暂时中止当前的程序而转到执行相对应的中断服务程序.
此单片机提供多个外部中断和内部中断功能,外部中断由INT0~INT1引脚动作产生,而内部中断由各种内部功能,如定时器模块、时基、LVD、EEPROM和A/D转换器等产生.
中断寄存器中断控制基本上是在一定单片机条件发生时设置请求标志位,应用程序中中断使能位的设置是通过位于专用数据存储器中的一系列寄存器控制的.
寄存器总的分为三类.
第一类是INTC0~INTC2寄存器,用于设置基本的中断;第二类是MFI0~MFI2寄存器,用于设置多功能中断;最后一种有INTEG寄存器,用于设置外部中断边沿触发类型.
寄存器中含有中断控制位和中断请求标志位.
中断控制位用于使能或除能各种中断,中断请求标志位用于存放当前中断请求的状态.
它们都按照特定的模式命名,前面表示中断类型的缩写,紧接着的字母"E"代表使能/除能位,"F"代表请求标志位.
功能使能位请求标志注释总中断EMI——INTn脚INTnEINTnFn=0或1A/D转换器ADEADF—多功能MFnEMFnFn=0~2时基TBnETBnFn=0或1LVDLVELVF—EEPROMDEEDEF—PTMTnPETnPFn=0或1TnAETnAF中断寄存器位命名模式寄存器名称位76543210INTEG————INT1S1INT1S0INT0S1INT0S0INTC0—MF0F—INT0FMF0E—INT0EEMIINTC1TB0FADFMF2FMF1FTB0EADEMF2EMF1EINTC2——INT1FTB1F——INT1ETB1EMFI0——T0AFT0PF——T0AET0PEMFI1——T1AFT1PF——T1AET1PEMFI2——DEFLVF——DEELVE中断寄存器内容–HT66F0174Rev.
1.
5085HT66F0172/HT66F0174增强A/D型Flash单片机2017-08-25寄存器名称位76543210INTEG————INT1S1INT1S0INT0S1INT0S0INTC0—MF0F—INT0FMF0E—INT0EEMIINTC1TB0FADFMF2FMF1FTB0EADEMF2EMF1EINTC2——INT1FTB1F——INT1ETB1EMFI0——T0AFT0PF——T0AET0PEMFI1——T1AFT1PF——T1AET1PEMFI2———LVF———LVE中断寄存器内容–HT66F0172INTEG寄存器Bit76543210Name————INT1S1INT1S0INT0S1INT0S0R/W————R/WR/WR/WR/WPOR————0000Bit7~4未使用,读为"0"Bit3~2INT1S1,INT1S0:INT1脚中断边沿控制位00:除能01:上升沿10:下降沿11:双沿Bit1~0INT0S1,INT0S0:INT0脚中断边沿控制位00:除能01:上升沿10:下降沿11:双沿INTC0寄存器Bit76543210Name—MF0F—INT0FMF0E—INT0EEMIR/W—R/W—R/WR/W—R/WR/WPOR—0—00—00Bit7未使用,读为"0"Bit6MF0F:多功能中断0中断请求标志位0:无请求1:中断请求Bit5未使用,读为"0"Bit4INT0F:INT0中断请求标志位0:无请求1:中断请求Bit3MF0E:多功能中断0中断控制位0:除能1:使能Bit2未使用,读为"0"Rev.
1.
5086HT66F0172/HT66F0174增强A/D型Flash单片机2017-08-25Bit1INT0E:INT0中断控制位0:除能1:使能Bit0EMI:总中断控制位0:除能1:使能INTC1寄存器Bit76543210NameTB0FADFMF2FMF1FTB0EADEMF2EMF1ER/WR/WR/WR/WR/WR/WR/WR/WR/WPOR00000000Bit7TB0F:时基0中断请求标志位0:无请求1:中断请求Bit6ADF:A/D转换器中断请求标志位0:无请求1:中断请求Bit5MF2F:多功能中断2中断请求标志位0:无请求1:中断请求Bit4MF1F:多功能中断1中断请求标志位0:无请求1:中断请求Bit3TB0E:时基0中断控制位0:除能1:使能Bit2ADE:A/D转换器中断控制位0:除能1:使能Bit1MF2E:多功能中断2中断控制位0:除能1:使能Bit0MF1E:多功能中断1中断控制位0:除能1:使能INTC2寄存器Bit76543210Name——INT1FTB1F——INT1ETB1ER/W——R/WR/W——R/WR/WPOR——00——00Bit7~6未使用,读为"0"Bit5INT1F:INT1中断请求标志位0:无请求1:中断请求Bit4TB1F:时基1中断请求标志位0:无请求1:中断请求Bit3~2未使用,读为"0"Rev.
1.
5087HT66F0172/HT66F0174增强A/D型Flash单片机2017-08-25Bit1INT1E:INT1中断控制位0:除能1:使能Bit0TB1E:时基1中断控制位0:除能1:使能MFI0寄存器Bit76543210Name——T0AFT0PF——T0AET0PER/W——R/WR/W——R/WR/WPOR——00——00Bit7~6未使用,读为"0"Bit5T0AF:TM0比较器A匹配中断请求标志位0:无请求1:中断请求Bit4T0PF:TM0比较器P匹配中断请求标志位0:无请求1:中断请求Bit3~2未使用,读为"0"Bit1T0AE:TM0比较器A匹配中断控制位0:除能1:使能Bit0T0PE:TM0比较器P匹配中断控制位0:除能1:使能MFI1寄存器Bit76543210Name——T1AFT1PF——T1AET1PER/W——R/WR/W——R/WR/WPOR——00——00Bit7~6未使用,读为"0"Bit5T1AF:TM1比较器A匹配中断请求标志位0:无请求1:中断请求Bit4T1PF:TM1比较器P匹配中断请求标志位0:无请求1:中断请求Bit3~2未使用,读为"0"Bit1T1AE:TM1比较器A匹配中断控制位0:除能1:使能Bit0T1PE:TM1比较器P匹配中断控制位0:除能1:使能Rev.
1.
5088HT66F0172/HT66F0174增强A/D型Flash单片机2017-08-25MFI2寄存器HT66F0174Bit76543210Name——DEFLVF——DEELVER/W——R/WR/W——R/WR/WPOR——00——00Bit7~6未使用,读为"0"Bit5DEF:数据EEPROM中断请求标志位0:无请求1:中断请求Bit4LVF:LVD中断请求标志位0:无请求1:中断请求Bit3~2未使用,读为"0"Bit1DEE:数据EEPROM中断控制位0:除能1:使能Bit0LVE:LVD中断控制位0:除能1:使能HT66F0172Bit76543210Name———LVF———LVER/W———R/W———R/WPOR———0———0Bit7~5未使用,读为"0"Bit4LVF:LVD中断请求标志位0:无请求1:中断请求Bit3~1未使用,读为"0"Bit0LVE:LVD中断控制位0:除能1:使能Rev.
1.
5089HT66F0172/HT66F0174增强A/D型Flash单片机2017-08-25中断操作若中断事件条件产生,如一个TM比较器P、比较器A匹配或A/D转换结束等等,相关中断请求标志将置起.
中断标志产生后程序是否会跳转至相关中断向量执行是由中断使能位的条件决定的.
若使能位为"1",程序将跳至相关中断向量中执行;若使能位为"0",即使中断请求标志置起中断也不会发生,程序也不会跳转至相关中断向量执行.
若总中断使能位为"0",所有中断都将除能.
当中断发生时,下条指令的地址将被压入堆栈.
相应的中断向量地址加载至PC中.
系统将从此向量取下条指令.
中断向量处通常为跳转指令,以跳转到相应的中断服务程序.
中断服务程序必须以"RETI"指令返回至主程序,以继续执行原来的程序.
各个中断使能位以及相应的请求标志位,以优先级的次序显示在下图.
一些中断源有自己的向量,但是有些中断却共用多功能中断向量.
一旦中断子程序被响应,系统将自动清除EMI位,所有其它的中断将被屏蔽,这个方式可以防止任何进一步的中断嵌套.
其它中断请求可能发生在此期间,虽然中断不会立即响应,但是中断请求标志位会被记录.
如果某个中断服务子程序正在执行时,有另一个中断要求立即响应,那么EMI位应在程序进入中断子程序后置位,以允许此中断嵌套.
如果堆栈已满,即使此中断使能,中断请求也不会被响应,直到SP减少为止.
如果要求立刻动作,则堆栈必须避免成为储满状态.
请求同时发生时,执行优先级如下流程图所示.
所有被置起的中断请求标志都可把单片机从休眠或空闲模式中唤醒,若要防止唤醒动作发生,在单片机进入休眠或空闲模式前应将相应的标志置起.
INT0PinINT1PinINT0FINT1FINT0EINT1EEMI04HEMI0CHEMI10HTimeBase0TB0FTB0EEMI1CHInterruptNameRequestFlagsEnableBitsMasterEnableVectorEMIautodisabledinISRPriorityHighLowTM0PT0PFT0PETM0AT0AFT0AEM.
Funct.
0MF0FMF0EInterruptscontainedwithinMulti-FunctionInterruptsxxEEnableBitsxxFRequestFlag,autoresetinISRLegendxxFRequestFlag,noautoresetinISREMI20HEMI24HM.
Funct.
1MF1FMF1ETimeBase1TB1FTB1EA/DADFADEEMI18HEMI14HLVDLVFLVEM.
Funct.
2MF2FMF2EEEPROMDEFDEETM1PT1PFT1PETM1AT1AFT1AE中断结构–HT66F0174Rev.
1.
5090HT66F0172/HT66F0174增强A/D型Flash单片机2017-08-25INT0PinINT1PinINT0FINT1FINT0EINT1EEMI04HEMI0CHEMI10HTimeBase0TB0FTB0EEMI1CHInterruptNameRequestFlagsEnableBitsMasterEnableVectorEMIautodisabledinISRPriorityHighLowTM0PT0PFT0PETM0AT0AFT0AEM.
Funct.
0MF0FMF0EInterruptscontainedwithinMulti-FunctionInterruptsxxEEnableBitsxxFRequestFlag,autoresetinISRLegendxxFRequestFlag,noautoresetinISREMI20HEMI24HM.
Funct.
1MF1FMF1ETimeBase1TB1FTB1EA/DADFADEEMI18HEMI14HLVDLVFLVEM.
Funct.
2MF2FMF2ETM1PT1PFT1PETM1AT1AFT1AE中断结构–HT66F0172外部中断通过INT0~INT1引脚上的信号变化可控制外部中断.
当触发沿选择位设置好触发类型,INT0~INT1引脚的状态发生变化,外部中断请求标志INT0F~INT1F被置位时外部中断请求产生.
若要跳转到相应中断向量地址,总中断控制位EMI和相应中断使能位INT0E~INT1E需先被置位.
此外,必须使用INTEG寄存器使能外部中断功能并选择触发沿类型.
外部中断引脚和普通I/O口共用,如果相应寄存器中的中断使能位被置位,此引脚将被作为外部中断脚使用.
此时该引脚必须通过设置控制寄存器,将该引脚设置为输入口.
当中断使能,堆栈未满并且外部中断脚状态改变,将调用外部中断向量子程序.
当响应外部中断服务子程序时,中断请求标志位INT0F~INT1F会自动复位且EMI位会被清零以除能其它中断.
注意,即使此引脚被用作外部中断输入,其上拉电阻选择仍保持有效.
寄存器INTEG被用来选择有效的边沿类型,来触发外部中断.
可以选择上升沿还是下降沿或双沿触发都产生外部中断.
注意INTEG也可以用来除能外部中断功能.
Rev.
1.
5091HT66F0172/HT66F0174增强A/D型Flash单片机2017-08-25时基中断时基中断提供一个固定周期的中断信号,由各自的定时器功能产生溢出信号控制.
当各自的中断请求标志TB0F或TB1F被置位时,中断请求发生.
当总中断使能位EMI和时基使能位TB0E或TB1E被置位,允许程序跳转到各自的中断向量地址.
当中断使能,堆栈未满且时基溢出时,将调用它们各自的中断向量子程序.
当响应中断服务子程序时,相应的中断请求标志位TB0F或TB1F会自动复位且EMI位会被清零以除能其它中断.
时基中断的目的是提供一个固定周期的中断信号,时钟源来自内部时钟源fTB.
fTB输入时钟首先经过分频器,分频率由程序设置TBC寄存器相关位获取合适的分频值以提供更长的时基中断周期.
控制时基中断频率fTB的时钟源有几种,如在系统工作模式章节所示.
TBC寄存器HT66F0174Bit76543210NameTBONTBCKTB11TB10LXTLPTB02TB01TB00R/WR/WR/WR/WR/WR/WR/WR/WR/WPOR00110111Bit7TBON:TB0和TB1控制位0:除能1:使能Bit6TBCK:选择fTB时钟位0:fTBC1:fSYS/4Bit5~4TB11~TB10:选择时基1溢出周期位00:4096/fTB01:8192/fTB10:16384/fTB11:32768/fTBBit3LXTLP:LXT低功耗控制位0:除能1:使能Bit2~0TB02~TB00:选择时基0溢出周期位000:256/fTB001:512/fTB010:1024/fTB011:2048/fTB100:4096/fTB101:8192/fTB110:16384/fTB111:32768/fTBRev.
1.
5092HT66F0172/HT66F0174增强A/D型Flash单片机2017-08-25HT66F0172Bit76543210NameTBONTBCKTB11TB10—TB02TB01TB00R/WR/WR/WR/WR/W—R/WR/WR/WPOR0011—111Bit7TBON:TB0和TB1控制位0:除能1:使能Bit6TBCK:选择fTB时钟位0:fTBC1:fSYS/4Bit5~4TB11~TB10:选择时基1溢出周期位00:4096/fTB01:8192/fTB10:16384/fTB11:32768/fTBBit3未使用,读为"0"Bit2~0TB02~TB00:选择时基0溢出周期位000:256/fTB001:512/fTB010:1024/fTB011:2048/fTB100:4096/fTB101:8192/fTB110:16384/fTB111:32768/fTBTB02~TB00fTBMUXMUXLXTLIRCfSYS/4ConfigurationOptionTBCKBitfTBCTB11~TB10212~21528~215TimeBase1InterruptTimeBase0Interrupt时基中断Rev.
1.
5093HT66F0172/HT66F0174增强A/D型Flash单片机2017-08-25多功能中断此单片机中有多达三个多功能中断,与其它中断不同,它没有独立源,但由其它现有的中断源构成,即TM中断,LVD中断和EEPROM中断.
当多功能中断中任何一种中断请求标志MF0F~MF2F被置位,多功能中断请求产生.
当中断使能,堆栈未满,包括在多功能中断中的任意一个中断发生时,将调用多功能中断向量中的一个子程序.
当响应中断服务子程序时,相关的多功能请求标志位会自动复位且EMI位会自动清零以除能其它中断.
但必须注意的是,在中断响应时,虽然多功能中断标志会自动复位,但多功能中断源的请求标志位,即PTM中断,LVD中断和EEPROM中断的请求标志位不会自动复位,必须由应用程序清零.
A/D转换器中断A/D转换器中断由A/D转换动作的结束来控制.
当A/D转换器中断请求标志被置位,即A/D转换过程完成时,中断请求发生.
当总中断使能位EMI和A/D中断使能位ADE被置位,允许程序跳转到各自的中断向量地址.
当中断使能,堆栈未满且A/D转换动作结束时,将调用它们各自的中断向量子程序.
当响应中断服务子程序时,相应的中断请求标志位ADF会自动清零.
EMI位也会被清零以除能其它中断.
TM中断每个周期型TM各有两个中断.
所有的TM中断也属于多功能中断.
每个周期型TM各有两个中断请求标志位TnPF、TnAF及两个使能位TnPE、TnAE.
当TM比较器P、A匹配情况发生时,任意TM中断请求标志被置位,TM中断请求产生.
若要程序跳转到相应中断向量地址,总中断控制位EMI、相应TM中断使能位和相关多功能中断使能位MFnE需先被置位.
当中断使能,堆栈未满且TM比较器匹配情况发生时,可跳转至相关多功能中断向量子程序中执行.
当TM中断响应,EMI将被自动清零以除能其它中断,相关MFnF标志也可自动清除,但TM中断请求标志需在应用程序中手动清除.
EEPROM中断(仅存在于HT66F0174)EEPROM中断也属于多功能中断.
当写周期结束,EEPROM中断请求标志DEF被置位,EEPROM中断请求产生.
若要程序跳转到相应中断向量地址,总中断控制位EMI、EEPROM中断使能位DEE和相应多功能中断使能位需先被置位.
当中断使能,堆栈未满且EEPROM写周期结束时,可跳转至相关多功能中断向量子程序中执行.
当EEPROM中断响应,EMI将被自动清零以除能其它中断,多功能中断请求标志也可自动清除,但DEF标志需在应用程序中手动清除.
LVD中断LVD中断也属于多功能中断.
当低电压检测功能检测到一个低电压时,LVD中断请求标志LVF被置位,LVD中断请求产生.
若要程序跳转到相应中断向量地址,总中断控制位EMI、低电压中断使能位LVE和相应多功能中断使能位需先被置位.
当中断使能,堆栈未满且低电压条件发生时,可跳转至相关多功能中断向量子程序中执行.
当低电压中断响应,EMI将被自动清零以除能其它中断,多功能中断请求标志也可自动清除,但LVF标志需在应用程序中手动清除.
Rev.
1.
5094HT66F0172/HT66F0174增强A/D型Flash单片机2017-08-25中断唤醒功能每个中断都具有将处于休眠或空闲模式的单片机唤醒的能力.
当中断请求标志由低到高转换时唤醒动作产生,其与中断是否使能无关.
因此,尽管单片机处于休眠或空闲模式且系统振荡器停止工作,如有外部中断脚上产生外部边沿跳变,低电压或比较器输入改变都可能导致其相应的中断标志被置位,由此产生中断,因此必须注意避免伪唤醒情况的发生.
若中断唤醒功能被除能,单片机进入休眠或空闲模式前相应中断请求标志应被置起.
中断唤醒功能不受中断使能位的影响.
编程注意事项通过禁止相关中断使能位,可以屏蔽中断请求,然而,一旦中断请求标志位被设定,它们会被保留在中断控制寄存器内,直到相应的中断服务子程序执行或请求标志位被软件指令清除.
多功能中断中所含中断相应程序执行时,多功能中断请求标志MF0F~MF2F可以自动清零,但各自的请求标志需在应用程序中手动清除.
建议在中断服务子程序中不要使用"CALL子程序"指令.
中断通常发生在不可预料的情况或是需要立刻执行的某些应用.
假如只剩下一层堆栈且没有控制好中断,当"CALL子程序"在中断服务子程序中执行时,将破坏原来的控制序列.
所有中断在休眠或空闲模式下都具有唤醒功能,当中断请求标志发生由低到高的转变时都可产生唤醒功能.
若要避免相应中断产生唤醒动作,在单片机进入休眠或空闲模式前需先将相应请求标志置为高.
当进入中断服务程序,系统仅将程序计数器的内容压入堆栈,如果中断服务程序会改变状态寄存器或其它的寄存器的内容而破坏控制流程,应事先将这些数据保存起来.
若从中断子程序中返回可执行RET或RETI指令.
除了能返回至主程序外,RETI指令还能自动设置EMI位为高,允许进一步中断.
RET指令只能返回至主程序,清除EMI位,除能进一步中断.
Rev.
1.
5095HT66F0172/HT66F0174增强A/D型Flash单片机2017-08-25低电压检测–LVD此单片机都具有低电压检测功能,即LVD.
该功能使能用于监测电源电压VDD,若电源电压低于一定值可提供一个警告信号.
此功能在电池类产品中非常有用,在电池电压较低时产生警告信号.
低电压检测也可产生中断信号.
LVD寄存器低电压检测功能由LVDC寄存器控制.
VLVD2~VLVD0位用于选择8个固定的电压参考点.
LVDO位被置位时低电压情况发生,若LVDO位为低表明VDD电压工作在当前所设置低电压水平值之上.
LVDEN位用于控制低电压检测功能的开启/关闭,设置此位为高使能此功能,反之,关闭内部低电压检测电路.
低电压检测会有一定的功耗,在不使用时可考虑关闭此功能,此举在功耗要求严格的电池供电应用中值得考虑.
LVDC寄存器Bit76543210Name——LVDOLVDEN—VLVD2VLVD1VLVD0R/W——RR/W—R/WR/WR/WPOR——00—000Bit7~6未使用,读为"0"Bit5LVDO:LVD输出标志位0:未检测到低电压1:检测到低电压Bit4LVDEN:低电压检测控制位0:除能1:使能Bit3未使用,读为"0"Bit2~0VLVD2~VLVD0:选择LVD电压位000:2.
0V001:2.
2V010:2.
4V011:2.
7V100:3.
0V101:3.
3V110:3.
6V111:4.
0VRev.
1.
5096HT66F0172/HT66F0174增强A/D型Flash单片机2017-08-25LVD操作通过比较电源电压VDD与存储在LVDC寄存器中的预置电压值的结果,低电压检测功能工作.
其设置的范围为2.
0V~4.
0V.
当电源电压VDD低于预置电压值时,LVDO位被置为高,表明低电压产生.
低电压检测功能由一个自动使能的参考电压提供.
若LVDEN位为高,当单片机掉电时低电压检测器保持有效状态.
低电压检测器使能后,读取LVDO位前,电路稳定需要一定的延时tLVDS.
注意,VDD电压可能上升或下降比较缓慢,在VLVD电压值附近时,LVDO位可能有多种变化.
VDDVLVDLVDENLVDOtLVDSLVD操作低电压检测器也有自己的中断功能,也是属于多功能中断的一种,它是除了轮询LVDO位之外的另一种检测低电压的方法.
中断条件产生置位LVDO并延时tLVD后,中断产生.
若LVDEN位为高,当单片机掉电时低电压检测器保持有效状态.
此种情况下,若VDD降至小于LVD预置电压值时,中断请求标志位LVF将被置位,中断产生,单片机将从休眠或空闲模式中被唤醒.
若不要求低电压检测的唤醒功能使能,在单片机进入休眠或空闲模式前应将LVF标志置为高.
配置选项配置选项在烧写程序时写入芯片.
通过HT-IDE的软件开发环境,使用者在开发过程中可以选择配置选项.
由于使用的是硬件工具将配置选项烧入单片机,之后无法再通过应用程序修改.
所有的选项必须按系统的需要定义,具体内容可参考下表:序号选项振荡器选项1高速振荡器类型选择--fH:1.
HXT2.
HIRC2低速振荡器类型选择--fL:1.
LXT2.
LIRC注:因HT66F0172无LXT振荡器,因此低速振荡器仅来自LIRC.
Rev.
1.
5097HT66F0172/HT66F0174增强A/D型Flash单片机2017-08-25应用电路PC0/OSC1PC1/OSC2OSCCircuitSeeOscillatorSectionPB0/XT1PB1/XT2OSCCircuitSeeOscillatorSectionVDDVSS0.
1mFAN0~AN7PA0~PA7PB0~PB6PC0~PC2Rev.
1.
5098HT66F0172/HT66F0174增强A/D型Flash单片机2017-08-25指令集简介任何单片机成功运作的核心在于它的指令集,此指令集为一组程序指令码,用来指导单片机如何去执行指定的工作.
在Holtek单片机中,提供了丰富且灵活的指令,共超过六十条,程序设计者可以事半功倍地实现它们的应用.
为了更加容易理解各种各样的指令码,接下来按功能分组介绍它们.
指令周期大部分的操作均只需要一个指令周期来执行.
分支、调用或查表则需要两个指令周期.
一个指令周期相当于四个系统时钟周期,因此如果在8MHz的系统时钟振荡器下,大部分的操作将在0.
5μs中执行完成,而分支或调用操作则将在1μs中执行完成.
虽然需要两个指令周期的指令通常指的是JMP、CALL、RET、RETI和查表指令,但如果牵涉到程序计数器低字节寄存器PCL也将多花费一个周期去加以执行.
即指令改变PCL的内容进而导致直接跳转至新地址时,需要多一个周期去执行,例如"CLRPCL"或"MOVPCL,A"指令.
对于跳转指令必须注意的是,如果比较的结果牵涉到跳转动作将多花费一个周期,如果没有则需一个周期即可.
数据的传送单片机程序中数据传送是使用最为频繁的操作之一,使用三种MOV的指令,数据不但可以从寄存器转移至累加器(反之亦然),而且能够直接移动立即数到累加器.
数据传送最重要的应用之一是从输入端口接收数据或传送数据到输出端口.
算术运算算术运算和数据处理是大部分单片机应用所必需具备的能力,在Holtek单片机内部的指令集中,可直接实现加与减的运算.
当加法的结果超出255或减法的结果少于0时,要注意正确的处理进位和借位的问题.
INC、INCA、DEC和DECA指令提供了对一个指定地址的值加一或减一的功能.
逻辑和移位运算标准逻辑运算例如AND、OR、XOR和CPL全都包含在Holtek单片机内部的指令集中.
大多数牵涉到数据运算的指令,数据的传送必须通过累加器.
在所有逻辑数据运算中,如果运算结果为零,则零标志位将被置位,另外逻辑数据运用形式还有移位指令,例如RR、RL、RRC和RLC提供了向左或向右移动一位的方法.
不同的移位指令可满足不同的应用需要.
移位指令常用于串行端口的程序应用,数据可从内部寄存器转移至进位标志位,而此位则可被检验,移位运算还可应用在乘法与除法的运算组成中.
Rev.
1.
5099HT66F0172/HT66F0174增强A/D型Flash单片机2017-08-25分支和控制转换程序分支是采取使用JMP指令跳转至指定地址或使用CALL指令调用子程序的形式,两者之不同在于当子程序被执行完毕后,程序必须马上返回原来的地址.
这个动作是由放置在子程序里的返回指令RET来实现,它可使程序跳回CALL指令之后的地址.
在JMP指令中,程序则只是跳到一个指定的地址而已,并不需如CALL指令般跳回.
一个非常有用的分支指令是条件跳转,跳转条件是由数据存储器或指定位来加以决定.
遵循跳转条件,程序将继续执行下一条指令或略过且跳转至接下来的指令.
这些分支指令是程序走向的关键,跳转条件可能是外部开关输入,或是内部数据位的值.
位运算提供数据存储器中单个位的运算指令是Holtek单片机的特性之一.
这特性对于输出端口位的设置尤其有用,其中个别的位或端口的引脚可以使用"SET[m].
i"或"CLR[m].
i"指令来设定其为高位或低位.
如果没有这特性,程序设计师必须先读入输出口的8位数据,处理这些数据,然后再输出正确的新数据.
这种读入-修改-写出的过程现在则被位运算指令所取代.
查表运算数据的储存通常由寄存器完成,然而当处理大量固定的数据时,它的存储量常常造成对个别存储器的不便.
为了改善此问题,Holtek单片机允许在程序存储器中建立一个表格作为数据可直接存储的区域,只需要一组简易的指令即可对数据进行查表.
其它运算除了上述功能指令外,其它指令还包括用于省电的"HALT"指令和使程序在极端电压或电磁环境下仍能正常工作的看门狗定时器控制指令.
这些指令的使用则请查阅相关的章节.
Rev.
1.
50100HT66F0172/HT66F0174增强A/D型Flash单片机2017-08-25指令集概要下表中说明了按功能分类的指令集,用户可以将该表作为基本的指令参考.
惯例x:立即数m:数据存储器地址A:累加器i:第0~7位addr:程序存储器地址助记符说明指令周期影响标志位算术运算ADDA,[m]ACC与数据存储器相加,结果放入ACC1Z,C,AC,OVADDMA,[m]ACC与数据存储器相加,结果放入数据存储器1注Z,C,AC,OVADDA,xACC与立即数相加,结果放入ACC1Z,C,AC,OVADCA,[m]ACC与数据存储器、进位标志相加,结果放入ACC1Z,C,AC,OVADCMA,[m]ACC与数据存储器、进位标志相加,结果放入数据存储器1注Z,C,AC,OVSUBA,xACC与立即数相减,结果放入ACC1Z,C,AC,OVSUBA,[m]ACC与数据存储器相减,结果放入ACC1Z,C,AC,OVSUBMA,[m]ACC与数据存储器相减,结果放入数据存储器1注Z,C,AC,OVSBCA,[m]ACC与数据存储器、进位标志的反相减,结果放入ACC1Z,C,AC,OVSBCMA,[m]ACC与数据存储器、进位标志相减,结果放入数据存储器1注Z,C,AC,OVDAA[m]将加法运算中放入ACC的值调整为十进制数,并将结果放入数据存储器1注C逻辑运算ANDA,[m]ACC与数据存储器做"与"运算,结果放入ACC1ZORA,[m]ACC与数据存储器做"或"运算,结果放入ACC1ZXORA,[m]ACC与数据存储器做"异或"运算,结果放入ACC1ZANDMA,[m]ACC与数据存储器做"与"运算,结果放入数据存储器1注ZORMA,[m]ACC与数据存储器做"或"运算,结果放入数据存储器1注ZXORMA,[m]ACC与数据存储器做"异或"运算,结果放入数据存储器1注ZANDA,xACC与立即数做"与"运算,结果放入ACC1ZORA,xACC与立即数做"或"运算,结果放入ACC1ZXORA,xACC与立即数做"异或"运算,结果放入ACC1ZCPL[m]对数据存储器取反,结果放入数据存储器1注ZCPLA[m]对数据存储器取反,结果放入ACC1Z递增和递减INCA[m]递增数据存储器,结果放入ACC1ZINC[m]递增数据存储器,结果放入数据存储器1注ZDECA[m]递减数据存储器,结果放入ACC1ZDEC[m]递减数据存储器,结果放入数据存储器1注ZRev.
1.
50101HT66F0172/HT66F0174增强A/D型Flash单片机2017-08-25助记符说明指令周期影响标志位移位RRA[m]数据存储器右移一位,结果放入ACC1无RR[m]数据存储器右移一位,结果放入数据存储器1注无RRCA[m]带进位将数据存储器右移一位,结果放入ACC1CRRC[m]带进位将数据存储器右移一位,结果放入数据存储器1注CRLA[m]数据存储器左移一位,结果放入ACC1无RL[m]数据存储器左移一位,结果放入数据存储器1注无RLCA[m]带进位将数据存储器左移一位,结果放入ACC1CRLC[m]带进位将数据存储器左移一位,结果放入数据存储器1注C数据传送MOVA,[m]将数据存储器送至ACC1无MOV[m],A将ACC送至数据存储器1注无MOVA,x将立即数送至ACC1无位运算CLR[m].
i清除数据存储器的位1注无SET[m].
i置位数据存储器的位1注无转移JMPaddr无条件跳转2无SZ[m]如果数据存储器为零,则跳过下一条指令1注无SZA[m]数据存储器送至ACC,如果内容为零,则跳过下一条指令1注无SZ[m].
i如果数据存储器的第i位为零,则跳过下一条指令1注无SNZ[m].
i如果数据存储器的第i位不为零,则跳过下一条指令1注无SIZ[m]递增数据存储器,如果结果为零,则跳过下一条指令1注无SDZ[m]递减数据存储器,如果结果为零,则跳过下一条指令1注无SIZA[m]递增数据存储器,将结果放入ACC,如果结果为零,则跳过下一条指令1注无SDZA[m]递减数据存储器,将结果放入ACC,如果结果为零,则跳过下一条指令1注无CALL0addr子程序调用2无RET从子程序返回2无RETA,x从子程序返回,并将立即数放入ACC2无RETI从中断返回2无查表TABRD[m]读取特定页的ROM内容,并送至数据存储器和TBLH2注无TABRDC[m]读取当前页的ROM内容,并送至数据存储器和TBLH2注无TABRDL[m]读取最后页的ROM内容,并送至数据存储器和TBLH2注无其它指令NOP空指令1无CLR[m]清除数据存储器1注无SET[m]置位数据存储器1注无CLRWDT清除看门狗定时器1TO,PDFCLRWDT1预清除看门狗定时器1TO,PDFCLRWDT2预清除看门狗定时器1TO,PDFRev.
1.
50102HT66F0172/HT66F0174增强A/D型Flash单片机2017-08-25助记符说明指令周期影响标志位SWAP[m]交换数据存储器的高低字节,结果放入数据存储器1注无SWAPA[m]交换数据存储器的高低字节,结果放入ACC1无HALT进入暂停模式1TO,PDF注:1.
对跳转指令而言,如果比较的结果牵涉到跳转即需多达2个周期,如果没有发生跳转,则只需一个周期.
2.
任何指令若要改变PCL的内容将需要2个周期来执行.
3.
对于"CLRWDT1"或"CLRWDT2"指令而言,TO和PDF标志位也许会受执行结果影响,"CLRWDT1"和"CLRWDT2"被连续地执行后,TO和PDF标志位会被清除,否则TO和PDF标志位保持不变Rev.
1.
50103HT66F0172/HT66F0174增强A/D型Flash单片机2017-08-25指令定义ADCA,[m]AddDataMemorytoACCwithCarry指令说明将指定的数据存储器、累加器内容以及进位标志相加,结果存放到累加器.
功能表示ACC←ACC+[m]+C影响标志位OV、Z、AC、CADCMA,[m]AddACCtoDataMemorywithCarry指令说明将指定的数据存储器、累加器内容和进位标志位相加,结果存放到指定的数据存储器.
功能表示[m]←ACC+[m]+C影响标志位OV、Z、AC、CADDA,[m]AddDataMemorytoACC指令说明将指定的数据存储器和累加器内容相加,结果存放到累加器.
功能表示ACC←ACC+[m]影响标志位OV、Z、AC、CADDA,xAddimmediatedatatoACC指令说明将累加器和立即数相加,结果存放到累加器.
功能表示ACC←ACC+x影响标志位OV、Z、AC、CADDMA,[m]AddACCtoDataMemory指令说明将指定的数据存储器和累加器内容相加,结果存放到指定的数据存储器.
功能表示[m]←ACC+[m]影响标志位OV、Z、AC、CANDA,[m]LogicalANDDataMemorytoACC指令说明将累加器中的数据和指定数据存储器内容做逻辑与,结果存放到累加器.
功能表示ACC←ACC"AND"[m]影响标志位ZRev.
1.
50104HT66F0172/HT66F0174增强A/D型Flash单片机2017-08-25ANDA,xLogicalANDimmediatedatatoACC指令说明将累加器中的数据和立即数做逻辑与,结果存放到累加器.
功能表示ACC←ACC"AND"x影响标志位ZANDMA,[m]LogicalANDACCtoDataMemory指令说明将指定数据存储器内容和累加器中的数据做逻辑与,结果存放到数据存储器.
功能表示[m]←ACC"AND"[m]影响标志位ZCALLaddrSubroutinecall指令说明无条件地调用指定地址的子程序,此时程序计数器先加1获得下一个要执行的指令地址并压入堆栈,接着载入指定地址并从新地址继续执行程序,由于此指令需要额外的运算,所以为一个2周期的指令.
功能表示Stack←ProgramCounter+1ProgramCounter←addr影响标志位无CLR[m]ClearDataMemory指令说明将指定数据存储器的内容清零.
功能表示[m]←00H影响标志位无CLR[m].
iClearbitofDataMemory指令说明将指定数据存储器的i位内容清零.
功能表示[m].
i←0影响标志位无CLRWDTClearWatchdogTimer指令说明WDT计数器、暂停标志位PDF和看门狗溢出标志位TO清零.
功能表示WDTclearedTO&PDF←0影响标志位TO、PDFRev.
1.
50105HT66F0172/HT66F0174增强A/D型Flash单片机2017-08-25CLRWDT1PreclearWatchdogTimer指令说明PDF和TO标志位都被清0.
必须配合CLRWDT2一起使用清除WDT计时器.
当程序仅执行CLRWDT1,而没有执行CLRWDT2时,PDF与TO保留原状态不变.
功能表示WDT←00HTO&PDF←0影响标志位TO、PDFCLRWDT2PreclearWatchdogTimer指令说明PDF和TO标志位都被清0.
必须配合CLRWDT1一起使用清除WDT计时器.
当程序仅执行CLRWDT2,而没有执行CLRWDT1时,PDF与TO保留原状态不变.
功能表示WDT←00HTO&PDF←0影响标志位TO、PDFCPL[m]ComplementDataMemory指令说明将指定数据存储器中的每一位取逻辑反,相当于从1变0或0变1.
功能表示[m]←[m]影响标志位ZCPLA[m]ComplementDataMemorywithresultinACC指令说明将指定数据存储器中的每一位取逻辑反,相当于从1变0或0变1,而结果被储存回累加器且数据存储器中的内容不变.
功能表示ACC←[m]影响标志位ZRev.
1.
50106HT66F0172/HT66F0174增强A/D型Flash单片机2017-08-25DAA[m]Decimal-AdjustACCforadditionwithresultinDataMemory指令说明将累加器中的内容转换为BCD(二进制转成十进制)码.
如果低四位的值大于"9"或AC=1,那么BCD调整就执行对原值加"6",否则原值保持不变;如果高四位的值大于"9"或C=1,那么BCD调整就执行对原值加"6".
BCD转换实质上是根据累加器和标志位执行00H,06H,60H或66H的加法运算,结果存放到数据存储器.
只有进位标志位C受影响,用来指示原始BCD的和是否大于100,并可以进行双精度十进制数的加法运算.
功能表示[m]←ACC+00H或[m]←ACC+06H或[m]←ACC+60H或[m]←ACC+66H影响标志位CDEC[m]DecrementDataMemory指令说明将指定数据存储器内容减1.
功能表示[m]←[m]–1影响标志位ZDECA[m]DecrementDataMemorywithresultinACC指令说明将指定数据存储器的内容减1,把结果存放回累加器并保持指定数据存储器的内容不变.
功能表示ACC←[m]–1影响标志位ZHALTEnterpowerdownmode指令说明此指令终止程序执行并关掉系统时钟,RAM和寄存器的内容保持原状态,WDT计数器和分频器被清"0",暂停标志位PDF被置位1,WDT溢出标志位TO被清0.
功能表示TO←0PDF←1影响标志位TO、PDFINC[m]IncrementDataMemory指令说明将指定数据存储器的内容加1.
功能表示[m]←[m]+1影响标志位ZRev.
1.
50107HT66F0172/HT66F0174增强A/D型Flash单片机2017-08-25INCA[m]IncrementDataMemorywithresultinACC指令说明将指定数据存储器的内容加1,结果存放回累加器并保持指定的数据存储器内容不变.
功能表示ACC←[m]+1影响标志位ZJMPaddrJumpunconditionally指令说明程序计数器的内容无条件地由被指定的地址取代,程序由新的地址继续执行.
当新的地址被加载时,必须插入一个空指令周期,所以此指令为2个周期的指令.
功能表示ProgramCounter←addr影响标志位无MOVA,[m]MoveDataMemorytoACC指令说明将指定数据存储器的内容复制到累加器.
功能表示ACC←[m]影响标志位无MOVA,xMoveimmediatedatatoACC指令说明将8位立即数载入累加器.
功能表示ACC←x影响标志位无MOV[m],AMoveACCtoDataMemory指令说明将累加器的内容复制到指定的数据存储器.
功能表示[m]←ACC影响标志位无NOPNooperation指令说明空操作,接下来顺序执行下一条指令.
功能表示PC←PC+1影响标志位无ORA,[m]LogicalORDataMemorytoACC指令说明将累加器中的数据和指定的数据存储器内容逻辑或,结果存放到累加器.
功能表示ACC←ACC"OR"[m]影响标志位ZRev.
1.
50108HT66F0172/HT66F0174增强A/D型Flash单片机2017-08-25ORA,xLogicalORimmediatedatatoACC指令说明将累加器中的数据和立即数逻辑或,结果存放到累加器.
功能表示ACC←ACC"OR"x影响标志位ZORMA,[m]LogicalORACCtoDataMemory指令说明将存在指定数据存储器中的数据和累加器逻辑或,结果放到数据存储器.
功能表示[m]←ACC"OR"[m]影响标志位ZRETReturnfromsubroutine指令说明将堆栈寄存器中的程序计数器值恢复,程序由取回的地址继续执行.
功能表示ProgramCounter←Stack影响标志位无RETA,xReturnfromsubroutineandloadimmediatedatatoACC指令说明将堆栈寄存器中的程序计数器值恢复且累加器载入指定的立即数,程序由取回的地址继续执行.
功能表示ProgramCounter←StackACC←x影响标志位无RETIReturnfrominterrupt指令说明将堆栈寄存器中的程序计数器值恢复且中断功能通过设置EMI位重新使能.
EMI是控制中断使能的主控制位.
如果在执行RETI指令之前还有中断未被相应,则这个中断将在返回主程序之前被相应.
功能表示ProgramCounter←StackEMI←1影响标志位无RL[m]RotateDataMemoryleft指令说明将指定数据存储器的内容左移1位,且第7位移到第0位.
功能表示[m].
(i+1)←[m].
i(i=0~6)[m].
0←[m].
7影响标志位无Rev.
1.
50109HT66F0172/HT66F0174增强A/D型Flash单片机2017-08-25RLA[m]RotateDataMemoryleftwithresultinACC指令说明将指定数据存储器的内容左移1位,且第7位移到第0位,结果送到累加器,而指定数据存储器的内容保持不变.
功能表示ACC.
(i+1)←[m].
i(i=0~6)ACC.
0←[m].
7影响标志位无RLC[m]RotateDataMemoryLeftthroughCarry指令说明将指定数据存储器的内容连同进位标志左移1位,第7位取代进位标志且原本的进位标志移到第0位.
功能表示[m].
(i+1)←[m].
i(i=0~6)[m].
0←CC←[m].
7影响标志位CRLCA[m]RotateDataMemoryleftthroughCarrywithresultinACC指令说明将指定数据存储器的内容连同进位标志左移1位,第7位取代进位标志且原本的进位标志移到第0位,移位结果送回累加器,但是指定数据寄存器的内容保持不变.
功能表示ACC.
(i+1)←[m].
i(i=0~6)ACC.
0←CC←[m].
7影响标志位CRR[m]RotateDataMemoryright指令说明将指定数据存储器的内容循环右移1位且第0位移到第7位.
功能表示[m].
i←[m].
(i+1)(i=0~6)[m].
7←[m].
0影响标志位无RRA[m]RotateDataMemoryrightwithresultinACC指令说明将指定数据存储器的内容循环右移1位,第0位移到第7位,移位结果存放到累加器,而指定数据存储器的内容保持不变.
功能表示ACC.
i←[m].
(i+1)(i=0~6)ACC.
7←[m].
0影响标志位无Rev.
1.
50110HT66F0172/HT66F0174增强A/D型Flash单片机2017-08-25RRC[m]RotateDataMemoryrightthroughCarry指令说明将指定数据存储器的内容连同进位标志右移1位,第0位取代进位标志且原本的进位标志移到第7位.
功能表示[m].
i←[m].
(i+1)(i=0~6)[m].
7←CC←[m].
0影响标志位CRRCA[m]RotateDataMemoryrightthroughCarrywithresultinACC指令说明将指定数据存储器的内容连同进位标志右移1位,第0位取代进位标志且原本的进位标志移到第7位,移位结果送回累加器,但是指定数据寄存器的内容保持不变.
功能表示ACC.
i←[m].
(i+1)(i=0~6)ACC.
7←CC←[m].
0影响标志位CSBCA,[m]SubtractDataMemoryfromACCwithCarry指令说明将累加器减去指定数据存储器的内容以及进位标志的反,结果存放到累加器.
如果结果为负,C标志位清除为0,反之结果为正或0,C标志位设置为1.
功能表示ACC←ACC–[m]–C影响标志位OV、Z、AC、C、SC、CZSBCMA,[m]SubtractDataMemoryfromACCwithCarryandresultinDataMemory指令说明将累加器减去指定数据存储器的内容以及进位标志的反,结果存放到数据存储器.
如果结果为负,C标志位清除为0,反之结果为正或0,C标志位设置为1.
功能表示[m]←ACC–[m]–C影响标志位OV、Z、AC、C、SC、CZSDZ[m]SkipifDecrementDataMemoryis0指令说明将指定的数据存储器的内容减1,判断是否为0,若为0则跳过下一条指令,由于取得下一个指令时会要求插入一个空指令周期,所以此指令为2个周期的指令.
如果结果不为0,则程序继续执行下一条指令.
功能表示[m]←[m]–1,如果[m]=0跳过下一条指令执行影响标志位无Rev.
1.
50111HT66F0172/HT66F0174增强A/D型Flash单片机2017-08-25SDZA[m]DecrementdatamemoryandplaceresultinACC,skipif0指令说明将指定数据存储器内容减1,判断是否为0,如果为0则跳过下一条指令,此结果将存放到累加器,但指定数据存储器内容不变.
由于取得下一个指令时会要求插入一个空指令周期,所以此指令为2个周期的指令.
如果结果不为0,则程序继续执行下一条指令.
功能表示ACC←[m]–1,如果ACC=0跳过下一条指令执行影响标志位无SET[m]SetDataMemory指令说明将指定数据存储器的每一位设置为1.
功能表示[m]←FFH影响标志位无SET[m].
iSetbitofDataMemory指令说明将指定数据存储器的第i位置位为1.
功能表示[m].
i←1影响标志位无SIZ[m]SkipifincrementDataMemoryis0指令说明将指定的数据存储器的内容加1,判断是否为0,若为0则跳过下一条指令.
由于取得下一个指令时会要求插入一个空指令周期,所以此指令为2个周期的指令.
如果结果不为0,则程序继续执行下一条指令.
功能表示[m]←[m]+1,如果[m]=0跳过下一条指令执行影响标志位无SIZA[m]SkipifincrementDataMemoryiszerowithresultinACC指令说明将指定数据存储器的内容加1,判断是否为0,如果为0则跳过下一条指令,此结果会被存放到累加器,但是指定数据存储器的内容不变.
由于取得下一个指令时会要求插入一个空指令周期,所以此指令为2个周期的指令.
如果结果不为0,则程序继续执行下一条指令.
功能表示ACC←[m]+1,如果ACC=0跳过下一条指令执行影响标志位无Rev.
1.
50112HT66F0172/HT66F0174增强A/D型Flash单片机2017-08-25SNZ[m].
iSkipifbitiofDataMemoryisnot0指令说明判断指定数据存储器的第i位,若不为0,则程序跳过下一条指令执行.
由于取得下一个指令时会要求插入一个空指令周期,所以此指令为2个周期的指令.
如果结果为0,则程序继续执行下一条指令.
功能表示如果[m].
i≠0,跳过下一条指令执行影响标志位无SUBA,[m]SubtractDataMemoryfromACC指令说明将累加器的内容减去指定的数据存储器的数据,把结果存放到累加器.
如果结果为负,C标志位清除为0,反之结果为正或0,C标志位设置为1.
功能表示ACC←ACC–[m]影响标志位OV、Z、AC、C、SC、CZSUBMA,[m]SubtractDataMemoryfromACCwithresultinDataMemory指令说明将累加器的内容减去指定数据存储器的数据,结果存放到指定的数据存储器.
如果结果为负,C标志位清除为0,反之结果为正或0,C标志位设置为1.
功能表示[m]←ACC–[m]影响标志位OV、Z、AC、C、SC、CZSUBA,xSubtractimmediateDatafromACC指令说明将累加器的内容减去立即数,结果存放到累加器.
如果结果为负,C标志位清除为0,反之结果为正或0,C标志位设置为1.
功能表示ACC←ACC–x影响标志位OV、Z、AC、C、SC、CZSWAP[m]SwapnibblesofDataMemory指令说明将指定数据存储器的低4位和高4位互相交换.
功能表示[m].
3~[m].
0[m].
7~[m].
4影响标志位无SWAPA[m]SwapnibblesofDataMemorywithresultinACC指令说明将指定数据存储器的低4位与高4位互相交换,再将结果存放到累加器且指定数据寄存器的数据保持不变.
功能表示ACC.
3~ACC.
0←[m].
7~[m].
4ACC.
7~ACC.
4←[m].
3~[m].
0影响标志位无Rev.
1.
50113HT66F0172/HT66F0174增强A/D型Flash单片机2017-08-25SZ[m]SkipifDataMemoryis0指令说明判断指定数据存储器的内容是否为0,若为0,则程序跳过下一条指令执行.
由于取得下一个指令时会要求插入一个空指令周期,所以此指令为2个周期的指令.
如果结果不为0,则程序继续执行下一条指令.
功能表示如果[m]=0,跳过下一条指令执行影响标志位无SZA[m]SkipifDataMemoryis0withdatamovementtoACC指令说明将指定数据存储器内容复制到累加器,并判断指定数据存储器的内容是否为0,若为0则跳过下一条指令.
由于取得下一个指令时会要求插入一个空指令周期,所以此指令为2个周期的指令.
如果结果不为0,则程序继续执行下一条指令.
功能表示ACC←[m],如果[m]=0,跳过下一条指令执行影响标志位无SZ[m].
iSkipifbitiofDataMemoryis0指令说明判断指定数据存储器的第i位是否为0,若为0,则跳过下一条指令.
由于取得下一个指令时会要求插入一个空指令周期,所以此指令为2个周期的指令.
如果结果不为0,则程序继续执行下一条指令.
功能表示如果[m].
i=0,跳过下一条指令执行影响标志位无TABRD[m]Readtable(specicpage)toTBLHandDataMemory指令说明将表格指针对TBHP和TBLP所指的程序代码低字节(指定页)移至指定数据存储器且将高字节移至TBLH.
功能表示[m]←程序代码(低字节)TBLH←程序代码(高字节)影响标志位无TABRDC[m]Readtable(currentpage)toTBLHandDataMemory指令说明将表格指针TBLP所指的程序代码低字节(当前页)移至指定的数据存储器且将高字节移至TBLH.
功能表示[m]←程序代码(低字节)TBLH←程序代码(高字节)影响标志位无Rev.
1.
50114HT66F0172/HT66F0174增强A/D型Flash单片机2017-08-25TABRDL[m]Readtable(lastpage)toTBLHandDataMemory指令说明将表格指针TBLP所指的程序代码低字节(最后一页)移至指定数据存储器且将高字节移至TBLH.
功能表示[m]←程序代码(低字节)TBLH←程序代码(高字节)影响标志位无XORA,[m]LogicalXORDataMemorytoACC指令说明将累加器的数据和指定的数据存储器内容逻辑异或,结果存放到累加器.
功能表示ACC←ACC"XOR"[m]影响标志位ZXORMA,[m]LogicalXORACCtoDataMemory指令说明将累加器的数据和指定的数据存储器内容逻辑异或,结果放到数据存储器.
功能表示[m]←ACC"XOR"[m]影响标志位ZXORA,xLogicalXORimmediatedatatoACC指令说明将累加器的数据与立即数逻辑异或,结果存放到累加器.
功能表示ACC←ACC"XOR"x影响标志位ZRev.
1.
50115HT66F0172/HT66F0174增强A/D型Flash单片机2017-08-25封装信息请注意,这里提供的封装信息仅作为参考.
由于这个信息经常更新,提醒用户咨询Holtek网站以获取最新版本的封装信息.
封裝信息的相关内容如下所示,点击可链接至Holtek网站相关信息页面.
封装信息(包括外形尺寸、包装带和卷轴规格)封装材料信息纸箱信息Rev.
1.
50116HT66F0172/HT66F0174增强A/D型Flash单片机2017-08-2520-pinSOP(300mil)外形尺寸符号尺寸(单位:inch)最小正常最大A—0.
406BSC—B—0.
295BSC—C0.
012—0.
020C'—0.
504BSC—D——0.
104E—0.
050BSC—F0.
004—0.
012G0.
016—0.
050H0.
008—0.
013α0°—8°符号尺寸(单位:mm)最小正常最大A—10.
30BSC—B—7.
50BSC—C0.
31—0.
51C'—12.
80BSC—D——2.
65E—1.
27BSC—F0.
10—0.
30G0.
40—1.
27H0.
20—0.
33α0°—8°Rev.
1.
50117HT66F0172/HT66F0174增强A/D型Flash单片机2017-08-2520-pinSSOP(150mil)外形尺寸符号尺寸(单位:inch)最小值典型值最大值A—0.
236BSC—B—0.
1574BSC—C0.
008—0.
012C'—0.
341BSC—D——0.
069E—0.
025BSC—F0.
004—0.
0098G0.
016—0.
050H0.
004—0.
010α0°—8°符号尺寸(单位:mm)最小值典型值最大值A—6.
00BSC—B—3.
90BSC—C0.
20—0.
30C'—8.
66BSC—D——1.
75E—0.
635BSC—F0.
10—0.
25G0.
41—1.
27H0.
18—0.
25α0°—8°Rev.
1.
50118HT66F0172/HT66F0174增强A/D型Flash单片机2017-08-25Copyright2017byHOLTEKSEMICONDUCTORINC.
使用指南中所出现的信息在出版当时相信是正确的,然而Holtek对于说明书的使用不负任何责任.
文中提到的应用目的仅仅是用来做说明,Holtek不保证或表示这些没有进一步修改的应用将是适当的,也不推荐它的产品使用在会由于故障或其它原因可能会对人身造成危害的地方.
Holtek产品不授权使用于救生、维生从机或系统中做为关键从机.
Holtek拥有不事先通知而修改产品的权利,对于最新的信息,请参考我们的网址http://www.
holtek.
com/zh/.

Spinservers:美国圣何塞机房少量补货/双E5/64GB DDR4/2TB SSD/10Gbps端口月流量10TB/$111/月

Chia矿机,Spinservers怎么样?Spinservers好不好,Spinservers大硬盘服务器。Spinservers刚刚在美国圣何塞机房补货120台独立服务器,CPU都是双E5系列,64-512GB DDR4内存,超大SSD或NVMe存储,数量有限,机器都是预部署好的,下单即可上架,无需人工干预,有需要的朋友抓紧下单哦。Spinservers是Majestic Hosting So...

妮妮云(119元/季)日本CN2 2核2G 30M 119元/季

妮妮云的知名度应该也不用多介绍了,妮妮云旗下的云产品提供商,相比起他家其他的产品,云产品还是非常良心的,经常出了一些优惠活动,前段时间的八折活动推出了很多优质产品,近期商家秒杀活动又上线了,秒杀产品比较全面,除了ECS和轻量云,还有一些免费空间、增值代购、云数据库等,如果你是刚入行安稳做站的朋友,可以先入手一个119/元季付的ECS来起步,非常稳定。官网地址:www.niniyun.com活动专区...

CYUN(29元/月)美国、香港、台湾、日本、韩国CN2,续费原价

关于CYUN商家在之前有介绍过一次,CYUN是香港蓝米数据有限公司旗下的云计算服务品牌,和蓝米云、蓝米主机等同属该公司。商家主要是为个人开发者用户、中小型、大型企业用户提供一站式核心网络云端部署服务,促使用户云端部署化简为零,轻松快捷运用云计算。目前,CYUN主要运营美国、香港、台湾、日本、韩国CN2线路产品,包括云服务器、站群服务器和独立服务器等。这次看到CYUN夏季优惠活动发布了,依然是熟悉的...

69uuu.com为你推荐
小度商城小度智能屏Air哪里可以买?大家都怎么入手的?摩根币摩根币是什么意思?同ip网站查询服务器禁PING 是不是就可以解决同IP网站查询问题比肩工场命比肩多 是什么意思啊?百度关键词价格查询如何查到推广关键词的价钱?www.yahoo.com.hk香港的常用网站www.haole012.com012.qq.com是真的吗www.gegeshe.com有什么好听的流行歌曲www.kaspersky.com.cn现在网上又有病毒了?baqizi.cc誰知道,最近有什麼好看的電視劇
本网站服务器在美国维护 dns是什么 美国主机评测 linode代购 国外私服 koss eq2 老左来了 tna官网 ftp免费空间 登陆空间 外贸空间 国外的代理服务器 七牛云存储 双11促销 万网服务器 锐速 美国主机侦探 restart cdn加速技术 更多