寄存器69uuu.com

69uuu.com  时间:2021-04-09  阅读:()
电磁炉FlashMCUHT45F0004版本:V1.
20日期:2020-03-19Rev.
1.
2022020-03-19目录特性6CPU特性6周边特性6概述7方框图7引脚图8引脚说明8极限参数11直流电气特性11交流电气特性12ADC特性.
12比较器电气特性13放大器电气特性14上电复位特性14系统结构15时序和流水线结构15程序计数器16堆栈16算术逻辑单元–ALU17Flash程序存储器.
17结构17特殊向量17查表18查表范例18在线烧录19片上调试20数据存储器21结构21特殊数据存储器21特殊功能寄存器23间接寻址寄存器–IAR0,IAR123间接寻址指针–MP0,MP1.
23存储区指针–BP24累加器–ACC24程序计数器低字节寄存器–PCL.
24表格寄存器–TBLP,TBLH.
24状态寄存器–STATUS.
25系统控制寄存器–CTRL0,CTRL1,CTRL2,CTRL3,CTRL4.
26Rev.
1.
2032020-03-19EEPROM数据寄存器.
29EEPROM数据寄存器结构.
29EEPROM寄存器.
29从EEPROM中读取数据.
30写数据到EEPROM.
30写保护31EEPROM中断.
31编程注意事项31振荡器32振荡器概述32系统时钟配置32外部晶体/陶瓷振荡器–HXT.
32内部RC振荡器–HIRC33看门狗振荡器–WDTOSC33振荡器停止检测功能33暂停模式和唤醒33暂停模式33静态电流注意事项34唤醒34看门狗定时器35看门狗定时器时钟源35看门狗定时器操作35复位和初始化36复位功能36复位初始状态38输入/输出端口41上拉电阻41PA口的唤醒41输入/输出端口控制寄存器.
41输入/输出引脚结构.
43编程注意事项43定时/计数器44配置定时/计数器输入时钟源.
44定时/计数寄存器–TMR0,TMR1,TMR244定时/计数器控制寄存器–TMR0C,TMR1C,TMR2C44定时器模式47外部事件计数器模式47脉冲宽度测量模式48模式049预分频器49输入/输出接口.
49编程注意事项49定时/计数器应用范例.
50Rev.
1.
2042020-03-19脉冲宽度调制51PWM工作模式.
51PWM输出控制.
52A/D转换器.
53A/D简介53A/D转换器数据寄存器–ADRL,ADRH.
53A/D转换控制寄存器–ADCR,ACSR,PCRL,PCRH.
54A/D操作56A/D输入引脚56A/D转换步骤57编程注意事项58A/D转换功能58A/D转换应用范例59I2C串行接口.
61I2C接口操作.
61I2C寄存器.
62I2C总线通信.
65I2C总线起始信号.
65从机地址66I2C总线读/写信号.
66I2C总线从机地址确认信号.
66I2C总线数据和确认信号.
66I2C超时控制.
68可编程脉冲发生器69不可重复触发功能70脉宽限制功能70比较器74比较器寄存器74运算放大器OPA77运算放大器寄存器78外围时钟输出78外围时钟操作78中断80中断寄存器80中断操作82中断优先级83外部中断83LVD中断83EEPROM中断.
84I2C总线中断.
84A/D转换器中断84多功能中断84定时/计数器中断.
84比较器中断85Rev.
1.
2052020-03-19中断唤醒功能85编程注意事项85低电压检测–LVD86LVD操作86配置选项87应用电路90指令集91简介91指令周期91数据的传送91算术运算91逻辑和移位运算91分支和控制转换92位运算92查表运算92其它运算92指令集概要93惯例93指令定义96封装信息10816-pinDIP(300mil)外形尺寸10916-pinNSOP(150mil)外形尺寸.
11220-pinDIP(300mil)外形尺寸11320-pinSOP(300mil)外形尺寸.
115Rev.
1.
2062020-03-19特性CPU特性工作电压:fSYS=4MHz:2.
2V~5.
5VfSYS=8MHz:3.
3V~5.
5VVDD=5V,系统时钟为8MHz时,指令周期为0.
5μs提供暂停和唤醒功能,以降低功耗振荡模式:外部高频晶振–HXT内部RC–HIRC内部集成8MHz振荡器,无需外接元件所有指令都可在1或2个指令周期内完成表格读取指令63条功能强大的指令系统8层堆栈位操作指令周边特性程序存储器:4K*16数据存储器:208*8TrueEEPROM存储器:32*8看门狗定时器功能振荡器停止检测功能17个双向I/O口12通道12位分辨率的A/D转换器9位可编程脉冲发生器–PPG支持脉宽限制两个PPG预置寄存器支持不可重复触发控制支持输出高电平/低电平有效,由配置选项选择1个与I/O口复用的外部中断输入内建去抖电路用于外部中断去抖时间可由软件选择4个比较器1个运算放大器,可通过软件校准输入失调电压支持外围时钟输出和PWM输出3个8位可编程定时/计数器,其中:定时/计数器0可用来计算同步脉冲数或测量同步脉冲高/低周期定时/计数器1可实现PPG不可重复触发功能Rev.
1.
2072020-03-19I2C总线,适用于从机模式低电压复位功能低电压检测功能封装类型:16/20-pinDIP,16-pinNSOP,20-pinSOP概述HT45F0004是一款8位具有高性能精简指令集的A/D型单片机,专门为需要A/D转换的产品而设计,例如传感器信号输入.
此款单片机具有低功耗、I/O使用灵活、定时器功能、振荡类型可选、多通道A/D转换、暂停和唤醒功能等特点,可以广泛应用于A/D产品中,例如传感器信号处理等.
外加四个比较器、一个运算放大器和一个可编程脉冲发生器PPG,使它还可以特别用于诸如电磁炉和家用电器等产品中.
方框图8-bitRISCMCUCoreI/OTimersFlashProgramMemoryEEPROMDataMemoryFlash/EEPROMProgrammingCircuitry(OCDS/ICP)I2CLowVoltageResetWatchdogTimerLowVoltageDetectInterruptControllerResetCircuitExternalHXTOscillator12-bitA/DConverterRAMDataMemoryOPAHIRCOscillatorPWMDriverComparator*49-bitPPGWDTOscillatorOscillatorStopDetectionRev.
1.
2082020-03-19引脚图2019181716151413121112345678910PPGPA2/CP0N/INTPA3/CP0P/TMR0PA6/CP2N/AN6PA7/CP2P/AN5PA5/CP1N/AN7PB2/AN1/IOFFVSSPC0/CP3N/AN10PC1/CP3N/PCKPC2PC3/AN11VDDPB3/AN2/OCDSCK/ICPCKPB1/SDA/AN0PB0/SCL/RES/OCDSDA/ICPDAPB4/PWM/AN3PA4/AN4PA1/OPAO/OSC1/AN8PA0/OPAN/OSC2HT45F0004/HT45V000420DIP-A/SOP-AVSSVDDPA4/AN4PB3/AN2/OCDSCK/ICPCKPA0/OPAN/OSC2PA1/OPAO/OSC1/AN8PB4/PWM/AN3PB1/SDA/AN0PA2/CP0N/INTPA3/CP0P/TMR0PA6/CP2N/AN6PA5/CP1N/AN7PPGPA7/CP2P/AN5PB2/AN1/IOFFHT45F0004/HT45V000416DIP-A/NSOP-APB0/SCL/RES/OCDSDA/ICPDA16151413121110912345678注:1.
OCDSCK和OCDSDA引脚为OCDS专用引脚,仅适用于HT45V0004芯片.
2.
在较小封装中可能含有未引出的引脚,需合理设置其状态以避免输入浮空造成额外耗电,详见"静态电流注意事项"和"输入/输出口"章节.
引脚说明引脚功能OPTI/TO/T说明PA0/OPAN/OSC2PA0COSTCMOS通用I/O口,可通过配置选项设置带上拉电阻和唤醒功能OPANCOOPAI—运算放大器反相输入脚OSC2CO—HXTHXT脚PA1/OPAO/OSC1/AN8PA1COSTCMOS通用I/O口,可通过配置选项设置带上拉电阻和唤醒功能OPAOCO—OPAO运算放大器输出脚OSC1COHXT—HXT脚AN8ADCRPCRHAN—A/D转换通道8PA2/CP0N/INTPA2COSTCMOS通用I/O口,可通过配置选项设置带上拉电阻和唤醒功能CP0NCOCMPI—比较器0反相输入脚INT—ST—外部中断输入Rev.
1.
2092020-03-19引脚功能OPTI/TO/T说明PA3/CP0P/TMR0PA3COSTCMOS通用I/O口,可通过配置选项设置带上拉电阻和唤醒功能CP0PCOCMPSCCMPI—比较器0同相输入脚TMR0—ST—外部定时/计数器0时钟输入脚PA4/AN4PA4COSTCMOS通用I/O口,可通过配置选项设置带上拉电阻和唤醒功能AN4ADCRPCRLAN—A/D转换通道4PA5/CP1N/AN7PA5COSTCMOS通用I/O口,可通过配置选项设置带上拉电阻和唤醒功能CP1NCOCMPSCCMPI—比较器1反相输入脚AN7ADCRPCRLAN—A/D转换通道7PA6/CP2N/AN6PA6COSTCMOS通用I/O口,可通过配置选项设置带上拉电阻和唤醒功能CP2NCOCMPI—比较器2反相输入脚AN6ADCRPCRLAN—A/D转换通道6PA7/CP2P/AN5PA7COSTCMOS通用I/O口,可通过配置选项设置带上拉电阻和唤醒功能CP2PCOCMPI—比较器2同相输入脚AN5ADCRPCRLAN—A/D转换通道5PB0/SCL/RES/OCDSDA/ICPDAPB0COSTCMOS通用I/O口,可通过配置选项设置带上拉电阻SCLCOSTNMOSI2C时钟线RESCOST—复位输入OCDSDA—STCMOS片上调试数据引脚,仅适用于EV芯片ICPDA—STCMOS在线烧录数据引脚PB1/SDA/AN0PB1COSTCMOS通用I/O口,可通过配置选项设置带上拉电阻SDACOSTNMOSI2C数据线AN0ADCRPCRLAN—A/D转换通道0PB2/AN1/IOFFPB2COSTCMOS通用I/O口,可通过配置选项设置带上拉电阻IOFFCO—CMOSIOFF输出AN1ADCRPCRLAN—A/D转换通道1Rev.
1.
20102020-03-19引脚功能OPTI/TO/T说明PB3/AN2/OCDSCK/ICPCKPB3PBPUSTCMOS通用I/O口,可通过配置选项设置带上拉电阻AN2ADCRPCRLAN—A/D转换通道2OCDSCK—ST—片上调试时钟引脚,仅适用于EV芯片ICPCK—ST—在线烧录时钟引脚PB4/PWM/AN3PB4COSTCMOS通用I/O口,可通过配置选项设置带上拉电阻PWMCO—CMOSPWM输出AN3ADCRPCRLAN—A/D转换通道3PC0/CP3N/AN10PC0COSTCMOS通用I/O口,可通过配置选项设置带上拉电阻AN10ADCRPCRHAN—A/D转换通道10CP3NCOCMPI—比较器3反相输入脚PC1/CP3N/PCKPC1COSTCMOS通用I/O口,可通过配置选项设置带上拉电阻PCKCO—CMOS外围时钟输出CP3NCOCMPI—比较器3反相输入脚PC2PC2COSTCMOS通用I/O口,可通过配置选项设置带上拉电阻PC3/AN11PC3COSTCMOS通用I/O口,可通过配置选项设置带上拉电阻AN11ADCRPCRHAN—A/D转换通道11PPGPPGCO—CMOS在PPG无效周期、RES引脚复位、LVR复位及振荡器停止状态下,PPG引脚浮空.
PPG输出有效电平(低有效或高有效)可通过配置选项选择VDDVDD—PWR—正电源VSSVSS—PWR—负电源,接地注:I/T:输入类型;O/T:输出类型OPT:通过配置选项(CO)或者寄存器选项来设置PWR:电源;CO:配置选项;ST:施密特触发输入CMOS:CMOS输出;NMOS:NMOS输出AN:模拟信号输入;HXT:高速晶体振荡器OPAI:运算放大器输入脚;OPAO:运算放大器输出脚CMPI:比较器输入脚Rev.
1.
20112020-03-19极限参数电源供应电压.
Vss-0.
3V~Vss+6.
0V端口输入电压.
Vss-0.
3V~VDD+0.
3V储存温度.
50C~125C工作温度.
40C~85CIOH总电流80mAIOL总电流.
80mA总功耗.
500mW注:这里只强调额定功率,超过极限参数所规定的范围将对芯片造成损害,无法预期芯片在上述标示范围外的工作状态,而且若长期在标示范围外的条件下工作,可能影响芯片的可靠性.
直流电气特性Ta=25C符号参数测试条件最小典型最大单位VDD条件VDD工作电压—fSYS=4MHz2.
2—5.
5V—fSYS=8MHz3.
3—5.
5VIDD1工作电流(晶体振荡器)3V无负载,fSYS=4MHzADC除能—0.
61.
5mA5V—2.
04.
0mAIDD2工作电流(晶体振荡器,HIRC)5V无负载,fSYS=8MHzADC除能—46mAISTB1静态电流(WDT使能)3V无负载,系统HALT——5μA5V——10μAISTB2静态电流(WDT除能)3V无负载,系统HALT——1μA5V——2μAVIL1I/O口、TMR0和INT引脚的低电平输入电压——0—0.
3VDDVVIH1I/O口、TMR0和INT引脚的高电平输入电压——0.
7VDD—VDDVVIL2低电平输入电压(RES)——0—0.
4VDDVVIH2高电平输入电压(RES)——0.
9VDD—VDDVVLVR1低电压复位电压—VLVR=2.
1V1.
982.
12.
22VVLVR2—VLVR=3.
0V2.
833.
03.
17VVLVD低电压检测电压——4.
124.
44.
7VIOL1I/O口灌电流3VVOL=0.
1VDD48—mA5V1020—mAIOH1I/O口源电流3VVOH=0.
9VDD-2-4—mA5V-5-10—mARPH上拉电阻3V—2060100kΩ5V—103050kΩRev.
1.
20122020-03-19交流电气特性Ta=25C符号参数测试条件最小典型最大单位VDD条件fSYS系统时钟(晶体振荡器,RC振荡器)2.
2V~5.
5V—400—4000kHz3.
3V~5.
5V—400—8000kHzfHIRC系统时钟(HIRC)5V8MHz,Ta=25C776080008240kHz相对于25C的温度漂移率5VTa=0~55C-2—+2%fTIMER定时器输入频率(TMRn)2.
2V~5.
5V—0—4000kHz3.
3V~5.
5V—0—8000kHztWDTOSC看门狗振荡器周期3V—4590180μs5V3265130μstRES外部复位低电平脉宽——1——μstSST系统启动延时周期—上电或从HALT中唤醒—1024—tSYStINT中断脉宽—无去抖1——μstLVR低电压复位时间——0.
2512mstOSTP振荡器停止到复位时间———10—μstIICI2C总线时钟周期—连接到外部2kΩ上拉电阻64——tSYS注:1、tSYS=1/fSYS.
2、tINT最小脉冲宽度为保证中断,它有可能为较小的脉冲宽度进行识别.
ADC特性Ta=25C符号参数测试条件最小典型最大单位VDD条件VADA/D输入电压2.
7V~5.
5V—0—VDDVDNLA/D非线性微分误差5VtAD=0.
5μs-2—+2LSBINLA/D非线性积分误差5VtAD=0.
5μs-4—+4LSBIADC打开A/D增加的功耗3V无负载,tAD=0.
5μs—0.
51mA5V无负载,tAD=0.
5μs—0.
61.
2mAtADA/D时钟周期——0.
5——μstADCA/D转换时间———16—tADRev.
1.
20132020-03-19比较器电气特性Ta=25C符号参数测试条件最小典型最大单位VDD条件VCP比较器工作电压——3.
0—5.
5VVR1比较器1参考电压5VTa=-40C~85C-5%0.
6VDD~0.
775VDD,0.
025VDD/级+5%VVR2比较器2参考电压5VTa=-40C~85C-5%0.
6VDD~0.
775VDD,0.
025VDD/级+5%VVR3比较器2参考电压5VTa=-40C~85C-5%0.
075VDD~0.
25VDD,0.
025VDD/级+5%VVR4比较器3参考电压5VTa=-40C~85C-5%0.
6VDD~0.
775VDD,0.
025VDD/级+5%VVOS比较器输入失调电压5V校准后-2—+2mV未校准,CnCOF[4:0]=10000B-15—+15mVVCM比较器共模电压范围——0—VDD-1.
4VVtPD比较器响应时间—比较器迟滞除能,10mV偏置——2μsVHYS比较器迟滞宽度5V比较器迟滞使能204060mVRev.
1.
20142020-03-19放大器电气特性Ta=25C符号参数测试条件最小典型最大单位VDD条件VOP放大器工作电压——3.
0—5.
5VVOPOS1放大器输入失调电压5V未校准,OPAOF[4:0]=10000B-15—+15mVVOPOS2放大器输入失调电压5V校准后-2—+2mVVCM放大器共模电压范围——VSS—VDD-1.
4VVPSRR电源电压抑制比5V—6080—dBCMRR共模抑制比5VVCM=0~VDD-1.
4V6080—dBSR转换速率+,转换速率-5V无负载0.
61.
8—V/μsGBW增益带宽5VRL=1M,CL=100pF0.
62.
2—MHzOPAR1典型值5VTa=25C456075k相对于25C的温度漂移率5VTa=0~50C-3—+3%OPAR2典型值5VTa=25C0.
7511.
25k相对于25C的温度漂移率5VTa=0~50C-3—+3%OPAR3典型值5VTa=25C0.
7511.
25k相对于25C的温度漂移率5VTa=0~50C-3—+3%OPAR4典型值5VTa=25C—10—k上电复位特性Ta=25C符号参数测试条件最小典型最大单位VDD条件VPOR上电复位电压————100mVRRVDD上电复位电压速率——0.
035——V/mstPORVDD保持为VPOR的最小时间——1——msVDDtPORRRVDDVPORTimeRev.
1.
20152020-03-19系统结构内部系统结构是Holtek单片机具有良好性能的主要因素.
由于采用RISC结构,此单片机具有高运算速度和高性能的特点.
通过流水线的方式,指令的取得和执行同时进行,此举使得除了跳转和调用指令外,其它指令都能在一个指令周期内完成.
8位ALU参与指令集中所有的运算,它可完成算术运算、逻辑运算、移位、递增、递减和分支等功能,而内部的数据路径则是以通过累加器和ALU的方式加以简化.
有些寄存器在数据存储器中被实现,且可以直接或间接寻址.
简单的寄存器寻址方式和结构特性,确保了在提供具有最大可靠度和灵活性的I/O和A/D控制系统时,仅需要少数的外部器件.
使得这些单片机适用于低成本和批量生产的控制应用.
时序和流水线结构主系统时钟由晶体/陶瓷振荡器或内部RC振荡器提供,它被细分为T1~T4四个内部产生的非重叠时序.
在T1时间,程序计数器自动加一并抓取一条新的指令.
剩下的时间T2~T4完成译码和执行功能,因此,一个T1~T4时钟周期构成一个指令周期.
虽然指令的抓取和执行发生在连续的指令周期,但单片机流水线结构会保证指令在一个指令周期内被有效执行.
除非程序计数器的内容被改变,如子程序的调用或跳转,在这种情况下指令将需要多一个指令周期的时间去执行.
FetchInst.
(PC)ExecuteInst.
(PC-1)FetchInst.
(PC+1)ExecuteInst.
(PC)FetchInst.
(PC+2)ExecuteInst.
(PC+1)PCPC+1PC+2fSYS(SystemClock)PhaseClockT1ProgramCounterPhaseClockT2PhaseClockT3PhaseClockT4Pipelining系统时序和流水线如果指令牵涉到分支,例如跳转或调用等指令,则需要两个指令周期才能完成指令执行.
需要一个额外周期的原因是程序先用一个周期取出实际要跳转或调用的地址,再用另一个周期去实际执行分支动作,因此用户需要特别考虑额外周期的问题,尤其是在执行时间要求较严格的时候.
FetchInst.
1ExecuteInst.
1FetchInst.
2FlushPipeline123456DELAY:MOVA,[12H]CALLDELAYCPL[12H]::NOPExecuteInst.
2FetchInst.
3FetchInst.
6ExecuteInst.
6FetchInst.
7指令捕捉Rev.
1.
20162020-03-19程序计数器在程序执行期间,程序计数器用来指向下一个要执行的指令地址.
除了"JMP"和"CALL"指令需要跳转到一个非连续的程序存储器地址之外,它会在每条指令执行完成以后自动加一.
只有较低的8位,即所谓的程序计数器低字节寄存器PCL,可以被用户直接读写.
当执行的指令要求跳转到不连续的地址时,如跳转指令、子程序调用、中断或复位等,单片机通过加载所需要的位址到程序寄存器来控制程序,对于条件跳转指令,一旦条件符合,在当前指令执行时取得的下一条指令将会被舍弃,而由一个空指令周期来取代.
程序计数器程序计数器高字节PCL寄存器PC11~PC8PCL7~PCL0程序计数器程序计数器的低字节,即程序计数器的低字节寄存器PCL,可以通过程序控制,且它是可以读取和写入的寄存器.
通过直接写入数据到这个寄存器,一个程序短跳转可直接执行,然而只有低字节的操作是有效的,跳转被限制在存储器的当前页中,即256个存储器地址范围内,当这样一个程序跳转要执行时,会插入一个空指令周期.
PCL的使用可能引起程序跳转,因此需要额外的指令周期.
堆栈堆栈是一个特殊的存储空间,用来存储程序计数器中的内容.
该单片机有8层堆栈,堆栈既不是数据部分也不是程序空间部分,而且它既不是可读取也不是可写入的.
当前层由堆栈指针(SP)加以指示,同样也是不可读写的.
在子程序调用或中断响应服务时,程序计数器的内容被压入到堆栈中.
当子程序或中断响应结束时,返回指令(RET或RETI)使程序计数器从堆栈中重新得到它以前的值.
当一个芯片复位后,堆栈指针将指向堆栈顶部.
ProgramCounterStackLevel1StackLevel2StackLevel3StackLevel8ProgramMemoryTopofStackStackPointerBottomofStack如果堆栈已满,且有非屏蔽的中断发生,中断请求标志会被置位,但中断响应将被禁止.
当堆栈指针减少(执行RET或RETI),中断将被响应.
这个特性提供程序设计者简单的方法来预防堆栈溢出.
然而即使堆栈已满,CALL指令仍然可以被执行,而造成堆栈溢出.
使用时应避免堆栈溢出的情况发生,因为这可能导致不可预期的程序分支指令执行错误.
若堆栈溢出,则首个存入堆栈的程序计数器数据将会丢失.
Rev.
1.
20172020-03-19算术逻辑单元–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,RETIFlash程序存储器程序存储器用来存放用户代码即储存程序.
程序存储器为FLASH类型意味着可以多次重复编程,方便用户使用同一芯片进行程序的修改.
使用适当的单片机编程工具,此单片机提供用户灵活便利的调试方法和项目开发规划及更新.
结构程序存储器的容量为4K*16位,程序存储器用程序计数器来寻址,其中也包含数据、表格和中断入口.
数据表格可以设定在程序存储器的任何地址,由表格指针来寻址.
特殊向量程序存储器内部某些地址保留用做诸如复位和中断入口等特殊用途.
地址000H是芯片复位后的程序起始地址.
在芯片复位之后,程序将跳到这个地址并开始执行.
004H018HInterruptVector16bitsFFFH000HReset程序存储器结构Rev.
1.
20182020-03-19查表程序存储器中的任何地址都可以定义成一个表格,以便储存固定的数据.
使用表格时,表格指针必须先行设定,其方式是将表格的地址放在表格指针寄存器TBLP中.
这些寄存器定义表格总的地址.
在设定完表格指针后,表格数据可以使用"TABRDC[m]"或"TABRDL[m]"指令分别从程序存储器查表读取.
当这些指令执行时,程序存储器中表格数据低字节,将被传送到使用者所指定的数据存储器[m],程序存储器中表格数据的高字节,则被传送到TBLH特殊寄存器,而高字节中未使用的位将被读取为"0".
下图是查表中寻址/数据流程:RegisterTBLHUserSelectedRegisterHighByteLowBytePCHighByteTBLPRegisterDataAddress16bitsProgramMemoryLastpageorpresentpagePC11~PC8指令表格地址b11b10b9b8b7b6b5b4b3b2b1b0TABRDC[m]PC11PC10PC9PC8@7@6@5@4@3@2@1@0TABRDL[m]1111@7@6@5@4@3@2@1@0表格地址注:1.
b11~b0:表格地址位2.
PC11~PC8:当前程序计数器位3.
@7~@0:表格指针TBLP位查表范例以下范例说明表格指针和表格数据如何被定义和执行.
这个例子使用的表格数据用ORG伪指令储存在存储器中.
ORG指令的值"0F00H"指向的地址是4K程序存储器中最后一页的起始地址.
表格指针的初始值设为06H,这可保证从数据表格读取的第一笔数据位于程序存储器地址0F06H,即最后一页起始地址后的第六个地址.
值得注意的是,假如"TABRDC[m]"指令被使用,则表格指针指向当前页.
在这个例子中,表格数据的高字节等于零,而当"TABRDC[m]"指令被执行时,此值将会自动的被传送到TBLH寄存器.
TBLH寄存器为只读寄存器,不能重新储存,若主程序和中断服务程序都使用表格读取指令,应该注意它的保护.
使用表格读取指令,中断服务程序可能会改变TBLH的值,若随后在主程序中再次使用这个值,则会发生错误,因此建议避免同时使用表格读取指令.
然而在某些情况下,如果同时使用表格读取指令是不可避免的,则在执行任何主程序的表格读取指令前,中断应该先除能,另外要注意的是所有与表格相关的指令,都需要两个指令周期去完成操作.
Rev.
1.
20192020-03-19表格读取程序举例tempreg1db;temporaryregister#1tempreg2db;temporaryregister#2::mova,06h;initialiselowtablepointer-notethatthisaddress;isreferencedmovtblp,a;tothelastpageorpresentpage::tabrdltempreg1;transfersvalueintablereferencedbytablepointer;dataatprogrammemoryaddress"0F06H"transferredto;tempreg1andTBLHdectblp;reducevalueoftablepointerbyonetabrdltempreg2;transfersvalueintablereferencedbytablepointer;dataatprogrammemoryaddress"0F05H"transferredto;tempreg2andTBLH;inthisexamplethedata"1AH"istransferredto;tempreg1anddata"0FH"toregistertempreg2::org0F00h;setsinitialaddressofprogrammemorydc00Ah,00Bh,00Ch,00Dh,00Eh,00Fh,01Ah,01Bh::在线烧录Flash型程序存储器提供用户便利地对同一芯片进行程序的更新和修改.
另外,Holtek单片机提供4线接口的在线烧录方式.
用户可将进行过烧录或未经过烧录的单片机芯片连同电路板一起制成,最后阶段进行程序的更新和程序的烧写,在无需去除或重新插入芯片的情况下方便地保持程序为最新版.
Holtek烧录器引脚名称MCU在线烧录引脚名称功能ICPDAPB0串行数据输入/输出ICPCKPB3串行时钟VDDVDD电源VSSVSS地芯片内部程序存储器可以通过4线的接口在线进行烧录.
其中PB0用于数据串行下载或上传、PB3用于串行时钟、两条用于提供电源.
芯片在线烧写的详细使用说明超出此文档的描述范围,将由专门的参考文献提供.
在烧录过程中,烧录器会控制PB3和PB0脚进行数据和时钟烧录,用户必须确保这两个引脚没有连接至其它输出脚.
Rev.
1.
20202020-03-19*Writer_VDDICPDAICPCKWriter_VSSTootherCircuitVDDPB0PB3VSSWriterConnectorSignalsMCUProgrammingPins*RPA2注:1.
*可能为电阻或电容.
若为电阻则其值必须大于1kΩ,若为电容则其必须小于1nF.
2.
建议在PA2和VSS之间连接一个小于1MΩ的电阻.
片上调试EVIC用于单片机仿真.
此EVIC提供片上调试功能(OCDS—On-ChipDebugSupport)用于开发过程中的单片机调试.
除了片上调试功能方面,EVIC和实际MCU在功能上几乎是兼容的.
用户可将OCDSDA和OCDSCK引脚连接至HoltekHT-IDE开发工具,从而实现EVIC对实际IC的仿真.
OCDSDA引脚为OCDS数据/地址输入/输出脚,OCDSCK引脚为OCDS时钟输入脚.
当用户用EVIC进行调试时,实际单片机OCDSDA和OCDSCK引脚上的其它共用功能无效.
由于这两个OCDS引脚与ICP引脚共用,因此在线烧录时仍用作Flash存储器烧录引脚.
关于OCDS功能的详细描述,请参考"Holteke-Linkfor8-bitMCUOCDS使用手册"文件.
Holteke-Link引脚名称EVIC引脚名称功能OCDSDAOCDSDA片上调试串行数据/地址输入/输出OCDSCKOCDSCK片上调试时钟输入VDDVDD电源VSSVSS地Rev.
1.
20212020-03-19数据存储器数据存储器是内容可以更改的8位RAM内部存储器,用来存储临时数据.
结构数据存储器分为两个部分,第一部分是特殊功能寄存器,这些寄存器有特定的地址且与单片机的正确操作密切相关.
大多特殊功能寄存器都可在程序控制下直接读取和写入,而有些是被加以保护而不对用户开放.
第二部分是通用数据存储器,所有地址都可在程序的控制下进行读取和写入.
数据存储器的两个部分,即特殊和通用数据存储器,位于连续的地址.
数据储存器为8位宽度,单片机的数据存储器的开始地址是"00H".
总的数据存储器被分为两个区,Bank0和Bank1.
单片机的程序需要一个读/写的存储区,让临时数据可以被储存和再使用.
该RAM区域就是通用数据存储器.
这个数据存储区可让用户进行读取和写入操作.
使用"SET[m].
i"和"CLR[m].
i"指令可对个别位进行设置或复位的操作,方便用户在数据存储器中进行位操作.
容量Bank0Bank1208*840H~FFH40H~4FH数据存储器结构注:使用"SET[m].
i"和"CLR[m].
i"可对大多数的数据存储区进行位操作,少数专用位除外.
数据存储区也可以通过存储器指针间接寻址.
特殊数据存储器这个区域的数据存储器是存放特殊寄存器的,它和单片机的正确操作密切相关.
大多数寄存器是可以读取和写入,只有一些是被写保护而只可读取的,相关的介绍请参考特殊功能寄存器的部分.
需注意,任何读取指令对于未定义的地址读取将返回"00H"的值.
Rev.
1.
20222020-03-1900HIAR001HMP002HIAR103HMP104H05HACC06HPCL07HTBLP08HTBLH09H0AHSTATUS0BH0CH0DH0EH0FH10H11H12H19HTMR1C18HTMR11BH1AH1DH1CH1FHPAPAC13H14H15H16H17H1EHBank0Bank1PCCPBCPCBPTMR0TMR0CUnusedUnusedINTC0CMP0CCTRL0CMP2CINTC1UnusedUnusedPBUnusedCMP1CUnusedEEACTRL4IICC0IICC1IICTOC:Unused,readas00HIICDPWM20H21H22H29H28H2BH2AH2DH2CH2FH2EH23H24H25H26H27HPWMCIICA30H31H32H38H3CH33H34H35H36H37H3BH39H3AH3DH3FH3EHMFICMPSCPPGTEXPPGTAPPGTBACSRADRHADCRCTRL2PWLTCMP3CEEDPPGCADRLCTRL1OPACCTRL3TMR2TMR2CEECUnusedPCRLPCRHBank0Bank1Unused特殊功能数据存储器结构Rev.
1.
20232020-03-19特殊功能寄存器大部分特殊功能寄存器的细节将在相关功能章节描述,但有几个寄存器需在此章节单独描述.
间接寻址寄存器–IAR0,IAR1间接寻址寄存器IAR0和IAR1的地址虽位于数据存储区,但其并没有实际的物理地址.
间接寻址的方法准许使用间接寻址指针做数据操作,以取代定义实际存储器地址的直接存储器寻址方法.
在间接寻址寄存器(IAR0和IAR1)上的任何动作,将对间接寻址指针(MP0和MP1)所指定的存储器地址产生对应的读/写操作.
它们总是成对出现,IAR0和MP0可以访问Bank0,而IAR1和MP1可以访问所有Bank.
因为这些间接寻址寄存器不是实际存在的,直接读取将返回"00H"的结果,而直接写入此寄存器则不做任何操作.
间接寻址指针–MP0,MP1该单片机提供两个间接寻址指针,即MP0和MP1.
由于这些指针在数据存储器中能像普通的寄存器一般被操作,因此提供了一个寻址和数据追踪的有效方法.
当对间接寻址寄存器进行任何操作时,单片机指向的实际地址是由间接寻址指针所指定的地址.
MP0,IAR0用于访问Bank0,而MP1和IAR1可通过BP寄存器访问所有的Bank.
直接寻址仅可以用在Bank0中,其它所有Bank都可使用MP1和IAR1进行间接寻址.
以下例子说明如何清除一个具有4RAM地址的区块,它们已事先定义成地址adres1到adres4.
间接寻址程序举例data.
sectiondataadres1dbadres2dbadres3dbadres4dbblockdbcode.
sectionat0codeorg00hstart:mova,04h;setupsizeofblockmovblock,amova,offsetadres1;AccumulatorloadedwithfirstRAMaddressmovmp0,a;setupmemorypointerwithfirstRAMaddressloop:clrIAR0;clearthedataataddressdefinedbymp0incmp0;incrementmemorypointersdzblock;checkiflastmemorylocationhasbeenclearedjmploopcontinue:在上面的例子中有一点值得注意,即并没有确定RAM地址.
Rev.
1.
20242020-03-19存储区指针–BP数据存储器被分为两个部分,即Bank0和Bank1.
可以通过设置存储区指针(BankPointer)值来访问不同的数据存储区.
BP指针的第0位用于选择数据存储器的Bank0或Bank1.
复位后,数据存储器会初始化到Bank0,但是在暂停模式下的WDT溢出复位,不会改变通用数据存储器的存储区号.
应该注意的是特殊功能数据存储器不受存储区的影响,也就是说,不论是在哪一个存储区,都能对特殊功能寄存器进行读写操作.
数据存储器的直接寻址总是访问Bank0,不影响存储区指针的值.
要访问Bank0之外的存储区,则必须要使用间接寻址方式.
BP寄存器Bit76543210NameDMBPR/WR/WPOR0Bit7~1未使用,读为"0"Bit0DMBP:数据存储区选择位0:Bank01:Bank1累加器–ACC对任何单片机来说,累加器是相当重要的,且与ALU所完成的运算有密切关系,所有ALU得到的运算结果都会暂时存在ACC累加器里.
若没有累加器,ALU必须在每次进行如加法、减法和移位的运算时,将结果写入到数据存储器,这样会造成程序编写和时间的负担.
另外数据传送也常常牵涉到累加器的临时储存功能,例如在使用者定义的一个寄存器和另一个寄存器之间传送数据时,由于两寄存器之间不能直接传送数据,因此必须通过累加器来传送数据.
程序计数器低字节寄存器–PCL为了提供额外的程序控制功能,程序计数器低字节设置在数据存储器的特殊功能区域内,程序员可对此寄存器进行操作,很容易的直接跳转到其它程序地址.
直接给PCL寄存器赋值将导致程序直接跳转到程序存储器的某一地址,然而由于寄存器只有8位长度,因此只允许在本页的程序存储器范围内进行跳转,而当使用这种运算时,要注意会插入一个空指令周期.
表格寄存器–TBLP,TBLH这两个特殊功能寄存器对存储在程序存储器中的表格进行操作.
TBLP为表格指针,指向表格数据存储的地址.
它的值必须在任何表格读取指令执行前加以设定,由于它的值可以被如"INC"或"DEC"的指令所改变,这就提供了一种简单的方法对表格数据进行读取.
表格读取数据指令执行之后,表格数据高字节存储在TBLH中.
其中要注意的是,表格数据低字节会被传送到使用者指定的地址.
Rev.
1.
20252020-03-19状态寄存器–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.
另外,当进入一个中断程序或执行子程序调用时,状态寄存器不会自动压入到堆栈保存.
假如状态寄存器的内容是重要的且子程序可能改变状态寄存器的话,则需谨慎的去做正确的储存.
STATUS寄存器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:算术或逻辑运算结果为0Rev.
1.
20262020-03-19Bit1AC:辅助进位标志位0:无辅助进位1:在加法运算中低四位产生了向高四位进位,或减法运算中低四位不发生从高四位借位Bit0C:进位标志位0:无进位1:如果在加法运算中结果产生了进位,或在减法运算中结果不发生借位C标志位也受循环移位指令的影响.
系统控制寄存器–CTRL0,CTRL1,CTRL2,CTRL3,CTRL4系统控制寄存器是用来控制各种内部功能,如比较器输出信号的反相控制、TMR0外部时钟源选择、外围时钟预分频比、振荡器停止功能控制、比较器内部参考电压选择等.
CTRL0寄存器Bit76543210NameC2VOINVTMR0ECSPCKPSC2PCKPSC1PCKPSC0OSTPCLVDOLVDCR/WR/WR/WR/WR/WR/WR/WRR/WPOR00000000Bit7C2VOINV:比较器2输出信号的反相控制位0:同相1:反相Bit6TMR0ECS:TMR0外部时钟源选择位0:TMR0引脚1:INT0信号Bit5~3PCKPSC2~PCKPSC0:外围时钟预分频比选择位fPCK=000:fSYS/4001:fSYS/8010:fSYS/12011:fSYS/16100:fSYS/20101:fSYS/24110:fSYS/1024111:fSYS/2048Bit2OSTPC:振荡器停止功能控制位0:除能1:使能Bit1LVDO:低电压检测输出标志位0:正常电压1:检测到低电压Bit0LVDC:低电压检测控制位0:除能1:使能Rev.
1.
20272020-03-19CTRL1寄存器Bit76543210NameINTINVINTSDBC5DBC4DBC3DBC2DBC1DBC0R/WR/WR/WR/WR/WR/WR/WR/WR/WPOR00000000Bit7INTINV:外部中断去抖输入信号的反相控制位0:同相1:反相Bit6INTS:外部中断源选择位0:INT引脚1:比较器0输出"C0VO"Bit5~0DBC5~DBC0:外部中断输入去抖时间选择位(fSYS=8MHz)000000:旁路数字去抖电路000001:0~1/fSYS,约0.
125μs000010:1/fSYS~2/fSYS,约0.
25μs::101111:46/fSYS~47/fSYS,约5.
875μs11xxxx:47/fSYS~48/fSYS,约6μsCTRL2寄存器Bit76543210Name——CVREF5CVREF4CVREF3CVREF2CVREF1CVREF0R/W——R/WR/WR/WR/WR/WR/WPOR——000000Bit7~6未定义,读为"0"Bit5~3CVREF5~CVREF3:比较器2内部参考电压VR2选择位000:0.
600VDD001:0.
625VDD010:0.
650VDD011:0.
675VDD100:0.
700VDD101:0.
725VDD110:0.
750VDD111:0.
775VDDBit2~0CVREF2~CVREF0:比较器1内部参考电压VR1选择位000:0.
600VDD001:0.
625VDD010:0.
650VDD011:0.
675VDD100:0.
700VDD101:0.
725VDD110:0.
750VDD111:0.
775VDDRev.
1.
20282020-03-19CTRL3寄存器Bit76543210Name—C3VOINVCVREF11CVREF10CVREF9CVREF8CVREF7CVREF6R/W—R/WR/WR/WR/WR/WR/WR/WPOR—0000000Bit7未定义,读为"0"Bit6C3VOINV:比较器3输出信号的反相控制位0:同相1:反相Bit5~3CVREF11~CVREF9:比较器3内部参考电压VR4选择位000:0.
600VDD001:0.
625VDD010:0.
650VDD011:0.
675VDD100:0.
700VDD101:0.
725VDD110:0.
750VDD111:0.
775VDDBit2~0CVREF8~CVREF6:比较器2内部参考电压VR3选择位000:0.
075VDD001:0.
100VDD010:0.
125VDD011:0.
150VDD100:0.
175VDD101:0.
200VDD110:0.
225VDD111:0.
250VDDCTRL4寄存器Bit76543210Name——PPGDL5PPGDL4PPGDL3PPGDL2PPGDL1PPGDL0R/W——R/WR/WR/WR/WR/WR/WPOR——000000Bit7~6未定义,读为"0"Bit5~0PPGDL5~PPGDL0:PPG触发延迟时间选择位(fSYS=8MHz)000000:0μs000001:0.
125μs000010:0.
25μs::101111:5.
875μs11xxxx:6μs注:1、触发延迟时间为INT0S下降沿到PPG触发信号INT00发出之间的时间.
2、触发延迟期间的INT0S下降沿会被忽略.
INT0:由软件选择来自INT引脚或比较器0输出"C0VO"的同相或反相去抖信号;INT0S:INT0单下降沿或双下降沿;INT00:PPG硬件触发信号.
Rev.
1.
20292020-03-19EEPROM数据寄存器此单片机的一个特性是内建EEPROM数据存储器.
"ElectricallyErasableProgrammableReadOnlyMemory"为电可擦可编程只读存储器,由于其非易失的存储结构,即使在电源掉电的情况下存储器内的数据仍然保存完好.
这种存储区扩展了ROM空间,对设计者来说增加了许多新的应用机会.
EEPROM可以用来存储产品编号、校准值、用户特定数据、系统配置参数或其它产品信息等.
EEPROM的数据读取和写入过程也会变的更简单.
EEPROM数据寄存器结构EEPROM数据寄存器容量为32*8.
由于映射方式与程序存储器和数据存储器不同,因此不能像其它类型的存储器一样寻址.
使用Bank0中的一个地址寄存器和一个数据寄存器以及Bank1中的一个控制寄存器,可以实现对EEPROM的单字节读写操作.
EEPROM寄存器有三个寄存器控制内部EEPROM数据存储器总的操作.
地址寄存器EEA、数据寄存器EED及控制寄存器EEC.
EEA和EED位于Bank0中,它们能像其它特殊功能寄存器一样直接被访问.
EEC位于Bank1中,不能被直接访问,仅能通过MP1和IAR1进行间接读取或写入.
由于EEC控制寄存器位于Bank1中的"3FH",在EEC寄存器上的任何操作被执行前,MP1必须先设为"3FH",BP被设为"01H".
寄存器名称位76543210EEA———D4D3D2D1D0EEDD7D6D5D4D3D2D1D0EEC————WRENWRRDENRDEEPROM寄存器列表EEA寄存器Bit76543210Name———D4D3D2D1D0R/W———R/WR/WR/WR/WR/WPOR———00000Bit7~5未定义,读为"0"Bit4~0数据EEPROM地址数据EEPROM地址bit4~bit0EED寄存器Bit76543210NameD7D6D5D4D3D2D1D0R/WR/WR/WR/WR/WR/WR/WR/WR/WPOR00000000Bit7~0EEPROM数据EEPROM数据bit7~bit0Rev.
1.
20302020-03-19EEC寄存器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".
从EEPROM中读取数据从EEPROM中读取数据,EEPROM中读取数据的地址要先放入EEA寄存器中.
EEC寄存器中的读使能位RDEN先置为高以使能读功能.
若EEC寄存器中的RD位被置高,一个读周期将开始.
若RD位已置为高而RDEN位还未被设置则不能开始读操作.
若读周期结束,RD位将自动清除为"0",数据可以从EED寄存器中读取.
数据在其它读或写操作执行前将一直保留在EED寄存器中.
应用程序将轮询RD位以确定数据可以有效地被读取.
写数据到EEPROMEEPROM中写入数据的地址要先放入EEA寄存器中,然后将要写入的数据放入EED寄存器中.
写数据至EEPROM,必须先将EEC寄存器中的写使能位WREN置为高以使能写功能,然后立刻将EEC寄存器中WR位置为高,此时一个内部写周期才开始.
这两条指令必须连续执行.
在写操作执行之前需将总中断控制位EMI清零,在写周期开始后再置高.
若WR位已置为高而WREN位还未被置高则不能开始写操作.
由于控制EEPROM写周期是一个内部时钟,与单片机的系统时钟异步,所以数据写入EEPROM的时间将有所延迟.
可通过轮询EEC寄存器中的WR位或判断EEPROM中断以侦测写周期是否完成.
若写周期完成,WR位将自动清除为"0",通知用户数据已写入EEPROM.
因此,应用程序将轮询WR位以确定写周期是否结束.
Rev.
1.
20312020-03-19写保护防止误写入的写保护有以下几种.
单片机上电后控制寄存器中的写使能位将被清除以杜绝任何写入操作.
上电后BP将重置为"0",这意味着数据存储区Bank0被选中.
由于EEPROM控制寄存器位于Bank1中,这增加了对写操作的保护措施.
在正常程序操作中确保控制寄存器中的写使能位被清除将能防止不正确的写操作.
EEPROM中断EEPROM写周期结束后将产生EEPROM写中断,需先通过设置相关中断寄存器的DEE位使能EEPROM中断.
当EEPROM写周期结束,DEF请求标志位将被置位.
若EEPROM中断使能且堆栈未满的情况下将跳转到相应的多功能中断向量中执行.
当中断被响应,EEPROM中断标志位将自动复位,更多细节将在中断章节讲述.
编程注意事项必须注意的是数据不会无意写入EEPROM.
在没有写动作时写使能位被正常清零可以增强保护功能.
BP指针也可以正常清零以阻止进入EEPROM控制寄存器存在的Bank1.
尽管没有必要,写一个简单的读回程序以检查新写入的数据是否正确还是应该考虑的.
WREN位置位后,EEC寄存器中的WR位需立即置位,否则EEPROM写周期将不能被执行.
写数据时,WREN位置为"1"后,WR须立即设置为高,以确保正确地执行写周期.
写周期执行前总中断位EMI应先清零,写周期开始执行后再将此位重新使能.
注意,单片机只有在EEPROM读操作与写操作完全完成时才能进入暂停模式.
否则会引起EEPROM读取与写入失败.
程序举例从EEPROM中读取数据—轮询法MOVA,EEPROM_ADRES;userdefinedaddressMOVEEA,AMOVA,03FH;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,03FH;setupmemorypointerMP1MOVMP1,A;MP1pointstoEECregisterMOVA,01H;setupBankPointerRev.
1.
20322020-03-19MOVBP,A;BPpointstodatamemorybank1CLREMISETIAR1.
3;setWRENbit,enablewriteoperationsSETIAR1.
2;startWriteCycle-setWRbit–executedimmediatelyaftersetWRENbitSETEMIBACK:SZIAR1.
2;checkforwritecycleendJMPBACKCLRIAR1;disableEEPROMread/writeCLRBP振荡器不同的振荡器选择可以让使用者在不同的应用需求中获得更多范围的功能.
振荡器的灵活性使得在速度和功耗之间可以达到最优化.
振荡器选项是通过配置选项来完成的.
振荡器概述该单片机有三个振荡器,外部晶体/陶瓷振荡器、内部RC振荡器和看门狗振荡器.
外部晶体/陶瓷振荡器和内部RC振荡器除了作为系统时钟源,还作为看门狗定时器的时钟源.
外部振荡器需要一些外围器件,而集成的两个内部振荡器不需要任何外围器件.
系统时钟配置该单片机有两种振荡方式,外部晶体振荡和内部RC振荡,可以通过配置选项设定,不管选用哪一种振荡方式,其信号都可以做为系统时钟.
HALT状态下会停止系统振荡器,并忽视任何外部信号以降低功耗.
外部晶体/陶瓷振荡器–HXT对于晶体振荡器,只要简单地将晶体连接至OSC1和OSC2,则会产生振荡所需的相移及反馈,而不需其它外部器件.
为保证某些低频率的晶体振荡和陶瓷谐振器的振荡频率更精准,建议连接两个小容量电容C1和C2到VSS,具体数值与客户选择的晶体/陶瓷晶振有关.
在许多应用场合,外部并联反馈RP并不一定需要,但在某些应用中可能需要帮助振荡器的起振.
为了确保振荡器的稳定性及减少噪声和串扰的影响,晶体振荡器及其相关的电阻和电容以及他们之间的连线都应尽可能的接近单片机.
OSC1OSC2RfTointernalcircuitsInternalOscillatorCircuitC1C2RpNote:1.
Rpisnormallynotrequired.
C1andC2arerequired.
2.
AlthoughnotshownOSC1/OSC2pinshaveaparasiticcapacitanceofaround7pF.
晶体/陶瓷振荡器–HXTRev.
1.
20332020-03-19内部RC振荡器–HIRC内部RC振荡器是一个集成的系统振荡器,不需其它外部器件.
内部RC振荡器具有以一个固定的频率:8MHz.
芯片在制造时进行调整且内部含有频率补偿电路,使得振荡频率因VDD、温度以及芯片制成工艺不同的影响减至最低程度.
如果选择了该内部时钟,无需额外的引脚,PA0和PA1可以作为通用I/O口或其它功能使用.
PA1/OPAO/AN8InternalRCOscillatorPA0/OPAN内部RC振荡器–HIRC看门狗振荡器–WDTOSC看门狗振荡器是一个完全独立运行的片内RC振荡器,无需外部器件,在常温5V条件下,其振荡周期大约为65μs.
当单片机进入暂停模式,系统时钟将停止运行.
但WDT振荡器会继续运行以保持WDT的功能.
然而,在某些需要节省功耗的应用中,可通过配置选项来关闭WDT振荡器以降低功耗.
振荡器停止检测功能振荡器停止检测功能用于监测振荡器的状态,若振荡器故障,单片机将被迫进入复位状态,直到振荡器又重新运行.
振荡器停止检测功能的使能/除能是通过系统控制寄存器CTRL0的OSTPC位来设置.
在暂停模式下,振荡器停止检测功能将除能.
暂停模式和唤醒暂停模式所有Holtek单片机都具有暂停功能,即HALT.
当单片机进入此模式,由于系统停止振荡,芯片的工作电流会降到极低静态模式.
由于单片机保存了当前工作的一些内部条件,它可以被唤醒并继续运行,而不需要重新进行复位.
这个特性对于电池供电系统等供电容量受限但需要单片机保存当前工作状态的应用场合特别重要.
进入暂停模式只有在应用程序中执行"HALT"指令,单片机才可以进入暂停模式.
执行这条指令之后,会有以下情形发生:系统振荡器停止运行,应用程序停止在"HALT"指令处.
数据存储器和寄存器中的内容将保持当前值.
如果WDT使能且WDT时钟源来自WDT振荡器,则WDT将被清零并重新开始计数;如果WDT时钟源来自系统时钟,则WDT停止计数.
所有输入/输出口都保持原有状态.
状态寄存器中的暂停标志位PDF将被置起,看门狗溢出标志位TO将被清除.
Rev.
1.
20342020-03-19静态电流注意事项要使系统静态电流降到最小,为微安级,除了需要单片机进入暂停模式,还要考虑到电路的设计.
应该特别注意的是单片机的输入/输出口的状态.
所有高阻抗输入脚都必须连接到固定的高或低电平,因为引脚浮空会造成内部振荡并导致耗电增加.
这也应用于有不同封装的单片机,因为它们可能含有未引出的引脚,这些引脚也必须设为输出或带有上拉电阻的输入.
另外还需注意单片机设为输出的I/O引脚上的负载.
应将它们设置在有最小拉电流的状态或将它们和其它的CMOS输入一样接到没有拉电流的外部电路上.
还应注意的是,如果配置选项使能内部看门狗振荡器,会导致耗电增加.
唤醒系统进入暂停模式之后,可以通过以下几种方式唤醒:外部复位PA口下降沿系统中断WDT溢出若由外部复位引脚唤醒,系统会经过完全复位的过程.
若由WDT溢出唤醒,则会发生看门狗定时器复位.
这两种唤醒方式都会使系统复位,可以通过状态寄存器中TO和PDF位来判断它的唤醒源.
系统上电或执行清除看门狗的指令,会清零PDF;执行"HALT"指令,PDF将被置位.
看门狗计数器溢出将会置位TO标志并唤醒系统,这种复位会重置程序计数器和堆栈指针,其它标志保持原有状态.
PA口中的每个引脚都可以通过配置选项单独选择唤醒功能.
PA端口唤醒后,程序将在"HALT"指令后继续执行.
如果系统是通过中断唤醒,则有两种可能发生.
第一种情况是:相关中断除能或是堆栈已满,则程序会在"HALT"指令之后继续执行.
这种情况下,唤醒系统的中断会等到相关中断使能或有堆栈层可以使用之后才执行.
第二种情况是:相关中断使能且堆栈未满,则中断可以马上执行.
如果在进入暂停模式之前中断标志位已经被设置为"1",则相关中断的唤醒功能将无效.
无论何种唤醒源,一旦唤醒事件发生,回到正常运行将需要1024个系统时钟周期.
如果唤醒由中断发生,则真实的中断子程序执行将延迟一个或数个周期.
如果唤醒后接着去执行"HALT"下一条指令,则它将在1024个系统时钟周期结束后立刻执行.
Rev.
1.
20352020-03-19看门狗定时器看门狗定时器的功能在于防止如电磁的干扰等外部不可控制事件,所造成的程序不正常动作或跳转到未知的地址.
看门狗定时器时钟源WDT时钟源来自于看门狗振荡器或fSYS/4,可通过配置选项设置.
电压为5V时看门狗振荡器的周期大约为65μs.
需要注意的是,这个特殊的内部时钟周期随VDD、温度和制成的不同而变化.
另一个看门狗定时器时钟源选项为fSYS/4.
看门狗定时器的时钟源可分频为213~216以提供更大的溢出周期,分频比由配置选项决定.
注意,在单片机正常运行模式下,LIRC(WDTOSC)也会正常运行.
一旦单片机进入HALT模式,如果WDT使能则LIRC继续运行,如果WDT除能则LIRC也停止运行.
看门狗定时器操作当WDT溢出时,它产生一个芯片复位的动作.
这也就意味着正常工作期间,用户需在应用程序中看门狗溢出前有策略地清看门狗定时器以防止其产生复位,可使用清除看门狗指令实现.
无论什么原因,程序失常跳转到一个未知的地址或进入一个死循环,这些清除指令都不能被正确执行,此种情况下,看门狗将溢出以使单片机复位.
在此单片机中,所有看门狗定时器的选项,如使能/除能、WDT时钟源和清除看门狗指令条数都是通过配置选项来选择,没有与WDT相关的内部寄存器.
注意,若看门狗定时器被除能,相关操作的任何指令都不会工作.
程序正常运行时,WDT溢出将导致芯片复位,并置位状态标志位TO.
若系统处于暂停模式,当发生WDT溢出时,状态标志位TO将被置位,只有程序计数器PC和堆栈指针SP被复位.
有三种方法可以用来清除WDT的内容.
第一种是外部硬件复位(RES引脚低电平),第二种是通过软件清除指令,而第三种是通过"HALT"指令.
软件指令有两种方法用于清除看门狗寄存器,需通过配置选项选择.
第一种选择是使用一条"CLRWDT"指令,而第二种是使用"CLRWDT1"和"CLRWDT2"两条指令.
对于第一种选择,只要执行"CLRWDT"便清除WDT.
而第二种选择,需要交替执行"CLRWDT1"和"CLRWDT2"两者才能成功的清除WDT.
关于第二种选,如果"CLRWDT1"正被使用来清除WDT,接着再执行这条指令将是无效的,只有执行"CLRWDT2"指令才能清除WDT.
同样的"CLRWDT2"指令已经执行后,只有接着执行"CLRWDT1"指令才可以清除看门狗定时器.
当设置分频比为216时,溢出周期最大.
例如,时钟源为看门狗振荡器,分频比为216时最大溢出周期约4.
7s.
如果fSYS/4作为看门狗定时器时钟源,需要注意,当系统工作在暂停模式时,系统时钟停止工作,看门狗失去保护作用.
如果系统工作在干扰大的环境中,强烈建议使用看门狗振荡器作为时钟源.
Rev.
1.
20362020-03-198-stagedividerWDTTime-outfsMUXfs/28WDTPrescalerMUXWDTOSCfSYS/4ClearWDTTypeConfigurationOptionCLRWDT1FlagCLRWDT2Flag1or2InstructionsCLRConfigurationOptionConfigurationOption看门狗定时器复位和初始化复位功能是任何单片机中基本的部分,使得单片机可以设定一些与外部参数无关的先置条件.
最重要的复位条件是在单片机首次上电以后,经过短暂的延迟,内部硬件电路使得单片机处于预期的稳定状态并开始执行第一条程序指令.
上电复位以后,在程序执行之前,部分重要的内部寄存器将会被设定为预先设定的状态.
程序计数器就是其中之一,它会被清除为零,使得单片机从最低的程序存储器地址开始执行程序.
除上电复位以外,即使单片机处于正常工作状态,有些情况的发生也会迫使单片机复位.
譬如当单片机上电后已经开始执行程序,RES脚被强制拉为低电平.
这种复位为正常操作复位,单片机中只有一些寄存器受影响,而大部分寄存器不会改变,在复位引脚恢复至高电平后,单片机可以正常运行.
另一种复位为看门狗溢出单片机复位.
不同方式的复位操作会对寄存器产生不同的影响.
另一种复位为低电压复位即LVR复位,在电源供应电压低于LVR设定值时,系统会产生LVR复位,这种复位与RES脚拉低复位方式相似.
复位功能包括内部和外部事件触发复位,单片机共有五种复位方式:上电复位这是最基本且不可避免的复位,发生在单片机上电后.
除了保证程序存储器从开始地址执行,上电复位也使得其它寄存器被设定在预设条件.
所有的输入/输出端口控制寄存器在上电复位时会保持高电平,以确保上电后所有引脚被设定为输入状态.
VDDInternalResettRSTD+tSST0.
9VDDRES上电复位时序图Rev.
1.
20372020-03-19RES引脚复位由于复位引脚与PB0共用,复位功能必须使用配置选项选择.
虽然单片机有一个内部RC复位功能,如果电源上升缓慢或上电时电源不稳定,内部RC振荡可能导致芯片复位不良,所以推荐使用和RES引脚连接的外部RC电路,由RC电路所造成的时间延迟使得RES引脚在电源供应稳定前的一段延长周期内保持在低电平.
在这段时间内,单片机的正常操作是被禁止的.
RES引脚达到一定电压值后,再经过延迟时间tRSTD单片机可以开始进行正常操作.
下图中SST是系统延迟周期SystemStart-upTimer的缩写.
在许多应用场合,可以在VDD和RES之间接入一个电阻,在VSS与RES之间接入一个电容作为外部复位电路.
与RES脚上所有相连接的线段必须尽量短以减少噪声干扰.
当系统在较强干扰的场合工作时,建议使用增强型的复位电路,如下图所示.
RES0.
1~1mF10kW~100kWVDDVSS0.
01mF**VDD1N4148*300W*注:"*"表示建议加上此元件以加强静电保护.
"**"表示建议在电源有较强干扰场合加上此元件.
外部RES电路欲知有关外部复位电路的更多信息可参考Holtek网站上的应用范例HA0075S.
RES引脚通过外部硬件强迫拉至低电平时,此种复位形式即会发生.
这种复位方式和其它的复位方式一样,程序计数器会被清除为零且程序从头开始执行.
RESInternalReset0.
9VDD0.
4VDDtRSTD+tSSTRES复位时序图低电压复位–LVR单片机具有低电压复位电路,用来监测它的电源电压,可通过配置选项进行选择.
例如在更换电池的情况下,单片机供应的电压可能会落在0.
9V~VLVR的范围内,这时LVR将会自动复位单片机.
LVR包含以下的规格:有效的LVR信号,即在0.
9V~VLVR的低电压状态的时间,必须超过交流电气特性中tLVR参数的值.
如果低电压存在不超过tLVR参数的值,则LVR将会忽略它且不会执行复位功能.
VLVR参数值可通过配置选项进行设定为2.
1V或3.
0V.
在暂停模式下,低电压复位功能将除能.
LVRInternalResettRSTD+tSST低电压复位时序图Rev.
1.
20382020-03-19正常运行时看门狗溢出复位除了看门狗溢出标志位TO将被设为"1"之外,正常运行时看门狗溢出复位和RES复位相同.
tRSTD+tSSTWDTTime-outInternalReset正常运行时看门狗溢出时序图暂停模式时看门狗溢出复位暂停模式时看门狗溢出复位和其它种类的复位有些不同.
除了程序计数器与堆栈指针将被清"0"及TO位被设为"1"外,绝大部分的条件保持不变.
图中tSST的详细说明请参考交流电气特性.
tSSTWDTTime-outInternalReset暂停模式时看门狗溢出复位时序图复位初始状态不同的复位形式以不同的途径影响复位标志位.
这些标志位,即PDF和TO位存放在状态寄存器中,由HALT模式功能或看门狗计数器等几种控制器操作控制.
复位标志位如下所示:TOPDF复位条件00上电复位uu正常模式时的RES复位或LVR复位1u正常模式时的WDT溢出复位11暂停模式时的WDT溢出复位注:"u"代表不改变在单片机上电复位之后,各功能单元初始化的情形,列于下表.
项目复位后情况程序计数器清除为零中断所有中断被除能看门狗定时器WDT清除并重新计数定时/计数器所有定时/计数器停止PPG计数器PPG计数器停止PPG、IOFF输出浮空状态输入/输出口所有I/O口设为输入模式堆栈指针堆栈指针指向堆栈顶端不同的复位形式对单片机内部寄存器的影响是不同的.
为保证复位后程序能正常执行,了解寄存器在特定条件复位后的设置是非常重要的.
下表即为不同方式复位后内部寄存器的状况.
若芯片有多种封装类型,表格反映较大的封装的情况.
Rev.
1.
20392020-03-19寄存器上电复位RES或LVR复位WDT溢出(正常模式)WDT溢出(HALT)MP0xxxxxxxxuuuuuuuuuuuuuuuuuuuuuuuuMP1xxxxxxxxuuuuuuuuuuuuuuuuuuuuuuuuBP000uACCxxxxxxxxuuuuuuuuuuuuuuuuuuuuuuuuPCL00000000000000000000000000000000TBLPxxxxxxxxuuuuuuuuuuuuuuuuuuuuuuuuTBLHxxxxxxxxuuuuuuuuuuuuuuuuuuuuuuuuSTATUS--00xxxx--uuuuuu--1uuuuu--11uuuuINTC0-0000000-0000000-0000000-uuuuuuuTMR0xxxxxxxxxxxxxxxxxxxxxxxxuuuuuuuuTMR0C00-0100000-0100000-01000uu-uuuuuTMR1xxxxxxxxxxxxxxxxxxxxxxxxuuuuuuuuTMR1C00-0-00000-0-00000-0-000uu-u-uuuPA111111111111111111111111uuuuuuuuPAC111111111111111111111111uuuuuuuuPB---11111---11111---11111---uuuuuPBC---11111---11111---11111---uuuuuPC----1111----1111----1111----uuuuPCC----1111----1111----1111----uuuuCTRL0000000000000000000000000uuuuuuuuCMP0C000100000001000000010000uuuuuuuuCMP1C000100000001000000010000uuuuuuuuCMP2C000100000001000000010000uuuuuuuuCMP3C000100000001000000010000uuuuuuuuINTC1000000000000000000000000uuuuuuuuMFI-000-000-000-000-000-000-uuu-uuuPPGC0000--000000--000000--00uuuu--uuPPGTAxxxxxxxxxxxxxxxxxxxxxxxxuuuuuuuuPPGTBxxxxxxxxxxxxxxxxxxxxxxxxuuuuuuuuPPGTEX---x---x---x---x---x---x---u---uADRLxxxx----xxxx----xxxx----uuuu----ADRHxxxxxxxxxxxxxxxxxxxxxxxxuuuuuuuuADCR01--000001--000001--0000uu--uuuuACSR000000uuCTRL1000000000000000000000000uuuuuuuuCTRL2--000000--000000--000000--uuuuuuCTRL3-0000000-0000000-0000000-uuuuuuuOPAC000100000001000000010000uuuuuuuuPWLTxxxxxxxxxxxxxxxxxxxxxxxxuuuuuuuuCTRL4--000000--000000--000000--uuuuuuRev.
1.
20402020-03-19寄存器上电复位RES或LVR复位WDT溢出(正常模式)WDT溢出(HALT)TMR2xxxxxxxxxxxxxxxxxxxxxxxxuuuuuuuuTMR2C---0-000---0-000---0-000---u-uuuCMPSC0000--000000--000000--00uuuu--uuIICC0----000000000uuu-IICC1100000011000000110000001uuuuuuuuIICDxxxxxxxxxxxxxxxxxxxxxxxxuuuuuuuuIICA0000000-0000000-0000000-uuuuuuu-IICTOC000000000000000000000000uuuuuuuuPCRL000000000000000000000000uuuuuuuuPCRH----0000----0000----0000----uuuuPWMxxxxxxxxxxxxxxxxxxxxxxxxuuuuuuuuPWMC000000000uuuEEA---00000---00000---00000---uuuuuEED000000000000000000000000uuuuuuuuEEC----0000----0000----0000----uuuu注:"u"表示不改变"x"表示未知"-"表示未定义Rev.
1.
20412020-03-19输入/输出端口Holtek单片机的输入/输出口控制具有很大的灵活性.
大部分引脚可在用户程序控制下被设定为输入或输出,所有引脚的上拉电阻设置以及指定引脚的唤醒设置也都由配置选项控制,这些特性也使得此类单片机在广泛应用上都能符合开发的需求.
作为输入操作,输入引脚无锁存功能,也就是说输出数据必须在执行"MOVA,[m]",T2的上升沿准备好,m为端口地址.
对于输出操作,所有数据都是被锁存的,且保持不变直到输出锁存被重写.
寄存器名称位76543210PAPA7PA6PA5PA4PA3PA2PA1PA0PACPAC7PAC6PAC5PAC4PAC3PAC2PAC1PAC0PB———PB4PB3PB2PB1PB0PBC———PBC4PBC3PBC2PBC1PBC0PC————PC3PC2PC1PC0PCC————PCC3PCC2PCC1PCC0输入/输出寄存器列表上拉电阻许多产品应用在端口处于输入状态时需要外加一个上拉电阻来实现上拉的功能.
为了免去外部上拉电阻,当引脚规划为输入时,可由内部连接到一个上拉电阻,这些上拉电阻可通过配置选项设置,它用一个PMOS晶体管来实现上拉电阻功能.
PA口的唤醒当使用暂停指令"HALT"迫使单片机进入暂停模式,单片机的系统时钟将会停止以降低功耗,此功能对于电池及低功耗应用很重要.
唤醒单片机有很多种方法,其中之一就是使PA0~PA7的其中一个引脚从高电平转换为低电平.
使用暂停指令"HALT"迫使单片机进入暂停模式状态后,处理器将会一直保持低功耗状态,直到PA口上被选为唤醒输入的引脚电平发生下降沿跳变.
这个功能特别适合于通过外部开关来唤醒的应用.
PA口的每个引脚可以通过设置配置选项来单独选择是否具有唤醒功能.
输入/输出端口控制寄存器每一个输入/输出口都具有各自的控制寄存器,即PAC~PCC,用来控制输入/输出状态.
从而每个I/O引脚都可以通过软件控制,动态的设置为CMOS输出或输入.
所有的I/O端口的引脚都各自对应于I/O端口控制的某一位.
若I/O引脚要实现输入功能,则对应的控制寄存器的位需要设置为"1".
这时程序指令可以直接读取输入脚的逻辑状态.
若控制寄存器相应的位被设定为"0",则此引脚被设置为CMOS输出.
当引脚设置为输出状态时,程序指令读取的是输出端口寄存器的内容.
注,如果对输出口做读取动作时,程序读取到的是内部输出数据锁存器中的状态,而不是输出引脚上实际的逻辑状态.
Rev.
1.
20422020-03-19PAC寄存器Bit76543210NamePAC7PAC6PAC5PAC4PAC3PAC2PAC1PAC0R/WR/WR/WR/WR/WR/WR/WR/WR/WPOR11111111Bit7~0PA口bit7~bit0输入/输出控制位0:输出1:输入PBC寄存器Bit76543210Name———PBC4PBC3PBC2PBC1PBC0R/W———R/WR/WR/WR/WR/WPOR———11111Bit7~5未使用,读为"0"Bit4~0PB口bit4~bit0输入/输出控制位0:输出1:输入PCC寄存器Bit76543210Name————PCC3PCC2PCC1PCC0R/W————R/WR/WR/WR/WPOR————1111Bit7~4未使用,读为"0"Bit3~0PC口bit3~bit0输入/输出控制位0:输出1:输入Rev.
1.
20432020-03-19输入/输出引脚结构下图为输入/输出引脚的内部结构图.
输入/输出引脚的准确逻辑结构图可能与此图不同,这里只是为了方便对功能的理解提供的一个参考.
VDDMUXWake-upoptionSystemWake-up(PAonly)ReadDataRegisterDQCKSDQCKSControlBitDataBusWriteControlRegisterChipResetReadControlRegisterWriteDataRegisterDataBitPA0/OPAN/OSC2PA1/OPAO/OSC1/AN8PA2/CP0N/INTPA3/CP0P/TMR0PA4/AN4PA5/CP1N/AN7PA6/CP2N/AN6PA7/CP2P/AN5PB1/SDA/AN0PB2/IOFF/AN1PB3/AN2PB4/PWM/AN3PC0/AN10/CP3NPC1/PCK/CP3NPC2PC3/AN11QQWeakPull-upPull-HighRegisterSelectMUXPCK,PWMoptionPCK,PWMINTforPA2onlyTMR0forPA3onlyToA/Dconverter(ANxonly)ACS3~ACS0PCRx(ANxonly)编程注意事项在编程中,最先要考虑的是端口的初始化.
复位之后,所有的输入/输出数据及端口控制寄存器都将被设为逻辑高.
所有输入/输出引脚默认为输入状态,而其电平则取决于其它相连接电路以及是否选择了上拉电阻.
如果端口控制寄存器某些引脚位被设定输出状态,这些输出引脚会有初始高电平输出,除非数据寄存器端口在程序中被预先设定.
设置哪些引脚是输入及哪些引脚是输出,可通过设置正确的值到适当的端口控制寄存器,或者使用指令"SET[m].
i"及"CLR[m].
i"来设定端口控制寄存器中个别的位.
注意,当使用这些位控制指令时,系统即将产生一个读-修改-写的操作.
单片机需要先读入整个端口上的数据,修改个别的位,然后重新把这些数据写入到输出端口.
T1T2T3T4T1T2T3T4WritetoPortReadfromPortSystemClockPortData读写时序图PA0~PA7的每个引脚可通过配置选项设置带唤醒功能.
单片机处于暂停模式时,有很多方法可以唤醒单片机,其中之一就是通过PA任一引脚电平从高到低的转换的方式,也可设置PA口一个或多个引脚具有唤醒功能.
Rev.
1.
20442020-03-19定时/计数器定时/计数器在任何单片机中都是一个很重要的部分,提供程序设计者一种实现和时间有关功能的方法.
该芯片具有三个8位的向上计数器.
定时/计数器0有三种不同的工作模式,可以当作一个普通定时器、外部事件计数器或脉冲宽度测量使用.
定时/计数器1有两种不同的工作模式,可以当作一个普通定时器或用于PPG不可重复触发功能.
定时/计数器2只有一种工作模式,即定时器模式.
并且提供了一个内部时钟分频器,以扩大定时器的范围.
有两种和定时/计数器相关的寄存器.
第一种类型的寄存器是用来存储实际的计数值,赋值给此寄存器可以设定初始值,读取此寄存器可获得定时/计数器的内容;第二种类型的寄存器为定时器控制寄存器,用来定义定时/计数器工作模式和定时设置.
配置定时/计数器输入时钟源对于定时/计数器0,时钟来源可以是内部时钟,也可以是外部信号输入,选择外部信号输入时,可由CTRL0寄存器中的TMR0ECS位选择外部信号来源于TMR0引脚还是INT0信号.
对于定时/计数器1/2,只有一个内部时钟来源,即系统时钟fSYS.
内部时钟首先由分频器分频,分频比由定时器控制寄存器的位TnPSC0~TnPSC2来确定.
外部信号输入可以用来计数外部事件、测量时间间隔或测量脉冲宽度,内部时钟可以用来产生精确的时基信号.
定时/计数寄存器–TMR0,TMR1,TMR2定时/计数寄存器TMRn是位于特殊数据存储器内的特殊功能寄存器,用于储存定时器的当前值.
在用作内部定时且收到一个内部计数脉冲或用作外部计数且外部定时/计数器引脚发生状态跳变时,此寄存器的值将会加一.
定时器将从预置寄存器所载入的值开始计数,到FFH时定时器溢出且会产生一个内部中断信号.
定时器的值随后被预置寄存器的值重新载入并继续计数.
注意,上电后预置寄存器处于未知状态.
为了得到定时器的最大计算范围,预置寄存器需要先清为零.
定时/计数器在关闭条件下,写数据到预置寄存器,会立即写入实际的定时器.
而如果定时/计数器已经打开且正在计数,在这个周期内写入到预置寄存器的任何新数据将保留在预置寄存器,只到溢出发生时才被写入实际定时器.
定时/计数器控制寄存器–TMR0C,TMR1C,TMR2CHoltek单片机灵活的特性也表现在定时器的多功能上,定时/计数器能提供几种不同的工作模式,由相应的控制寄存器来选择定时/计数器的工作方式.
定时/计数控制寄存器为TMRnC,配合相应的TMRn寄存器控制定时/计数器的全部操作.
在使用定时器之前,需要先正确地设定定时/计数控制寄存器,以便保证定时器能正确操作,而这个过程通常在程序初始化期间完成.
定时/计数控制寄存器的第7位和第6位,即T0M1/T0M0和T1M1/T1M0,用来设定定时器的工作模式,计数器模式、定时器模式、脉冲宽度测量模式或是用于PPG不可重复触发功能的模式0.
定时/计数控制寄存器的第4位即TnON,用于定时器开关控制,设定为逻辑高时,计数器开始计数,而清零时则停止计数.
定时/计数控制寄存器的第0~2位用来控制输入时钟预分频器.
如果使用外部时钟源,预分频器位将不起作用.
如果定时/计数器工作在外部事件计数模式或脉冲宽度测量模式,T0EG位即TMR0C寄存器的第3位将可用来选择上升沿或下降沿触发.
Rev.
1.
20452020-03-19T0EPulseWidthMeasurementModeControlDatabusReloadOverflowToInterrupt8-BitTimer/EventCounterPreloadRegisterfT0TMR0MUXINT0TMR0ECST0ON8-BitTimer/EventCounter(TMR0)T0M1T0M0T0M0T0M1G注:INT0为由软件选择来自INT引脚或比较器0输出"C0VO"的同相或反相去抖信号8位定时/计数器0结构图DatabusReloadOverflowtoInterrupt8-bitTimer/EventCounter(TMR1)fT18-bitTimer/EventCounterPreloadRegisterRSQT1M1T1M0T1ONTimer1ControlCircuitSET_T1ONT1M1T1M0INHT1OVSET_T1ONT1OV8位定时/计数器1结构图DatabusReloadOverflowToInterrupt8-BitTimer/EventCounterPreloadRegisterfT28-BitTimer/EventCounter(TMR2)T2ON8位定时/计数器2结构图TMR0C寄存器Bit76543210NameT0M1T0M0—T0ONT0EGT0PSC2T0PSC1T0PSC0R/WR/WR/W—R/WR/WR/WR/WR/WPOR00—01000Bit7~6T0M1~T0M0:选择Timer0工作模式00:无可用模式01:计数器模式10:定时器模式11:脉冲宽度测量模式Bit5未定义,读为"0"Bit4T0ON:定时/计数器使能0:除能1:使能Rev.
1.
20462020-03-19Bit3T0EG:计数器有效边沿选择0:在上升沿计数1:在下降沿计数脉冲宽度测量有效边缘选择0:在下降沿启动计数,在上升沿停止计数1:在上升沿启动计数,在下降沿停止计数Bit2~0T0PSC2~T0PSC0:选择定时器预分频比定时器内部时钟fT0=000:fSYS001:fSYS/2010:fSYS/4011:fSYS/8100:fSYS/16101:fSYS/32110:fSYS/64111:fSYS/128TMR1C寄存器Bit76543210NameT1M1T1M0—T1ON—T1PSC2T1PSC1T1PSC0R/WR/WR/W—R/W—R/WR/WR/WPOR00—0—000Bit7~6T1M1~T1M0:选择Timer1工作模式00:模式0(PPG不可重复触发功能)01:无可用模式10:定时器模式11:无可用模式Bit5未定义,读为"0"Bit4T1ON:定时/计数器使能0:除能1:使能Bit3未定义,读为"0"Bit2~0T1PSC2~T1PSC0:选择定时器预分频比定时器内部时钟fT1=000:fSYS001:fSYS/2010:fSYS/4011:fSYS/8100:fSYS/16101:fSYS/32110:fSYS/64111:fSYS/128Rev.
1.
20472020-03-19TMR2C寄存器Bit76543210Name———T2ON—T2PSC2T2PSC1T2PSC0R/W———R/W—R/WR/WR/WPOR———0—000Bit7~5未定义,读为"0"Bit4T2ON:定时/计数器使能0:除能1:使能Bit3未定义,读为"0"Bit2~0T2PSC2~T2PSC0:选择定时器预分频比定时器内部时钟fT2=000:fSYS001:fSYS/2010:fSYS/4011:fSYS/8100:fSYS/16101:fSYS/32110:fSYS/64111:fSYS/128定时器模式在这个模式下,定时器可以用来测量固定时间间隔,当定时器发生溢出时,就会产生一个内部中断信号.
为使定时/计数器工作在定时器模式,位TnM1/TnM0必须分别设置为1和0.
在定时器模式中,fSYS被用来当定时器的输入时钟源.
然而,该定时器时钟源可以被预分频器进一步分频,分频比是由定时器控制寄存器的TnPSC2~TnPSC0位来确定.
定时器控制寄存器第4位,即TnON位需要设为逻辑高,才能令定时器工作.
每次内部时钟由高到低的电平转换都会使定时器值增加一.
当定时器计数已满即溢出时,会产生中断信号且定时器会重新载入预置寄存器的值,然后继续计数.
定时器溢出以及相应的内部中断产生也是唤醒暂停模式的一种方法.
通过设置INTC1和MFI寄存器中的位ETnI为0,可以禁止计数器中断.
IncrementTimerControllerPrescalerOutputTimer+1Timer+2Timer+NTimer+N+1定时器模式时序图外部事件计数器模式仅定时/计数器0具有外部事件计数模式,可以通过定时/计数器0来记录发生在TMR0引脚的外部逻辑事件变化的次数.
为使定时/计数器0工作在外部事件计数模式,工作模式选择位T0M1/T0M0必须分别设置为0和1.
在外部事件计数模式,外部定时脚TMR0或INT0信号被用来当定时/计数器0的时钟源且不被内部预分频器进一步分频.
在设置完定时/计数控制寄存器其它位,定时/计数器0控制寄存器第4位,即T0ON位需要设为逻辑高,才能使计数器工作.
当定时控制寄存器第3位,即T0EG设置为逻辑低时,每次外部计数引脚接收到由低到高电平的转换将使计数器加一.
而当T0EG为逻辑高Rev.
1.
20482020-03-19时,每次外部定时/计数器引脚接收到由高到低电平的转换将使计数器加一.
当计数器计数满,即溢出时会产生中断信号且计数器会重新加载预置寄存器的值,然后继续计数.
计数器溢出中断可通过设置相应的中断寄存器中的定时/计数器中断使能位为0而禁止.
由于外部时钟引脚和普通输入/输出引脚共用,为了确保工作在外部事件计数模式,要注意两点.
首先是要将定时/计数器0的工作模式设定在事件计数模式,其次是确定端口控制寄存器将这个引脚设定为输入状态.
值得注意的是,在外部事件计数模式下,当单片机工作在暂停模式时也保持对外部TMR0引脚或INT0信号的事件计数功能.
当计数器溢出时,将产生一个定时器中断,并且可以作为唤醒暂停模式的一种方法.
Timer+2ExternalEventIncrementTimerCounterTimer+3Timer+1事件计时器模式时序图(T0EG=1)脉冲宽度测量模式仅定时/计数器0具有脉冲宽度测量模式,可以测量外部定时器引脚上的外部脉冲宽度.
为使定时/计数器0工作在脉冲宽度测量模式,工作模式选择位T0M1/T0M0必须分别设置为高.
在脉冲宽度测量模式中,外部定时脚TMR0和INT0信号被用来当定时/计数器0的时钟源且不被内部预分频器进一步分频.
在设置完定时/计数控制寄存器其它位,定时器控制寄存器第4位,即T0ON位需要设为逻辑高,才能使定时/计数器工作.
然而,只有当在外部定时器引脚上接收到有效的逻辑转换时,定时/计数器才真正开始启动计数.
当定时控制寄存器第3位,即T0EG设置为逻辑低时,每次外部定时器引脚接收到由高到低电平的转换时将开始计数直到外部定时/计数器引脚回到它原来的高电平.
此时使能位将自动清除为0以停止计数.
而当T0EG为逻辑高时,每次外部定时器接收到由低到高电平的转换时将开始计数直到外部定时/计数器引脚回到它原来的低电平.
同样使能位将自动清除为0以停止计数.
注意,在脉冲宽度测量模式中,当外部定时器上的外部控制信号回到它原来的电平时,使能位将自动地清除为0.
而在其它两种模式,使能位只能在程序控制下清除为0.
可以通过程序读取定时/计数器当前值,获得TMR0外部引脚或INT0的信号脉冲宽度.
当使能位重新复位,任何出现在外部定时器引脚上信号脉冲将被忽略.
直到使能位被程序重新置高,开始重新测量外部脉冲.
这种方式使得测量窄脉冲将会很容易实现.
注意,在这种模式下,定时/计数器是通过外部引脚上的逻辑转换来控制,而不是通过逻辑电平.
当定时/计数器计满,即溢出时会产生中断信号且定时/计数器会重新加载预置寄存器的值,然后继续向上计数.
定时/计数器溢出中断可通过设置相应的中断寄存器中的定时/计数器使能位为0而禁止.
由于TMR0引脚和普通输入/输出引脚共用,为了确保工作在脉冲宽度测量模式,要注意两点.
首先是要将定时/计数器0的工作模式设定在脉冲宽度测量模式,其次是确定端口控制寄存器将这个引脚设定为输入状态.
Rev.
1.
20492020-03-19+1+2+3+4TimerExternalTMR0PinInputT0ON-withT0E=0PrescalerOutputIncrementTimerCounterPrescalerOutputissampledateveryfallingedgeofT1.
脉冲宽度测量的时序图(T0EG=0)模式0仅定时/计数器1具有模式0,可以实现PPG不可重复触发功能.
为使定时/计数器1工作在模式0,工作模式选择位T1M1/T1M0必须分别设置为低.
在模式0中,定时/计数器在PPG停止时开始计数,溢出时停止计数.
也就是说一旦PPG停止,T1ON将被置位,溢出将被清零.
同其它模式一样,当定时/计数器计满,即溢出时会产生中断信号且定时/计数器会重新加载预置寄存器的值,然后继续向上计数.
定时/计数器溢出中断可通过设置相应的中断寄存器中的定时/计数器使能位为0而禁止.
预分频器TMRnC寄存器的TnPSC2~TnPSC0位用来确定定时/计数器的内部时钟的分频比,从而能够设置更长的定时器溢出周期.
fSYS7-stageprescaler8-1MUXT0PSC2T0PSC1T0PSC08-1MUXT1PSC2T1PSC1T1PSC08-1MUXT2PSC2T2PSC1T2PSC0fT0fT1fT2预分频器输入/输出接口当定时/计数器运行在计数或者脉冲宽度测量模式下,定时/计数器需要使用外部定时器引脚以确保正确的动作.
由于该引脚是共用引脚,因此需要正确的将其配置为定时/计数器输入引脚.
这可以通过定时/计数器控制寄存器的模式选择位来选择是计数模式或者脉冲宽度测量模式.
此外,相应的端口控制寄存器位需要被设置为高,来确保该引脚是作为输入脚.
即使该引脚用作定时/计数器输入,任何连接到这个引脚的上拉电阻将仍然是有效的.
编程注意事项当定时/计数器工作在定时器模式时,内部的系统时钟作为定时器的时钟源,因此与单片机所有运算都能同步.
在这个模式下,当定时器寄存器溢出时,单片机将产生一个内部中断信号,使程序进入相应的内部中断向量.
对于脉冲宽度测量模式,定时器时钟源来自外部信号输入,然而,只有正确的逻辑条件出现在定时器输入引脚时,定时器才开始运行.
当这个外部事件没有和内部定时Rev.
1.
20502020-03-19器时钟同步时,只有当下一个定时器时钟到达时,单片机才会看到这个外部事件,因此在测量值上可能有小的差异,需要程序设计者在程序应用时加以注意.
同样的情况发生在定时器设置为外部事件计数模式时,它的时钟来源是外部事件,与内部系统时钟或者定时器时钟不同步.
当读取定时/计数器值或写数据到预置寄存器时,计数时钟会被禁止以避免发生错误,但这样做可能会导致计数错误,所以程序设计者应该考虑到这点.
在第一次使用定时/计数器之前,要仔细确认有没有正确地设定初始值.
中断控制寄存器中的定时器使能位需要正确的设置,否则相应定时/计数器内部中断仍然无效.
定时/计数器控制寄存器中的触发边沿选择、定时/计数器工作模式和时钟源控制位也需要正确的设定,以确保定时/计数器按照应用需求而正确的配置.
在定时/计数器打开之前,需要确保先载入定时/计数器寄存器的初始值,这是因为在上电后,定时/计数器寄存器中的初始值是未知的.
定时/计数器初始化后,可以使用定时/计数器控制寄存器中的使能位来打开或关闭定时器.
当定时/计数器产生溢出,中断控制寄存器中相应的中断请求标志将置位.
若中断允许,将会依次产生一个中断信号.
不管中断是否允许,在省电状态下,定时/计数器的溢出也会产生唤醒.
这种情况可能发生在外部信号变化的计数模式中.
定时/计数器向上计数直至溢出并唤醒系统.
若在省电模式下,不需要定时器中断唤醒系统,可以在执行"HALT"指令之前将相应中断请求标志位置位.
定时/计数器应用范例这个例子说明了如何设置定时/计数器的寄存器,如何设置和控制中断.
另外还需注意的是,怎样通过寄存器的第4位来启动/停止定时/计数器.
此应用范例设置定时/计数器为定时模式,时钟来源于内部的系统时钟.
org0ch;externalinterruptvectororg14h;TimerCounter0interruptvectorjmptmr0int;jumpherewhenTimer0overflows:org20h;mainprogram:;internalTimer0interruptroutinetmr0int::;Timer0mainprogramplacedherebegin:;setupTimer0registersmova,09bh;setupTimer0preloadvaluemovtmr0,amova,081h;setupTimer0controlregistermovtmr0c,a;timermodeandprescalersetto/2;setupinterruptregistermova,001h;enablemasterinterruptandbothtimerinterruptsmovintc0,amova,020hmovintc1,a:settmr0c.
4;startTimer0:Rev.
1.
20512020-03-19脉冲宽度调制该单片机提供一个8位的脉冲宽度调制(PWM)输出.
这在马达速率控制应用方面十分有用,通过给相应的PWM寄存器设定一定数值,PWM功能可提供占空比可调但频率固定的PWM信号输出.
PWM工作模式在数据存储器中,单片机为PWM输出设置了对应的寄存器,称为PWM寄存器.
此寄存器为8位,表示输出波形中每个调制周期的占空比.
为了提高PWM调制频率,每个调制周期被调制四个独立的调制子区段,即6+2模式.
可以通过配置选项选择PWM开/关.
注意,当使用PWM时,只要将所需的值写入相应的PWM寄存器并通过配置选项设置PWM开/关,单片机内部电路即自动完成PWM各自调制周期的划分输出PWM信号.
PWM的时钟源为系统时钟的分频,可通过PWMC寄存器的PWMPSC2~PWMPSC0选择.
将原始调制周期分成4个子周期的方法,使产生更高的PWM频率成为可能,这样可以提供更广泛的应用.
使用者需要理解PWM频率与PWM调制频率的不同之处.
当PWM值为8位时,整个PWM周期的频率为fPWM/256.
在6+2模式,PWM调制频率将会是fPWM/64.
PWM调制频率PWM频率PWM占空比fPWM/64(6+2模式)fPWM/256[PWM]/2566+2PWM模式通过一个8位的PWM寄存器控制,每个完整的PWM周期由256个时钟周期组成.
在6+2PWM模式中,每个PWM周期又被分成四个独立的子周期,称为调制周期0~调制周期3,在表格中以"i"表示.
四个子周期各包含64个时钟周期.
在这个模式下,得到以4为因数增加的调制频率.
8位的PWM寄存器被分成两个部分,这个寄存器的值表明整个PWM波形的占空比.
第一部分包括第2位~第7位,表示DC值,第二部分为第0位~第1位,表示AC值.
在6+2PWM模式中,四个调制子周期的占空比,分别如下表所示.
参数AC(0~3)DC(占空比)调制周期i(i=0~3)i请特别注意单个的PWM周期是如何被划分为四个单独的调制周期0~3以及AC值与PWM值的关系.
Rev.
1.
20522020-03-19fSYS/2PWM[PWM]=100[PWM]=101PWM[PWM]=102PWM[PWM]=103PWMPWMcycle:256/fPWM25/6426/6426/6426/6425/6425/6425/6425/6425/6425/6425/6426/6426/6425/6425/6426/6425/6426/6426/6426/64Modulationcycle0PWMmodulationperiod:64/fSYSModulationcycle1Modulationcycle2Modulationcycle3Modulationcycle06+2PWM模式PWMRegister(6+2)Modeb7b0ACvalueDCvalue6+2模式时的PWM寄存器PWM输出控制此单片机的PWM输出引脚与I/O脚PB4共用.
要使某个引脚作为PWM输出而非普通的I/O引脚,除了需要正确的设置配置选项外,在I/O端口控制寄存器相应的位PBC4也需写0,以确保所需要的PWM输出引脚设置为输出状态.
在完成这两个初始化步骤,以及将所要求的PWM值写入PWM寄存器之后,将"1"写入到PB4输出数据寄存器的相应位,使PWM数据能够出现在引脚上.
将"0"写入到PB4输出数据寄存器的相应位,则会使PWM输出功能失效并强制输出低电平.
通过这种方式,端口数据寄存器即作为PWM功能的开关控制位.
需注意的是,如果配置选项选择PWM功能,但是对PBC控制寄存器的相应位写入1设置此引脚为输入,则该引脚仍可作为带上拉电阻的普通输入端口使用.
PWMC寄存器Bit76543210NamePWMPSC2PWMPSC1PWMPSC0R/WR/WR/WR/WPOR000Bit7~3未定义,读为"0"Bit2~0PWMPSC2~PWMPSC0:选择PWM时钟源的预分频比000:fSYS001:fSYS/2010:fSYS/4011:fSYS/8100:fSYS/16101:fSYS/32110:fSYS/64111:fSYS/128Rev.
1.
20532020-03-19A/D转换器对于大多数电子系统而言,处理现实世界的模拟信号是共同的需求.
为了完全由单片机来处理这些信号,首先需要通过A/D转换器将模拟信号转换成数字信号.
将A/D转换器电路集成入单片机,可有效的减少外部器件,随之而来,具有降低成本和减少器件空间需求的优势.
A/D简介此单片机包含一个12通道的A/D转换器,它们可以直接接入外部模拟信号(来自传感器或其它控制信号)并直接将这些信号转换成12位的数字量.
下图显示了A/D转换器内部结构和相关的寄存器.
ACS3~ACS0A/DConverterSTARTA/DClock÷2NfSYSADCS1~ADCS0ADRLADRHAN0AN1A/DDataRegistersAN11PCR11~PCR0EOCBA/D转换器结构A/D转换器数据寄存器–ADRL,ADRH对于具有12位A/D转换器的芯片,需要两个数据寄存器存放转换结果,一个高字节寄存器ADRH和一个低字节寄存器ADRL.
在A/D转换完毕后,单片机可以直接读取这些寄存器以获得转换结果.
寄存器只使用了16位中的12位,即高字节寄存器的8位,和低字节寄存器的4位.
如下表所示,D0~D11是A/D换转数据结果位.
ADRH,ADRL寄存器BitADRHADRL7654321076543210NameD11D10D9D8D7D6D5D4D3D2D1D0————R/WRRRRRRRRRRRR————PORxxxxxxxxxxxx————"x":未知"—"未定义,读为"0"D11~D0:A/D转换数据Rev.
1.
20542020-03-19A/D转换控制寄存器–ADCR,ACSR,PCRL,PCRH寄存器ADCR、ACSR、PCRL和PCRH用来控制A/D转换器的功能和操作.
这些8位的寄存器定义包括选择连接至内部A/D转换器的模拟通道,哪些引脚作为模拟输入,哪些作为I/O口,A/D时钟源,并控制和监视A/D转换器的开始和转换结束状态.
寄存器ADCR的ACS3~ACS0位定义ADC输入通道编号.
由于单片机只包含一个实际的模数转换电路,因此这12个模拟输入中的每一个都需要分别被发送到转换器.
ADCR寄存器中ACS3~ACS0位的功能正是决定哪个模拟输入通道真正连接到内部A/D转换器.
PCRH和PCRL控制寄存器中的PCR11~PCR0位,用来定义PA~PC口中的哪些引脚为A/D转换器的模拟输入,哪些引脚只作为I/O口使用.
ADCR寄存器Bit76543210NameSTARTEOCB——ACS3ACS2ACS1ACS0R/WR/WR——R/WR/WR/WR/WPOR01——0000Bit7START:启动A/D转换位0→1→0:启动0→1:重置A/D转换,并且设置EOCB为"1"Bit6EOCB:A/D转换结束标志0:A/D转换结束1:A/D转换中此位用于表明A/D转换过程的完成.
当转换正在进行时,此位为高.
Bit5~4未定义,读为"0"Bit3~0ACS3~ACS0:选择A/D通道位0000:AN00001:AN10010:AN20011:AN30100:AN40101:AN50110:AN60111:AN71000:AN81001:AN91010:AN101011:AN111100~1111:未定义,不能使用ACSR寄存器Bit76543210NameADCS1ADCS0R/WR/WR/WPOR00Bit7~2未定义,读为"0"Bit1~0ADCS1~ADCS0:选择ADC时钟源00:fSYS/201:fSYS/810:fSYS/3211:未定义,不能使用Rev.
1.
20552020-03-19PCRL寄存器Bit76543210NamePCR7PCR6PCR5PCR4PCR3PCR2PCR1PCR0R/WR/WR/WR/WR/WR/WR/WR/WR/WPOR00000000Bit7PCR7:定义PA5是否为A/D输入0:不是A/D输入1:A/D输入,AN7Bit6PCR6:定义PA6是否为A/D输入0:不是A/D输入1:A/D输入,AN6Bit5PCR5:定义PA7是否为A/D输入0:不是A/D输入1:A/D输入,AN5Bit4PCR4:定义PA4是否为A/D输入0:不是A/D输入1:A/D输入,AN4Bit3PCR3:定义PB4是否为A/D输入0:不是A/D输入1:A/D输入,AN3Bit2PCR2:定义PB3是否为A/D输入0:不是A/D输入1:A/D输入,AN2Bit1PCR1:定义PB2是否为A/D输入0:不是A/D输入1:A/D输入,AN1Bit0PCR0:定义PB1是否为A/D输入0:不是A/D输入1:A/D输入,AN0PCRH寄存器Bit76543210Name————PCR11PCR10PCR9PCR8R/W————R/WR/WR/WR/WPOR————0000Bit7~4未定义,读为"0"Bit3PCR11:定义PC3是否为A/D输入0:不是A/D输入1:A/D输入,AN11Bit2PCR10:定义PC0是否为A/D输入0:不是A/D输入1:A/D输入,AN10Bit1PCR9:内部A/D输入通道使能控制位0:内部A/D输入AN9除能1:内部A/D输入AN9使能Bit0PCR8:定义PA1是否为A/D输入0:不是A/D输入1:A/D输入,AN8Rev.
1.
20562020-03-19A/D操作ADCR寄存器中的START位,用于打开和复位A/D转换器.
当单片机设定此位从逻辑低到逻辑高,然后再到逻辑低,就会开始一个模数转换周期.
当START位从逻辑低到逻辑高,但不再回到逻辑低时,ADCR寄存器中的EOCB位置"1",复位模数转换器.
START位用于控制内部模数换转器的开启动作.
ADCR寄存器中的EOCB位用于表明模数转换过程的完成.
在转换周期结束后,EOCB位会被单片机自动地置为"0".
此外,也会置位中断控制寄存器内相应的A/D中断请求标志位,如果中断使能,就会产生对应的内部中断信号.
A/D内部中断信号将引导程序到相应的A/D内部中断入口.
如果A/D内部中断被禁止,可以让单片机轮询ADCR寄存器中的EOCB位,检查此位是否被清除,以作为另一种侦测A/D转换周期结束的方法.
A/D转换器的时钟源为系统时钟fSYS分频,而分频系数由ACSR寄存器中的ADCS1~ADCS0位决定.
虽然A/D时钟源是由系统时钟fSYS,ADCS1~ADCS0位决定,但可选择的最大A/D时钟源则有一些限制.
允许的A/D时钟周期tAD的最小值为0.
5s,当系统时钟速度等于或超过4MHz时就必须小心.
如果系统时钟速度为4MHz时,ADCS1和ADCS0位不能设为"00".
必须保证设定的A/D转换时钟周期不小于时钟周期的最小值,否则将会产生不准确的A/D转换值.
使用者可以参考下面的表格,被标上星号*的数值是不允许的,因为它们的A/D转换时钟周期小于规定的最小值.
fSYSA/D时钟周期(tAD)ADCS1,ADCS0=00(fSYS/2)ADCS1,ADCS0=01(fSYS/8)ADCS1,ADCS0=10(fSYS/32)ADCS1,ADCS0=111MHz2μs8μs32μs未定义2MHz1μs4μs16μs未定义4MHz500ns2μs8μs未定义8MHz250ns*1μs4μs未定义A/D时钟周期范例A/D输入引脚所有的A/D模拟输入引脚都与I/O引脚及其它功能共用.
使用PCRH和PCRL寄存器中的PCR11~PCR0位,可以将它们设置为A/D转换器模拟输入脚或通用输入输出引脚.
通过这种方式,引脚的功能可由程序来控制,灵活地切换引脚功能.
如果将引脚设为A/D输入,则通过配置选项设置的所有上拉电阻会自动断开.
请注意,PA~PC端口控制寄存器不需要为使能A/D输入而先设定为输入模式,当PCR11~PCR0位使能A/D输入时,端口控制寄存器的状态将被重置.
Rev.
1.
20572020-03-19A/D转换步骤下面概述实现A/D转换过程的各个步骤.
步骤1通过ACSR寄存器中的ADCS1~ADCS0位,选择所需的A/D转换时钟.
步骤2通过PCRH和PCRL寄存器中的PCR11~PCR0位,选择哪些引脚规划为A/D输入引脚.
步骤3通过ADCR寄存器中的ACS3~ACS0位,选择连接至内部A/D转换器的通道.
步骤4如果要使用中断,则中断控制寄存器需要正确地设置,以确保A/D转换功能是激活的.
中断控制寄存器INTC0中的总中断使能位EMI需要置位为"1",以及A/D转换器中断位ADE也需要置位为"1".
步骤5现在可以通过设定ADCR寄存器中的START位从"0"到"1"再回到"0",开始模数转换的过程.
注意,该位需初始化为"0".
步骤6可以轮询ADCR寄存器中的EOCB位,检查模数转换过程是否完成.
当此位成为逻辑低时,表示转换过程已经完成.
转换完成后,可读取A/D数据寄存器ADRL和ADRH获得转换后的值.
另一种方法是,若中断使能且堆栈未满,则程序等待A/D中断发生.
注:若使用轮询ADCR寄存器中EOCB位的状态的方法来检查转换过程是否结束时,则中断使能的步骤可以省略.
下列时序图表示模数转换过程中不同阶段的图形与时序.
由应用程序控制开始A/D转换过程后,单片机的内部硬件就会开始进行转换,在这个过程中,程序可以继续其它功能.
A/D转换时间为16tAD,tAD为A/D时钟周期.
tADCA/DconversiontimetADCA/DconversiontimetADCA/Dconversiontime000000000000B0000B000000001111B0010BSTARTEOCBPCR11~PCR0ACS3~ACS0Power-onResetEndofA/Dconversion1:DefineIOconfiguration2:SelectanalogchannelA/DclockmustbefSYS/2,fSYS/8orfSYS/32tADCS=4tADtADC=16tADNote:StartofA/DconversionResetA/DconverterA/DsamplingtimetADCS000000001111B0000BStartofA/DconversionResetA/Dconverter000000000000B1.
PA1,5~7,PB1~5,PC0,3setupasI/Osorpin-sharedfunction2.
A/Dconverterispoweredofftoreducepowerconsumption000000000111B0001BStartofA/DconversionResetA/Dconverterdon'tcareEndofA/DconversionEndofA/DconversionMinimumoneinstructioncycleneeded,MaximumteninstructioncyclesallowedA/DsamplingtimetADCSA/DsamplingtimetADCSA/D转换时序图Rev.
1.
20582020-03-19编程注意事项在编程时,需要特别注意PCRH和PCRL寄存器中的PCR11~PCR0位.
如果这些全部为"0",则没有外部引脚连接到A/D转换器上,此时的外部引脚可作为普通的I/O脚使用.
如果A/D转换器未使用,关闭A/D内部电路以减少电源功耗,这一点对功耗敏感的应用非常重要.
A/D转换功能单片机含有一组12位的A/D转换器,它们转换的最大值可达FFFH.
由于模拟输入最大值等于VDD的电压值,因此每一位可表示VDD/4096的模拟输入值.
1LSB=VDD÷4096通过下面的等式可估算A/D转换器输入电压值:A/D输入电压=A/D数字输出值*VDD÷4096下图显示A/D转换器模拟输入值和数字输出值之间理想的转换功能.
除了数字化数值0,其后的数字化数值会在精确点之前的0.
5LSB处改变,而数字化数值的最大值将在VDD之前的1.
5LSB处改变.
FFEH()A/DConversionResultFFFHFFDH03H02H01H0.
5LSB01234093409440954096AnalogInputVoltage1.
5LSBVDD4096理想的A/D转换功能Rev.
1.
20592020-03-19A/D转换应用范例下面两个范例程序用来说明怎样使用A/D转换.
第一个范例是轮询ADCR寄存器中的EOCB位来判断A/D转换是否完成;第二个范例则使用中断的方式判断.
范例:使用查询EOCB的方式来检测转换结束clrADE;disableADCinterruptmova,01HmovACSR,a;selectfSYS/8asA/DclockmovPCRL,a;setupPCRLregistertoconfigurePB1asA/D;inputsmova,00hmovADCR,a;andselectAN0tobeconnectedtotheA/D;converter::start_conversion:clrSTART;highpulseonstartbittoinitiateconversionsetSTART;resetA/DclrSTART;startA/Dpolling_EOC:szEOCB;polltheADCRregisterEOCBbittodetectend;ofA/Dconversionjmppolling_EOC;continuepollingmova,ADRL;readlowbyteconversionresultvaluemovADRL_buffer,a;saveresulttouserdefinedregistermova,ADRH;readhighbyteconversionresultvaluemovADRH_buffer,a;saveresulttouserdefinedregister::jmpstart_conversion;startnextA/DconversionRev.
1.
20602020-03-19范例:使用中断的方式来检测转换结束clrADE;disableADCinterruptmova,01HmovACSR,a;selectfSYS/8asA/DclockmovPCRL,a;setupPCRLregistertoconfigurePB1asA/D;inputsmova,00hmovADCR,a;andselectAN0tobeconnectedtotheA/D;converter::Start_conversion:clrSTART;highpulseonstartbittoinitiateconversionsetSTART;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.
20612020-03-19I2C串行接口I2C可以和传感器,EEPROM内存等外部硬件接口进行通信.
最初是由飞利浦公司研制,是适用于同步串行数据传输的双线式低速串行接口.
I2C接口具有两线通信,非常简单的通信协议和在同一总线上和多个设备进行通信的能力的优点,使之在很多的应用场合中大受欢迎.
DeviceSlaveDeviceMasterDeviceSlaveVDDSDASCLI2C主从总线连接图I2C接口操作I2C串行接口是一个双线的接口,有一条串行数据线SDA和一条串行时钟线SCL.
由于可能有多个设备在同一条总线上相互连接,所以这些设备的输出都是开漏型输出.
因此应在这些输出口上都应加上拉电阻.
应注意的是:I2C总线上的每个设备都没有选择线,但分别与唯一的地址一一对应,用于I2C通信.
如果有两个设备通过双向的I2C总线进行通信,那么就存在一个主机和一个从机.
主机和从机都可以用于传输和接收数据,但只有主机才可以控制总线动作.
那些处于从机模式的设备,要在I2C总线上传输数据只有两种方式,一是从机发送模式,二是从机接收模式.
在I2C通信进行时建议不要进入暂停模式.
若与SDA和SCL共用的I/O口选择为I2C功能引脚,则该引脚为开集输入/输出口,其上拉电阻功能由相关上拉电路控制寄存器控制.
STARTsignalfromMasterSendslaveaddressandR/WbitfromMasterAcknowledgefromslaveSenddatabytefromMasterAcknowledgefromslaveSTOPsignalfromMasterRev.
1.
20622020-03-19I2C寄存器I2C总线的四个控制寄存器是IICC0、IICC1、IICTOC和IICA及一个数据寄存器IICD.
IICD寄存器,用于存储正在传输和接收的数据,当单片机将数据写入I2C总线之前,实际将被传输的数据存放在寄存器IICD中.
从I2C总线接收到数据之后,单片机就可以从寄存器IICD中得到这个数据.
I2C总线上的所有传输或接收到的数据都必须通过IICD.
IICA寄存器用于保存从机接口的地址.
当外部设备试图通过I2C总线访问它时需要使用该地址.
IICC0寄存器用来控制I2C接口操作.
IICC1寄存器用来反映I2C总线的状态.
IICTOC寄存器用于控制I2C接口的超时功能.
寄存器名称位76543210IICC0————IICDEB1IICDEB0IICEN—IICC1HCFHAASHBBHTXTXAKSRWIAMWURXAKIICDD7D6D5D4D3D2D1D0IICAA6A5A4A3A2A1A0—IICTOCIICTOENIICTOFIICTOS5IICTOS4IICTOS3IICTOS2IICTOS1IICTOS0I2C寄存器列表IICC0寄存器Bit76543210Name————IICDEB1IICDEB0IICEN—R/W————R/WR/WR/W—POR————000—Bit7~4未使用,读为"0"Bit3~2IICDEB1~IICDEB:I2C去抖时间选择位00:未定义,不能使用01:2个系统时钟去抖时间1x:4个系统时钟去抖时间若系统时钟来自fH且已就绪,或IAMWU=0,则去抖电路有效.
否则,SCL和SDA将绕过去抖电路.
Bit1IICEN:I2C控制位0:除能1:使能Bit0未使用,读为"0"I2C的使能/除能是通过IICEN位控制的.
若与SDA和SCL引脚共用的I/O口通过配置选项选择作为非I2C功能引脚且IICEN位为低,则I2C除能,其工作电流减小至最小值.
相反地,若选择I2C功能引脚且IICEN位为高,则I2C使能.
Rev.
1.
20632020-03-19IICC1寄存器Bit76543210NameHCFHAASHBBHTXTXAKSRWIAMWURXAKR/WRRRR/WR/WRR/WRPOR10000001Bit7HCF:I2C总线数据传输结束标志位0:数据正在被传输1:8位数据传输完成数据正在传输时该位为低.
当8位数据传输完成时,此位为高并产生一个中断.
Bit6HAAS:I2C地址匹配标志位0:地址不匹配1:地址匹配此标志位用于决定从机地址是否与主机发送地址相同.
若地址匹配此位为高,否则此位为低.
Bit5HBB:I2C总线忙标志位0:I2C总线闲1:I2C总线忙当检测到START信号时I2C忙,此位变为高电平.
当检测到STOP信号时I2C总线停止,该位变为低电平.
Bit4HTX:从机处于发送或接收模式标志位0:从机处于接收模式1:从机处于发送模式Bit3TXAK:I2C总线发送确认标志位0:从机发送确认标志1:从机没有发送确认标志单片机接收8位数据之后会将该位在第九个时钟传到总线上.
如果单片机想要接收更多的数据,则应在接收数据之前将此位设置为"0".
Bit2SRW:I2C从机读/写位0:从机应处于接收模式1:从机应处于发送模式SRW位是从机读写位.
决定主机是否希望传输或接收来自I2C总线的数据.
当传输地址和从机的地址相同时,HAAS位会被设置为高,主机将检测SRW位来决定进入发送模式还是接收模式.
如果SRW位为高时,主机会请求从总线上读数据,此时设备处于传输模式.
当SRW位为"0"时,主机往总线上写数据,设备处于接收模式以读取该数据.
Bit1IAMWU:I2C地址匹配控制位0:除能1:使能若系统时钟来自fH且已就绪,只要中断使能,I2C地址匹配将产生中断,该位无效.
否则,若设置IAMWU=1,当地址匹配时可产生中断;而当IAMWU=0时,即使中断使能,地址匹配时也可能不会产生中断.
Bit0RXAK:I2C总线接收确认标志位0:从机接收到确认标志1:从机没有接收到确认标志RXAK位是接收确认标志位.
如果RXAK位被重设为"0"即8位数据传输之后,设备在第九个时钟有接受到一个正确的确认位.
如果单片机处于发送状态,发送方会检查RXAK位来判断接收方是否愿意继续接收下一个字节.
因此直到RXAK为"1"时,传输方停止发送数据.
这时,传输方将释放SDA线,主机发出停止信号.
Rev.
1.
20642020-03-19IICD用于存储发送和接收的数据.
在单片机尚未将数据写入到I2C总线中时,要传输的数据应存在IICD中.
I2C总线接收到数据之后,单片机就可以从IICD数据寄存器中读取.
所有通过I2C传输或接收的数据都必须通过IICD实现.
IICD寄存器Bit76543210NameD7D6D5D4D3D2D1D0R/WR/WR/WR/WR/WR/WR/WR/WR/WPORxxxxxxxx"x":未知IICA寄存器Bit76543210NameA6A5A4A3A2A1A0—R/WR/WR/WR/WR/WR/WR/WR/W—POR0000000—Bit7~1A6~A0:I2C从机地址位A6~A0是从机地址对应的6~0位.
IICA寄存器用于存放7位从机地址,寄存器IICA中的第7~1位是单片机的从机地址,位0未定义.
如果接至I2C的主机发送处的地址和寄存器IICA中存储的地址相符,那么就选中了这个从机.
Bit0无定义此位可通过软件程序进行读写.
ShiftRegisterTransmit/ReceiveControlUnitfSYSDataBusSlaveAddressRegister(IICA)I2CDataRegister(IICD)AddressComparatorRead/WriteSlaveSRWBitDetectStartorStopHBBBitAddressMatchHAASBitI2CInterruptDebounceCircuitrySCLPinMUXTXAKDataoutMSBIICDEB[1:0]SDAPinDatainMSBDirectionControlHXTBit8-bitDataTransferConplete–HCFBitTime-outControlIICTOFIICTOENfLIRCAddressMatchIICTOFbitI2C方框图Rev.
1.
20652020-03-19I2C总线通信I2C总线上的通信需要四步完成,一个起始信号,一个从机地址发送,一个数据传输,还有一个停止信号.
当起始信号被写入I2C总线时,总线上的所有从机都会接收到这个起始信号并且被通知总线上会即将有数据到达.
数据的前7位是从机地址,高位在前,低位在后.
如果发出的地址和从机地址匹配,IICC1寄存器的HAAS位会被置位,同时产生I2C中断.
进入中断服务程序后,系统要检测HAAS位和IICTOF位,以判断I2C总线中断是来自从机地址匹配,或来自I2C超时,还是来自8位数据传递完毕.
在数据传递中,注意的是,在7位从机地址被发送后,接下来的一位,即第8位,是读/写控制位,该位的值会反映到SRW位中.
从机通过检测SRW位以确定主控制器是要进入发送模式还是接收模式.
在I2C总线开始传送数据前,需要先初始化I2C总线,初始化I2C总线步骤如下:步骤1通过配置选项选择I2C功能引脚和设置IICEN位为"1",以使能I2C总线步骤2向I2C总线地址寄存器IICA写入从机地址.
步骤3设置IICE中断使能位,以使能I2C中断.
StartSETIICENWriteSlaveAddresstoIICAI2CBusInterrupt=YesNoSETIICEWaitforInterruptGotoMainProgramCLRIICEPollIICFtodecidewhentogotoI2CBusISRGotoMainProgramI2C总线初始化流程图I2C总线起始信号起始信号只能由连接I2C总线主机产生,而不是由只做从机的MCU产生.
总线上的所有从机都可以侦测到起始信号.
如果有从机侦测到起始信号,则表明I2C总线处于忙碌状态,并会置位HBB.
起始信号是指在SCL为高电平时,SDA线上发生从高到低的电平变化.
Rev.
1.
20662020-03-19从机地址总线上的所有从机都会侦测由主机发出的起始信号.
发送起始信号后,紧接着主机会发送从机地址以选择要进行数据传输的从机.
所有在I2C总线上的从机接收到7位地址数据后,都会将其与各自内部的地址进行比较.
如果从机从主机上接收到的地址与自身内部的地址相匹配,则会产生一个I2C总线中断信号.
地址位接下来的一位为读/写状态位(即第8位),将被保存到IICC1寄存器的SRW位,随后发出一个低电平应答信号(即第9位).
当单片机从机的地址匹配时,会将状态标志位HAAS置位.
I2C总线有三个中断源,当程序运行至中断服务子程序时,通过检测HAAS位和IICTOF位以确定I2C总线中断是来自从机地址匹配,或来自I2C超时,还是来自8位数据传递完毕.
当是从机地址匹配发生中断时,则从机或是用于发送模式并将数据写进IICD寄存器,或是用于接收模式并从IICD寄存器中读取空值以释放SCL线.
I2C总线读/写信号IICC1寄存器的SRW位用来表示主机是要从I2C总线上读取数据还是要将数据写到I2C总线上.
从机则通过检测该位以确定自己是作为发送方还是接收方.
当SRW置"1",表示主机要从I2C总线上读取数据,从机则作为发送方,将数据写到I2C总线;当SRW清"0",表示主机要写数据到I2C总线上,从机则做为接收方,从I2C总线上读取数据.
I2C总线从机地址确认信号主机发送呼叫地址后,当I2C总线上的任何从机内部地址与其匹配时,会发送一个应答信号.
此应答信号会通知主机有从机已经接收到了呼叫地址.
如果主机没有收到应答信号,则主机必须发送停止(STOP)信号以结束通信.
当HAAS为高时,表示从机接收到的地址与自己内部地址匹配,则从机需检查SRW位,以确定自己是作为发送方还是作为接收方.
如果SRW位为高,从机须设置成发送方,这样会置位IICC1寄存器的HTX位.
如果SRW位为低,从机须设置成接收方,这样会清零IICC1寄存器的HTX位.
I2C总线数据和确认信号在从机确认接收到从地址后,会进行8位宽度的数据传输.
这个数据传输顺序是的高位在前,低位在后.
接收方在接收到8位数据后必须发出一个应答信号("0")以继续接收下一个数据.
如果发送方没接收到应答信号,发送方将释放SDA线,同时,主机将发出STOP信号以释放I2C总线.
所传送的数据存储在IICD寄存器中.
如果设置成发送方,从机必须先将欲传输的数据写到IICD寄存器中;如果设置成接收方,从机必须从IICD寄存器读取数据.
当接收器想要继续接收下一个数据时,必须在第9个时钟发出应答信号(TXAK).
被设为发送方的从机将检测寄存器IICC1中的RXAK位以判断是否传输下一个字节的数据,如果单片机不传输下一个字节,那么它将释放SDA线并等待接收主机的停止信号.
Rev.
1.
20672020-03-19Data10100100100101011S=Start(1bit)SA=SlaveAddress(7bits)SR=SRWbit(1bit)M=Slavedevicesendacknowledgebit(1bit)D=Data(8bits)A=ACK(RXAKbitfortransmitter,TXAKbitforreceiver1bit)P=Stop(1bit)SCLStartSDASRWACKACKStopSCLSDASlaveAddressSSASRMDADASSASRMDADAP注:*当从机地址匹配时,单片机必须选择设置为发送模式还是接收模式.
若设置为发送模式,需写数据至IICD寄存器;若设置为接收模式,需立即从IICD寄存器中虚读数据以释放SCL线.
I2C通信时序图HAAS=1HTX=1SRW=1YesNoYesNoRXAK=1YesNoNoReadfromIICDtoreleaseSCLlineRETIYesDummyreadfromIICDtoreleaseSCLLineRETIRETIWritedatatoIICDreleaseSCLLineSETHTXWritedatatoIICDtoreleaseSCLLineRETICLRHTXCLRTXAKDummyreadfromIICDtoreleaseSCLLineCLRHTXCLRTXAKRETIStartIICTOF=1YesNoSETIICTOENCLRIICTOFRETII2C总线ISR流程图Rev.
1.
20682020-03-19I2C超时控制超时功能可减少I2C接收错误的时钟源而引起的锁死问题.
如果连接到I2C总线的时钟源经过一会儿时间还未接收到,则在一定的超时周期后,I2C电路和寄存器将复位.
超时计数器在I2C总线"起始"和"地址匹配"条件下开始计数,且在SCL下降沿清零.
在下一个SCL下降沿到来之前,如果时间大于IICTOC寄存器指定的超时周期,则超时发生.
当I2C"停止"条件发生时超时功能终止.
ICtime-outcounterstartICtime-outcounterresetonSCLnegativetransition10100100100101011SCLStartSDASRWACKStopSCLSDASlaveAddress22I2C超时时序图当I2C超时计数器溢出时,计数器停止且IICTOEN位清零且IICTOF位置为"1",标志着超时发生.
超时计数器中断使用的也是I2C中断向量.
当I2C超时发生时,I2C内部电路和寄存器都会复位,如下表所示:寄存器I2C超时发生后IICD,IICA,IICC0无变化IICC1复位到POR条件IICTOF标志位由应用程序清零.
共有64个超时周期,可通过IICTOC寄存器的IICTOSn位进行选择.
超时周期可通过公式计算:((1~64)*(32/fLIRC)).
由此可得超时周期范围为1ms~64ms.
IICTOC寄存器Bit76543210NameIICTOENIICTOFIICTOS5IICTOS4IICTOS3IICTOS2IICTOS1IICTOS0R/WR/WR/WR/WR/WR/WR/WR/WR/WPOR00000000Bit7IICTOEN:I2C超时控制位0:除能1:使能Bit6IICTOF:I2C超时标志位0:未超时1:超时当发生I2C超时时,该位置1,该位由程序清零.
Bit5~0IICTOS5~IICTOS0:I2C超时时间选择位I2C的超时时钟源为fLIRC/32.
I2C超时时间=([IICTOS5:IICTOS0]+1)*(32/fLIRC)Rev.
1.
20692020-03-19可编程脉冲发生器该单片机提供一组9位的PPG输出通道.
PPG的可编程周期为512*T,对于一个输出脉宽,T为1/fSYS.
使用脉宽限制计数器可以限制PPG的脉宽.
当PPG检测到有一个触发信号输入,就会输出一个脉冲.
触发源可以通过软件选择来自INT00的下降沿或软件触发位.
PPG输出的有效脉冲是低电平或是高电平可以通过配置选项来设置.
当0.
6V2V时,PPG输出为浮空状态,会产生复位,PPG会失效,此时需要外接一个上拉或下拉电阻(取决于极性配置选项).
CP1NINTPreloadRegisterBPPGTimer(9bit)ReloadPPGOutputLogicPPGTimerOn/OffconfigurationDatabusOverflowPPGModeControlMUXtriggeredgecontrolrisingorfallgingselectionfPPGfSYSPPGstartstartSYNCoptionPPGactive(Syncmode)PPGstartPPGstopPSTCP0PCP0NPWLC1VOC0VOde-bouncePreloadRegisterARLBF=0,reloadfromARLBF=1,reloadfromB(RLBFissetbyC1VOfallingedgeifC1CTL=0,clearedbysoftware)reloadcontrolINT00PPGOUTPPG_startPPGOUToneshotSET_T1ONINHC1INTC2INTPWLDBC5~0INTSPSPENRLBFcontrolMUXCLR_PRSENoneshotNote:PRSENwillbeclearedbythefallingedgeofC2VOBorC3VOBPRSENCLR_PRSENPRSENcontrolCP2NC2VOCP1PCP2PoneshotC1RLENPulseWidthLimitTimer(PWLT)fSYS/2RSQPulseWidthLimitTimerPreloadRegisterOverflowReloadPWLReloadPWLINTINVMUXtrigerdelayfSYSfSYSINT0VR1+-+-+-CMP0CMP1CMP2VR2VR3AN9PPG1.
Floatingforreset,inactive,andacondition0.
6V2V2.
Hi/LobyconfigurationoptionforactiveC2VOINVMUXIOFFOutputLogicIOFF1.
Floatingforreset2.
Hi/LowhenPPGinactive/activeC1CTLC2VOBPPGDL5~0trigermodeTRGMODINT0SC3VOPC0/AN10/CP3N+-CMP3VR4C3VOINVMUXPC1/PCK/CP3NCP3NC3VOBDebounce0.
5usDebounce0.
5usDebounce0.
5usCMP3DebounceEnable(Configuration)CMP2DebounceON(Configuration)CMP1DebounceON(Configuration)CMP0/1/2EnableConfigurationOPAOPPG方框图PPG模块由一个PPG计数器、一个PPG模式控制器和四个比较器组成.
而PPG计数器由一个9位向上计数器和两个9位预载数据寄存器组成.
可编程脉冲发生器PPG从预载寄存器的当前值开始计数,直到内部数据由"1FFH→000H"时停止计数.
写入"000H"到PPGTA和PPGTB寄存器会产生一个512*T的脉宽输出.
一旦计数器溢出,预载寄存器里的值会自动装载到计数器中,同时产生一个信号去停止PPG计数器.
PPG计数器溢出的同时软件触发位PST也会被清零.
Rev.
1.
20702020-03-19不可重复触发功能PPG模块具有不可重复触发功能,可以禁止PPG被再次触发.
只要满足下列条件之一,PPG将不会被重复触发.
1.
PPG有效.
2.
处于不可重复触发期间,计数器在PPG停止时开始计数.
(仅当定时/计数器1工作于模式0有效,不可重复触发周期取决于定时/计数器1)Note:*PPGisalwaysnon-retriggerifPPGisactive.
non-retriggerperiodPPGinactivePPGActive*Timer1Mode0OnPPGOUTTimer1Mode0Overflow&Off对C1VO/C2VO/C3VO去抖C1VO/C2VO/C3VOAfterDebouncedC1VOD/C2VOD/C3VODDebounceDebounce注:控制位C0CMPOP、C1CMPOP、C2CMPOP和C3CMPOP用来设置还未去抖的C0VO、C1VO、C2VO和C3VO的输出状态.
脉宽限制功能PPG模块具有脉宽限制功能,可以停止PPG输出.
当脉宽达到限值时,PPG将停止输出.
该功能是通过脉宽限制计数器实现的,该计数器在PPG触发时开始计数,溢出或PPG停止时停止计数.
脉宽限值为(256-PWLT)/(fSYS/2),其中PWLT是脉宽限制计数器寄存器的值.
启动PPG功能的操作:通过配置选项使能PPG功能通过配置选项设置PPG输出的有效电平通过配置选项确定PPG计数时钟是否与系统时钟fSYS同步通过设置PPGC寄存器的PRSEN和PSPEN位,选择PPG的输入模式设置PPG输出脉宽,写入数据到PPGTA、PPGTB和PPGTEX寄存器通过设置PPGC寄存器的C1RLEN位和CMPSC寄存器的C1CTL位,确定是否使用C1VO的下降沿来使能PPGTB的重新载入功能如果定时/计数器1工作在模式0,确定是否处于不可重复触发期间通过PWLT寄存器设置脉宽限制计数器来限制脉宽当PPG由INT00的下降沿或软件指令(PST设置为1)触发时,PPG将从预载寄存器的当前值开始计数.
当PPG由软件指令(PST设置为0)、C2VOB的下降沿、PPG计数器溢出或有脉宽限制条件产生触发时,PPG将停止计数.
Rev.
1.
20712020-03-19PPGC寄存器Bit76543210NamePSTPRSENPSPENRLBF——TRGMODC1RLENR/WR/WR/WR/WR/W——R/WR/WPOR0000——00Bit7PST:PPG软件触发位0:停止PPG1:启动PPGBit6PRSEN:使用INT00触发输入启动PPG计数器0:除能1:使能该位为0时,PPG输出只能通过软件控制位PST启动.
该位为1时,PPG输出可以通过INT00的下降沿或设置PST位为1启动.
Bit5PSPEN:使用C2VOB或C3VOB触发输入停止PPG计数器0:除能1:使能C2VOB和C3VOB分别为比较器2和比较器3输出的同相或反相信号,可通过软件选择.
该位为0时,PPG输出只能通过软件控制位PST停止.
该位为1时,PPG输出可以通过C2VOB/C3VOB的下降沿触发或设置PST位为0停止.
Bit4RLBF:PPG重新载入控制位0:来自PPGTA1:来自PPGTBBit3~2未定义,读为"0"Bit1TRGMOD:经延迟电路产生INT00的触发输入信号是来自INT0的单下降沿还是双下降沿0:单下降沿1:双下降沿Bit0C1RLEN:C1VO的下降沿置位RLBF从而控制PPGTB的重新载入功能0:除能1:使能当C1CTL=0时才有效,CP1P和CP1N被分别连接到可编程内部参考电压VR1和PA3/CP0P/TMR0引脚.
当C1CTL=0和C1VO=1,若C1RLEN由1变0会将RLBF位设置为1,故请注意当C1RLEN位由1变0时,软件需再将RLBF位清为0,否则PPG宽度将由PPGTB决定.
Rev.
1.
20722020-03-19通常情况下,如果RLBF=0,PPG计数器会重新载入PPGTA寄存器的值.
如果C1RLEN=1,C1CTL=0,比较器1输出C1VO的下降沿会置高RLBF位,使得PPG计数器重新载入PPGTB寄存器的值,直到RLBF被软件清零.
PRSEN位用于决定PPG的启动信号是否来自INT00的触发输入,如果是,那么一旦有一个INT00的下降沿产生,PPG计数器就会开始计数.
PSPEN位用于决定PPG的停止信号是否来自C2VOB或C3VOB的触发输入,如果是,那么一旦有一个C2VOB或C3VOB的下降沿产生,PPG计数器就会停止计数,IOFF输出有效高电平.
复位时IOFF输出为浮空状态,PPG无效时IOFF输出高电平,PPG有效时IOFF输出低电平.
无论PPG是否处于有效周期,C2VOB或C3VOB的下降沿都将清除PRSEN位,这样可以防止PPG再由INT00的下降沿触发启动,PPG的启动只能通过软件控制,直到PRSEN位再次由软件置位.
PST是一个软件触发位,如果该位被置"1",PPG计数器会开始计数,当PPG计数器溢出时,该位会被清零同时PPG计数器停止计数.
如果该位被置"0",PPG计数器会停止计数.
在PPG计数过程中,如果有一个INT00的下降沿产生或PST被置位,PPG计数器将不受影响,也就是说此时来自INT00或PST的再启动信号无效.
PST也可用作PPG计数器输出的状态标志位.
PPG模块输出脉冲的有效电平由配置选项决定.
另外一个功能,即PPG计数器是否与系统时钟同步的问题,也可以通过配置选项来设置.
PPGTA寄存器Bit76543210NamePGTA7PGTA6PGTA5PGTA4PGTA3PGTA2PGTA1PGTA0R/WR/WR/WR/WR/WR/WR/WR/WR/WPORxxxxxxxx"x":未知PPGTB寄存器Bit76543210NamePGTB7PGTB6PGTB5PGTB4PGTB3PGTB2PGTB1PGTB0R/WR/WR/WR/WR/WR/WR/WR/WR/WPORxxxxxxxx"x":未知PPGTEX寄存器Bit76543210Name———PGTB8———PGTA8R/W———R/W———R/WPOR———x———x"x":未知Rev.
1.
20732020-03-19控制PPG的启动延时≤0.
5*(1/fSYS),当在配置选项中选择时钟同步时,下一个系统周期的上升沿或下降沿均可触发PPG脉冲的输出.
PPG功能启动之后,PPG输出使能,一旦第一个边沿(系统频率的上升或下降沿)来到,它便开始计数.
第一个触发完成之后,接下来的时钟沿即跟随保持如:一旦PPG的第一个启动是由一个下降沿触发,那么接下来的PPG都是由下降沿触发直到PPG停止输出,反之亦然.
例1:在PPG启动之后第一个触发信号是下降沿,PPG计数器此后都是下降沿触发直到PPG停止.
nn+1n+2tSYS<0.
5tSYSSystemClockStartTriggerPPGPulsePPGTimer例2:在PPG启动之后第一个触发信号是上升沿,PPG计数器此后都是上升沿触发直到PPG停止.
tSYS<0.
5tSYSSystemClockStartTriggerPPGPulsePPGTimernn+1n+2任何停止PPG的动作,如PPG计数器溢出、C2VOB下降沿(PSPEN=1)、软件指令停止(PST=1→0)或达到脉冲限制等,均可导致以下情况的发生:PPG计数器数据重新载入PST会被清0PPG无效Rev.
1.
20742020-03-19比较器该单片机的PPG模块内部集成了4个比较器.
比较器0的哪个输入端连接到AN9可通过CMPSC寄存器中的C0N2AN9位选择.
比较器1的同相输入端连接到可编程内部参考电压VR1,反相输入端可通过C1CTL位选择连接到PA5/CP1N/AN7或PA3/CP0P/TMR0.
比较器2的同相输入端可通过配置选项选择连接到PA7/CP2P/AN5或可编程内部参考电压VR2,反相输入端也可通过配置选项选择连接到PA6/CP2N/AN6或可编程内部参考电压VR3.
比较器3的同相输入端连接到可编程内部参考电压VR4,反相输入端可通过配置选项选择连接到PC0/AN10/CP3N,PC1/PCK/CP3N或OPAO.
比较器的输入失调电压可以通过调整共模输入来校准.
校准步骤如下:1.
设置CnCOFM=1,进入失调电压校准模式(S3关闭)2.
设置CnCRS,选择哪个引脚作为参考电压输入脚(S1或S2关闭)3.
调整CnCOF0~CnCOF4直到输出状态改变4.
设置CnCOFM=0,进入比较器模式VrCPnNCPnPCnVOS1S2S3CnVO比较器(n=0~3)比较器寄存器比较器由控制寄存器CMP0C、CMP1C、CMP2C、CMP3C和CMPSC控制.
这些寄存器用于选择输入路径、失调电压校准等功能.
寄存器名称位76543210CMP0CC0CMPOPC0COFMC0CRSC0COF4C0COF3C0COF2C0COF1C0COF0CMP1CC1CMPOPC1COFMC1CRSC1COF4C1COF3C1COF2C1COF1C1COF0CMP2CC2CMPOPC2COFMC2CRSC2COF4C2COF3C2COF2C2COF1C2COF0CMP3CC3CMPOPC3COFMC3CRSC3COF4C3COF3C3COF2C3COF1C3COF0CMPSCC3HYSONC2HYSONC1HYSONC0HYSON——C1CTLC0N2AN9比较器寄存器列表Rev.
1.
20752020-03-19CMP0C寄存器Bit76543210NameC0CMPOPC0COFMC0CRSC0COF4C0COF3C0COF2C0COF1C0COF0R/WRR/WR/WR/WR/WR/WR/WR/WPOR00010000Bit7C0CMPOP:比较器0输出,正逻辑电平Bit6C0COFM:输入失调电压校准模式/比较器模式选择位0:比较器模式1:输入失调电压校准模式Bit5C0CRS:比较器0输入失调电压校准参考选择位0:选择CP0N作为参考输入脚1:选择CP0P作为参考输入脚Bit4~0C0COF4~C0COF0:比较器0输入失调电压校准控制位CMP1C寄存器Bit76543210NameC1CMPOPC1COFMC1CRSC1COF4C1COF3C1COF2C1COF1C1COF0R/WRR/WR/WR/WR/WR/WR/WR/WPOR00010000Bit7C1CMPOP:比较器1输出,正逻辑电平Bit6C1COFM:输入失调电压校准模式/比较器模式选择位0:比较器模式1:输入失调电压校准模式Bit5C1CRS:比较器1输入失调电压校准参考选择位0:选择CP1N作为参考输入脚1:选择CP1P作为参考输入脚Bit4~0C1COF4~C1COF0:比较器1输入失调电压校准控制位CMP2C寄存器Bit76543210NameC2CMPOPC2COFMC2CRSC2COF4C2COF3C2COF2C2COF1C2COF0R/WRR/WR/WR/WR/WR/WR/WR/WPOR00010000Bit7C2CMPOP:比较器2输出,正逻辑电平Bit6C2COFM:输入失调电压校准模式/比较器模式选择位0:比较器模式1:输入失调电压校准模式Bit5C2CRS:比较器2输入失调电压校准参考选择位0:选择CP2N作为参考输入脚1:选择CP2P作为参考输入脚Bit4~0C2COF4~C2COF0:比较器2输入失调电压校准控制位Rev.
1.
20762020-03-19CMP3C寄存器Bit76543210NameC3CMPOPC3COFMC3CRSC3COF4C3COF3C3COF2C3COF1C3COF0R/WRR/WR/WR/WR/WR/WR/WR/WPOR00010000Bit7C3CMPOP:比较器3输出,正逻辑电平Bit6C3COFM:输入失调电压校准模式/比较器模式选择位0:比较器模式1:输入失调电压校准模式Bit5C3CRS:比较器3输入失调电压校准参考选择位0:选择CP3N作为参考输入脚1:选择CP3P作为参考输入脚Bit4~0C3COF4~C3COF0:比较器3输入失调电压校准控制位CMPSC寄存器Bit76543210NameC3HYSONC2HYSONC1HYSONC0HYSON——C1CTLC0N2AN9R/WR/WR/WR/WR/W——R/WR/WPOR0000——00Bit7C3HYSON:比较器3迟滞控制位0:除能1:使能Bit6C2HYSON:比较器2迟滞控制位0:除能1:使能Bit5C1HYSON:比较器1迟滞控制位0:除能1:使能Bit4C0HYSON:比较器0迟滞控制位0:除能1:使能Bit3~2未使用,读为"0"Bit1C1CTL:比较器1输入连接控制位0:比较器1反相输入端连接到PA3/CP0P/TMR01:比较器1反相输入端连接到PA5/CP1N/AN7Bit0C0N2AN9:比较器0输入连接到AN9控制位0:CP0P连接到AN91:CP0N连接到AN9Rev.
1.
20772020-03-19运算放大器OPA该单片机内部集成了一个运算放大器,可用于用户特定的模拟信号处理.
它的使能或除能可以通过配置选项设置,但只有当振荡器配置选项选择HIRC时才有效.
同相输入端可以通过OPAP配置选项选择直接或者经过一个1k电阻连接到VSS.
反相输入端可以通过OPAN配置选项选择直接或者经过一个1k电阻连接到OPAN引脚.
放大器输出可以通过OPAO配置选项选择不反馈或者经过一个60k电阻反馈回反相输入端.
还可以通过OPA使能配置选项选择连接到PA1/OPAO/AN8/OSC1引脚或者经过一个10k电阻连接到PB3/AN2引脚.
运算放大器的输入失调电压可以通过调整共模输入来校准.
校准步骤如下:1.
设置OPAFM=1,进入失调电压校准模式(S3关闭)2.
设置OPARS,选择哪个引脚作为参考电压输入脚(S1或S2关闭)3.
调整OPAOF0~OPAOF4直到输出状态改变4.
设置OPAOFM=0,进入运算放大器模式OPAOVrPA0/OPAN/OSC2PA1/OPAO/AN8/OSC1S1S2S3AN8VSSOPAR160kohmOPAR21kohm01MUXADCACS3~ACS00101OPAR31kohm110OPAR410kohmPB3/AN2AN20OPAOCMP3ConfigurationoptionOPAOConfigurationoptionOPANConfigurationoptionOPAEnableConfigurationoptionOPAPConfigurationoptionCP3NOPAEnableConfigurationoptionRev.
1.
20782020-03-19运算放大器寄存器内部运算放大器由控制寄存器OPAC控制,用于选择输入路径、失调电压校准等功能.
OPAC寄存器Bit76543210NameOPAOPOPAOFMOPARSOPAOF4OPAOF3OPAOF2OPAOF1OPAOF0R/WRR/WR/WR/WR/WR/WR/WR/WPOR00010000Bit7OPAOP:运算放大器输出,正逻辑电平Bit6OPAOFM:输入失调电压校准模式/运算放大器模式选择位0:运算放大器模式1:输入失调电压校准模式Bit5OPARS:运算放大器输入失调电压校准参考选择位0:选择OPAN作为参考输入脚1:选择OPAP作为参考输入脚Bit4~0OPAOF4~OPAOF0:运算放大器输入失调电压校准控制位外围时钟输出外围时钟输出功能使单片机能够为外部硬件提供和单片机时钟同步的时钟信号.
外围时钟操作此单片机的外围时钟输出引脚PCK与I/O脚PC1共用,要使PC1作为PCK输出而非普通的I/O引脚,除了需要正确的设置配置选项外,在I/O端口控制寄存器相应的位PCC1也需写0,以确保所需要的PCK输出引脚设置为输出状态.
在完成这两个初始化步骤之后,将"1"写入到PC1数据寄存器的相应位,会使能PCK输出功能.
将"0"写入到PC1数据寄存器的相应位,则会使PCK输出功能失效并强制输出低电平.
通过这种方式,端口数据寄存器即作为PCK功能的开关控制位.
需注意的是,如果配置选项选择PCK功能,但是对PCC控制寄存器的相应位写入1设置此引脚为输入,则该引脚仍可作为带上拉电阻的普通输入端口使用.
外围时钟输出的时钟源来自内部fSYS时钟分频,分频比由CTRL0寄存器中的PCKPSC2~PCKPSC0位来选择.
如果系统进入暂停模式,将除能外围时钟输出功能.
Rev.
1.
20792020-03-19CTRL0寄存器Bit76543210NameC2VOINVTMR0ECSPCKPSC2PCKPSC1PCKPSC0OSTPCLVDOLVDCR/WR/WR/WR/WR/WR/WR/WRR/WPOR00000000Bit7C2VOINV:比较器2输出信号的反相控制位具体描述详见其它章节Bit6TMR0ECS:TMR0外部时钟源选择位具体描述详见其它章节Bit5~3PCKPSC2~PCKPSC0:外围时钟预分频比选择位fPCK=000:fSYS/4001:fSYS/8010:fSYS/12011:fSYS/16100:fSYS/20101:fSYS/24110:fSYS/1024111:fSYS/2048Bit2OSTPC:振荡器停止功能控制位具体描述详见其它章节Bit1LVDO:低电压检测输出标志位具体描述详见其它章节Bit0LVDC:低电压检测控制位具体描述详见其它章节Rev.
1.
20802020-03-19中断当外部事件或内部功能如定时/计数器或A/D转换器有效,并且产生中断时,系统会暂时中止当前的程序而转到执行相对应的中断服务程序.
此单片机提供一个外部中断和多个内部中断功能,外部中断由INT引脚动作产生,而内部中断由各种内部功能,如定时/计数器、比较器、LVD、EEPROM、A/D转换器和I2C总线等产生.
中断寄存器所有中断允许和请求标志均由INTC0、INTC1和MFI寄存器控制.
通过控制相应的中断允许位可以使能或禁止相关的中断.
如果有中断发生,相应的中断请求标志将被置位且总中断使能标志位被清零将禁止其它中断.
INTC0寄存器Bit76543210Name—INTF/LVDFCP1FMFFINTE/LVDECP1EMFEEMIR/W—R/WR/WR/WR/WR/WR/WR/WPOR—0000000Bit7未定义,读为"0"Bit6INTF/LVDF:外部中断或LVD中断请求标志0:无效1:有效由配置选项选择外部中断或LVD中断.
Bit5CP1F:比较器1中断请求标志0:无效1:有效Bit4MFF:多功能中断请求标志0:无效1:有效Bit3INTE/LVDE:外部中断或LVD中断使能0:除能1:使能由配置选项选择外部中断或LVD中断.
Bit2CP1E:比较器1中断使能0:除能1:使能Bit1MFE:多功能中断使能0:除能1:使能Bit0EMI:总中断使能0:除能1:使能Rev.
1.
20812020-03-19INTC1寄存器Bit76543210NameDEFT2F/ADFT0FIICFDEET2E/ADET0EIICER/WR/WR/WR/WR/WR/WR/WR/WR/WPOR00000000Bit7DEF:EEPROM中断请求标志0:无请求1:中断请求Bit6T2F/ADF:定时/计数器2中断或A/D转换中断请求标志0:无请求1:中断请求由配置选项选择定时/计数器2中断或A/D转换中断.
Bit5T0F:定时/计数器0中断请求标志0:无请求1:中断请求Bit4IICF:I2C总线中断请求标志0:无请求1:中断请求Bit3DEE:EEPROM中断使能0:除能1:使能Bit2T2E/ADE:定时/计数器2中断或A/D转换中断使能0:除能1:使能由配置选项选择定时/计数器2中断或A/D转换中断.
Bit1T0E:定时/计数器0中断使能0:除能1:使能Bit0IICE:I2C总线中断使能0:除能1:使能MFI寄存器Bit76543210Name—T1FCP2FCP3F—T1ECP2ECP3ER/W—R/WR/WR/W—R/WR/WR/WPOR—000—000Bit7未定义,读为"0"Bit6T1F:定时/计数器1中断请求标志0:无请求1:中断请求Bit5CP2F:比较器2中断请求标志0:无请求1:中断请求Bit4CP3F:比较器3中断请求标志0:无请求1:中断请求Bit3未定义,读为"0"Rev.
1.
20822020-03-19Bit2T1E:定时/计数器1中断使能0:除能1:使能Bit1CP2E:比较器2中断使能0:除能1:使能Bit0CP3E:比较器3中断使能0:除能1:使能中断操作定时/计数器溢出、A/D转换完成或者外部中断引脚上有一个有效的边沿信号都会产生一个中断请求,如果相应的中断允许,系统将要执行指令的下条地址压入堆栈,并将相应的中断向量地址加载至PC中,然后从此向量取下条指令.
中断向量处通常为跳转指令,以跳转到相应的中断服务程序.
中断服务程序需以RETI指令返回,系统将先前压入堆栈的地址返回PC,以继续执行中断发生时的程序.
各个中断使能位以及相应的请求标志位,以优先级的顺序如下图所示.
04H0CH10H14HVectorLowPriorityHighRequestFlagsEnableBitsMasterEnableRequestFlagsEnableBitsEMIautodisabledinISRInterruptscontainedwithinMulti-FunctionInterruptsInterruptNameInterruptNameEMIEMIEMICP3FComparator3CP3ECP2FComparator2CP2ET1FTimer/EventCounter1T1EMFFMulti-functionMFEINTFINTPinINTEIICFI2C-BusIICEEMIADFA/DADET0FTimer/EventCounter0T0ExxFLegendRequestFlag–noautoresetinISRxxFRequestFlag–autoresetinISRxxEEnableBit08HEMICP1FComparator1CP1ELVDFLVDLVDE18HEMIT2FTimer/EventCounter2T2EByconfigurationoption1CHDEFEEPROMDEEEMI中断结构Rev.
1.
20832020-03-19一旦中断子程序被响应,系统将自动清除EMI位,所有其它的中断将被屏蔽,这个方式可以防止任何进一步的中断嵌套.
其它中断请求可能发生在此期间,虽然中断不会立即响应,但是中断请求标志位会被记录.
如果某个中断服务子程序正在执行时,有另一个中断要求立即响应,那么EMI位应在程序进入中断子程序后置位,以允许此中断嵌套.
如果堆栈已满,即使此中断使能,中断请求也不会被响应,直到SP减少为止.
如果要求立刻动作,则堆栈必须避免成为储满状态.
中断优先级当中断发生在两个连续的T2脉冲上升沿之间时,如果相应的中断请求被允许,中断将在后一个T2脉冲响应.
下表指出在同时提出请求的情况下的优先级.
中断请求可以通过重新设定EMI位来加以屏蔽.
中断源优先级向量多功能中断104H比较器1输出中断208H外部中断或LVD中断(由配置选项选择)30CHI2C总线中断410H定时/计数器0溢出中断514H定时/计数器2溢出中断或A/D转换中断(由配置选项选择)618HEEPROM中断71CH中断类型定时/计数器1中断、比较器2中断和比较器3中断是同一个中断向量04H.
每个中断都有自己的中断标志位,但也有共同的中断标志MFF.
一旦多功能中断响应,MFF标志位被硬件清为零,然而单独的中断触发多功能中断后,需通过软件清零其中断请求标志.
外部中断要使外部中断发生,总中断使能位EMI和外部中断使能位INTE需先被置位.
外部中断通过INT0信号(由软件选择来自INT引脚或比较器0输出"C0VO"的同相或反相去抖信号)的下降沿来触发,并置位外部中断请求标志位INTF.
外部中断与PA2共用引脚,如果INTC0中相应的外部中断使能位被置位,PA2将只能被作为外部中断输入口使用,同时需将PA2设为输入口.
当中断使能、堆栈未满且外部中断产生时,将调用外部中断向量子程序.
当外部中断被响应时,外部中断请求标志位INTF会自动清零,同时EMI位也会自动清零以屏蔽其它中断.
注意,即使作为外部中断引脚,PA2依然可以设置带有上拉电阻功能.
注意,中断向量0CH的触发源可以是LVD中断或外部中断,由配置选项确定,设置外部中断前,首先要通过配置选项选择外部中断功能.
LVD中断当低电压检测功能检测到一个低电压时,LVD中断请求标志LVF被置位,LVD中断请求产生.
若要程序跳转到相应中断向量地址,总中断使能位EMI、低电压中断使能位LVE中断使能位需先被置位.
当中断使能,堆栈未满且低电压条件发生时,将调用LVD中断向量子程序.
当LVD中断服务程序时,LVD中断请求标志位LVDF会自动清零,同时EMI位也会自动清零以屏蔽其它中断.
Rev.
1.
20842020-03-19注意,中断向量0CH的触发源可以是LVD中断或外部中断,由配置选项确定,设置LVD中断前,首先要通过配置选项选择LVD中断功能.
EEPROM中断当写周期结束,EEPROM中断请求标志DEF被置位,EEPROM中断请求产生.
若要程序跳转到相应中断向量地址,总中断控制位EMI和EEPROM中断使能位DEE需先被置位.
当中断使能,堆栈未满且EEPROM写周期结束时,可跳转至相关中断向量子程序中执行.
当EEPROM中断响应,DEF标志位会自动复位且EMI位会被清零以除能其它中断.
I2C总线中断当一个字节数据已由I2C接口接收或发送完,或I2C从机地址匹配,或I2C总线发生超时,中断请求标志IICF被置位,I2C中断请求产生.
若要程序跳转到相应中断向量地址,总中断控制位EMI和I2C中断使能位IICE需先被置位.
当中断使能,堆栈未满且从机地址匹配或一个字节数据已传输完毕时,将调用I2C中断向量子程序.
当I2C中断被响应时,I2C中断请求标志位会自动复位且EMI位会被清零以除能其它中断.
A/D转换器中断要产生A/D转换器中断,总中断使能位EMI和相应的A/D转换器中断使能位ADE需先被置位.
当A/D转换过程完成时,相应的中断请求标志位ADF将置位并触发A/D转换器中断.
当中断使能,堆栈未满且A/D转换动作结束时,将调用相应的A/D中断向量子程序.
当A/D转换器中断被响应时,相应的中断请求标志位ADF会自动复位且EMI位会自动清零以除能其它中断.
注意,中断向量18H的触发源可以是定时/计数器2中断或A/D转换中断,由配置选项确定,设置A/D中断前,首先要通过配置选项选择A/D中断功能.
多功能中断此单片机有一个多功能中断,与其它中断不同,它没有独立源,但由其它现有的中断源构成,即定时/计数器1中断、比较器2中断和比较器3中断.
当多功能中断请求标志MFF被置位,多功能中断请求产生.
当中断使能,堆栈未满,包括在多功能中断中的任意一个中断发生时,将调用多功能中断向量中的一个子程序.
当响应中断服务子程序时,相关的多功能请求标志位会自动复位且EMI位会自动清零以除能其它中断.
但必须注意的是,在中断响应时,虽然多功能中断标志会自动复位,但多功能中断源的请求标志位,即定时/计数器1中断、比较器2中断和比较器3中断的请求标志位不会自动复位,必须由应用程序清零.
定时/计数器中断定时/计数器有三个中断,定时/计数器0/2为独立的中断、定时/计数器1属于多功能中断.
要产生定时/计数器0/2中断,总中断使能位EMI和相应的定时/计数器中断使能位T0E和T2E需先被置位.
当定时/计数器0/2溢出,相应的中断请求标志位T0F和T2F将置位并触发定时/计数器0/2中断.
若中断使能,堆栈未满,当定时/计数器0/2溢出时,将调用相应定时器中断向量子程序.
当定时/计数器0/2中断被响应时,相应的中断请求标志位T0F和T2F会自动复位且EMI位会自动清零以除能其它中断.
Rev.
1.
20852020-03-19注意,中断向量18H的触发源可以是定时/计数器2中断或A/D转换中断,由配置选项确定,设置定时/计数器2中断前,首先要通过配置选项选择定时/计数器2中断功能.
要产生定时/计数器1中断,总中断使能位EMI、多功能中断使能位MFE和相应的定时/计数器中断使能位T1E需先被置位.
当定时/计数器1溢出,相应的中断请求标志位T1F将置位并触发定时/计数器1中断.
若中断使能,堆栈未满,当定时/计数器1溢出时,将调用相应的多功能中断向量子程序.
当定时/计数器1中断被响应时,EMI将被自动清零以除能其它中断,相关MFF标志也可自动清除,但定时/计数器1中断请求标志需在应用程序中手动清除.
比较器中断比较器有三个中断,比较器1为独立的中断,比较器2/3属于多功能中断.
要产生比较器1中断,总中断使能位EMI和相应的比较器中断使能位CP1E需先被置位.
当比较器1输出产生一个下降沿变化时,相应的中断请求标志位CP1F将置位并触发比较器1中断.
若中断使能,堆栈未满,当比较器1输出产生一个下降沿变化时,将调用相应比较器1中断向量子程序.
当比较器1中断被响应时,相应的中断请求标志位CP1F会自动复位且EMI位会自动清零以除能其它中断.
要产生比较器2/3中断,总中断使能位EMI、多功能中断使能位MFE和相应的比较器2/3中断使能位CP2E和CP3E需先被置位.
当比较器2/3输出产生一个下降沿变化时,相应的中断请求标志位CP2F和CP3F将置位并触发比较器2/3中断.
若中断使能,堆栈未满,当比较器2/3输出产生一个下降沿变化时,将调用相应的多功能中断向量子程序.
当比较器2/3中断被响应时,EMI将被自动清零以除能其它中断,相关MFF标志也可自动清除,但比较器2/3中断请求标志需在应用程序中手动清除.
中断唤醒功能每个中断都具有将处于暂停模式的单片机唤醒的能力.
当中断请求标志由低到高转换时唤醒动作产生,其与中断是否使能无关.
因此,尽管单片机处于暂停模式且系统振荡器停止工作,如有外部中断脚上产生外部边沿跳变或比较器输入改变都可能导致其相应的中断标志被置位,由此产生中断,因此必须注意避免伪唤醒情况的发生.
若中断唤醒功能被除能,单片机进入暂停模式前相应中断请求标志应被置起.
中断唤醒功能不受中断使能位的影响.
编程注意事项通过除能中断使能位,可以屏蔽中断请求.
然而,一旦请求标志位被置位,它将保存在中断寄存器中,直到相应的中断被响应或被软件指令清除.
建议用户不要在中断子程序中使用"CALL子程序"指令.
中断通常发生在不可预料的情况或需要立即执行的某些应用.
假如只剩下一层堆栈且没有控制好中断,一旦"CALL子程序"在中断子程序中执行时,将破坏原来的控制序列.
所有的中断都具有将处于暂停模式的单片机唤醒的功能.
但只有程序计数器被压入堆栈中,一旦中断服务程序使寄存器和状态寄存器中的内容发生改变,则会破坏想要的控制序列,因此需要事先将这些数据保存起来.
Rev.
1.
20862020-03-19低电压检测–LVD此单片机具有低电压检测功能,即LVD.
该功能使能用于监测电源电压VDD,若电源电压低于直流电气特性中给定的VLVD值可提供一个警告信号.
此功能在电池类产品中非常有用,在电池电压较低时产生警告信号.
低电压检测也可产生中断信号.
LVD操作LVD功能的使能或除能可以通过配置选项来设置.
如果LVD配置选项使能,用户可以通过系统控制寄存器CTRL0的LVDC位打开/关闭LVD电路,通过LVDO位来读取低电压检测的状态.
LVD电压固定在4.
4V.
低电压检测器也有自己的中断功能,详细内容请参考中断章节.
在暂停模式下,低电压检测功能将除能.
CTRL0寄存器Bit76543210NameC2VOINVTMR0ECSPCKPSC2PCKPSC1PCKPSC0OSTPCLVDOLVDCR/WR/WR/WR/WR/WR/WR/WRR/WPOR00000000Bit7C2VOINV:比较器2输出信号的反相控制位具体描述详见其它章节Bit6TMR0ECS:TMR0外部时钟源选择位具体描述详见其它章节Bit5~3PCKPSC2~PCKPSC0:外围时钟预分频比选择位具体描述详见其它章节Bit2OSTPC:振荡器停止功能控制位具体描述详见其它章节Bit1LVDO:低电压检测输出标志位0:正常电压1:检测到低电压Bit0LVDC:低电压检测控制位0:除能1:使能Rev.
1.
20872020-03-19配置选项配置选项在烧写程序时写入芯片.
通过HT-IDE的软件开发环境,使用者在开发过程中可以选择配置选项.
当配置选项烧入单片机后,无法再通过应用程序修改.
所有位必须按系统的需要定义,具体内容可参考下表:序号选项唤醒功能选项1PA0~PA7唤醒功能选择:1、不带唤醒功能2、带唤醒功能上拉电阻选项2PA0~PA7上拉电阻选择:1、不带上拉电阻2、带上拉电阻3PB0~PB4上拉电阻选择:1、不带上拉电阻2、带上拉电阻4PC0~PC3上拉电阻选择:1、不带上拉电阻2、带上拉电阻I/O或其它功能选项5PB0/RES选择:1、RES2、PB06PB0/SCL,PB1/SDA选择:1、I/O2、I2C7PB2/IOFF选择:1、PB22、IOFF8PB4/PWM选择:1、PB42、PWM9PC1/PCK选择:1、PC12、PCK振荡器选项10系统振荡器选择:1、HIRC2、HXTOPA选项11OPA功能:1、除能2、使能,输出到PA1/OPAO/AN8/OSC1引脚3、使能,经OPAR4电阻输出到PB3/AN2引脚Rev.
1.
20882020-03-19序号选项12OPAN配置选项:1、不带OPAR3电阻2、带OPAR3电阻13OPAP配置选项:1、直接连接到VSS2、带OPAR2电阻连接到VSS14OPAO配置选项:1、无反馈2、带OPAR1电阻的反馈PPG选项15PPG输出极性控制:1、高电平有效2、低电平有效16PPG计数器时钟同步选择:1、时钟同步2、时钟异步比较器选项17比较器0控制:1、除能2、使能18比较器1控制:1、除能2、使能19比较器1去抖控制:1、除能2、使能20比较器2控制:1、除能2、使能,CP2N=VR3,CP2P=PA73、使能,CP2N=PA6,CP2P=VR24、使能,CP2N=PA6,CP2P=PA721比较器2去抖控制:1、除能2、使能22比较器3控制:1、除能2、使能,CP3N=PC0,CP3P=VR43、使能,CP3N=PC1,CP3P=VR44、使能,OPAO连接到CP3N,CP3P=VR423比较器3去抖控制:1、除能2、使能Rev.
1.
20892020-03-19序号选项中断选项24中断向量18H中断源选择:1、定时/计数器2中断2、A/D转换中断25中断向量0CH中断源选择:1、外部中断2、LVD中断看门狗选项26看门狗定时器功能:1、除能2、使能27看门狗溢出周期选择:1、216/fS2、215/fS3、214/fS4、213/fS28看门狗时钟源选择:1、WDTOSC2、fSYS/429清除看门狗指令:1、1条指令2、2条指令LVD/LVR选项30LVD功能:1、除能2、使能31LVR功能:1、除能2、使能32LVR电压选择:1、2.
1V2、3.
0VRev.
1.
20902020-03-19应用电路PA0/OPAN/OSC2PC0/AN10PC1/PCKPC2PC3/AN11PB1/SDA/AN0PA6/CP2N/AN6PA5/CP1N/AN7PB2/AN1/IOFFPA4/AN4VoltagedetectTemperature1detectTemperature2detectBuzzerMotorVDDVDDPPGSynchronism&Recoilvoltagedetect++_ACSurgedetectPA1/OPAO/OSC1/AN8Currentdetect++_+_PPGModule++_PA2/CP0N/INTPA3/CP0P/TMR0PB3/AN2PB4/PWM/AN30.
1mF*100kWVDDVSS0.
1mFVDD0.
01mF*10kW15VIGBTCoilPanelHighVoltage15VIGBTCoilPanelHighVoltagePA4/PPGPPGactivehighoptionPPGactivelowoptionRES/PB0/SCLIRCVR1PA7/CP2P/AN5PA5/CP1N/AN7VR2VR3PC0/AN10/CP3NPC1/PCK/CP3N++_VR4OPANCFG=0OPAPCFG=1OPAOCFG=0OPAFBCFG=0C1CTL=0CMP2CFG[1:0]=11b注:复位电路中的电阻和电容确保在RES引脚上拉之前VDD是稳定的,并使其保持在有效的工作电压范围内.
"*"表示连接到RES引脚的线应尽量短,避免噪声干扰.
Rev.
1.
20912020-03-19指令集简介任何单片机成功运作的核心在于它的指令集,此指令集为一组程序指令码,用来指导单片机如何去执行指定的工作.
在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.
20922020-03-19分支和控制转换程序分支是采取使用JMP指令跳转至指定地址或使用CALL指令调用子程序的形式,两者之不同在于当子程序被执行完毕后,程序必须马上返回原来的地址.
这个动作是由放置在子程序里的返回指令RET来实现,它可使程序跳回CALL指令之后的地址.
在JMP指令中,程序则只是跳到一个指定的地址而已,并不需如CALL指令般跳回.
一个非常有用的分支指令是条件跳转,跳转条件是由数据存储器或指定位来加以决定.
遵循跳转条件,程序将继续执行下一条指令或略过且跳转至接下来的指令.
这些分支指令是程序走向的关键,跳转条件可能是外部开关输入,或是内部数据位的值.
位运算提供数据存储器中单个位的运算指令是Holtek单片机的特性之一.
这特性对于输出端口位的设置尤其有用,其中个别的位或端口的引脚可以使用"SET[m].
i"或"CLR[m].
i"指令来设定其为高位或低位.
如果没有这特性,程序设计师必须先读入输出口的8位数据,处理这些数据,然后再输出正确的新数据.
这种读入-修改-写出的过程现在则被位运算指令所取代.
查表运算数据的储存通常由寄存器完成,然而当处理大量固定的数据时,它的存储量常常造成对个别存储器的不便.
为了改善此问题,Holtek单片机允许在程序存储器中建立一个表格作为数据可直接存储的区域,只需要一组简易的指令即可对数据进行查表.
其它运算除了上述功能指令外,其它指令还包括用于省电的"HALT"指令和使程序在极端电压或电磁环境下仍能正常工作的看门狗定时器控制指令.
这些指令的使用则请查阅相关的章节.
Rev.
1.
20932020-03-19指令集概要下表中说明了按功能分类的指令集,用户可以将该表作为基本的指令参考.
惯例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.
20942020-03-19助记符说明指令周期影响标志位移位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注无CALLaddr子程序调用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.
20952020-03-19助记符说明指令周期影响标志位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.
20962020-03-19指令定义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.
20972020-03-19ANDA,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.
20982020-03-19CLRWDT1PreclearWatchdogTimer指令说明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.
20992020-03-19DAA[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.
201002020-03-19INCA[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.
201012020-03-19ORA,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.
201022020-03-19RLA[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.
201032020-03-19RRC[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.
201042020-03-19SDZA[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.
201052020-03-19SNZ[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.
201062020-03-19SZ[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(specificpage)toTBLHandDataMemory指令说明将表格指针对TBHP和TBLP所指的程序代码低字节(指定页)移至指定数据存储器且将高字节移至TBLH.
功能表示[m]←程序代码(低字节)TBLH←程序代码(高字节)影响标志位无TABRDC[m]Readtable(currentpage)toTBLHandDataMemory指令说明将表格指针TBLP所指的程序代码低字节(当前页)移至指定的数据存储器且将高字节移至TBLH.
功能表示[m]←程序代码(低字节)TBLH←程序代码(高字节)影响标志位无Rev.
1.
201072020-03-19TABRDL[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.
201082020-03-19封装信息请注意,这里提供的封装信息仅作为参考.
由于这个信息经常更新,提醒用户咨询Holtek网站以获取最新版本的封装信息.
封装信息的相关内容如下所示,点击可链接至Holtek网站相关信息页面.
封装信息(包括外形尺寸、包装带和卷轴规格)封装材料信息纸箱信息Rev.
1.
201092020-03-1916-pinDIP(300mil)外形尺寸$'&)*+,-.
/01$'&)*+,-.
/01Fig1.
FullLeadPackagesFig2.
1/2LeadPackages见fig1符号尺寸(单位:inch)最小值典型值最大值A0.
7800.
7900.
800B0.
2400.
2500.
280C0.
1150.
1300.
195D0.
1150.
1300.
150E0.
0140.
0180.
022F0.
0450.
0600.
070G—0.
100BSC—H0.
3000.
3100.
325I——0.
430符号尺寸(单位:mm)最小值典型值最大值A19.
8120.
0720.
32B6.
106.
357.
11C2.
923.
304.
95D2.
923.
303.
81E0.
360.
460.
56F1.
141.
521.
78G—2.
54BSC—H7.
627.
878.
26I——10.
92Rev.
1.
201102020-03-19见fig2(Type1)符号尺寸(单位:inch)最小值典型值最大值A0.
7450.
7650.
785B0.
2750.
2850.
295C0.
1200.
1350.
150D0.
1100.
1300.
150E0.
0140.
0180.
022F0.
0450.
0500.
060G—0.
1BSC—H0.
3000.
3100.
325I——0.
430符号尺寸(单位:mm)最小值典型值最大值A18.
9219.
4319.
94B6.
997.
247.
49C3.
053.
433.
81D2.
793.
303.
81E0.
360.
460.
56F1.
141.
271.
52G—2.
54BSC—H7.
627.
878.
26I——10.
92Rev.
1.
201112020-03-19见fig2(Type2)符号尺寸(单位:inch)最小值典型值最大值A0.
7350.
7550.
775B0.
2400.
2500.
280C0.
1150.
1300.
195D0.
1150.
1300.
150E0.
0140.
0180.
022F0.
0450.
0600.
070G—0.
1BSC—H0.
3000.
3100.
325I——0.
430符号尺寸(单位:mm)最小值典型值最大值A18.
6719.
1819.
69B6.
106.
357.
11C2.
923.
304.
95D2.
923.
303.
81E0.
360.
460.
56F1.
141.
521.
78G—2.
54BSC—H7.
627.
878.
26I——10.
92Rev.
1.
201122020-03-1916-pinNSOP(150mil)外形尺寸$'&=)*+,-.
/0+符号尺寸(单位:inch)最小值典型值最大值A—0.
236BSC—B—0.
154BSC—C0.
012—0.
020C'—0.
390BSC—D——0.
069E—0.
050BSC—F0.
004—0.
010G0.
016—0.
050H0.
004—0.
010α0°—8°符号尺寸(单位:mm)最小值典型值最大值A—6.
00BSC—B—3.
90BSC—C0.
31—0.
51C'—9.
90BSC—D——1.
75E—1.
27BSC—F0.
10—0.
25G0.
40—1.
27H0.
10—0.
25α0°—8°Rev.
1.
201132020-03-1920-pinDIP(300mil)外形尺寸)*+,-.
/01)*+,-.
/01Fig1.
FullLeadPackagesFig2.
1/2LeadPackages见fig1符号尺寸(单位:inch)最小值典型值最大值A0.
9801.
0301.
060B0.
2400.
2500.
280C0.
1150.
1300.
195D0.
1150.
1300.
150E0.
0140.
0180.
022F0.
0450.
0600.
070G—0.
1BSC—H0.
3000.
3100.
325I——0.
430符号尺寸(单位:mm)最小值典型值最大值A24.
8926.
1626.
92B6.
106.
357.
11C2.
923.
304.
95D2.
923.
303.
81E0.
360.
460.
56F1.
141.
521.
78G—2.
54BSC—H7.
627.
878.
26I——10.
92Rev.
1.
201142020-03-19见fig2符号尺寸(单位:inch)最小值典型值最大值A0.
9450.
9650.
985B0.
2750.
2850.
295C0.
1200.
1350.
150D0.
1100.
1300.
150E0.
0140.
0180.
022F0.
0450.
0500.
060G—0.
1BSC—H0.
3000.
3100.
325I——0.
430符号尺寸(单位:mm)最小值典型值最大值A24.
0024.
5125.
02B6.
997.
247.
49C3.
053.
433.
81D2.
793.
303.
81E0.
360.
460.
56F1.
141.
271.
52G—2.
54BSC—H7.
627.
878.
26I——10.
92Rev.
1.
201152020-03-1920-pinSOP(300mil)外形尺寸)*+,-.
+/0=符号尺寸(单位: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.
201162020-03-19Copyright2020byHOLTEKSEMICONDUCTORINC.
使用指南中所出现的信息在出版当时相信是正确的,然而Holtek对于说明书的使用不负任何责任.
文中提到的应用目的仅仅是用来做说明,Holtek不保证或表示这些没有进一步修改的应用将是适当的,也不推荐它的产品使用在会由于故障或其它原因可能会对人身造成危害的地方.
Holtek产品不授权使用于救生、维生从机或系统中做为关键从机.
Holtek拥有不事先通知而修改产品的权利,对于最新的信息,请参考我们的网址http://www.
holtek.
com/zh/.

pacificrack:VPS降价,SSD价格下降

之前几个月由于CHIA挖矿导致全球固态硬盘的价格疯涨,如今硬盘挖矿基本上已死,硬盘的价格基本上恢复到常规价位,所以,pacificrack决定对全系Cloud server进行价格调整,降幅较大,“如果您是老用户,请通过续费管理或升级套餐,获取同步到最新的定价”。官方网站:https://pacificrack.com支持PayPal、支付宝等方式付款VPS特征:基于KVM虚拟,纯SSD raid...

VPSMS:53元/月KVM-512MB/15G SSD/1TB/洛杉矶CN2 GIA

VPSMS最近在做两周年活动,加上双十一也不久了,商家针对美国洛杉矶CN2 GIA线路VPS主机提供月付6.8折,季付6.2折优惠码,同时活动期间充值800元送150元。这是一家由港人和国人合资开办的VPS主机商,提供基于KVM架构的VPS主机,美国洛杉矶安畅的机器,线路方面电信联通CN2 GIA,移动直连,国内访问速度不错。下面分享几款VPS主机配置信息。CPU:1core内存:512MB硬盘:...

搬瓦工:新增荷兰机房 EUNL_9 测评,联通 AS10099/AS9929 高端优化路线/速度 延迟 路由 丢包测试

搬瓦工最近上线了一个新的荷兰机房,荷兰 EUNL_9 机房,这个 9 的编号感觉也挺随性的,之前的荷兰机房编号是 EUNL_3。这次荷兰新机房 EUNL_9 采用联通 AS9929 高端路线,三网都接入了 AS9929,对于联通用户来说是个好消息,又多了一个选择。对于其他用户可能还是 CN2 GIA 机房更合适一些。其实对于联通用户,这个荷兰机房也是比较远的,相比之下日本软银 JPOS_1 机房可...

69uuu.com为你推荐
微盟赔付方案如果合同没有约定违约金赔偿方案,违约怎么索赔·firetrap我发现好多外贸店都卖其乐的原单,有怎么多原单吗18comic.fun贴吧经常有人说A站B站,是什么意思啊?杰景新特杰德特这个英雄怎么样罗伦佐娜米开朗琪罗简介百度关键词分析关键词怎么分析?porndao单词prondao的汉语是什么336.com求一个游戏的网站 你懂得javmoo.com找下载JAV软件格式的网站ip查询器查看自己IP的指令
申请个人网页 免空 微信收钱 cdn联盟 服务器是干什么的 酷番云 广东服务器托管 ipower 删除域名 美国西雅图独立 六维空间登陆首页 双宿主机防火墙 灵动鬼影实录 彩虹云点播不能用了 韩剧网789 starrystarrynight 好玩的免费网络游戏 qq免费网络电话 带宽测试软件 电信带宽测试 更多