寄存器正在跳转电影空间

正在跳转电影空间  时间:2021-04-12  阅读:()
充电器Flash单片机HT45F5Q-2版本:V1.
10日期:2019-11-07Rev.
1.
1022019-11-07目录特性6CPU特性6周边特性6概述7方框图7引脚图8引脚说明8极限参数10直流电气特性10工作电压特性10待机电流特性11工作电流特性11交流电气特性12内部高速振荡器HIRC频率精确度.
12内部低速振荡器LIRC电气特性.
12系统上电时间电气特性12输入/输出口电气特性13存储器电气特性13LVR电气特性14A/D转换器电气特性.
14D/A转换器电气特性.
15运算放大器电气特性15上电复位特性16系统结构16时序和流水线结构16程序计数器17堆栈18算术逻辑单元–ALU18Flash程序存储器.
19结构19特殊向量19查表19查表范例20在线烧录–ICP.
21片上调试–OCDS.
21数据存储器22结构22通用功能数据存储器22特殊功能数据存储器23Rev.
1.
1032019-11-07特殊功能寄存器24间接寻址寄存器–IAR0,IAR124间接寻址指针–MP0,MP1.
24存储区指针–BP24累加器–ACC25程序计数器低字节寄存器–PCL.
25表格寄存器–TBLP,TBLH.
25状态寄存器–STATUS.
25EEPROM数据存储器.
27EEPROM数据存储器结构.
27EEPROM寄存器.
27从EEPROM中读取数据.
28写数据到EEPROM.
28写保护29EEPROM写中断.
29编程注意事项29振荡器30振荡器概述30系统时钟配置30内部高速RC振荡器–HIRC31内部32kHzRC振荡器–LIRC.
31工作模式和系统时钟32系统时钟32系统工作模式32控制寄存器34工作模式切换35待机电流的注意事项38唤醒38看门狗定时器39看门狗定时器时钟源39看门狗定时器控制寄存器39看门狗定时器操作40复位和初始化41复位功能41复位初始状态43输入/输出端口46上拉电阻46PA口唤醒47输入/输出端口控制寄存器.
47引脚共用功能47输入/输出引脚结构.
50编程注意事项51定时器模块–TM.
52简介52Rev.
1.
1042019-11-07TM操作52TM时钟源52TM中断52TM外部引脚52编程注意事项53简易型TM–CTM.
54简易型TM操作54简易型TM寄存器介绍54简易型TM工作模式58A/D转换器.
64A/D简介64A/D转换寄存器介绍64A/D操作67A/D转换器参考电压67A/D转换器输入信号68A/D转换率及时序图68A/D转换步骤69编程注意事项69A/D转换功能70A/D转换应用范例70电池充电模块72电池充电控制寄存器72运算放大器74UART串行接口75UART外部引脚.
75UART数据传输方案.
76UART状态和控制寄存器.
76波特率发生器80UART模块的设置与控制.
81UART发送器.
82UART接收器.
83接收错误处理84UART模块中断结构.
85UART模块暂停和唤醒.
86中断87中断寄存器87中断操作90外部中断91UART中断.
91时基中断91A/D转换器中断93EEPROM中断.
93多功能中断93TM中断93Rev.
1.
1052019-11-07中断唤醒功能93编程注意事项94应用说明章节95简介95功能说明95指令集97简介97指令周期97数据的传送97算术运算97逻辑和移位运算97分支和控制转换98位运算98查表运算98其它运算98指令集概要99惯例99指令定义102封装信息11420-pinNSOP(150mil)外形尺寸.
115Rev.
1.
1062019-11-07特性CPU特性工作电压:fSYS=8MHz:2.
2V~5.
5VVDD=5V,系统时钟为8MHz时,指令周期为0.
5μs提供暂停和唤醒功能,以降低功耗振荡器类型:内部高速8MHzRC–HIRC内部低速32kHzRC–LIRC内部集成高速和低速RC振荡器,无需外接元件多种工作模式:快速模式、低速模式、空闲模式和休眠模式所有指令都可在1或2个指令周期内完成查表指令63条指令6层堆栈位操作指令周边特性Flash程序存储器:2K*16RAM数据存储器:128*8TrueEEPROM存储器:32*8看门狗定时器15个双向I/O口单个引脚与外部中断口共用1个10-bitCTM用于时间测量、比较匹配输出及PWM输出全双工通用异步接收/发送接口–UART双时基功能用以产生固定的中断信号多通道12-bitA/D转换器电池充电电路1个固定放大倍数OPA用于电流检测12-bitD/A与OPA用于电压控制8-bitD/A与OPA用于电流控制低电压复位功能封装类型:20-pinNSOPRev.
1.
1072019-11-07概述针对AC/DC充电器,ChargerASSPFlashMCUHT45F5Q-2内置充电管理模块(BatteryChargeModule),用于恒压(CV)及恒流(CC)闭环充电控制,以取代传统外接TL431、OPA及电阻模拟DAC等电路,使外围电路更精简,从而节省产品PCB尺寸.
充电管理模块由二个部份组成,第一部份为二组OPA与DAC,用于控制充电电压及电流,充电器的CV/CC上限值可由软件设置DAC而得,CV控制采用其中的12-bitDAC,而CC控制则采用8-bitDAC.
第二部份为一组固定放大倍数OPA,用于电流讯号放大,可达到提升电流分辨率并降低检测电阻功率的功效.
充电管理模块中的DAC,除了用于设置充电器CV/CC阈值外,亦可搭配产线治具,改良传统生产时的人工校准方法,由外部治具先确认充电器当前电压/电流情况,若发现超过误差范围,HT45F5Q-2以微调DAC方式将误差修正,并将修正后参数储存在EEPROM中,待充电器重新上电时,将赋予DAC新的校正值,以达到校正目的,更详细信息可参考Holtek网站应用笔记.
方框图InterruptController12-bitADCPA0~PA7AVDDResetCircuitLVRStack6LevelsRAM128x8ROM2Kx16EEPROM32x8WatchdogTimerPortADriverDigitalPeripheralsOPAELIRC32KHzHIRC8MHzOPA1PINTAN0~AN5Pin-SharedWithPA,PBPortI/OCTMPin-Shared&Pin-RemappingFunctionVDD/AVDDVSS/AVSSVDDAVDDVSSAVSSSYSCLKUARTOPA1NOPA2POPA0POPA0N+_+_12-bitDAC8-bitDACHT8MCUCoreClockSystemBatteryChargeModuleAnalogPeripheralsPin-SharedWithPortAPB0~PB6PortBDriverBusMUXMUXOPAOPAOPAAVDDAVDDVREFPin-SharedWithPB1ConstantCurrentConstantVoltageRev.
1.
1082019-11-07引脚图2019181716151413121112345678910PA5/OPA0P/RXOPA0NPB6PB0/AN0OPAEVDD/AVDDOPA1NVSS/AVSSPA6/OPA1P/TXPA1/OPA2PPA7/CTP/TXPA4/CTPBPA2/OCDSCK/ICPCK/RXPB2/AN2PB3/AN3PB1/AN1/VREFPA3/INTPA0/OCDSDA/ICPDA/TXPB4/AN4HT45F5Q-2/HT45V5Q-220NSOP-APB5/AN5/CTCK/RX注:1.
若共用引脚同时有多种输出,所需引脚共用功能由相应的软件控制位决定.
2.
OCDSDA和OCDSCK引脚为片上调试功能专用引脚,仅存在于HT45F5Q-2的OCDSEV芯片HT45V5Q-2.
引脚说明每个引脚的功能如下表所述,而引脚配置的详细内容见规格书其它章节.
引脚名称功能OPTI/TO/T说明PA0/OCDSDA/ICPDA/TXPA0PAPUPAWUPAS0STCMOS通用I/O口,可通过寄存器设置上拉电阻和唤醒功能OCDSDA—STCMOSOCDS数据/地址,仅用于EV芯片ICPDA—STCMOSICP数据/地址TXPAS0—CMOSUARTTX串行数据输出PA1/OPA2PPA1PAPUPAWUPAS0STCMOS通用I/O口,可通过寄存器设置上拉电阻和唤醒功能OPA2PPAS0AN—运算放大器2正端输入PA2/OCDSCK/ICPCK/RXPA2PAPUPAWUPAS0STCMOS通用I/O口,可通过寄存器设置上拉电阻和唤醒功能OCDSCK—ST—OCDS时钟,仅用于EV芯片ICPCK—ST—ICP时钟RXPAS0IFSST—UARTRX串行数据输入PA3/INTPA3PAPUPAWUSTCMOS通用I/O口,可通过寄存器设置上拉电阻和唤醒功能INTINTEGINTC0ST—外部中断输入PA4/CTPBPA4PAPUPAWUPAS1STCMOS通用I/O口,可通过寄存器设置上拉电阻和唤醒功能CTPBPAS1—CMOSCTM反相输出Rev.
1.
1092019-11-07引脚名称功能OPTI/TO/T说明PA5/OPA0P/RXPA5PAPUPAWUPAS1STCMOS通用I/O口,可通过寄存器设置上拉电阻和唤醒功能OPA0PPAS1AN—运算放大器0正端输入RXPAS1IFSST—UARTRX串行数据输入PA6/OPA1P/TXPA6PAPUPAWUPAS1STCMOS通用I/O口,可通过寄存器设置上拉电阻和唤醒功能OPA1PPAS1AN—运算放大器1正端输入TXPAS1—CMOSUARTTX串行数据输出PA7/CTP/TXPA7PAPUPAWUPAS1STCMOS通用I/O口,可通过寄存器设置上拉电阻和唤醒功能CTPPAS1—CMOSCTM输出TXPAS1—CMOSUARTTX串行数据输出PB0/AN0PB0PBPUPBS0STCMOS通用I/O口,可通过寄存器设置上拉电阻功能AN0PBS0AN—A/D转换器输入通道0PB1/AN1/VREFPB1PBPUPBS0STCMOS通用I/O口,可通过寄存器设置上拉电阻功能AN1PBS0AN—A/D转换器输入通道1VREFPBS0AN—A/D转换器外部参考电压输入PB2/AN2PB2PBPUPBS0STCMOS通用I/O口,可通过寄存器设置上拉电阻功能AN2PBS0AN—A/D转换器输入通道2PB3/AN3PB3PBPUPBS0STCMOS通用I/O口,可通过寄存器设置上拉电阻功能AN3PBS0AN—A/D转换器输入通道3PB4/AN4PB4PBPUPBS1STCMOS通用I/O口,可通过寄存器设置上拉电阻功能AN4PBS1AN—A/D转换器输入通道4PB5/AN5/CTCK/RXPB5PBPUPBS1STCMOS通用I/O口,可通过寄存器设置上拉电阻功能AN5PBS1AN—A/D转换器输入通道5CTCKPBS1ST—CTM时钟输入RXPBS1IFSST—UARTRX串行数据输入PB6PB6PBPUSTCMOS通用I/O口,可通过寄存器设置上拉电阻功能OPA0NOPA0N—AN—运算放大器0负端输入OPA1NOPA1N—AN—运算放大器1负端输入OPAEOPAE——AN运算放大器输出Rev.
1.
10102019-11-07引脚名称功能OPTI/TO/T说明VDD/AVDDVDD—PWR—MCU正电源AVDD—PWR—模拟正电源VSS/AVSSVSS—PWR—地AVSS—PWR—模拟地注:I/T:输入类型O/T:输出类型OPT:通过寄存器选项来配置PWR:电源ST:施密特触发输入CMOS:CMOS输出AN:模拟信号极限参数电源供应电压.
VSS-0.
3V~VSS+6.
0V端口输入电压.
VSS-0.
3V~VDD+0.
3V储存温度.
50C~125C工作温度.
40C~85CIOH总电流80mAIOL总电流.
80mA总功耗.
500mW注:这里只强调额定功率,超过极限参数所规定的范围将对芯片造成损害,无法预期芯片在上述标示范围外的工作状态,而且若长期在标示范围外的条件下工作,可能影响芯片的可靠性.
直流电气特性以下表格中参数测量结果可能受多个因素影响,如振荡器类型、工作温度、工作频率、引脚负载状况、温度和程序指令等等.
工作电压特性Ta=-40°C~85°C符号参数测试条件最小典型最大单位VDD条件VDD工作电压–HIRC—fSYS=fHIRC=8MHz2.
2—5.
5V工作电压–LIRC—fSYS=fLIRC=32kHz2.
2—5.
5VRev.
1.
10112019-11-07待机电流特性Ta=25°C符号待机模式测试条件最小典型最大最大单位VDD条件85°CISTB休眠模式3VWDTo,OPA0/1使能—300800810μA5V—600120012103VWDTon,OPA0/1使能—300800810μA5V—60012001210空闲模式0–LIRC3VfSUBon,OPA0/1使能—300800810μA5V—60012001210空闲模式1–HIRC3VfSUBon,fSYS=8MHz,OPA0/1使能—66011001200μA5V—120020002160注:当使用该表格电气特性数据时,以下几点需注意:1.
任何数字输入都设置为非浮空的状态.
2.
所有测量都在无负载且所有外围功能关闭的条件下进行.
3.
无直流电流路径.
4.
所有待机电流数值都是在HALT指令执行后测得,所有指令停止执行.
工作电流特性Ta=25°C符号工作模式测试条件最小典型最大单位VDD条件IDD低速模式–LIRC2.
2VfSYS=32kHz,OPA0/1使能—230300μA3V—3108205V—6301250快速模式–HIRC2.
2VfSYS=8MHz,OPA0/1使能—0.
60.
8mA3V—1.
12.
05V—2.
23.
6注:当使用该表格电气特性数据时,以下几点需注意:1.
任何数字输入都设置为非浮空的状态.
2.
所有测量都在无负载且所有外围功能关闭的条件下进行.
3.
无直流电流路径.
4.
所有工作电流数据都是在执行连续NOP指令程序回路下进行测量.
Rev.
1.
10122019-11-07交流电气特性以下表格中参数测量结果可能受多个因素影响,如振荡器类型、工作电压、工作频率和温度等等.
内部高速振荡器HIRC频率精确度程序烧录时,烧录器会在用户选择的3V或5V电压及选择的频率下trimHIRC振荡器.
符号参数测试条件最小典型最大单位VDD温度fHIRCHIRC频率trim在8MHz3V/5V25°C-1%8+1%MHz-40°C~85°C-2%8+2%2.
2V~5.
5V25°C-2.
5%8+2.
5%-40°C~85°C-3%8+3%注:1.
烧录器可选择在3V/5V这两个电压下trimHIRC频率,在此提供VDD=3V/5V时的参数值.
2.
表格中3V/5V一列下面提供的是全压条件下的参数值.
3.
表格中提供的为将HIRC频率通过应用程序设置在烧录器trim的频率值时,频率的最小和最大误差值.
若通过应用程序设置HIRC频率为其它非trim时的值,则其误差范围将增加到±20%.
内部低速振荡器LIRC电气特性Ta=25°C,除非有特别说明符号参数测试条件最小典型最大单位VDD温度fLIRCLIRC频率2.
2V~5.
5V-40°C~85°C83250kHz系统上电时间电气特性Ta=-40°C~85°C符号参数测试条件最小典型最大单位tSST系统启动时间(从fSYSo的状态下唤醒)fSYS=fH~fH/64,fH=fHIRC—16—tHIRCfSYS=fSUB=fLIRC—2—tLIRC系统启动时间(从fSYSon的状态下唤醒)fSYS=fH~fH/64,fH=fHIRC—2—tHfSYS=fSUB=fLIRC—2—tSUB系统速度切换时间(快速模式→低速模式或低速模式→快速模式)fHIRCo→on—16—tHIRCtRSTD系统复位延迟时间(上电复位或LVR硬件复位)RRPOR=5V/ms2050150ms系统复位延迟时间(LVRC/WDTC软件复位)—系统复位延迟时间(WDT溢出)—8.
316.
750mstSRESET最小软件复位时间—4090375μs注:1.
系统启动时间里提到的fSYSon/o状态取决于工作模式类型以及所选的系统时钟振荡器.
更多相关细节请参考系统工作模式章节.
2.
tHIRC等符号所表示的时间单位,是对应频率值的倒数,相关频率值在前面表格有说明.
例如,tHIRC=1/fHIRC,tSYS=1/fSYS等等.
3.
系统速度切换时间实际上是指新使能的振荡器的启动时间.
Rev.
1.
10132019-11-07输入/输出口电气特性Ta=25°C符号参数测试条件最小典型最大单位VDD条件VILI/O口低电平输入电压5V—0—1.
5V——0—0.
2VDDVIHI/O口高电平输入电压5V—3.
5—5.
0V——0.
8VDD—VDDIOLI/O口灌电流3VVOL=0.
1VDD15.
531—mA5V3162—IOHI/O口源电流3VVOH=0.
9VDD-3.
5-7.
0—mA5V-7.
2-14.
5—RPHI/O口上拉电阻(注)3V—2060100kΩ5V—103050ILEAK输入漏电流5VVIN=VDD或VIN=VSS——±1μAtTCKTM时钟输入最小脉宽——0.
3——μstINT外部中断最小输入脉宽——0.
3——μs注:RPH内部上拉电阻值的计算方法是:将其接地并使能输入引脚的上拉电阻选项,然后在特定电源电压下测量输入灌电流,在此基础上测量上拉电阻上的分压从而得到此上拉电阻值.
存储器电气特性Ta=-40°C~85°C符号参数测试条件最小典型最大单位VDD条件VRW读/写工作电压——VDDmin—VDDmaxVFlash程序存储器/EEPROM存储器tDEWFlashROM擦除/写周期时间———23msEEPROM写周期时间———46msIDDPGMVDD电压下烧录/擦除电流————5.
0mAEP产品耐受性–Flash程序存储器——10K——E/W产品耐受性–EEPROM存储器——100K——tRETD程序存储器数据保存时间—Ta=25°C—40—YearRAM数据存储器VDRRAM数据保存电压—单片机处于SLEEP模式1.
0——VRev.
1.
10142019-11-07LVR电气特性Ta=25°C符号参数测试条件最小典型最大单位VDD条件VLVR低电压复位电压—LVR使能-5%2.
1+5%VILVRLVR使能的额外电流5V———90μAtLVRLVR最小低电压保持时间——0.
140.
61.
0msA/D转换器电气特性Ta=-40°C~85°C,除非有特别说明符号参数测试条件最小典型最大单位VDD条件VDDA/D转换器工作电压——2.
2—5.
5VVADIA/D转换器输入电压——0—VREFVVREFA/D转换器参考电压——2—VDDVDNL非线性微分误差3VVREF=VDD,tADCK=0.
5μs——±3LSB5V3VVREF=VDD,tADCK=10μs5VINL非线性积分误差3VVREF=VDD,tADCK=0.
5μs——±4LSB5V3VVREF=VDD,tADCK=10μs5VIADCA/D转换器使能的额外电流3V无负载,tADCK=0.
5μs—12mA5V—1.
53mAtADCK时钟周期——0.
5—10μstON2STA/D转换器On-to-Start时间——4——μstADS采样时间———4—tADCKtADC转换时间(包括A/D采样和保持时间)———16—tADCKGERR增益误差3VVREF=VDD-4—4LSB5VOSRR偏置误差3VVREF=VDD-4—4LSB5VRev.
1.
10152019-11-07D/A转换器电气特性Ta=-40°C~85°C,除非有特别说明符号参数测试条件最小典型最大单位VDD条件VDDD/A转换器工作电压——2.
2—5.
5VVDACOD/A转换器输出电压范围——VSS—VDDVIDAC0D/A转换器0使能的额外电流5V——500600μAIDAC1D/A转换器1使能的额外电流5V——500600μAtST建立时间5VCLOAD=50pF——5μsDNLD/A转换器0非线性微分误差5VVREF=VDD——±1LSBD/A转换器1非线性微分误差5VVREF=VDD—±4±10LSBINLD/A转换器0非线性积分误差5VVREF=VDD——±1.
5LSBD/A转换器1非线性积分误差5VVREF=VDD—±6±12LSBRoD/A转换器0R2R输出电阻5V——10—kΩD/A转换器1R2R输出电阻5V——13—kΩ运算放大器电气特性Ta=-40°C~85°C,除非有特别说明符号参数测试条件最小典型最大单位VDD条件IOPA每个OPA使能的额外电流5V无负载—300600μAVOS输入失调电压5V未校准-15—15mV5VOPA2校准后-2—2mVVCM共模电压范围5V—VSS—VDD-1.
4VVOR最大输出电压范围5V—VSS+0.
1—VDD-0.
1VSR转换速率5V无负载0.
61.
8—V/μsGBW增益带宽5VRLOAD=1MΩ,CLOAD=100pF1.
01.
8—MHzPSRR电源抑制比5V—6080—dBCMRR共模抑制比5V—6080—dBISINK输出灌电流3VVOL=0.
3V0.
71.
2—mA5VVOL=0.
5V1.
62.
8—mAISOURCE输出源电流3VVOH=2.
7V0.
61.
0—mA5VVOH=4.
5V1.
42.
4—mARev.
1.
10162019-11-07上电复位特性Ta=25°C符号参数测试条件最小典型最大单位VDD条件VPOR上电复位电压————100mVRRPOR上电复位电压速率——0.
035——V/mstPORVDD保持为VPOR的最小时间——1——msVDDtPORRRPORVPORTime系统结构内部系统结构是Holtek单片机具有良好性能的主要因素.
由于采用RISC结构,该单片机具有高运算速度和高性能的特点.
通过流水线的方式,指令的取得和执行同时进行,此举使得除了跳转和调用指令外,其它指令都能在一个指令周期内完成.
8位ALU参与指令集中所有的运算,它可完成算术运算、逻辑运算、移位、递增、递减和分支等功能,而内部的数据路径则是以通过累加器和ALU的方式加以简化.
有些寄存器在数据存储器中被实现,且可以直接或间接寻址.
简单的寄存器寻址方式和结构特性,确保了在提供具有最大可靠度和灵活性的I/O和A/D控制系统时,仅需要少数的外部器件.
使得这款单片机适用于低成本和大量生产的控制应用.
时序和流水线结构主系统时钟由HIRC或LIRC振荡器提供,它被细分为T1~T4四个内部产生的非重叠时序.
在T1时间,程序计数器自动加一并抓取一条新的指令.
剩下的时间T2~T4完成译码和执行功能,因此,一个T1~T4时钟周期构成一个指令周期.
虽然指令的抓取和执行发生在连续的指令周期,但单片机流水线结构会保证指令在一个指令周期内被有效执行.
除非程序计数器的内容被改变,如子程序的调用或跳转,在这种情况下指令将需要多一个指令周期的时间去执行.
Rev.
1.
10172019-11-07FetchInst.
(PC)(SystemClock)fSYSPhaseClockT1PhaseClockT2PhaseClockT3PhaseClockT4ProgramCounterPCPC+1PC+2PipeliningExecuteInst.
(PC-1)FetchInst.
(PC+1)ExecuteInst.
(PC)FetchInst.
(PC+2)ExecuteInst.
(PC+1)系统时序和流水线如果指令牵涉到分支,例如跳转或调用等指令,则需要两个指令周期才能完成指令执行.
需要一个额外周期的原因是程序先用一个周期取出实际要跳转或调用的地址,再用另一个周期去实际执行分支动作,因此用户需要特别考虑额外周期的问题,尤其是在执行时间要求较严格的时候.
FetchInst.
11MOVA,[12H]2CALLDELAY3CPL[12H]4:5:6DELAY:NOPExecuteInst.
1FetchInst.
2ExecuteInst.
2FetchInst.
3FlushPipelineFetchInst.
6ExecuteInst.
6FetchInst.
7指令捕捉程序计数器在程序执行期间,程序计数器用来指向下一个要执行的指令地址.
除了"JMP"和"CALL"指令需要跳转到一个非连续的程序存储器地址之外,它会在每条指令执行完成以后自动加一.
只有较低的8位,即所谓的程序计数器低字节寄存器PCL,可以被用户直接读写.
当执行的指令要求跳转到不连续的地址时,如跳转指令、子程序调用、中断或复位等,单片机通过加载所需要的地址到程序寄存器来控制程序,对于条件跳转指令,一旦条件符合,在当前指令执行时取得的下一条指令将会被舍弃,而由一个空指令周期来取代.
程序计数器程序计数器高字节PCL寄存器PC10~PC8PCL7~PCL0程序计数器程序计数器的低字节,即程序计数器的低字节寄存器PCL,可以通过程序控制,且它是可以读取和写入的寄存器.
通过直接写入数据到这个寄存器,一个程序短跳转可直接执行,然而只有低字节的操作是有效的,跳转被限制在存储器的当前页中,即256个存储器地址范围内,当这样一个程序跳转要执行时,会插入一个空指令周期.
程序计数器的低字节可由程序直接进行读取,PCL的使用可能引起程序跳转,因此需要额外的指令周期.
Rev.
1.
10182019-11-07堆栈堆栈是一个特殊的存储空间,用来存储程序计数器中的内容.
此单片机有6层堆栈,堆栈既不是数据部分也不是程序空间部分,而且它既不是可读取也不是可写入的.
当前层由堆栈指针(SP)加以指示,同样也是不可读写的.
在子程序调用或中断响应服务时,程序计数器的内容被压入到堆栈中.
当子程序或中断响应结束时,返回指令(RET或RETI)使程序计数器从堆栈中重新得到它以前的值.
当一个芯片复位后,堆栈指针将指向堆栈顶部.
如果堆栈已满,且有非屏蔽的中断发生,中断请求标志会被置位,但中断响应将被禁止.
当堆栈指针减少(执行RET或RETI),中断将被响应.
这个特性提供程序设计者简单的方法来预防堆栈溢出.
然而即使堆栈已满,CALL指令仍然可以被执行,而造成堆栈溢出.
使用时应避免堆栈溢出的情况发生,因为这可能导致不可预期的程序分支指令执行错误.
若堆栈溢出,则首个存入堆栈的程序计数器数据将会丢失.
StackPointerStackLevel2StackLevel1StackLevel3:::StackLevel6ProgramMemoryProgramCounterBottomofStackTopofStack算术逻辑单元–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.
10192019-11-07Flash程序存储器程序存储器用来存放用户代码即储存程序.
程序存储器为Flash类型意味着可以多次重复编程,方便用户使用同一芯片进行程序的修改.
使用适当的单片机编程工具,此单片机提供用户灵活便利的调试方法和项目开发规划及更新.
结构程序存储器的容量为2K*16位,程序存储器用程序计数器来寻址,其中也包含数据、表格和中断入口.
数据表格可以设定在程序存储器的任何地址,由表格指针来寻址.
000H004H01CH7FFHResetInterruptVectors16bits程序存储器结构特殊向量程序存储器内部某些地址保留用做诸如复位和中断入口等特殊用途.
地址000H是芯片复位后的程序起始地址.
在芯片复位之后,程序将跳到这个地址并开始执行.
查表程序存储器中的任何地址都可以定义成一个表格,以便储存固定的数据.
使用表格时,表格指针必须先行设定,其方式是将表格的地址放在表格指针寄存器TBLP中.
这个寄存器定义表格总的地址.
在设定完表格指针后,表格数据可以使用"TABRDC[m]"或"TABRDL[m]"指令分别从程序存储器查表读取.
当这些指令执行时,程序存储器中表格数据低字节,将被传送到使用者所指定的数据存储器[m],程序存储器中表格数据的高字节,则被传送到TBLH特殊寄存器,而高字节中未使用的位将被读取为"0".
下图是查表中寻址/数据流程:Rev.
1.
10202019-11-07PCHighByteAddressTBLPRegisterData16bitsProgramMemoryRegisterTBLHUserSelectedRegisterHighByteLowByteLastpageorpresentpagePC10~PC8查表范例以下范例说明表格指针和表格数据如何被定义和执行.
这个例子使用的表格数据用ORG伪指令储存在存储器中.
ORG指令的值"700H"指向的地址是2K程序存储器中最后一页的起始地址.
表格指针的初始值设为06H,这可保证从数据表格读取的第一笔数据位于程序存储器地址706H,即最后一页起始地址后的第六个地址.
值得注意的是,假如"TABRDL[m]"指令被使用,则表格指针指向最后一页的第一个地址.
在这个例子中,表格数据的高字节等于零,而当"TABRDL[m]"指令被执行时,此值将会自动的被传送到TBLH寄存器.
TBLH寄存器为只读寄存器,不能重新储存,若主程序和中断服务程序都使用表格读取指令,应该注意它的保护.
使用表格读取指令,中断服务程序可能会改变TBLH的值,若随后在主程序中再次使用这个值,则会发生错误,因此建议避免同时使用表格读取指令.
然而在某些情况下,如果同时使用表格读取指令是不可避免的,则在执行任何主程序的表格读取指令前,中断应该先除能,另外要注意的是所有与表格相关的指令,都需要两个指令周期去完成操作.
表格读取程序范例tempreg1db;temporaryregister#1tempreg2db;temporaryregister#2::mova,06h;initialiselowtablepointer-notethatthisaddress;isreferencedmovtblp,a;tothelastpageorpresentpage::tabrdltempreg1;transfersvalueintablereferencedbytablepointer;dataatprogrammemoryaddress"706H"transferredto;tempreg1andTBLHdectblp;reducevalueoftablepointerbyonetabrdltempreg2;transfersvalueintablereferencedbytablepointer;dataatprogrammemoryaddress"705H"transferredto;tempreg2andTBLHinthisexamplethedata"1AH"is;transferredtotempreg1anddata"0FH"toregister;tempreg2,thevalue"00H"willbetransferredtothe;highbyteregisterTBLH::org0700h;setsinitialaddressofprogrammemorydc00Ah,00Bh,00Ch,00Dh,00Eh,00Fh,01Ah,01BhRev.
1.
10212019-11-07在线烧录–ICPFlash型程序存储器提供用户便利地对同一芯片进行程序的更新和修改.
另外,Holtek单片机提供4线接口的在线烧录方式.
用户可将进行过烧录或未经过烧录的单片机芯片连同电路板一起制成,最后阶段进行程序的更新和程序的烧录,在无需去除或重新插入芯片的情况下方便地保持程序为最新版.
Holtek烧录器引脚名称MCU在线烧录引脚名称功能ICPDAPA0串行数据/地址烧录ICPCKPA2时钟烧录VDDVDD电源VSSVSS地芯片内部程序存储器和EEPROM存储器都可以通过4线的接口在线进行烧录.
其中PA0用于数据串行下载或上传、PA2用于串行时钟、另外两条用于提供电源.
芯片在线烧写的详细使用说明超出此文档的描述范围,将由专门的参考文献提供.
在烧录过程中,烧录器会控制ICPDA和ICPCK脚进行数据和时钟烧录,用户必须确保这两个引脚没有连接至其它输出脚.
**Writer_VDDICPDAICPCKWriter_VSSTootherCircuitVDDPA0PA2VSSWriterConnectorSignalsMCUProgrammingPins注:*可能为电阻或电容.
若为电阻则其值必须大于1kΩ,若为电容则其必须小于1nF.
片上调试–OCDSEV芯片HT45V5Q-2用于单片机HT45F5Q-2仿真.
此EV芯片提供片上调试功能(OCDS)用于开发过程中的单片机调试.
除了片上调试功能方面,EV芯片和实际MCU在功能上几乎是兼容的.
用户可将OCDSDA和OCDSCK引脚连接至HoltekHT-IDE开发工具,从而实现EV芯片对实际IC的仿真.
OCDSDA引脚为OCDS数据/地址输入/输出脚,OCDSCK引脚为OCDS时钟输入脚.
当用户用EV芯片进行调试时,实际单片机OCDSDA和OCDSCK引脚上的其它共用功能无效.
关于OCDS功能的详细描述,请参考"Holteke-Linkfor8-bitMCUOCDS使用手册"文件.
Holteke-Link引脚名称EV芯片引脚名称功能OCDSDAOCDSDA片上调试串行数据/地址输入/输出OCDSCKOCDSCK片上调试时钟输入VDDVDD电源VSSVSS地Rev.
1.
10222019-11-07数据存储器数据存储器是内容可更改的8位RAM内部存储器,用来储存临时数据.
结构数据存储器分为两个部分,第一部分是特殊功能数据存储器.
这些寄存器有固定的地址且与单片机的正确操作密切相关.
大多特殊功能寄存器都可在程序控制下直接读取和写入,但有些被加以保护而不对用户开放.
第二部分数据存储器是做一般用途使用,都可在程序控制下进行读取和写入.
总的数据存储器被分为两个Bank.
位于Bank0地址"00H~3FH"及Bank1地址"40H"的特殊功能数据寄存器可被访问.
切换不同区域可通过设置存储区指针(BP)实现.
单片机的数据存储器的起始地址是"00H".
特殊功能数据存储器通用数据存储器有效BankBank容量Bank0,1Bank0:00H~3FHBank1:40H(EEC)128*8Bank0:40H~BFH数据存储器概要00H40HBFHSpecialPurposeDataMemoryGeneralPurposeDataMemoryBank0Bank13FH数据存储器结构通用功能数据存储器所有单片机的程序需要一个读/写的存储区,让临时数据可以被储存和再使用.
该区域就是通用数据存储器.
用户可对此区域进行读取和写入操作.
使用位操作指令可对个别位进行设置或复位的操作,方便用户在数据存储器中进行位操作.
Rev.
1.
10232019-11-07特殊功能数据存储器这个区域的数据存储器是存放特殊寄存器的,它和单片机的正确操作密切相关.
大多数寄存器是可以读取和写入,只有一些是被写保护而只可读取的,相关的介绍请参考特殊功能寄存器的部分.
需注意,任何读取指令对于未定义的地址读取将返回"00H"的值.
Bank0Bank100H01H02H03HIAR0MP0IAR1MP1BP04HACC05HPCL06HTBLP07HTBLH08H09HSTATUS0AH0BH0CH0DH0EHRSTFC0FHSADOL10HSADOH11H12H13HPA14HPAC15HPAPU16HPAWU17HPB18HPBC19HPBPU1AHSCC1BH1CHTB0C1DHTB1C1EHUSR1FHBank0Bank1SADC0SADC1HIRCCUCR120HUCR221HTXR_RXR22H23H24H25H26H27H28H29H2AH2BH2CH2DH2EH2FHWDTCCTMC0CTMC1INTEGMFIINTC1BRGCTMDLCTMALCTMAHINTC0CTMDH:unused,readas00H30H31H32H33H34H35H36H37H38H39H3AH3BH3CH3DH3EH3FHEECEEADA1LDA1HDAOPCOPVOSPAS0PAS1LVRCDA0EEDPBS1PSCRIFSPBS040H特殊功能数据存储器结构Rev.
1.
10242019-11-07特殊功能寄存器大部分特殊功能寄存器的细节将在相关功能章节描述,但有几个寄存器需在此章节单独描述.
间接寻址寄存器–IAR0,IAR1间接寻址寄存器IAR0和IAR1的地址虽位于数据存储区,但其并没有实际的物理地址.
间接寻址的方法准许使用存储器指针做数据操作,以取代定义实际存储器地址的直接存储器寻址方法.
在间接寻址寄存器IAR0和IAR1上的任何动作,将对存储器指针MP0和MP1所指定的存储器地址产生对应的读/写操作.
它们总是成对出现,可以一起访问数据存储器中的数据.
因为这些间接寻址寄存器不是实际存在的,直接读取将返回"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地址.
存储区指针–BP数据存储器被分为两个Bank,即Bank0和Bank1.
可以通过设置存储区指针(BankPointer)值来访问不同的数据存储区.
BP指针的第0位用于选择数据存储器的Bank0或Bank1.
复位后,数据存储器会初始化到Bank0,但是在休眠或空闲模式下的WDT溢出复位,不会改变通用数据存储器的存储区号.
应该注意的是特殊功能数据存Rev.
1.
10252019-11-07储器不受存储区的影响,也就是说,不论是在哪一个存储区,都能对特殊功能寄存器进行读写操作.
数据存储器的直接寻址总是访问Bank0,不影响存储区指针的值.
要访问Bank1,则必须要使用间接寻址方式.
BP寄存器Bit76543210NameDMBP0R/WR/WPOR0Bit7~1未使用,读为"0"Bit0DMBP0:数据存储区选择位0:Bank01:Bank1累加器–ACC对任何单片机来说,累加器是相当重要的,且与ALU所完成的运算有密切关系,所有ALU得到的运算结果都会暂时存在ACC累加器里.
若没有累加器,ALU必须在每次进行如加法、减法和移位的运算时,将结果写入到数据存储器,这样会造成程序编写和时间的负担.
另外数据传送也常常牵涉到累加器的临时储存功能,例如在使用者定义的一个寄存器和另一个寄存器之间传送数据时,由于两寄存器之间不能直接传送数据,因此必须通过累加器来传送数据.
程序计数器低字节寄存器–PCL为了提供额外的程序控制功能,程序计数器低字节设置在数据存储器的特殊功能区域内,程序员可对此寄存器进行操作,很容易的直接跳转到其它程序地址.
直接给PCL寄存器赋值将导致程序直接跳转到程序存储器的某一地址,然而由于寄存器只有8位长度,因此只允许在本页的程序存储器范围内进行跳转,而当使用这种运算时,要注意会插入一个空指令周期.
表格寄存器–TBLP,TBLH这两个特殊功能寄存器对存储在程序存储器中的表格进行操作.
TBLP为表格指针,指向表格数据存储的地址.
它的值必须在任何表格读取指令执行前加以设定,由于它的值可以被如"INC"或"DEC"的指令所改变,这就提供了一种简单的方法对表格数据进行读取.
表格读取数据指令执行之后,表格数据高字节存储在TBLH中.
其中要注意的是,表格数据低字节会被传送到使用者指定的地址.
状态寄存器–STATUS这8位的状态寄存器由零标志位(Z)、进位标志位(C)、辅助进位标志位(AC)、溢出标志位(OV)、暂停标志位(PDF)和看门狗定时器溢出标志位(TO)组成.
这些算术/逻辑操作和系统运行标志位是用来记录单片机的运行状态.
除了PDF和TO标志外,状态寄存器中的位像其它大部分寄存器一样可以被改变.
任何数据写入到状态寄存器将不会改变TO或PDF标志位.
另外,执行不同的指令后,与状态寄存器有关的运算可能会得到不同的结果.
TO标志位只会受系统上电、看门狗溢出或执行"CLRWDT"或"HALT"指令影响.
PDF标志位只会受执行"HALT"或"CLRWDT"指令或系统上电影响.
Z、OV、AC和C标志位通常反映最近运算的状态.
Rev.
1.
10262019-11-07C:当加法运算的结果产生进位,或减法运算的结果没有产生借位时,则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:算术或逻辑运算结果为0Bit1AC:辅助进位标志位0:无辅助进位1:在加法运算中低四位产生了向高四位进位,或减法运算中低四位不发生从高四位借位Bit0C:进位标志位0:无进位1:如果在加法运算中结果产生了进位,或在减法运算中结果不发生借位C也受循环移位指令的影响.
Rev.
1.
10272019-11-07EEPROM数据存储器此单片机的一个特性是内建EEPROM数据存储器,为电可擦可编程只读存储器,由于其非易失的存储结构,即使在电源掉电的情况下存储器内的数据仍然保存完好.
这种存储区扩展了ROM空间,对设计者来说增加了许多新的应用机会.
EEPROM可以用来存储产品编号、校准值、用户特定数据、系统配置参数或其它产品信息等.
EEPROM的数据读取和写入过程也会变的更简单.
EEPROM数据存储器结构EEPROM数据存储器容量为32*8.
由于映射方式与程序存储器和数据存储器不同,因此不能像其它类型的存储器一样寻址.
使用Bank0中的一个地址和数据寄存器以及Bank1中的一个控制寄存器,可以实现对EEPROM的单字节读写操作.
EEPROM寄存器有三个寄存器控制内部EEPROM数据存储器总的操作,地址寄存器EEA、数据寄存器EED及控制寄存器EEC.
EEA和EED位于所有Bank中,它们能像其它特殊功能寄存器一样直接被访问.
EEC位于Bank1中,不能被直接访问,仅能通过MP1和IAR1进行间接读取或写入.
由于EEC控制寄存器位于Bank1中的"40H",在EEC寄存器上的任何操作被执行前,MP1必须先设为"40H",BP被设为"01H".
寄存器名称位76543210EEA———EEA4EEA3EEA2EEA1EEA0EEDD7D6D5D4D3D2D1D0EEC————WRENWRRDENRDEEPROM寄存器列表EEA寄存器Bit76543210Name———EEA4EEA3EEA2EEA1EEA0R/W———R/WR/WR/WR/WR/WPOR———00000Bit7~5未定义,读为"0"Bit4~0EEA4~EEA0:数据EEPROM地址数据EEPROM地址Bit4~Bit0EED寄存器Bit76543210NameD7D6D5D4D3D2D1D0R/WR/WR/WR/WR/WR/WR/WR/WR/WPOR00000000Bit7~0D7~D0:数据EEPROM数据数据EEPROM数据Bit7~Bit0Rev.
1.
10282019-11-07EEC寄存器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中读取数据,EEC寄存器中的读使能位RDEN先置为高以使能读功能,EEPROM中读取数据的地址要先放入EEA寄存器中.
若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位以确定写周期是否结束.
Rev.
1.
10292019-11-07写保护防止误写入的写保护有以下几种.
单片机上电后控制寄存器中的写使能位将被清除以杜绝任何写入操作.
上电后BP将重置为"0",这意味着数据存储区Bank0被选中.
由于EEPROM控制寄存器位于Bank1中,这增加了对写操作的保护措施.
在正常程序操作中确保控制寄存器中的写使能位被清除将能防止不正确的写操作.
EEPROM写中断EEPROM写周期结束后将产生EEPROM写中断,需先通过设置相关中断寄存器的DEE位使能EEPROM写中断.
当EEPROM写周期结束,DEF请求标志位将被置位.
若EEPROM中断使能且堆栈未满的情况下将跳转到相应的EEPROM中断向量中执行.
当中断被响应,中断请求标志位DEF会被复位且EMI位会被清零以除能其它中断.
更多细节将在中断章节讲述.
编程注意事项必须注意的是数据不会无意写入EEPROM.
在没有写动作时写使能位被正常清零可以增强保护功能.
BP指针也可以正常清零以阻止进入EEPROM控制寄存器存在的Bank1.
尽管没有必要,写一个简单的读回程序以检查新写入的数据是否正确还是应该考虑的.
写数据时,WREN位置为"1"后,WR须立即设置为高,以确保正确地执行写周期.
写周期执行前总中断位EMI应先清零,写周期开始执行后再将此位重新使能.
注意,EEPROM读或写周期彻底完成前单片机不能进入IDLE或SLEEP模式,否则将导致EEPROM读或写操作失败.
程序举例从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,ARev.
1.
10302019-11-07CLREMISETIAR1.
3;setWRENbit,enablewriteoperationsSETIAR1.
2;startWriteCycle-setWRbitSETEMIBACK:SZIAR1.
2;checkforwritecycleendJMPBACKCLRIAR1;disableEEPROMread/writeCLRBP振荡器不同的振荡器选择可以让使用者在不同的应用需求中实现更大范围的功能.
振荡器的灵活性使得在速度和功耗方面可以达到最优化.
振荡器选择是通过应用程序控制相关的寄存器完成的.
振荡器概述振荡器除了作为系统时钟源,还作为看门狗定时器和时基中断的时钟源.
两个集成的内部振荡器不需要任何外围器件.
它们提供的高速和低速系统振荡器具有较宽的频率范围.
所有振荡器选择通过寄存器选择.
较高频率的振荡器提供更高的性能,但要求有更高的功率,反之亦然.
动态切换快慢系统时钟的能力使单片机具有灵活而优化的性能/功耗比,此特性对功耗敏感的应用领域尤为重要.
类型名称频率内部高速RCHIRC8MHz内部低速RCLIRC32kHz振荡器类型系统时钟配置该单片机有两个系统振荡器,包括一个高速振荡器和一个低速振荡器.
高速振荡器为内部8MHz高速振荡器HIRC,低速振荡器为内部32kHz低速振荡器LIRC.
低速或高速系统时钟频率由SCC寄存器的CKS2~CKS0位决定的.
请注意,两个振荡器必须做出选择,即一个高速和一个低速振荡器.
Rev.
1.
10312019-11-07HIRCENPrescalerHighSpeedOscillatorLowSpeedOscillatorfH/2fH/16fH/64fH/8fH/4fH/32CKS2~CKS0fSYSfSUBfSUBLIRCfLIRCfLIRCHIRCfHIDLE0SLEEPIDLE2SLEEP系统时钟配置内部高速RC振荡器–HIRC内部RC振荡器是一个集成的系统振荡器,不需其它外部器件.
内部RC振荡器具有一个固定的频率:8MHz.
芯片在制造时进行调整且内部含有频率补偿电路,使得振荡频率因VDD、温度以及芯片制成工艺不同的影响减至最低程度.
如果选择了该内部时钟,无需额外的引脚.
内部32kHzRC振荡器–LIRC内部32kHz系统振荡器是一个低频振荡器.
它是一个完全集成RC振荡器,它在5V电压下运行的典型频率值为32kHz且无需外部元件.
芯片在制造时进行调整且内部含有频率补偿电路,使得振荡器因电源电压、温度及芯片制成工艺不同的影响减至最低.
Rev.
1.
10322019-11-07工作模式和系统时钟现今的应用要求单片机具有较高的性能及尽可能低的功耗,这种矛盾的要求在便携式电池供电的应用领域尤为明显.
高性能所需要的高速时钟将增加功耗,反之亦然.
此单片机提供高、低速两种时钟源,它们之间可以动态切换,用户可通过优化单片机操作来获得最佳性能/功耗比.
系统时钟单片机为CPU和外围功能操作提供了多种不同的时钟源.
用户使用寄存器编程可获取多种时钟,进而使系统时钟获取最大的应用性能.
主系统时钟可来自高频时钟源fH或低频时钟源fSUB,通过SCC寄存器中的CKS2~CKS0位进行选择.
高频时钟源来自HIRC振荡器,低频时钟源来自LIRC振荡器.
其它系统时钟还有高速系统振荡器的分频fH/2~fH/64.
HighSpeedOscillatorPrescalerHIRCfHfH/2fH/4fH/8fH/16fH/32fH/64CKS2~CKS0fSYSLowSpeedOscillatorLIRCIDLE0SLEEPIDLE2SLEEPfSUBfSUBfSUBfSYS/4fSYSCLKSEL[1:0]fPSCPrescalerTimeBase0TimeBase1TB0ONTB1ONTB1[2:0]TB0[2:0]WDTfLIRCHIRCEN单片机时钟选项注:当系统时钟源fSYS由fH到fSUB转换时,可以通过设置相应的高速振荡器使能控制位,选择停止以节省耗电,或者继续振荡,为外围电路提供fH~fH/64频率的时钟源.
系统工作模式单片机有6种不同的工作模式,每种有它自身的特性,根据应用中不同的性能和功耗要求可选择不同的工作模式.
单片机正常工作有两种模式:快速模式和低速模式.
剩余的4种工作模式:休眠模式、空闲模式0、空闲模式1和空闲模式2用于单片机CPU关闭时以节省耗电.
Rev.
1.
10332019-11-07工作模式CPU寄存器设置fSYSfHfSUBfLIRCFHIDENFSIDENCKS2~CKS0快速模式Onxx000~110fH~fH/64OnOnOn低速模式Onxx111fSUBOn/O(1)OnOn空闲模式0O01000~110OOOnOn111On空闲模式1O11xxxOnOnOnOn空闲模式2O10000~110OnOnOOn111O休眠模式O00xxxOOOOn/O(2)"x"表示无关注:1.
在低速模式中,fH开启或关闭由相应的振荡器使能位控制.
2.
在休眠模式中,fLIRC开启或关闭由WDT功能使能或除能控制.
快速模式这是主要的工作模式之一,单片机的所有功能均可在此模式中实现且系统时钟由一个高速振荡器提供.
该模式下单片机正常工作的时钟源来自HIRC振荡器.
高速振荡器频率可被分为1~64的不等比率,实际的比率由SCC寄存器中的CKS2~CKS0位选择.
单片机使用高速振荡器的分频作为系统时钟可减少工作电流.
低速模式此模式的系统时钟虽为较低速时钟源,但单片机仍能正常工作.
该低速时钟源可来自fSUB,而fSUB来自于LIRC振荡器.
休眠模式执行HALT指令后且SCC寄存器中的FHIDEN和FSIDEN位都为低时,系统进入休眠模式.
在休眠模式中,CPU停止运行,fSUB停止为外围功能提供时钟.
若看门狗定时器功能使能,fLIRC继续运行.
空闲模式0执行HALT指令后且SCC寄存器中的FHIDEN位为低、FSIDEN位为高时,系统进入空闲模式0.
在空闲模式0中,CPU停止,但低速振荡器会开启以驱动一些外围功能.
空闲模式1执行HALT指令后且SCC寄存器中的FHIDEN和FSIDEN位都为高时,系统进入空闲模式1.
在空闲模式1中,CPU停止,但高速和低速振荡器都会开启以确保一些外围功能继续工作.
空闲模式2执行HALT指令后且SCC寄存器中的FHIDEN位为高、FSIDEN位为低时,系统进入空闲模式2.
在空闲模式2中,CPU停止,但高速振荡器会开启以确保一些外围功能继续工作.
Rev.
1.
10342019-11-07控制寄存器寄存器SCC和HIRCC用于控制系统时钟和相应的振荡器配置.
寄存器名称位76543210SCCCKS2CKS1CKS0———FHIDENFSIDENHIRCCHIRCFHIRCEN系统工作模式控制寄存器列表SCC寄存器Bit76543210NameCKS2CKS1CKS0———FHIDENFSIDENR/WR/WR/WR/W———R/WR/WPOR000———00Bit7~5CKS2~CKS0:系统时钟选择位000:fH001:fH/2010:fH/4011:fH/8100:fH/16101:fH/32110:fH/64111:fSUB这三位用于选择系统时钟源.
除了fH或fSUB提供的系统时钟源外,也可使用高频振荡器的分频作为系统时钟.
Bit4~2未定义,读为"0"Bit1FHIDEN:CPU关闭时高频振荡器控制位0:除能1:使能此位用来控制在CPU执行HALT指令关闭后HIRC振荡器是被运行还是停止.
Bit0FSIDEN:CPU关闭时低频振荡器控制位0:除能1:使能此位用来控制在CPU执行HALT指令关闭后LIRC振荡器是运行还是停止.
HIRCC寄存器Bit76543210NameHIRCFHIRCENR/WRR/WPOR01Bit7~2未定义,读为"0"Bit1HIRCF:HIRC振荡器稳定标志位0:HIRC未稳定1:HIRC稳定此位用于表明HIRC振荡器是否稳定.
HIRCEN位置高使能HIRC振荡器,HIRCF位会先被清零,在HIRC稳定后会被置高.
Bit0HIRCEN:HIRC振荡器使能控制位0:除能1:使能Rev.
1.
10352019-11-07工作模式切换单片机可在各个工作模式间自由切换,使得用户可根据所需选择最佳的性能/功耗比.
用此方式,对单片机工作的性能要求不高的情况下,可使用较低频时钟以减少工作电流,在便携式应用上延长电池的使用寿命.
简单来说,快速模式和低速模式间的切换仅需设置SCC寄存器中的CKS2~CKS0位即可实现,而快速/低速模式与休眠/空闲模式间的切换经由HALT指令实现.
当HALT指令执行后,单片机是否进入空闲模式或休眠模式由SCC寄存器中的FHIDEN和FSIDEN位决定的.
FASTfSYS=fH~fH/64fHonCPUrunfSYSonfSUBonSLOWfSYS=fSUBfSUBonCPUrunfSYSonfHon/offIDLE0HALTinstructionexecutedCPUstopFHIDEN=0FSIDEN=1fHofffSUBonIDLE1HALTinstructionexecutedCPUstopFHIDEN=1FSIDEN=1fHonfSUBonIDLE2HALTinstructionexecutedCPUstopFHIDEN=1FSIDEN=0fHonfSUBoffSLEEPHALTinstructionexecutedCPUstopFHIDEN=0FSIDEN=0fHofffSUBoffRev.
1.
10362019-11-07快速模式切换到低速模式系统运行在快速模式时使用高速系统振荡器,因此较为耗电.
可通过设置SCC寄存器中的CKS2~CKS0位为"111"使系统时钟切换至运行在低速模式下.
此时将使用低速系统振荡器以节省耗电.
用户可在对性能要求不高的操作中使用此方法以减少耗电.
低速模式的时钟源来自LIRC振荡器,因此要求此振荡器在所有模式切换动作发生前稳定下来.
FASTModeSLOWModeCKS2~CKS0=111SLEEPModeFHIDEN=0,FSIDEN=0HALTinstructionisexecutedIDLE0ModeFHIDEN=0,FSIDEN=1HALTinstructionisexecutedIDLE1ModeFHIDEN=1,FSIDEN=1HALTinstructionisexecutedIDLE2ModeFHIDEN=1,FSIDEN=0HALTinstructionisexecutedRev.
1.
10372019-11-07低速模式切换到快速模式在低速模式时系统时钟来自fSUB.
切换回快速模式时,需设置CKS2~CKS0位为"000"~"110"使系统时钟从fSUB切换到fH~fH/64.
然而,如果在低速模式下fH因未使用而关闭,那么从低速模式切换到快速模式时,它需要一定的时间来重新起振和稳定,可通过检测HIRCC寄存器中的HIRCF位进行判断,所需的高速系统振荡器稳定时间在系统上电时间电气特性中有说明.
FASTModeSLOWModeCKS2~CKS0=000~110SLEEPModeFHIDEN=0,FSIDEN=0HALTinstructionisexecutedIDLE0ModeFHIDEN=0,FSIDEN=1HALTinstructionisexecutedIDLE1ModeFHIDEN=1,FSIDEN=1HALTinstructionisexecutedIDLE2ModeFHIDEN=1,FSIDEN=0HALTinstructionisexecuted进入休眠模式进入休眠模式的方法仅有一种,即应用程序中执行"HALT"指令前设置SCC寄存器中的FHIDEN和FSIDEN位都为"0".
在这种模式下,除了WDT(如果WDT功能为使能)以外的所有时钟和功能都将关闭.
在上述条件下执行该指令后,将发生的情况如下:系统时钟停止运行,应用程序停止在"HALT"指令处.
数据存储器中的内容和寄存器将保持当前值.
输入/输出口将保持当前值.
状态寄存器中暂停标志PDF将被置起,看门狗溢出标志TO将被清除.
如果WDT功能使能,WDT将被清零并重新开始计数.
如果WDT功能除能,WDT将被清零并停止计数.
进入空闲模式0进入空闲模式0的方法仅有一种,即应用程序中执行"HALT"指令前需设置SCC寄存器中的FHIDEN位为"0"且FSIDEN位为"1".
在上述条件下执行该指令后,将发生的情况如下:fH时钟停止运行,应用程序停止在"HALT"指令处,但fSUB时钟将继续运行.
数据存储器中的内容和寄存器将保持当前值.
Rev.
1.
10382019-11-07输入/输出口将保持当前值.
状态寄存器中暂停标志PDF将被置起,看门狗溢出标志TO将被清除.
如果WDT功能使能,WDT将被清零并重新开始计数.
如果WDT功能除能,WDT将被清零并停止计数.
进入空闲模式1进入空闲模式1的方法仅有一种,即应用程序中执行"HALT"指令前需设置SCC寄存器中的FHIDEN和FSIDEN位都为"1".
在上述条件下执行该指令后,将发生的情况如下:fH和fSUB时钟开启,应用程序停止在"HALT"指令处.
数据存储器中的内容和寄存器将保持当前值.
输入/输出口将保持当前值.
状态寄存器中暂停标志PDF将被置起,看门狗溢出标志TO将被清除.
如果WDT功能使能,WDT将被清零并重新开始计数.
如果WDT功能除能,WDT将被清零并停止计数.
进入空闲模式2进入空闲模式2的方法仅有一种,即应用程序中执行"HALT"指令前需设置SCC寄存器中的FHIDEN位为"1"且FSIDEN位为"0".
在上述条件下执行该指令后,将发生的情况如下:fH时钟开启,fSUB时钟关闭,应用程序停止在"HALT"指令处.
数据存储器中的内容和寄存器将保持当前值.
输入/输出口将保持当前值.
状态寄存器中暂停标志PDF将被置起,看门狗溢出标志TO将被清除.
如果WDT功能使能,WDT将被清零并重新开始计数.
如果WDT功能除能,WDT将被清零并停止计数.
待机电流的注意事项由于单片机进入休眠或空闲模式的主要原因是将单片机的电流降低到尽可能低,可能到只有几个微安的级别(空闲模式1和空闲模式2除外),所以如果要将电路的电流降到最低,电路设计者还应有其它的考虑.
应该特别注意的是单片机的输入/输出引脚.
所有高阻抗输入脚都必须连接到固定的高或低电平,因为引脚浮空会造成内部振荡并导致耗电增加.
这也应用于有不同封装的单片机,因为它们可能含有未引出的引脚,这些引脚也必须设为输出或带有上拉电阻的输入.
另外还需注意单片机设为输出的I/O引脚上的负载.
应将它们设置在有最小拉电流的状态或将它们和其它的CMOS输入一样接到没有拉电流的外部电路上.
在空闲模式1和空闲模式2中,高速振荡器开启.
若外围功能时钟源来自高速振荡器,额外的待机电流也可能会有几百微安.
唤醒单片机进入休眠模式或空闲模式后,系统时钟将停止以降低功耗.
然而单片机再次唤醒,原来的系统时钟重新起振、稳定且恢复正常工作需要一定的时间.
系统进入休眠或空闲模式之后,可以通过以下几种方式唤醒:Rev.
1.
10392019-11-07PA口下降沿系统中断WDT溢出单片机执行HALT指令,系统进入休眠或空闲模式,PDF将被置位.
系统由看门狗定时器溢出唤醒,会发生看门狗定时器复位,TO将被置位.
看门狗定时器溢出将会置位TO标志并唤醒系统,这种复位会重置程序计数器和堆栈指针,其它标志保持原有状态.
PA口中的每个引脚都可以通过PAWU寄存器使能下降沿唤醒功能.
PA端口唤醒后,程序将在"HALT"指令后继续执行.
如果系统是通过中断唤醒,则有两种可能发生.
第一种情况是:相关中断除能或是中断使能且堆栈已满,则程序会在"HALT"指令之后继续执行.
这种情况下,唤醒系统的中断会等到相关中断使能或有堆栈层可以使用之后才执行.
第二种情况是:相关中断使能且堆栈未满,则中断可以马上执行.
如果在进入休眠或空闲模式之前中断标志位已经被设置为"1",则相关中断的唤醒功能将无效.
看门狗定时器看门狗定时器的功能在于防止如电磁的干扰等外部不可控制事件,所造成的程序不正常动作或跳转到未知的地址.
看门狗定时器时钟源WDT定时器时钟源由内部低速振荡器LIRC提供.
内部振荡器LIRC的频率大约为32kHz,这个特殊的内部时钟周期会随VDD、温度和制成的不同而变化.
看门狗定时器的时钟源可分频为28~215以提供更大的溢出周期,分频比由WDTC寄存器中的WS2~WS0位来决定.
看门狗定时器控制寄存器WDTC寄存器用于控制WDT功能的使能/除能、选择溢出周期以及软件复位单片机.
WDTC寄存器Bit76543210NameWE4WE3WE2WE1WE0WS2WS1WS0R/WR/WR/WR/WR/WR/WR/WR/WR/WPOR01010011Bit7~3WE4~WE0:WDT软件控制10101:除能01010:使能其它值:单片机复位如果由于不利的环境因素使这些位变为其它值,单片机将复位.
复位动作发生在tSRESET时间后,且RSTFC寄存器的WRF位将置为"1".
Bit2~0WS2~WS0:WDT溢出周期选择位000:28/fLIRC001:29/fLIRC010:210/fLIRC011:211/fLIRC100:212/fLIRC101:213/fLIRCRev.
1.
10402019-11-07110:214/fLIRC111:215/fLIRC这三位控制WDT时钟源的分频比,从而实现对WDT溢出周期的控制.
RSTFC寄存器Bit76543210NameLVRFLRFWRFR/WR/WR/WR/WPORx00"x":未知Bit7~3未定义,读为"0"Bit2LVRF:LVR复位标志位具体描述见其它章节.
Bit1LRF:LVR控制寄存器软件复位标志位具体描述见其它章节.
Bit0WRF:WDT控制寄存器软件复位标志位0:未发生1:发生当WDT控制寄存器软件复位发生时,此位被置为"1",且只能通过应用程序清零.
看门狗定时器操作当WDT溢出时,它产生一个单片机复位的动作.
这也就意味着正常工作期间,用户需在应用程序中看门狗溢出前有策略地清看门狗定时器以防止其产生复位,可使用清除看门狗指令实现.
无论什么原因,程序失常跳转到一个未知的地址或进入一个死循环,这些清除指令都不能被正确执行,此种情况下,看门狗将溢出以使单片机复位.
看门狗定时器控制寄存器WDTC中的WE4~WE0位可提供使能/除能控制以及控制看门狗定时器复位操作.
当WE4~WE0设置为"10101B"时除能WDT功能,而当设置为"01010B"时使能WDT功能.
如果WE4~WE0设置为除"01010B"和"10101B"以外的值时,单片机将在tSRESET时间后复位.
上电后这些位初始化为"01010B".
WE4~WE0位WDT功能10101B除能01010B使能其它值单片机复位看门狗定时器使能/除能控制程序正常运行时,WDT溢出将导致单片机复位,并置位状态标志位TO且PDF位不变.
若系统处于休眠或空闲模式,当WDT溢出发生时,状态寄存器中的TO及PDF位置为1,PC和堆栈指针复位.
有三种方法可以用来清除WDT的内容.
第一种是WDT复位,即将WE4~WE0位设置成除了01010B和10101B外的任意值;第二种是通过软件清除指令,而第三种是通过"HALT"指令.
该单片机只使用一条清看门狗指令"CLRWDT".
因此只要执行一次"CLRWDT"便清除WDT.
当设置分频比为215时,溢出周期最大.
例如,时钟源为32kHzLIRC振荡器,分频比为215时最大溢出周期约1s,分频比为28时最小溢出周期约8ms.
Rev.
1.
10412019-11-07"CLRWDT"Instruction11-stageDivider7-stageDividerWE4~WE0bitsWDTCRegisterResetMCUfLIRC8-to-1MUXCLRWS2~WS0WDTTime-out(28/fLIRC~215/fLIRC)LIRC"HALT"Instruction看门狗定时器复位和初始化复位功能是任何单片机中基本的部分,使得单片机可以设定一些与外部参数无关的先置条件.
最重要的复位条件是在单片机首次上电以后,经过短暂的延迟,内部硬件电路使得单片机处于预期的稳定状态并开始执行第一条程序指令.
上电复位以后,在程序执行之前,部分重要的内部寄存器将会被设定为预先设定的状态.
程序计数器就是其中之一,它会被清除为零,使得单片机从最低的程序存储器地址开始执行程序.
另一种复位为看门狗溢出单片机复位.
不同方式的复位操作会对寄存器产生不同的影响.
另一种复位为低电压复位即LVR复位,在电源供应电压低于LVR设定值时,系统会产生LVR复位.
复位功能单片机包含下面几种由内部事件触发的复位方式.
上电复位这是最基本且不可避免的复位,发生在单片机上电后.
除了保证程序存储器从开始地址执行,上电复位也使得其它寄存器被设定在预设条件.
所有的输入/输出端口控制寄存器在上电复位时会保持高电平,以确保上电后所有引脚被设定为输入状态.
VDDPower-onResetSSTTime-outtRSTD注:tRSTD为上电延迟时间,具体规格见系统上电时间电气特性.
上电复位时序图低电压复位–LVR单片机具有低电压复位电路,用来监测它的电源电压.
LVR始终使能于特定的电压值,VLVR.
例如在更换电池的情况下,单片机供应的电压可能会在0.
9V~VLVR之间,这时LVR将会自动复位单片机且RSTFC寄存器中的LVRF标志位置位.
LVR包含以下的规格:有效的LVR信号,即在0.
9V~VLVR的低电压状态的时间,必须超过LVR电气特性中tLVR参数的值.
如果低电压存在不超过tLVR参数的值,则LVR将会忽略它且不会执行复位功能.
实际的VLVR参数值固Rev.
1.
10422019-11-07定为2.
1V.
若因为环境噪声或软件设置修改了LVRC寄存器的值,LVR将在tSRESET时间后复位单片机.
同时RSTFC寄存器LRF位将被置"1".
上电复位后LVRC的初始值是01011010B.
需要注意的是,当单片机进入空闲或休眠模式,LVR功能将自动关闭.
LVRInternalResettRSTD+tSST注:tRSTD为上电延迟时间,具体规格见系统上电时间电气特性.
低电压复位时序图LVRC寄存器Bit76543210NameLVS7LVS6LVS5LVS4LVS3LVS2LVS1LVS0R/WR/WR/WR/WR/WR/WR/WR/WR/WPOR01011010Bit7~0LVS7~LVS0:LVR电压选择01011010:2.
1V10100101:除能其它值:MCU复位–寄存器复位为POR值若低电压情况发生且满足以上定义的低电压复位值,则单片机复位.
此低电压保持时间需要超过tLVR响应复位.
此时复位后的寄存器内容保持不变.
除了以上定义的低电压复位值外,其它值也能导致单片机复位.
需要经过tSRESET时间响应复位.
但此时寄存器内容将复位为POR值.
RSTFC寄存器Bit76543210NameLVRFLRFWRFR/WR/WR/WR/WPORx00"x":未知Bit7~3未定义,读为"0"Bit2LVRF:LVR复位标志位0:未发生1:发生当特定的低电压复位条件发生时,此位被置为"1",且只能通过应用程序清零.
Bit1LRF:LVR控制寄存器软件复位标志位0:未发生1:发生如果LVRC寄存器包含任何非定义的LVR电压值,此位被置为"1",这类似于软件复位功能,且只能通过应用程序清零.
Bit0WRF:WDT控制寄存器软件复位标志位具体描述见其它章节Rev.
1.
10432019-11-07正常运行时看门狗溢出复位除了看门狗溢出标志位TO将被设为"1"之外,在快速模式或低速模式时看门狗溢出复位和LVR复位相同.
WDTTime-outInternalResettRSTD+tSST注:tRSTD为上电延迟时间,具体规格见系统上电时间电气特性.
正常运行时看门狗溢出时序图休眠或空闲时看门狗溢出复位休眠或空闲时看门狗溢出复位和其它种类的复位有些不同.
除了程序计数器与堆栈指针将被清"0"及TO位被设为"1"外,绝大部分的条件保持不变.
图中tSST的详细说明请参考系统上电时间电气特性.
WDTTime-outInternalResettSST休眠或空闲时看门狗溢出复位时序图复位初始状态不同的复位形式以不同的途径影响复位标志位.
这些标志位,即PDF和TO位存放在状态寄存器中,由休眠或空闲模式功能或看门狗计数器等几种控制器操作控制.
复位标志位如下所示:TOPDF复位条件00上电复位uu快速模式或低速模式时的LVR复位1u快速模式或低速模式时的WDT溢出复位11空闲或休眠模式时的WDT溢出复位"u"代表不改变在单片机上电复位之后,各功能单元初始化的情形,列于下表.
项目复位后情况程序计数器清除为零中断所有中断被除能看门狗定时器,时基都清除,且WDT重新计数定时器模块所有定时器模块停止输入/输出口I/O口设为输入模式堆栈指针堆栈指针指向堆栈顶端不同的复位形式对单片机内部寄存器的影响是不同的.
为保证复位后程序能正常执行,了解寄存器在特定条件复位后的设置是非常重要的.
下表即为不同方式复位后内部寄存器的状况.
Rev.
1.
10442019-11-07寄存器上电复位LVR复位(正常工作)WDT溢出(正常工作)WDT溢出(空闲/休眠)IAR0xxxxxxxxxxxxxxxxxxxxxxxxuuuuuuuuMP0xxxxxxxxxxxxxxxxxxxxxxxxuuuuuuuuIAR1xxxxxxxxxxxxxxxxxxxxxxxxuuuuuuuuMP1xxxxxxxxxxxxxxxxxxxxxxxxuuuuuuuuBP000uACCxxxxxxxxuuuuuuuuuuuuuuuuuuuuuuuuPCL00000000000000000000000000000000TBLPxxxxxxxxuuuuuuuuuuuuuuuuuuuuuuuuTBLHxxxxxxxxuuuuuuuuuuuuuuuuuuuuuuuuSTATUS--00xxxx--uuuuuu--1uuuuu--11uuuuRSTFCx001uuuuuuuuSADOLxxxx----xxxx----xxxx----uuuuADRFS=0)uuuuuuuu(ADRFS=1)SADOHxxxxxxxxxxxxxxxxxxxxxxxxuuuuuuuu(ADRFS=0)----uuuu(ADRFS=1)SADC0000000000000000000000000uuuuuuuuSADC1000000000000000000000000uuuuuuuuPA111111111111111111111111uuuuuuuuPAC111111111111111111111111uuuuuuuuPAPU000000000000000000000000uuuuuuuuPAWU000000000000000000000000uuuuuuuuPB-1111111-1111111-1111111-uuuuuuuPBC-1111111-1111111-1111111-uuuuuuuPBPU--000000--000000--000000--uuuuuuSCC000---00000---00000---00uuu---uuHIRCC010101uuTB0C0----0000----0000----000u----uuuTB1C0----0000----0000----000u----uuuUSR000010110000101100001011uuuuuuuuUCR1000000x0000000x0000000x0uuuuuuuuUCR2000000000000000000000000uuuuuuuuTXR_RXRxxxxxxxxxxxxxxxxxxxxxxxxuuuuuuuuBRGxxxxxxxxxxxxxxxxxxxxxxxxuuuuuuuuWDTC010100110101001101010011uuuuuuuuCTMC0000000000000000000000000uuuuuuuuCTMC1000000000000000000000000uuuuuuuuCTMDL000000000000000000000000uuuuuuuuCTMDH000000uuCTMAL000000000000000000000000uuuuuuuuCTMAH000000uuRev.
1.
10452019-11-07寄存器上电复位LVR复位(正常工作)WDT溢出(正常工作)WDT溢出(空闲/休眠)INTC0-0000000-0000000-0000000-uuuuuuuINTC1000000000000000000000000uuuu-uuuMFI--00--00--00--00--00--00--uu--uuINTEG000000uuLVRC010110100101101001011010uuuuuuuuEEC----0000----0000----0000----uuuuEEA---00000---00000---00000---uuuuuEED000000000000000000000000uuuuuuuuDA0010000000100000001000000uuuuuuuuDA1L000000000000000000000000uuuuuuuuDA1H----1000----1000----1000----uuuuDAOPC110---00110---00110---00uuu---uuOPVOS0-1000000-1000000-100000u-uuuuuuPAS0--000000--000000--000000--uuuuuuPAS1000000000000000000000000uuuuuuuuPBS0000000000000000000000000uuuuuuuuPBS1----0000----0000----0000----uuuuPSCR000000uuIFS000000uu注:"u"表示不改变"x"表示未知"-"表示未定义Rev.
1.
10462019-11-07输入/输出端口Holtek单片机的输入/输出口控制具有很大的灵活性.
大部分引脚可在用户程序控制下被设定为输入或输出.
所有引脚的上拉电阻设置以及指定引脚的唤醒设置也都由软件控制,这些特性也使得此类单片机在广泛应用上都能符合开发的需求.
该单片机提供PA~PB双向输入/输出口.
这些寄存器在数据存储器有特定的地址.
所有I/O口用于输入输出操作.
作为输入操作,输入引脚无锁存功能,也就是说输入数据必须在执行"MOVA,[m]",T2的上升沿准备好,m为端口地址.
对于输出操作,所有数据都是被锁存的,且保持不变直到输出锁存被重写.
寄存器名称位76543210PAPA7PA6PA5PA4PA3PA2PA1PA0PACPAC7PAC6PAC5PAC4PAC3PAC2PAC1PAC0PAPUPAPU7PAPU6PAPU5PAPU4PAPU3PAPU2PAPU1PAPU0PAWUPAWU7PAWU6PAWU5PAWU4PAWU3PAWU2PAWU1PAWU0PB—PB6PB5PB4PB3PB2PB1PB0PBC—PBC6PBC5PBC4PBC3PBC2PBC1PBC0PBPU—PBPU6PBPU5PBPU4PBPU3PBPU2PBPU1PBPU0"—":未定义,读为"0"I/O逻辑功能寄存器列表上拉电阻许多产品应用在端口处于输入状态时需要外加一个上拉电阻来实现上拉的功能.
为了免去外部上拉电阻,当引脚规划为输入时,可由内部连接到一个上拉电阻.
这些上拉电阻可通过寄存器PxPU(x为A或B)来设置,它用一个PMOS晶体管来实现上拉电阻功能.
当I/O引脚设为输入或设为NMOS输出时,上拉电阻功能才会受PxPU控制开启,其它状态均为关闭.
PxPU寄存器Bit76543210NamePxPU7PxPU6PxPU5PxPU4PxPU3PxPU2PxPU1PxPU0R/WR/WR/WR/WR/WR/WR/WR/WR/WPOR00000000PxPUn:I/OPortx引脚上拉功能控制位0:除能1:使能PxPUn位用于控制引脚上拉功能.
此处的"x"可为A或B.
每个端口实际的有效位是不同的,具体信息可参考I/O逻辑功能控制寄存器列表.
Rev.
1.
10472019-11-07PA口唤醒当使用暂停指令"HALT"迫使单片机进入休眠或空闲模式,单片机的系统时钟将会停止以降低功耗,此功能对于电池及低功耗应用很重要.
唤醒单片机有很多种方法,其中之一就是使PA口的其中一个引脚从高电平转为低电平.
这个功能特别适合于通过外部开关来唤醒的应用.
PA口的每个引脚可以通过设置PAWU寄存器来单独选择是否具有唤醒功能.
当引脚功能为通用I/O输入时,且MCU处于HALT模式时,唤醒功能才会受PAWU控制开启,其它状态均为关闭.
PAWU寄存器Bit76543210NamePAWU7PAWU6PAWU5PAWU4PAWU3PAWU2PAWU1PAWU0R/WR/WR/WR/WR/WR/WR/WR/WR/WPOR00000000Bit7~0PAWU7~PAWU0:PA7~PA0唤醒功能控制位0:除能1:使能输入/输出端口控制寄存器每一个输入/输出口都具有各自的控制寄存器,即PAC~PBC,用来控制输入/输出状态.
从而每个I/O引脚都可以通过软件控制,动态的设置为CMOS输出或输入.
所有的I/O端口的引脚都各自对应于I/O端口控制的某一位.
若I/O引脚要实现输入功能,则对应的控制寄存器的位需要设置为"1".
这时程序指令可以直接读取输入脚的逻辑状态.
若控制寄存器相应的位被设定为"0",则此引脚被设置为CMOS输出.
当引脚设置为输出状态时,程序指令读取的是输出端口寄存器的内容.
注意,如果对输出口做读取动作时,程序读取到的是内部输出数据锁存器中的状态,而不是输出引脚上实际的逻辑状态.
PxC寄存器Bit76543210NamePxC7PxC6PxC5PxC4PxC3PxC2PxC1PxC0R/WR/WR/WR/WR/WR/WR/WR/WR/WPOR11111111PxCn:I/OPortx引脚输入/输出类型选择位0:输出1:输入PxCn位用于选择引脚输入/输出类型.
此处的"x"可为A或B.
每个端口实际的有效位是不同的,具体信息可参考I/O逻辑功能控制寄存器列表.
引脚共用功能引脚的多功能可以增加单片机应用的灵活性.
有限的引脚个数将会限制设计者,而引脚的多功能将会解决很多此类问题.
此外,这些引脚功能可以通过一系列寄存器进行设定.
Rev.
1.
10482019-11-07引脚共用功能选择寄存器封装中有限的引脚个数会对某些单片机功能造成影响.
然而,引脚功能共用和引脚功能选择,使得小封装单片机具有更多不同的功能.
单片机包含端口"x"输出功能选择寄存器"n",即寄存器PxSn,和输入功能选择寄存器IFS,这些寄存器可以用来选择共用引脚的特定功能.
当选择引脚共用输入功能,对应的输入和输出功能要进行合理设定.
例如,若要选择UARTRX引脚功能,对应的输出引脚共用功能要通过PxSn寄存器设置为UART功能,同时要通过IFS寄存器选择RX信号的输入引脚.
但是,如果选择外部中断功能,相关的输出引脚共用功能应选择普通I/O功能,且也要选择中断输入信号.
特别需要注意的是,要确保所需的引脚共用功能被正确地选择和取消.
对于大部分的引脚功能,要选择所需的引脚共用功能,首先应通过相应的引脚共用控制寄存器正确地选择该功能,然后再配置相应的外围功能设置以使能外围功能.
但是,在设置相关引脚控制字段时,一些数字输入引脚如INT、CTCK等,与对应的通用I/O口共用同一个引脚共用设置选项.
要选择这些引脚功能,除了上述的必要的引脚共用控制和外围功能设置外,还必须将其对应的端口控制寄存器位设置为输入.
要正确地取消引脚共用功能,首先应除能外围功能,然后再修改相应的引脚共用控制寄存器以选择其它的共用功能.
寄存器名称位76543210PAS0——PAS05PAS04PAS03PAS02PAS01PAS00PAS1PAS17PAS16PAS15PAS14PAS13PAS12PAS11PAS10PBS0PBS07PBS06PBS05PBS04PBS03PBS02PBS01PBS00PBS1————PBS13PBS12PBS11PBS10IFSIFS1IFS0引脚共用功能选择寄存器列表PAS0寄存器Bit76543210Name——PAS05PAS04PAS03PAS02PAS01PAS00R/W——R/WR/WR/WR/WR/WR/WPOR——000000Bit7~6未定义,读为"0"Bit5~4PAS05~PAS04:PA2引脚共用功能选择00:PA201:PA210:PA211:RXBit3~2PAS03~PAS02:PA1引脚共用功能选择00:PA101:PA110:PA111:OPA2PBit1~0PAS01~PAS00:PA0引脚共用功能选择00:PA001:PA010:PA011:TXRev.
1.
10492019-11-07PAS1寄存器Bit76543210NamePAS17PAS16PAS15PAS14PAS13PAS12PAS11PAS10R/WR/WR/WR/WR/WR/WR/WR/WR/WPOR00000000Bit7~6PAS17~PAS16:PA7引脚共用功能选择00:PA701:PA710:TX11:CTPBit5~4PAS15~PAS14:PA6引脚共用功能选择00:PA601:PA610:TX11:OPA1PBit3~2PAS13~PAS12:PA5引脚共用功能选择00:PA501:PA510:RX11:OPA0PBit1~0PAS11~PAS10:PA4引脚共用功能选择00:PA401:PA410:PA411:CTPBPBS0寄存器Bit76543210NamePBS07PBS06PBS05PBS04PBS03PBS02PBS01PBS00R/WR/WR/WR/WR/WR/WR/WR/WR/WPOR00000000Bit7~6PBS07~PBS06:PB3引脚共用功能选择00:PB301:PB310:PB311:AN3Bit5~4PBS05~PBS04:PB2引脚共用功能选择00:PB201:PB210:PB211:AN2Bit3~2PBS03~PBS02:PB1引脚共用功能选择00:PB101:PB110:VREF11:AN1Bit1~0PBS01~PBS00:PB0引脚共用功能选择00:PB001:PB010:PB011:AN0Rev.
1.
10502019-11-07PBS1寄存器Bit76543210Name————PBS13PBS12PBS11PBS10R/W————R/WR/WR/WR/WPOR————0000Bit7~4未定义,读为"0"Bit3~2PBS13~PBS12:PB5引脚共用功能选择00:PB5/CTCK01:PB5/CTCK10:RX11:AN5Bit1~0PBS11~PBS10:PB4引脚共用功能选择00:PB401:PB410:PB411:AN4IFS寄存器Bit76543210NameIFS1IFS0R/WR/WR/WPOR00Bit7~2未定义,读为"0"Bit1~0IFS1~IFS0:RX输入源引脚选择00:PA501:PA510:PA211:PB5输入/输出引脚结构下图为输入/输出引脚逻辑功能的内部结构图.
输入/输出引脚的准确逻辑结构图可能与此图不同,这里只是为了方便对I/O引脚逻辑功能的理解提供一个参考.
由于存在诸多的引脚共用结构,在此不方便提供所有类型引脚功能结构图.
Rev.
1.
10512019-11-07MUXVDDControlBitDataBitDataBusWriteControlRegisterChipResetReadControlRegisterReadDataRegisterWriteDataRegisterSystemWake-upwake-upSelectI/OpinWeakPull-upPull-highRegisterSelectQDCKQDCKQQSSPAonly逻辑功能输入/输出端口结构编程注意事项在编程中,最先要考虑的是端口的初始化.
复位之后,所有的输入/输出数据及端口控制寄存器都将被设为逻辑高.
所有输入/输出引脚默认为输入状态,而其电平则取决于其它相连接电路以及是否选择了上拉电阻.
如果端口控制寄存器将某些引脚设定为输出状态,这些输出引脚会有初始高电平输出,除非端口数据寄存器在程序中被预先设定.
设置哪些引脚是输入及哪些引脚是输出,可通过设置正确的值到对应的端口控制寄存器,或使用指令"SET[m].
i"及"CLR[m].
i"来设定端口控制寄存器中个别的位.
注意,当使用这些位控制指令时,系统即将产生一个读-修改-写的操作.
单片机需要先读入整个端口上的数据,修改个别的位,然后重新把这些数据写入到输出端口.
PA口的每个引脚都带唤醒功能.
单片机处于休眠或空闲模式时,有很多方法可以唤醒单片机,其中之一就是通过PA任一引脚电平从高到低转换的方式,可以设置PA口一个或多个引脚具有唤醒功能.
Rev.
1.
10522019-11-07定时器模块–TM控制和测量时间在任何单片机中都是一个很重要的部分.
该单片机提供一个定时器模块(简称TM),来实现和时间有关的功能.
定时器模块是包括多种操作的定时单元,提供的操作有:定时/计数器,比较匹配输出以及PWM输出等功能.
这个定时器模块有两个独立中断.
这个TM外加的输入输出引脚,扩大了定时器的灵活性,便于用户使用.
简介该单片机仅包含1个10-bit简易型TM,又称CTM.
该CTM的主要特性见下表.
功能CTM定时/计数器√比较匹配输出√PWM通道数1PWM对齐方式边沿对齐PWM调节周期&占空比占空比或周期TM操作TM提供从简单的定时操作到PWM信号产生等多种功能.
理解TM操作的关键是比较TM内独立运行的计数器的值与内部比较器的预置值.
当计数器的值与比较器的预置值相同时,则比较匹配,TM中断信号产生,清零计数器并改变TM输出引脚的状态.
用户选择内部时钟或外部时钟来驱动内部TM计数器.
TM时钟源驱动TM计数器的时钟源很多.
通过设置CTM控制寄存器的CTCK2~CTCK0位,选择所需的时钟源.
该时钟源来自系统时钟fSYS的分频比或内部高速时钟fH或fSUB时钟源或外部CTCK引脚.
CTCK引脚时钟源用于允许外部信号作为TM时钟源或用于事件计数.
TM中断简易型TM拥有两个内部中断,分别是内部比较器A或比较器P,当比较匹配发生时产生TM中断.
当TM中断产生时,计数器清零并改变TM输出引脚的状态.
TM外部引脚简易型TM有一个TM输入引脚CTCK.
CTM输入引脚CTCK作为CTM时钟源输入脚,通过设置CTMC0寄存器中的CTCK2~CTCK0位进行选择.
外部时钟源可通过该引脚来驱动内部TM.
TM引脚可选择上升沿有效或下降沿有效.
简易型TM有两个输出引脚CTP和CTPB.
当TM工作在比较匹配输出模式且比较匹配发生时,这些引脚会由TM控制切换到高电平或低电平或翻转.
外部CTP和CTPB输出引脚也被TM用来产生PWM输出波形.
当TM输出引脚与其它功能共用时,TM输出功能需要通过相关引脚共用功能选择寄存器先被设置.
CTM输入输出CTCKCTP,CTPBCTM外部引脚TM输入/输出引脚选择Rev.
1.
10532019-11-07通过设置与TM输入/输出引脚相关的引脚共用功能选择寄存器的位,选择作为TM输入/输出功能或其它共用功能.
正确设置选择位将相应的引脚用作TM输入/输出.
更多引脚共用功能选择详见引脚共用功能章节.
CTMCTCKCTPCCRoutputCTPBCTM功能引脚控制框图编程注意事项TM计数寄存器和捕捉/比较寄存器CCRA含有低字节和高字节结构.
高字节可直接访问,低字节则仅能通过一个内部8-bit的缓存器进行访问.
值得注意的是8-bit缓存器的存取数据及相关低字节的读写操作仅在其相应的高字节读取操作执行时发生.
CCRA寄存器访问方式如下图所示,读写这些成对的寄存器需通过特殊的方式.
建议使用"MOV"指令按照以下步骤访问CCRA低字节寄存器CTMAL,否则可能导致无法预期的结果.
DataBus8-bitBufferCTMDHCTMDLCTMAHCTMALCTMCounterRegister(Readonly)CTMCCRARegister(Read/Write)读写流程如下步骤所示:写数据至CCRA步骤1.
写数据至低字节寄存器CTMAL–注意,此时数据仅写入8-bit缓存器.
步骤2.
写数据至高字节寄存器CTMAH–注意,此时数据直接写入高字节寄存器,同时锁存在8-bit缓存器中的数据写入低字节寄存器.
由计数器寄存器和CCRA中读取数据步骤1.
由高字节寄存器CTMDH、CTMAH读取数据–注意,此时高字节寄存器中的数据直接读取,同时由低字节寄存器读取的数据锁存至8-bit缓存器中.
步骤2.
由低字节寄存器CTMDL、CTMAL读取数据–注意,此时读取8-bit缓存器中的数据.
Rev.
1.
10542019-11-07简易型TM–CTM虽然简易型TM是几种TM类型中最简单的形式,但仍然包括三种工作模式,即比较匹配输出、定时/事件计数器和PWM输出模式.
简易型TM由一个外部输入脚控制并驱动两个外部输出脚.
fSYSfSYS/4fH/64fH/16fSUBCTCK000001010011100101110111CTCK2~CTCK010-bitCount-upCounter3-bitComparatorPCCRPb7~b9b0~b910-bitComparatorACTONCTPAUComparatorAMatchComparatorPMatchCounterClear01OutputControlPolarityControlPinControlCTPCTOCCTM1,CTM0CTIO1,CTIO0CTMAFInterruptCTMPFInterruptCTPOLPAS1CCRACTCCLRfSUBCTPB简易型TM方框图简易型TM操作简易型TM核心是一个由用户选择的内部或外部时钟源驱动的10位向上计数器,它还包括两个内部比较器即比较器A和比较器P.
这两个比较器将计数器的值与CCRP和CCRA寄存器中的值进行比较.
CCRP是3位的,与计数器的高3位比较;而CCRA是10位的,与计数器的所有位比较.
通过应用程序改变10位计数器值的唯一方法是使CTON位发生上升沿跳变清除计数器.
此外,计数器溢出或比较匹配也会自动清除计数器.
上述条件发生时,通常情况会产生CTM中断信号.
简易型TM可工作在不同的模式,可由包括来自输入脚的不同时钟源驱动,也可以控制输出脚.
所有工作模式的设定都是通过设置相关寄存器来实现的.
简易型TM寄存器介绍简易型TM的所有操作由一系列寄存器控制.
一对只读寄存器用来存放10位计数器的值,一对读/写寄存器存放10位CCRA的值,剩下两个控制寄存器设置不同的操作和控制模式以及CCRP的3个位.
寄存器名称位76543210CTMC0CTPAUCTCK2CTCK1CTCK0CTONCTRP2CTRP1CTRP0CTMC1CTM1CTM0CTIO1CTIO0CTOCCTPOLCTDPXCTCCLRCTMDLD7D6D5D4D3D2D1D0CTMDHD9D8CTMALD7D6D5D4D3D2D1D0CTMAHD9D810-bit简易型TM寄存器列表Rev.
1.
10552019-11-07CTMC0寄存器Bit76543210NameCTPAUCTCK2CTCK1CTCK0CTONCTRP2CTRP1CTRP0R/WR/WR/WR/WR/WR/WR/WR/WR/WPOR00000000Bit7CTPAU:CTM计数器暂停控制位0:运行1:暂停通过设置此位为高可使计数器暂停,清零此位恢复正常计数器操作.
当处于暂停条件时,CTM保持上电状态并继续耗电.
当此位由低到高转换时,计数器将保留其剩余值,直到此位再次改变为低电平,从此值开始继续计数.
Bit6~4CTCK2~CTCK0:选择CTM计数时钟位000:fSYS/4001:fSYS010:fH/16011:fH/64100:fSUB101:fSUB110:CTCK上升沿时钟111:CTCK下降沿时钟此三位用于选择CTM的时钟源.
外部引脚时钟源能被选择在上升沿或下降沿有效.
fSYS是系统时钟,fH和fSUB是其它的内部时钟源,细节方面请参考振荡器章节.
Bit3CTON:CTM计数器On/O控制位0:O1:On此位控制CTM的总开关功能.
设置此位为高则使能计数器使其运行,清零此位则除能CTM.
清零此位将停止计数器并关闭CTM减少耗电.
当此位经由低到高转换时,内部计数器将复位清零;当此位经由高到低转换时,内部计数器将保持其剩余值,直到此位再次改变为高电平.
若CTM处于比较匹配输出模式时,当CTON位经由低到高转换时,CTM输出脚将复位至CTOC位指定的初始值.
Bit2~0CTRP2~CTRP0:CTMCCRP3-bit寄存器,与CTM计数器bit9~bit7比较比较器P匹配周期000:1024个CTM时钟周期001:128个CTM时钟周期010:256个CTM时钟周期011:384个CTM时钟周期100:512个CTM时钟周期101:640个CTM时钟周期110:768个CTM时钟周期111:896个CTM时钟周期此三位设定内部CCRP3-bit寄存器的值,然后与内部计数器的高三位进行比较.
如果CTCCLR位设定为0时,此比较结果可用于清零内部计数器.
CTCCLR位设为低,内部计数器在比较器P比较匹配发生时被重置;由于CCRP只与计数器高三位比较,比较结果是128时钟周期的倍数.
CCRP被清零时,实际上会使得计数器在最大值溢出.
Rev.
1.
10562019-11-07CTMC1寄存器Bit76543210NameCTM1CTM0CTIO1CTIO0CTOCCTPOLCTDPXCTCCLRR/WR/WR/WR/WR/WR/WR/WR/WR/WPOR00000000Bit7~6CTM1~CTM0:选择CTM工作模式位00:比较匹配输出模式01:未定义模式10:PWM输出模式11:定时/计数器模式这两位设置CTM需要的工作模式.
为了确保操作可靠,CTM应在CTM1和CTM0位有任何改变前先关掉.
在定时/计数器模式,CTM输出脚控制必须除能.
Bit5~4CTIO1~CTIO0:选择CTM外部引脚CTP功能位比较匹配输出模式00:无变化01:输出低10:输出高11:输出翻转PWM输出模式00:强制无效状态01:强制有效状态10:PWM输出11:未定义定时/计数器模式未使用此两位用于决定在一定条件达到时CTM输出脚如何改变状态.
这两位值的选择取决于CTM运行在哪种模式下.
在比较匹配输出模式下,CTIO1和CTIO0位决定当比较器A比较匹配输出发生时CTM输出脚如何改变状态.
当比较器A比较匹配输出发生时CTM输出脚能设为切换高、切换低或翻转当前状态.
若此两位同时为0时,这个输出将不会改变.
CTM输出脚的初始值通过CTMC1寄存器的CTOC位设置取得.
注意,由CTIO1和CTIO0位得到的输出电平必须与通过CTOC位设置的初始值不同,否则当比较匹配发生时,CTM输出脚将不会发生变化.
在CTM输出脚改变状态后,通过CTON位由低到高电平的转换复位至初始值.
在PWM输出模式,CTIO1和CTIO0用于决定比较匹配条件发生时怎样改变CTM输出脚的状态.
PWM输出功能通过这两位的变化进行更新.
仅在CTM关闭时改变CTIO1和CTIO0位的值是很有必要的.
若在CTM运行时改变CTIO1和CTIO0的值,PWM输出的值是无法预料的.
Bit3CTOC:CTMCTP输出控制位比较匹配输出模式0:初始低1:初始高PWM输出模式0:低有效1:高有效这是CTM输出脚输出控制位.
它取决于CTM此时正运行于比较匹配输出模式还是PWM输出模式.
若CTM处于定时/计数器模式,则其不受影响.
在比较匹配输出模式时,比较匹配发生前其决定CTM输出脚的逻辑电平值.
在PWM输出模式时,其决定PWM信号是高有效还是低有效.
Bit2CTPOL:CTMCTP输出极性控制位0:同相1:反相Rev.
1.
10572019-11-07此位控制CTP输出脚的极性.
此位为高时CTM输出脚反相,为低时CTM输出脚同相.
若CTM处于定时/计数器模式时其不受影响.
Bit1CTDPX:CTMPWM周期/占空比控制位0:CCRP-周期;CCRA-占空比1:CCRP-占空比;CCRA-周期此位决定CCRA与CCRP寄存器哪个被用于PWM波形的周期和占空比控制.
Bit0CTCCLR:选择CTM计数器清零条件位0:CTM比较器P匹配1:CTM比较器A匹配此位用于选择清除计数器的方法.
简易型TM包括两个比较器–比较器A和比较器P.
这两个比较器每个都可以用作清除内部计数器.
CTCCLR位设为高,计数器在比较器A比较匹配发生时被清除;此位设为低,计数器在比较器P比较匹配发生或计数器溢出时被清除.
计数器溢出清除的方法仅在CCRP被清除为0时才能生效.
CTCCLR位在PWM输出模式时未使用.
CTMDL寄存器Bit76543210NameD7D6D5D4D3D2D1D0R/WRRRRRRRRPOR00000000Bit7~0D7~D0:CTM计数器低字节寄存器bit7~bit0CTM10-bit计数器bit7~bit0CTMDH寄存器Bit76543210NameD9D8R/WRRPOR00Bit7~2未定义,读为"0"Bit1~0D9~D8:CTM计数器高字节寄存器bit1~bit0CTM10-bit计数器bit9~bit8CTMAL寄存器Bit76543210NameD7D6D5D4D3D2D1D0R/WR/WR/WR/WR/WR/WR/WR/WR/WPOR00000000Bit7~0D7~D0:CTMCCRA低字节寄存器bit7~bit0CTM10-bitCCRAbit7~bit0CTMAH寄存器Bit76543210NameD9D8R/WR/WR/WPOR00Bit7~2未定义,读为"0"Bit1~0D9~D8:CTMCCRA高字节寄存器bit1~bit0CTM10-bitCCRAbit9~bit8Rev.
1.
10582019-11-07简易型TM工作模式简易型TM有三种工作模式,即比较匹配输出模式,PWM输出模式或定时/计数器模式.
通过设置CTMC1寄存器的CTM1和CTM0位选择任意工作模式.
比较匹配输出模式为使CTM工作在此模式,CTMC1寄存器中的CTM1和CTM0位需要设置为"00".
当工作在该模式,一旦计数器使能并开始计数,有三种方法来清零,分别是:计数器溢出,比较器A比较匹配发生和比较器P比较匹配发生.
当CTCCLR位为低,有两种方法清除计数器.
一种是比较器P比较匹配发生,另一种是CCRP所有位设置为零并使得计数器溢出.
此时,比较器A和比较器P的请求标志位CTMAF和CTMPF将分别置起.
如果CTMC1寄存器的CTCCLR位设置为高,当比较器A比较匹配发生时计数器被清零.
此时,即使CCRP寄存器的值小于CCRA寄存器的值,仅CTMAF中断请求标志产生.
所以当CTCCLR为高时,不产生CTMPF中断请求标志.
如果CCRA被清零,当计数达到最大值3FFH时,计数器溢出,而此时不产生CTMAF请求标志.
正如该模式名所言,当比较匹配发生后,CTM输出脚状态改变.
当比较器A比较匹配发生后CTMAF标志产生时,CTM输出脚状态改变.
比较器P比较匹配发生时产生的CTMPF标志不影响CTM输出脚.
CTM输出脚状态改变方式由CTMC1寄存器中CTIO1和CTIO0位决定.
当比较器A比较匹配发生时,CTIO1和CTIO0位决定TM输出脚输出高,低或翻转当前状态.
CTM输出脚初始值,在CTON位由低到高电平的变化后通过CTOC位设置.
注意,若CTIO1和CTIO0位同时为0时,引脚输出不变.
Rev.
1.
10592019-11-07CounterValue0x3FFCCRPCCRACTONCTPAUCTPOLCCRPInt.
flagCTMPFCCRAInt.
flagCTMAFCTMO/PPinTimeCCRP=0CCRP>0CounteroverflowCCRP>0CounterclearedbyCCRPvaluePauseResumeStopCounterRestartCTCCLR=0;CTM[1:0]=00OutputpinsettoinitialLevelLowifCTOC=0OutputTogglewithCTMAFflagNoteCTIO[1:0]=10ActiveHighOutputselectHereCTIO[1:0]=11ToggleOutputselectOutputnotaffectedbyCTMAFflag.
RemainsHighuntilresetbyCTONbitOutputPinResettoInitialvalueOutputcontrolledbyotherpin-sharedfunctionOutputInvertswhenCTPOLishigh比较匹配输出模式–CTCCLR=0注:1.
CTCCLR=0,比较器P匹配将清除计数器2.
CTM输出脚仅由CTMAF标志位控制3.
在CTON上升沿CTM输出脚复位至初始值Rev.
1.
10602019-11-07CounterValue0x3FFCCRPCCRACTONCTPAUCTPOLCTMO/PPinTimeCCRA=0CCRA=0CounteroverflowCCRA>0CounterclearedbyCCRAvaluePauseResumeStopCounterRestartOutputpinsettoinitialLevelLowifCTOC=0OutputTogglewithCTMAFflagNoteCTIO[1:0]=10ActiveHighOutputselectHereCTIO[1:0]=11ToggleOutputselectOutputnotaffectedbyCTMAFflag.
RemainsHighuntilresetbyCTONbitOutputPinResettoInitialvalueOutputcontrolledbyotherpin-sharedfunctionOutputInvertswhenCTPOLishighCTMPFnotgeneratedNoCTMAFflaggeneratedonCCRAoverflowOutputdoesnotchangeCTCCLR=1;CTM[1:0]=00CCRAInt.
flagCTMAFCCRPInt.
flagCTMPF比较匹配输出模式–CTCCLR=1注:1.
CTCCLR=1,比较器A匹配将清除计数器2.
CTM输出脚仅由CTMAF标志位控制3.
在CTON上升沿CTM输出脚复位至初始值4.
当CTCCLR=1时,CTMPF标志位不会产生Rev.
1.
10612019-11-07定时/计数器模式为使CTM工作在此模式,CTMC1寄存器中的CTM1和CTM0位需要设置为"11".
定时/计数器模式与比较输出模式操作方式相同,并产生同样的中断请求标志.
不同的是,在定时/计数器模式下CTM输出脚未使用.
因此,比较匹配输出模式中的描述和时序图可以适用于此功能.
该模式中未使用的CTM输出脚用作普通I/O脚或其它功能.
PWM输出模式为使CTM工作在此模式,CTMC1寄存器中的CTM1和CTM0位需要设置为"10".
CTM的PWM功能在马达控制,加热控制,照明控制等方面十分有用.
给CTM输出脚提供一个频率固定但占空比可调的信号,将产生一个有效值等于DC均方根的AC方波.
由于PWM波形的周期和占空比可调,其波形的选择就极其灵活.
在PWM输出模式中,CTCCLR位不影响PWM操作.
CCRA和CCRP寄存器决定PWM波形,一个用来清除内部计数器并控制PWM波形的频率,另一个用来控制占空比.
哪个寄存器控制频率或占空比取决于CTMC1寄存器的CTDPX位.
所以PWM波形频率和占空比由CCRA和CCRP寄存器共同决定.
当比较器A或比较器P比较匹配发生时,将产生CCRA或CCRP中断标志.
CTMC1寄存器中的CTOC位决定PWM波形的极性,CTIO1和CTIO0位使能PWM输出或将CTM输出脚置为逻辑高或逻辑低.
CTPOL位对PWM输出波形的极性取反.
10-bitCTM,PWM输出模式,边沿对齐模式,CTDPX=0CCRP001b010b011b100b101b110b111b000bPeriod1282563845126407688961024DutyCCRA若fSYS=8MHz,CTM时钟源选择fSYS/4,CCRP=100b,CCRA=128,CTMPWM输出频率=(fSYS/4)/512=fSYS/1024=3.
9063kHz,duty=128/512=25%,若由CCRA寄存器定义的Duty值等于或大于Period值,PWM输出占空比为100%.
10-bitCTM,PWM输出模式,边沿对齐模式,CTDPX=1CCRP001b010b011b100b101b110b111b000bPeriodCCRADuty1282563845126407688961024PWM的输出周期由CCRA寄存器的值与CTM的时钟共同决定,PWM的占空比由CCRP寄存器的值决定.
Rev.
1.
10622019-11-07CounterValueCCRPCCRACTONCTPAUCTPOLCTMO/PPin(CTOC=1)TimeCounterclearedbyCCRPPauseResumeCounterStopifCTONbitlowCounterResetwhenCTONreturnshighPWMDutyCyclesetbyCCRAPWMresumesoperationOutputcontrolledbyotherpin-sharedfunctionOutputInvertswhenCTPOL=1PWMPeriodsetbyCCRPCTMO/PPin(CTOC=0)CCRAInt.
flagCTMAFCCRPInt.
flagCTMPFCTDPX=0;CTM[1:0]=10PWM输出模式–CTDPX=0注:1.
CTDPX=0,CCRP清除计数器2.
计数器清零并设置PWM周期3.
当CTIO1,CTIO0=00或01,PWM功能不变4.
CTCCLR位不影响PWM操作Rev.
1.
10632019-11-07CounterValueCCRPCCRACTONCTPAUCTPOLCCRPInt.
flagCTMPFCCRAInt.
flagCTMAFCTMO/PPin(CTOC=1)TimeCounterclearedbyCCRAPauseResumeCounterStopifCTONbitlowCounterResetwhenCTONreturnshighPWMDutyCyclesetbyCCRPPWMresumesoperationOutputcontrolledbyotherpin-sharedfunctionOutputInvertswhenCTPOL=1PWMPeriodsetbyCCRACTMO/PPin(CTOC=0)CTDPX=1;CTM[1:0]=10PWM输出模式–CTDPX=1注:1.
CTDPX=1,CCRA清除计数器2.
计数器清零并设置PWM周期3.
当CTIO1,CTIO0=00或01,PWM功能不变4.
CTCCLR位不影响PWM操作Rev.
1.
10642019-11-07A/D转换器对于大多数电子系统而言,处理现实世界的模拟信号是共同的需求.
为了完全由单片机来处理这些信号,首先需要通过A/D转换器将模拟信号转换成数字信号.
将A/D转换器电路集成入单片机,可有效的减少外部器件,随之而来,具有降低成本和减少器件空间需求的优势.
A/D简介此单片机包含一个多通道的A/D转换器,它可以直接接入外部模拟信号(来自传感器或其它控制信号)或内部模拟信号并直接将这些信号转换成12位的数字量.
选择转换外部或内部模拟信号由SAINS2~SAINS0位和SACS3~SACS0位共同控制.
关于A/D输入信号的详细描述请参考"A/D转换器控制寄存器"和"A/D转换器输入信号"两节内容.
外部输入通道内部信号A/D通道选择位AN0~AN510*A2PSAINS2~SAINS0,SACS3~SACS0下图显示了A/D转换器内部结构和相关的寄存器.
A/DConverterSTARTADBZADCENAVSSA/DClock÷2N(N=0~7)fSYSAVDDADCENSADOLSADOHAN5A/DConverterReferenceVoltageA/DDataRegistersADRFSSAINS2~SAINS0SACS3~SACS0SACKS2~SACKS010xA2PPin-sharedSelectionPin-sharedSelectionAVDDSAVRS1~SAVRS0VREFAN0AN1A/D转换器结构注:10*A2P信号为10倍的OPA2正端输入电压,具体说明请参考电池充电模块章节.
A/D转换寄存器介绍A/D转换器的所有工作由一系列寄存器控制.
一对只读寄存器来存放12位A/D转换数据的值.
剩下两个控制寄存器SADC0和SADC1设置A/D转换器的操作和控制功能.
Rev.
1.
10652019-11-07寄存器名称位76543210SADOL(ADRFS=0)D3D2D1D0————SADOL(ADRFS=1)D7D6D5D4D3D2D1D0SADOH(ADRFS=0)D11D10D9D8D7D6D5D4SADOH(ADRFS=1)D11D10D9D8SADC0STARTADBZADCENADRFSSACS3SACS2SACS1SACS0SADC1SAINS2SAINS1SAINS0SAVRS1SAVRS0SACKS2SACKS1SACKS0A/D转换器寄存器列表A/D转换器数据寄存器–SADOL,SADOH对于具有12位A/D转换器的芯片,需要两个数据寄存器存放转换结果,一个高字节寄存器SADOH和一个低字节寄存器SADOL.
在A/D转换完毕后,单片机可以直接读取这些寄存器以获得转换结果.
由于寄存器只使用了16位中的12位,其数据存储格式由SADC0寄存器的ADRFS位控制,如下表所示.
D0~D11是A/D换转数据结果位.
未使用的位读为"0".
当A/D转换器除能时,数据寄存器的值将保持不变.
ADRFSSADOHSADOL76543210765432100D11D10D9D8D7D6D5D4D3D2D1D0000010000D11D10D9D8D7D6D5D4D3D2D1D0A/D数据寄存器A/D转换器控制寄存器–SADC0,SADC1寄存器SADC0和SADC1用来控制A/D转换器的功能和操作.
这些8位的寄存器定义包括选择连接至内部A/D转换器的模拟通道,数字化数据格式,A/D时钟源,并控制和监视A/D转换器的忙碌状态.
由于每个单片机只包含一个实际的模数转换电路,因此这些外部和内部模拟信号中的每一个都需要分别被发送到转换器.
SADC0寄存器中的SACS3~SACS0位用于选择哪个外部模拟输入通道被连接到内部A/D转换器.
SADC1寄存器中的SAINS2~SAINS0位用于选择外部模拟输入通道或内部模拟信号被连接到内部A/D转换器.
引脚共用功能选择寄存器的相关位用来定义I/O端口中的哪些引脚为A/D转换器的模拟输入,哪些引脚不作为A/D转换输入.
当引脚作为A/D输入时,其原来的I/O或其它引脚共用功能消失,此外,其内部上拉电阻也将自动断开.
SADC0寄存器Bit76543210NameSTARTADBZADCENADRFSSACS3SACS2SACS1SACS0R/WR/WRR/WR/WR/WR/WR/WR/WPOR00000000Bit7START:启动A/D转换位0→1→0:启动此位用于初始化A/D转换过程.
通常此位为低,但如果设为高再被清零,将初始化A/D转换过程.
当此位为高,将重置A/D转换器.
Rev.
1.
10662019-11-07Bit6ADBZ:A/D转换忙碌标志位0:A/D转换结束或未开始转换1:A/D转换中此位用于表明A/D转换过程是否完成.
当START位由低变为高再变为低时,ADBZ位为高,表明A/D转换已初始化.
A/D转换结束后,此位被清零.
Bit5ADCEN:A/D转换器使能/除能控制位0:除能1:使能此位控制A/D内部功能.
该位被置高将使能A/D转换器.
如果该位设为低将关闭A/D转换器以降低功耗.
当A/D转换器除能时,A/D数据寄存器SADOH和SADOL的内容将保持不变.
Bit4ADRFS:A/D转换数据格式选择位0:A/D转换数据格式→SADOH=D[11:4];SADOL=D[3:0]1:A/D转换数据格式→SADOH=D[11:8];SADOL=D[7:0]此位控制存放在两个A/D数据寄存器中的12位A/D转换结果的格式.
细节方面请参考A/D数据寄存器章节.
Bit3~0SACS3~SACS0:A/D外部模拟通道输入选择位0000:AN00001:AN10010:AN20011:AN30100:AN40101:AN50110~1111:无通道,输入浮空SADC1寄存器Bit76543210NameSAINS2SAINS1SAINS0SAVRS1SAVRS0SACKS2SACKS1SACKS0R/WR/WR/WR/WR/WR/WR/WR/WR/WPOR00000000Bit7~5SAINS2~SAINS0:A/D输入信号选择位000:来自外部模拟通道输入001:也来自内部10*A2P信号010:保留,接地011:保留,接地100:保留,接地101~111:选择同000必须注意当SAINS2~SAINS0位为001选择转换内部模拟信号时,外部输入通道一定不能作为A/D输入,SACS3~SACS0位需正确设置为0110~1111中的一个值.
否则,外部输入通道将与内部模拟信号相连接,这将导致不可预期的后果,甚至不可逆的损坏.
Bit4~3SAVRS1~SAVRS0:A/D转换器参考电压选择位00:来自VREF引脚01:同时来自VREF引脚和内部AVDD其它值:选择同00这几位用于选择A/D转换器的参考电压.
必须注意当SAVRS1~SAVRS0为"01"选择内部A/D转换器电源作为参考电压时,需正确的设置相应的共用引脚功能控制位,不能将VREF引脚设置为参考电压输入.
否则,VREF引脚的外部输入电压也会连接到内部A/D转换器电源.
Bit2~0SACKS2~SACKS0:A/D时钟源选择位000:fSYS001:fSYS/2010:fSYS/4Rev.
1.
10672019-11-07011:fSYS/8100:fSYS/16101:fSYS/32110:fSYS/64111:fSYS/128A/D操作SADC0寄存器中的START位,用于打开A/D转换器.
当单片机设置此位从逻辑低到逻辑高,然后再到逻辑低,就会开始一个模数转换周期.
SADC0寄存器中的ADBZ位用于表明模数转换过程是否正在进行.
A/D转换成功启动后,ADBZ位会被单片机自动置为"1".
在转换周期结束后,ADBZ位会自动置为"0".
此外,也会置位中断控制寄存器内相应的A/D中断请求标志位,如果中断使能,就会产生对应的内部中断信号.
A/D内部中断信号将引导程序跳转到相应的A/D内部中断地址.
如果A/D内部中断被禁止,可以让单片机轮询SADC0寄存器中的ADBZ位,检查此位是否被清除,作为另一种侦测A/D转换周期结束的方法.
A/D转换器的时钟源为系统时钟fSYS或其分频,而分频系数由SADC1寄存器中的SACKS2~SACKS0位决定.
虽然A/D时钟源是由系统时钟fSYS和SACKS2~SACKS0位决定,但可选择的最大A/D时钟源则有一些限制.
由于允许的A/D时钟周期tADCK的范围为0.
5s~10s,所以选择系统时钟速度时就必须小心.
如果系统时钟速度为8MHz时,SACKS2~SACKS0位不能设为"000","001"或"111".
必须保证设置的A/D转换时钟周期不小于时钟周期的最小值或大于时钟周期的最大值,否则将会产生不准确的A/D转换值.
使用者可以参考下面的表格,被标上星号*的数值是不允许的,因为它们超出了A/D转换时钟周期规定的范围.
fSYSA/D时钟周期(tADCK)SACKS[2:0]=000(fSYS)SACKS[2:0]=001(fSYS/2)SACKS[2:0]=010(fSYS/4)SACKS[2:0]=011(fSYS/8)SACKS[2:0]=100(fSYS/16)SACKS[2:0]=101(fSYS/32)SACKS[2:0]=110(fSYS/64)SACKS[2:0]=111(fSYS/128)1MHz1μs2μs4μs8μs16μs*32μs*64μs*128μs*2MHz500ns1μs2μs4μs8μs16μs*32μs*64μs*4MHz250ns*500ns1μs2μs4μs8μs16μs*32μs*8MHz125ns*250ns*500ns1μs2μs4μs8μs16μs*A/D时钟周期范例SADC0寄存器中的ADCEN位用于控制A/D转换电路电源的开启和关闭.
该位必须置高以开启A/D转换器电源.
当设置ADCEN位为高开启A/D转换器内部电路时,在A/D转换成功开启前需一段延时.
即使通过相关引脚共用控制位选择无引脚作为A/D输入,如果ADCEN设为"1",那么仍然会产生功耗.
因此在功耗敏感的应用中,当未使用A/D转换器功能时,建议设置ADCEN为低以减少功耗.
A/D转换器参考电压A/D转换器参考电压可以来自正电源电压引脚AVDD或外部参考源引脚VREF,可通过SAVRS1~SAVRS0位来选择.
当SAVRS字段为"01"时,A/D转换器参考电压来自AVDD引脚.
否则,当SAVRS字段为"01"以外任何值时,A/D转换器参考电压来自VREF引脚.
然而,若选择A/D转换器电源作为A/D转换器的参考电压,VREF引脚不能配置为参考电压输入功能,以避免VREF引脚与A/D转换器电源AVDD内部相连接.
模拟输入值一定不能超过所选的参考电压VREF值.
Rev.
1.
10682019-11-07A/D转换器输入信号所有的A/D外部模拟输入引脚都与I/O口及其它功能共用.
使用PBS0和PBS1寄存器中的相应位,可以将它们设置为A/D转换器模拟输入脚或其它共用功能.
如果对应的引脚作为A/D转换输入,那么它原来的引脚功能将除能.
通过这种方式,引脚的功能可由程序来控制,灵活地切换引脚功能.
如果将引脚设为A/D输入,则通过寄存器编程设置的所有上拉电阻会自动断开.
请注意,端口控制寄存器不需要为使能A/D输入而先设定为输入模式,当A/D输入功能选择位使能A/D输入时,端口控制寄存器的状态将被重置.
A/D转换器还有一个内部模拟信号10*A2P,可通过设置SAINS2~SAINS0位将其连接到A/D转换器作为模拟输入信号.
如果选择外部输入通道,SAINS2~SAINS0位应设为"000",具体外部通道编号由SACS3~SACS0位决定.
如果选择内部模拟信号,那么必须适当地设置SACS3~SACS0位为0110~1111中的一个值,将外部输入通道切换到无A/D输入通道状态.
否则,外部输入通道将与内部模拟信号相连接,这将导致不可预期的后果.
SAINS[2:0]SACS[3:0]输入信号描述000,101~1110000~0101AN0~AN5外部模拟通道输入0110~1111—无通道,输入浮空0010110~111110*A2P10倍的OPA2的正端输入电压010~100xxxxGND未使用连接到地A/D转换器输入信号选择A/D转换率及时序图一个完整的A/D转换包含两部分,数据采样和数据转换.
数据采样时间定义为tADS,需要4个A/D时钟周期,而数据转换需要12个A/D时钟周期.
所以一个完整的A/D转换时间tADC,一共需要16个A/D时钟周期.
最大A/D转换率=A/D时钟周期÷16下列时序图表示模数转换过程中不同阶段的图形与时序.
由应用程序控制开始A/D转换过程后,单片机的内部硬件就会开始进行转换,在这个过程中,程序可以继续其它功能.
A/D转换时间为16tADCK,tADCK为A/D时钟周期.
ADCENSTARTADBZSACS[3:0](SAINS[2:0]=000)offonoffontON2STtADSA/DsamplingtimetADSA/DsamplingtimeStartofA/DconversionStartofA/DconversionStartofA/DconversionEndofA/DconversionEndofA/DconversiontADCA/DconversiontimetADCA/DconversiontimetADCA/Dconversiontime0011B0010B0000B0001BA/DchannelswitchA/D转换时序图–外部通道输入Rev.
1.
10692019-11-07A/D转换步骤下面概述实现A/D转换过程的各个步骤.
步骤1通过SADC1寄存器中的SACKS2~SACKS0位,选择所需的A/D转换时钟.
步骤2将SADC0寄存器中的ADCEN位置高使能A/D转换器.
步骤3通过SADC1寄存器中的SAINS2~SAINS0位,选择连接至内部A/D转换器的信号.
若选择外部通道输入,接着执行步骤4.
若选择内部模拟信号,接着执行步骤5.
步骤4若已通过SAINS2~SAINS0位选择A/D输入信号来自外部通道输入,接着应设置相关的引脚共用控制位将该引脚规划为A/D输入引脚.
通过设置SACS3~SACS0位选择哪个外部通道接至A/D转换器.
接着执行步骤6.
步骤5在SAINS2~SAINS0位选择A/D输入信号来自内部模拟信号之前,需设置SACS3~SACS0为0110~1111中的一个值,将外部通道输入切换到无通道输入,然后再通过SAINS2~SAINS0位选择内部模拟信号.
接着执行步骤6.
步骤6通过SADC1寄存器中的SAVRS1~SAVRS0位选择参考电压.
步骤7设置SADC0寄存器中的ADRFS位选择A/D转换器输出数据格式.
步骤8如果要使用中断,则中断控制寄存器需要正确地设置,以确保A/D中断功能是激活的.
总中断控制位EMI需要置位为"1",以及A/D转换器中断位ADE也需要置位为"1".
步骤9现在可以通过设置SADC0寄存器中的START位从"0"到"1"再回到"0",开始模数转换的过程.
步骤10如果A/D转换正在进行中,ADBZ位会被置为逻辑高.
A/D转换完成后,ADBZ位会被置为逻辑低,并可从SADOH和SADOL寄存器中读取输出数据.
注:若使用轮询SADC0寄存器中ADBZ位的状态的方法来检查转换过程是否结束时,则中断使能的步骤可以省略.
编程注意事项在编程时,如果A/D转换器未使用,通过设置SADC0寄存器中的ADCEN为低,关闭A/D内部电路以减少电源功耗.
此时,不考虑输入脚的模拟电压,内部A/D转换器电路不产生功耗.
如果A/D转换器输入脚用作普通I/O脚,必须特别注意,输入电压为无效逻辑电平也可能增加功耗.
Rev.
1.
10702019-11-07A/D转换功能单片机含有一组12位的A/D转换器,它们转换的最大值可达FFFH.
由于模拟输入最大值等于实际A/D转换器参考电压值,VREF,因此每一位可表示VREF/4096的模拟输入值.
1LSB=VREF÷4096通过下面的等式可估算A/D转换器输入电压值:A/D输入电压=A/D数字输出值*(VREF÷4096)下图显示A/D转换器模拟输入值和数字输出值之间理想的转换功能.
除了数字化数值0,其后的数字化数值会在精确点之前的0.
5LSB处改变,而数字化数值的最大值将在AVDD或VREF之前的1.
5LSB处改变.
注意,这里的VREF电压指代的是通过SAVRS位段选择的实际A/D转换器参考电压.
FFFHFFEHFFDH03H02H01H01234093409440954096VREF4096AnalogInputVoltageA/DConversionResult1.
5LSB0.
5LSB理想的A/D转换功能A/D转换应用范例下面两个范例程序用来说明怎样使用A/D转换.
第一个范例是轮询SADC0寄存器中的ADBZ位来判断A/D转换是否完成;第二个范例则使用中断的方式判断.
范例1:使用查询ADBZ的方式来检测转换结束clrADE;disableA/Dconverterinterruptmova,03HmovSADC1,a;selectfSYS/8asA/DclocksetADCENmova,03h;setupPBS0toconfigurepinAN0movPBS0,amova,20hmovSADC0,a;enableA/DconverterandconnectAN0channeltoA/Dconverter:start_conversion:clrSTART;highpulseonstartbittoinitiateconversionsetSTART;resetA/DclrSTART;startA/Dpolling_EOC:szADBZ;polltheSADC0registerADBZbittodetectendofA/DconversionRev.
1.
10712019-11-07jmppolling_EOC;continuepollingmova,SADOL;readlowbyteconversionresultvaluemovSADOL_buffer,a;saveresulttouserdefinedregistermova,SADOH;readhighbyteconversionresultvaluemovSADOH_buffer,a;saveresulttouserdefinedregister::jmpstart_conversion;startnextA/Dconversion范例2:使用中断的方式来检测转换结束clrADE;disableA/Dconverterinterruptmova,03HmovSADC1,a;selectfSYS/8asA/DclocksetADCENmova,03h;setupPBS0toconfigurepinAN0movPBS0,amova,20hmovSADC0,a;enableA/DconverterandconnectAN0channeltoA/DconverterStart_conversion:clrSTART;highpulseonSTARTbittoinitiateconversionsetSTART;resetA/DclrSTART;startA/DclrADF;clearADCinterruptrequestflagsetADE;enableA/DconverterinterruptsetEMI;enableglobalinterrupt::;ADCinterruptserviceroutineADC_ISR:movacc_stack,a;saveACCtouserdefinedmemorymova,STATUSmovstatus_stack,a;saveSTATUStouserdefinedmemory::mova,SADOL;readlowbyteconversionresultvaluemovSADOL_buffer,a;saveresulttouserdefinedregistermova,SADOH;readhighbyteconversionresultvaluemovSADOH_buffer,a;saveresulttouserdefinedregister::EXIT_INT_ISR:mova,status_stackmovSTATUS,a;restoreSTATUSfromuserdefinedmemorymova,acc_stack;restoreACCfromuserdefinedmemoryretiRev.
1.
10722019-11-07电池充电模块该单片机具有一个电池充电模块,该模块由三个用于检测电流的运算放大器、一个8-bit和一个12-bitD/A转换器组成.
OPAEDAC0EN+-OPA0N8-bitDAC0D[7:0]10KOPA0PDAC1EN+-OPA1N12-bitDAC1D[11:0]10KOPA1POPA0AVDDOPA1Ro=13KRo=10KAVDDOPA2-+OPA2P10xA2PR9RSAOPINOOF[5:0]OOFMOP2ENOOFMOPO电池充电模块结构注:1.
OPA0和OPA1始终使能,而OPA2由DAOPC寄存器中的OP2EN位控制.
2.
OPA0和OPA1无输入失调校准功能.
3.
OPA2具有输入失调校准功能.
4.
D/A转换器除能时,输出引脚将处于浮空状态.
5.
OPA0和OPA1为开漏输出类型.
电池充电控制寄存器电池充电模块包含一个8-bit和一个12-bit的R2RD/A转换器.
它们的参考电压来自AVDD引脚,可关闭以降低功耗.
DA0、DA1L和DA1H寄存器用于设置D/A转换器0和D/A转换器1的参考输入电压.
寄存器名称位76543210DA0D7D6D5D4D3D2D1D0DA1LD7D6D5D4D3D2D1D0DA1H————D11D10D9D8DAOPCDAC1ENDAC0ENOP2EN———SAOPINOPOOPVOSOOFM—OOF5OOF4OOF3OOF2OOF1OOF0电池充电控制寄存器列表Rev.
1.
10732019-11-07DA0寄存器Bit76543210NameD7D6D5D4D3D2D1D0R/WR/WR/WR/WR/WR/WR/WR/WR/WPOR01000000Bit7~0D7~D0:8-bitD/A转换器0数据对于D/A转换器0,DACOUT=(DACAVDD/28)*D[7:0],其中AVDD为D/A转换器参考输入电压,DACOUT为D/A转换器模拟输出电压.
DA1L寄存器Bit76543210NameD7D6D5D4D3D2D1D0R/WR/WR/WR/WR/WR/WR/WR/WR/WPOR00000000Bit7~0D7~D0:12-bitD/A转换器1数据低字节DA1H寄存器Bit76543210Name————D11D10D9D8R/W————R/WR/WR/WR/WPOR————1000Bit7~4未定义,读为"0"Bit3~0D11~D8:12-bitD/A转换器1数据高字节对该寄存器写值只会写入到影子缓存器中,而对DA1H寄存器写值,才会将影子缓存器的值复制到DA1L寄存器.
对于D/A转换器1,DACOUT=(DACAVDD/212)*D[11:0],其中AVDD为D/A转换器参考输入电压,DACOUT为D/A转换器模拟输出电压.
DAOPC寄存器Bit76543210NameDAC1ENDAC0ENOP2EN———SAOPINOPOR/WR/WR/WR/W———R/WRPOR110———00Bit7DAC1EN:D/A转换器1使能控制位0:除能,D/A转换器1输出浮空1:使能Bit6DAC0EN:D/A转换器0使能控制位0:除能,D/A转换器0输出浮空1:使能Bit5OP2EN:运算放大器2使能控制位0:除能1:使能Bit4~2未定义,读为"0"Bit1SAOPIN:切换OPA0N信号到OPA2P信号0:除能1:使能Rev.
1.
10742019-11-07Bit0OPO:运算放大器2数字逻辑输出运算放大器2除能时OPO位将被清零.
运算放大器电池放电模块包含三个运算放大器,运算放大器2相关的功能都由OPVOS寄存器控制.
OPVOS寄存器Bit76543210NameOOFM—OOF5OOF4OOF3OOF2OOF1OOF0R/WR/W—R/WR/WR/WR/WR/WR/WPOR0—100000Bit7OOFM:运算放大器2正常操作模式或输入失调电压校准模式选择位0:正常操作模式1:失调校准模式在失调电压校准模式时输入参考电压来自OPA2正端输入引脚.
Bit6未定义,读为"0"Bit5~0OOF5~OOF0:运算放大器2输入失调电压校准控制位运算放大器操作运算放大器2具有输入失调校准功能.
校准后的数据存储在OOF字段中.
OOFM位用于选择操作模式.
在失调电压校准模式时输入参考电压来自OPA2P引脚.
OPA2P是OPA2的正端输入引脚,10*A2P是OPA2的模拟输出电压.
OPA2数字输出标志位是OPO位,用于OPA2的校准模式.
OP2EN位用来使能OPA2功能.
失调校准步骤若要使用运算放大器2,应正确设置PAS0寄存器选择引脚功能为OPA2功能.
步骤1.
设置OOFM=1,运算放大器2进入失调电压校准模式.
为确保校准后VOS降到最小值,校准模式下的输入参考电压大小必须与运算放大器模式下输入的直流工作电压相同.
步骤2.
设置OOF[5:0]=000000,读取OPO位.
步骤3.
将OOF[5:0]值加一,然后再读取OPO位,如果OPO位状态发生改变,记录此时OOF[5:0]值为VOS1.
步骤4.
设置OOF[5:0]=11111,读取OPO位.
步骤5.
将OOF[5:0]值减一然后再读取OPO位,如果OPO位状态发生改变,记录此时OOF[5:0]值为VOS2.
步骤6.
将VOS=(VOS1+VOS2)/2重新存入OOF[5:0],此时失调校准完成.
若(VOS1+VOS2)/2的值不是整数,则去掉小数部分,保留VOS=VOUT-VIN.
Rev.
1.
10752019-11-07UART串行接口该单片机具有一个全双工的异步串行通信接口,可以很方便的与其它具有串行口的芯片通信.
UART具有许多功能特性,发送或接收串行数据时,将数据组成一个8位或9位的数据块,连同数据特征位一并传输.
具有检测数据覆盖或帧错误等功能.
UART功能占用一个内部中断向量,当接收到数据或数据发送结束,触发UART中断.
内置的UART功能包含以下特性:全双工通用异步接收器/发送器8位或9位传输格式奇校验、偶校验或无校验1位或2位停止位8位预分频的波特率发生器奇偶、帧、噪声和溢出检测支持地址匹配中断(最后一位=1)独立的发送和接收使能2-byteFIFO接收缓冲器RX引脚唤醒功能发送和接收中断中断可由下列条件初始化:发送器为空发送器空闲接收完成接收器溢出地址匹配MSBLSBTransmitterShiftRegister(TSR)MSBLSBReceiverShiftRegister(RSR)TXPinRXPinBaudRateGeneratorTXR_RXRRegisterTXR_RXRRegisterDatatobetransmittedDatareceivedBufferfHMCUDataBusUART数据传输方框图UART外部引脚内部UART有两个外部引脚TX和RX,可与外部串行接口进行通信.
TX和RX分别为UART发送脚和接收脚,与I/O口或其它功能共用引脚.
在使用UART功能前,应先通过相应的引脚共用功能选择寄存器,选择TX和RX引脚功能.
当UARTEN和TXEN/RXEN位置高时,将自动设置这些I/O脚或其它共用功能脚作为TX输出和RX输入,并且除能TX和RX引脚上的上拉电阻功能.
当UARTEN、TXEN或RXEN位清零除能TX或RX引脚功能后,TX或RX引脚将处于浮空状态.
这时TX或RX引脚是否连接内部上拉电阻是由相应的I/O上拉电阻控制位决定的.
Rev.
1.
10762019-11-07UART数据传输方案前面方框图显示了UART的整体结构.
需要发送的数据首先写入TXR_RXR寄存器,接着此数据被传输到发送移位寄存器TSR中,然后在波特率发生器的控制下将TSR寄存器中数据一位位地移到TX引脚上,低位在前.
TXR_RXR寄存器被映射到单片机的数据存储器中,而发送移位寄存器没有实际地址,所以发送移位寄存器不可直接操作.
数据在波特率发生器的控制下,低位在前高位在后,从外部引脚RX进入接收移位寄存器RSR.
当数据接收完成,数据从接收移位寄存器移入可被用户程序操作的TXR_RXR寄存器中.
TXR_RXR寄存器被映射到单片机数据存储器中,而接收移位寄存器没有实际地址,所以接收移位寄存器不可直接操作.
需要注意的是,发送和接收都是共用同一个数据存储器地址的数据寄存器,即TXR_RXR寄存器.
UART状态和控制寄存器与UART功能相关的有五个寄存器——控制UART模块整体功能的USR、UCR1和UCR2寄存器,控制波特率的BRG寄存器,管理发送和接收数据的数据寄存器TXR_RXR.
寄存器名称位76543210USRPERRNFFERROERRRIDLERXIFTIDLETXIFUCR1UARTENBNOPRENPRTSTOPSTXBRKRX8TX8UCR2TXENRXENBRGHADDENWAKERIETIIETEIETXR_RXRD7D6D5D4D3D2D1D0BRGD7D6D5D4D3D2D1D0UART寄存器列表USR寄存器寄存器USR是UART的状态寄存器,可以通过程序读取.
所有USR位是只读的.
详细解释如下:Bit76543210NamePERRNFFERROERRRIDLERXIFTIDLETXIFR/WRRRRRRRRPOR00001011Bit7PERR:奇偶校验出错标志位0:奇偶校验正确1:奇偶校验出错PERR是奇偶校验出错标志位.
若PERR=0,奇偶校验正确;若PERR=1,接收到的数据奇偶校验出错.
只有使能了奇偶校验此位才有效.
可使用软件清除该标志位,即先读取USR寄存器再读TXR_RXR寄存器来清除此位.
Bit6NF:噪声干扰标志位0:没有受到噪声干扰1:受到噪声干扰NF是噪声干扰标志位.
若NF=0,没有受到噪声干扰;若NF=1,UART接收数据时受到噪声干扰.
它与RXIF在同周期内置位,但不会与溢出标志位同时置位.
可使用软件清除该标志位,即先读取USR寄存器再读TXR_RXR寄存器将清除此标志位.
Rev.
1.
10772019-11-07Bit5FERR:帧错误标志位0:无帧错误发生1:有帧错误发生FREE是帧错误标志位.
若FREE=0,没有帧错误发生;若FREE=1,当前的数据发生了帧错误.
可使用软件清除该标志位,即先读取USR寄存器再读TXR_RXR寄存器来清除此位.
Bit4OERR:溢出错误标志位0:无溢出错误发生1:有溢出错误发生OERR是溢出错误标志位,表示接收缓冲器是否溢出.
若OERR=0,没有溢出错误;若OERR=1,发生了溢出错误,它将禁止下一组数据的接收.
可通过软件清除该标志位,即先读取USR寄存器再读TXR_RXR寄存器将清除此标志位.
Bit3RIDLE:接收状态标志位0:正在接收数据1:接收器空闲RIDLE是接收状态标志位.
若RIDLE=0,正在接收数据;若RIDLE=1,接收器空闲.
在接收到停止位和下一个数据的起始位之间,RIDLE被置位,表明UART空闲,RX脚处于逻辑高状态.
Bit2RXIF:接收寄存器状态标志位0:TXR_RXR寄存器为空1:TXR_RXR寄存器含有有效数据RXIF是接收寄存器状态标志位.
当RXIF=0,TXR_RXR寄存器为空;当RXIF=1,TXR_RXR寄存器接收到新数据.
当数据从移位寄存器加载到TXR_RXR寄存器中,如果UCR2寄存器中的RIE=1,则会触发中断.
当接收数据时检测到一个或多个错误时,相应的标志位NF、FERR或PERR会在同一周期内置位.
读取USR寄存器再读TXR_RXR寄存器,如果TXR_RXR寄存器中没有新的数据,那么将清除RXIF标志.
Bit1TIDLE:数据发送完成标志位0:数据传输中1:无数据传输TIDLE是数据发送完成标志位.
若TIDLE=0,数据传输中.
当TXIF=1且数据发送完毕或者暂停字被发送时,TIDLE置位.
TIDLE=1,TX引脚空闲且处于逻辑高状态.
读取USR寄存器再写TXR_RXR寄存器将清除TIDLE位.
数据字符或暂停字就绪时,不会产生该标志位.
Bit0TXIF:发送数据寄存器TXR_RXR状态位0:数据还没有从缓冲器加载到移位寄存器中1:数据已从缓冲器加载到移位寄存器中(TXR_RXR数据寄存器为空)TXIF是发送数据寄存器为空标志位.
若TXIF=0,数据还没有从缓冲器加载到移位寄存器中;若TXIF=1,数据已从缓冲器中加载到移位寄存器中.
读取USR存器再写TXR_RXR寄存器将清除TXIF.
当TXEN被置位,由于发送缓冲器未满,TXIF也会被置位.
Rev.
1.
10782019-11-07UCR1寄存器UCR1和UCR2是UART的两个控制寄存器,用来定义各种UART功能,例如UART的使能与除能、奇偶校验控制和传输数据的长度等等.
详细解释如下:Bit76543210NameUARTENBNOPRENPRTSTOPSTXBRKRX8TX8R/WR/WR/WR/WR/WR/WR/WRWPOR000000x0"x":未知Bit7UARTEN:UART功能使能位0:UART除能,TX和RX脚处于浮空状态1:UART使能,TX和RX脚作为UART功能引脚此位为UART的使能位.
UARTEN=0,UART除能,RX和TX处于浮空状态;UARTEN=1,UART使能,TX和RX将分别由TXEN和RXEN控制.
当UART被除能将清除缓冲器,所有缓冲器中的数据将被忽略,另外波特率计数器、错误和状态标志位被复位,TXEN、RXEN、TXBRK、RXIF、OERR、FERR、PERR和NF清零,而TIDLE、TXIF和RIDLE置位,UCR1、UCR2和BRG寄存器中的其它位保持不变.
若UART工作时UARTEN清零,所有发送和接收将停止,模块也将复位成上述状态.
当UART再次使能时,它将在上次配置下重新工作.
Bit6BNO:发送数据位数选择位0:8-bit传输数据1:9-bit传输数据BNO是发送数据位数选择位.
BNO=1,传输数据为9位;BNO=0,传输数据为8位.
若选择了9位数据传输格式,RX8和TX8将分别存储接收和发送数据的第9位.
Bit5PREN:奇偶校验使能位0:奇偶校验除能1:奇偶校验使能此位为奇偶校验使能位.
PREN=1,使能奇偶校验;PREN=0,除能奇偶校验.
Bit4PRT:奇偶校验选择位0:偶校验1:奇校验奇偶校验选择位.
PRT=1,奇校验;PRT=0,偶校验.
Bit3STOPS:停止位的长度选择位0:有一位停止位1:有两位停止位此位用来设置停止位的长度.
STOP=1,有两位停止位;STOP=0,只有一位停止位.
Bit2TXBRK:暂停字发送控制位0:没有暂停字要发送1:发送暂停字TXBRK是暂停字发送控制位.
TXBRK=0,没有暂停字要发送,TX引脚正常操作;TXBRK=1,将会发送暂停字,发送器将发送逻辑"0".
若TXBRK为高,缓冲器中数据发送完毕后,发送器输出将至少保持13位宽的低电平直至TXBRK复位.
Bit1RX8:接收9-bit数据传输格式中的第9位(只读)此位只有在传输数据为9位的格式中有效,用来存储接收数据的第9位.
BNO是用来控制传输位数是8位还是9位.
Bit0TX8:发送9-bit数据传输格式中的第9位(只写)此位只有在传输数据为9位的格式中有效,用来存储发送数据的第9位.
BNO是用来控制传输位数是8位还是9位.
Rev.
1.
10792019-11-07UCR2寄存器UCR2是UART的第二个控制寄存器,它的主要功能是控制发送器、接收器以及各种UART中断源的使能或除能.
它也可用来控制波特率,使能接收唤醒和地址侦测.
详细解释如下:Bit76543210NameTXENRXENBRGHADDENWAKERIETIIETEIER/WR/WR/WR/WR/WR/WR/WR/WR/WPOR00000000Bit7TXEN:UART发送使能位0:UART发送除能1:UART发送使能此位为发送使能位.
TXEN=0,发送将被除能,发送器立刻停止工作.
另外发送缓冲器将被复位,此时TX引脚将处于浮空状态.
若TXEN=1且UARTEN=1,则发送将被使能,TX引脚将由UART来控制.
在数据传输时清除TXEN将中止数据发送且复位发送器,此时TX引脚将处于浮空状态.
Bit6RXEN:UART接收使能位0:UART接收除能1:UART接收使能此位为接收使能位.
RXEN=0,接收将被除能,接收器立刻停止工作.
另外接收缓冲器将被复位,此时RX引脚将处于浮空状态.
若RXEN=1且UARTEN=1,则接收将被使能,RX引脚将由UART来控制.
在数据传输时清除RXEN将中止数据接收且复位接收器,此时RX引脚将处于浮空状态.
Bit5BRGH:波特率发生器高低速选择位0:低速波特率1:高速波特率此位为波特率发生器高低速选择位,它和BRG寄存器一起控制UART的波特率.
BRGH=1,为高速模式;BRGH=0,为低速模式.
Bit4ADDEN:地址检测使能位0:地址检测除能1:地址检测使能此位为地址检测使能和除能位.
ADDEN=1,地址检测使能,此时数据的第8位(BNO=0)或第9位(BNO=1)为高,那么接到的是地址而非数据.
若相应的中断使能且接收到的值最高位为1,那么中断请求标志将会被置位,若地址检测功能使能且最高位为0,那么将不会产生中断且收到的数据也会被忽略.
Bit3WAKE:RX脚下降沿唤醒UART功能使能位0:RX脚下降沿唤醒UART功能除能1:RX脚下降沿唤醒UART功能使能此位用于控制RX引脚下降沿时是否唤醒UART功能.
此位仅当UART时钟源fH关闭时有效.
若UART时钟源fH还开启,则无RX引脚唤醒UART功能无效.
若此位置高且UART时钟fH关闭,当RX引脚发生下降沿时会产生UART唤醒请求.
若相应的中断使能,将产生RX引脚唤醒UART的中断,以告知单片机使其通过应用程序开启UART时钟源fH,从而唤醒UART功能.
否则,若此位为低,即使RX引脚发生下降沿也无法恢复UART功能.
Bit2RIE:接收中断使能位0:接收中断除能1:接收中断使能此位为接收中断使能或除能位.
若RIE=1,当OERR或RXIF置位时,UART的中断请求标志置位;若RIE=0,UART中断请求标志不受OERR和RXIF影响.
Rev.
1.
10802019-11-07Bit1TIIE:发送器空闲中断使能位0:发送器空闲中断除能1:发送器空闲中断使能此位为发送器空闲中断的使能或除能位.
若TIIE=1,当发送器空闲触发TIDLE置位时,UART的中断请求标志置位;若TIIE=0,UART中断请求标志不受TIDLE的影响.
Bit0TEIE:发送寄存器为空中断使能位0:发送寄存器为空中断除能1:发送寄存器为空中断使能此位为发送寄存器为空中断的使能或除能位.
若TEIE=1,当发送器为空触发TXIF置位时,UART的中断请求标志置位;若TEIE=0,UART中断请求标志不受TXIF的影响.
TXR_RXR寄存器TXR_RXR是一个数据寄存器,用来存储TX引脚将要发送或RX引脚正在接收的数据.
Bit76543210NameD7D6D5D4D3D2D1D0R/WR/WR/WR/WR/WR/WR/WR/WR/WPORxxxxxxxx"x":未知Bit7~0D7~D0:UART发送/接收数据位Bit7~Bit0BRG寄存器Bit76543210NameD7D6D5D4D3D2D1D0R/WR/WR/WR/WR/WR/WR/WR/WR/WPORxxxxxxxx"x":未知Bit7~0D7~D0:波特率值软件设置BRGH位(设置波特率发生器的速度)和BRG寄存器(设置波特率的值),一起控制UART的波特率.
注:若BRGH=0,波特率=fH/[64*(N+1)];若BRGH=1,波特率=fH/[16*(N+1)].
波特率发生器UART自身具有一个波特率发生器,通过它可以设定数据传输速率.
波特率是由一个独立的内部8位计数器产生,它由BRG寄存器和UCR2寄存器的BRGH位来控制.
BRGH是决定波特率发生器处于高速模式还是低速模式,从而决定计算公式的选用.
BRG寄存器的值N可根据下表中的公式计算,N的范围是0到255.
UCR2的BRGH位01波特率(BR)fH/[64(N+1)]fH/[16(N+1)]为得到相应的波特率,首先需要设置BRGH来选择相应的计算公式从而算出BRG的值.
由于BRG的值不连续,所以实际波特率和理论值之间有一个偏差.
下面举例怎样计算BRG寄存器中的值N和误差.
Rev.
1.
10812019-11-07波特率和误差的计算若选用4MHz时钟频率且BRGH=0,若期望的波特率为4800,计算它的BRG寄存器的值N,实际波特率和误差.
根据上表,波特率BR=fH/[64(N+1)]转换后的公式N=[fH/(BR*64)]-1带入参数N=[4000000/(4800*64)]-1=12.
0208取最接近的值,十进制12写入BRG寄存器,实际波特率如下BR=4000000/[64*(12+1)]=4808因此,误差=(4808-4800)/4800=0.
16%UART模块的设置与控制UART采用标准的不归零码传输数据,这种方法通常被称为NRZ法.
它由1位起始位,8位或9位数据位和1位或者两位停止位组成.
奇偶校验是由硬件自动完成的,可设置成奇校验、偶校验和无校验三种格式.
常用的数据传输格式由8位数据位,1位停止位,无校验组成,用8、N、1表示,它是系统上电的默认格式.
数据位数、停止位数和奇偶校验由UCR1寄存器的BNO、PRT、PREN和STOPS设定.
用于数据发送和接收的波特率由一个内部的8位波特率发送器产生,数据传输时低位在前高位在后.
尽管UART发送器和接收器在功能上相互独立,但它们使用相同的数据传输格式和波特率,在任何情况下,停止位是必须的.
UART的使能和除能UART是由UCR1寄存器的UARTEN位来使能和除能的.
若UARTEN、TXEN和RXEN都为高,则TX和RX分别为UART的发送端口和接收端口.
若没有数据发送,TX引脚默认状态为高电平.
UARTEN清零将除能TX和RX,通过设置相关引脚共用控制位,这两个引脚可用作普通I/O口或其它引脚共用功能.
当UART被除能时将清空缓冲器,所有缓冲器中的数据将被忽略,另外一些使能控制、错误标志和状态标志将被复位,如TXEN、RXEN、TXBRK、RXIF、OERR、FERR、PERR和NF清零,而TIDLE、TXIF和RIDLE置位,UCR1、UCR2和BRG寄存器中的其它位保持不变.
若UART工作时UARTEN清零,所有发送和接收将停止,模块也将复位成上述状态.
当UART再次使能时,它将在上次配置下重新工作.
数据位、停止位位数以及奇偶校验的选择数据传输格式由数据长度、是否校验、校验类型、地址位以及停止位长度组成.
它们都是由UCR1寄存器的各个位控制的.
BNO决定数据传输是8位还是9位;PRT决定校验类型;PREN决定是否选择奇偶校验;而STOPS决定选用1位还是2位停止位.
下表列出了各种数据传输格式.
若地址检测功能使能,地址位,即数据字节的最高位,用来确定此帧是地址还是数据.
停止位的长度和数据位的长度无关,且只有发送器需设置停止位长度.
接收器只接收一个停止位.
Rev.
1.
10822019-11-07起始位数据位地址位校验位停止位8位数据位1800117011171019位数据位190011801118101发送和接收数据格式下图是传输8位和9位数据的波形.
Bit08-bitdataformatBit1StopBitNextStartBitStartBitParityBitBit2Bit3Bit4Bit5Bit6Bit7Bit09-bitdataformatBit1StartBitBit2Bit3Bit4Bit5Bit6StopBitNextStartBitParityBitBit8Bit7UART发送器UCR1寄存器的BNO位是控制数据传输的长度.
BNO=1其长度为9位,第9位MSB存储在UCR1寄存器的TX8中.
发送器的核心是发送移位寄存器TSR,它的数据由发送寄存器TXR_RXR提供,应用程序只须将发送数据写入TXR_RXR寄存器.
上组数据的停止位发出前,TSR寄存器禁止写入.
如果还有新的数据要发送,一旦停止位发出,待发数据将会从TXR_RXR寄存器加载到TSR寄存器.
TSR不像其它寄存器一样映射到数据存储器,所以应用程序不能对其进行读写操作.
TXEN=1,发送使能,但若TXR_RXR寄存器没有数据或者波特率没有设置,发送器将不会工作.
先写TXR_RXR寄存器再置高TXEN也会触发发送.
当发送器使能,若TSR寄存器为空,数据写入TXR_RXR寄存器将会直接加载到TSR寄存器中.
发送器工作时,TXEN清零,发送器将立刻停止工作并且复位,此时通过设置相关引脚共用控制位,TX引脚用作普通I/O口或其它引脚共用功能.
发送数据当UART发送数据时,数据从移位寄存器中移到TX引脚上,其低位在前高位在后.
在发送模式中,TXR_RXR寄存器在内部总线和发送移位寄存器间形成一个缓冲.
如果选择9位数据传输格式,最高位MSB取自UCR1寄存器的TX8.
发送器初始化可由如下步骤完成:正确地设置BNO、PRT、PREN和STOPS位以确定数据长度、校验类型和停止位长度.
设置BRG寄存器,选择期望的波特率.
置高TXEN,使能UART发送器且使TX作为UART的发送端.
读取USR寄存器,然后将待发数据写入TXR_RXR寄存器.
注意,此步骤会清除TXIF标志位.
Rev.
1.
10832019-11-07如果要发送多个数据只需重复上一步骤.
当TXIF=0时,数据将禁止写入TXR_RXR寄存器.
可以通过以下步骤来清除TXIF:1.
读取USR寄存器2.
写TXR_RXR寄存器只读标志位TXIF由UART硬件置位.
若TXIF=1,TXR_RXR寄存器为空,其它数据可以写入而不会覆盖之前的数据.
若TEIE=1,TXIF标志位会产生中断.
在数据传输时,写TXR_RXR指令会将待发数据暂存在TXR_RXR寄存器中,当前数据发送完毕后,待发数据被加载到发送移位寄存器中.
当发送器空闲时,写TXR_RXR指令会将数据直接加载到TSR寄存器中,数据传输立刻开始且TXIF置位.
当发送完停止位或暂停帧后,表示一帧数据已发送完毕,此时TIDLE位将被置位.
可以通过以下步骤来清除TIDLE:1.
读取USR寄存器2.
写TXR_RXR寄存器清除TXIF和TIDLE软件执行次序相同.
发送暂停字若TXBRK=1,下一帧将会发送暂停字.
它是由一个起始位、13*N(N=1,2……)位逻辑0组成.
置位TXBRK将会发送暂停字,而清除TXBRK将产生停止位,传输暂停字不会产生中断.
需要注意的是,暂停字至少13位宽.
若TXBRK持续为高,那么发送器会一直发送暂停字;当应用程序将TXBRK清零后,发送器结束最后一帧暂停字的发送后接着发送一位或两位停止位.
最后一帧暂停字的结尾自动为高电平,以确保下一帧数据起始位的检测.
UART接收器UART接收器支持8位或者9位数据接收.
若BNO=1,数据长度为9位,而最高位MSB存放在UCR1寄存器的TXR_RXR中.
接收器的核心是串行移位寄存器RSR.
RX引脚上的数据送入数据恢复器中,它在16倍波特率的频率下工作,而串行移位器工作在正常波特率下.
当在RX引脚上检测到停止位,若TXR_RXR寄存器为空,数据从RSR寄存器中加载到TXR_RXR寄存器.
RX引脚上的每一位数据会被采样三次以判断其逻辑状态.
RSR不像其它寄存器一样映射在数据存储器,所以应用程序不能对其进行读写操作.
接收数据当UART接收数据时,数据低位在前高位在后,连续地从RX引脚进入移位寄存器.
TXR_RXR寄存器在内部总线和接收移位寄存器间形成一个缓冲.
TXR_RXR寄存器是一个两层的FIFO缓冲器,它能保存两帧数据的同时接收第三帧数据,应用程序必须保证在接收完第三帧前读取TXR_RXR寄存器,否则忽略第三帧数据并且发生溢出错误.
接收器的初始化可由如下步骤完成:正确地设置BNO、PRT和PREN位以确定数据长度和校验类型.
设置BRG寄存器,选择期望的波特率.
置高RXEN,使能UART发送器且使RX作为UART的接收端.
此时接收器被使能并检测起始位.
Rev.
1.
10842019-11-07接收数据将会发生如下事件:当TXR_RXR寄存器中包含有效数据时,USR寄存器中的RXIF位将会置位,溢出错误发生之前至多还有一帧数据可读.
若RIE=1,数据从RSR寄存器加载到TXR_RXR寄存器中将产生中断.
若接收器检测到帧错误、噪声干扰错误、奇偶出错或溢出错误,那么相应的错误标志位置位.
可以通过如下步骤来清除RXIF:1.
读取USR寄存器2.
读取TXR_RXR寄存器接收暂停字UART接收任何暂停字都会当作帧错误处理.
接收器只根据BNO位的设置外加一个停止位来确定一帧数据的长度.
若暂停字位数大于BNO位指定的长度外加一个停止位,接收器认为接收已完毕,RXIF和FERR置位,TXR_RXR寄存器清0,若相应的中断允许且RIDLE为高将会产生中断.
暂停字只会被认为包含信息0且会置位FERR标志位.
如果检测到较长的暂停信号,接收器会将此信号视为包含一个起始位、数据位和无效的停止位的数据帧并且置位FERR标志位.
在下个开始位到来之前,接收器必须等待一个有效的停止位.
接收器不会假定线上的暂停信号是下一个开始位.
暂停字将会加载到缓冲器中,在接收到停止位前不会再接收数据,没有检测到停止位也会置位只读标志位RIDLE.
UART接收到暂停字会产生以下事件:帧错误标志位FERR置位.
TXR_RXR寄存器清零.
OERR、NF、PERR、RIDLE或RXIF可能会置位.
空闲状态当UART接收数据时,即在起初位和停止位之间,USR寄存器的接收状态标志位RIDLE清零.
在停止位和下一帧数据的起始位之间,RIDLE被置位,表示接收器空闲.
接收中断USR寄存器的只读标志位RXIF由接收器的边沿触发置位.
若RIE=1,数据从移位寄存器RSR加载到TXR_RXR寄存器时产生中断,同样地,溢出也会产生中断.
接收错误处理UART会产生几种接收错误,下面部分将描述各错误以及怎样处理.
溢出–OERR标志TXR_RXR寄存器是一个两层的FIFO缓冲器,它能保存两帧数据的同时接收第三帧数据,应用程序必须保证在接收完第三帧前读取TXR_RXR寄存器,否则发生溢出错误.
产生溢出错误时将会发生以下事件:USR寄存器中OERR被置位.
TXR_RXR寄存器中数据不会丢失.
Rev.
1.
10852019-11-07RSR寄存器数据将会被覆盖.
若RIE=1,将会产生中断.
先读取USR寄存器再读取TXR_RXR寄存器可将OERR清零.
噪声干扰–NF标志数据恢复时多次采样可以有效的鉴别出噪声干扰.
当检测到数据受到噪声干扰时将会发生以下事件:在RXIF上升沿,USR寄存器中只读标志位NF置位.
数据从RSR寄存器加载到TXR_RXR寄存器中.
不产生中断,但此位置位发生在RXIF置位产生中断的同周期内.
先读取USR寄存器再读取TXR_RXR寄存器可将NF清零.
帧错误–FERR标志若在停止位上检测到0,USR寄存器中只读标志FERR置位.
若选择两位停止位,此两位都必须为高,否则将置位FERR.
此标志位同接收的数据分别记录在USR寄存器和TXR_RXR寄存器中,此标志位可被任何复位清零.
奇偶校验错误–PERR标志若接收到数据出现奇偶校验错误,USR寄存器中只读标志PERR置位.
只有使能了奇偶校验,选择了校验类型,此标志位才有效.
此标志位同接收的数据分别记录在USR寄存器和TXR_RXR寄存器中,此标志位可被任何复位清零.
注意,在读取相应的数据之前必须先访问USR寄存器中的FERR和PERR错误标志位.
UART模块中断结构几个独立的UART条件可以产生一个UART中断.
当条件满足时,会产生一个低脉冲信号.
发送寄存器为空、发送器空闲、接收器数据有效、溢出和地址检测和RX引脚唤醒都会产生中断.
若总中断使能位及其相应的中断控制位使能且堆栈未满,程序将会跳转到相应的中断向量执行中断服务程序,而后再返回主程序.
其中四种情况,若其UCR2寄存器中相应中断允许位被置位,则USR寄存器中对应中断标志位将产生UART中断.
发送器相关的两个中断情况有各自对应的中断允许位,而接收器相关的两个中断情况共用一个中断允许位.
这些允许位可用于禁止个别的UART中断源.
地址检测也是UART的中断源,它没有相应的标志位,若UCR2寄存器中ADDEN=1,当检测到地址将会产生UART中断.
RX引脚唤醒也可以产生UART中断,它没有相应的标志位,当UART时钟源fH关闭且UCR2中的WAKE和RIE位被置位,RX引脚上有下降沿时会产生UART中断.
注意,USR寄存器标志位为只读状态,软件不能对其进行设置,和其它一些中断一样,在进入相应中断服务程序时也不能清除这些标志位.
这些标志位仅在UART特定动作发生时才会自动被清除,详细解释见UART寄存器章节.
整体UART中断的使能或除能可由中断控制寄存器中的相关中断使能控制位控制,其中断请求由UART模块决定.
Rev.
1.
10862019-11-07TransmitterEmptyFlagTXIFUSRRegisterTransmitterIdleFlagTIDLEReceiverOverrunFlagOERRReceiverDataAvailableRXIFADDENRXPinWake-upWAKE0101RX7ifBNO=0RX8ifBNO=1UCR2RegisterRIE01TIIE01TEIE01UARTInterruptRequestFlagURFUCR2RegisterURE01EMIInterruptsignaltoMCUUART中断方框图地址检测模式置位UCR2寄存器中的ADDEN将启动地址检测模式.
若此位为"1",可产生接收数据有效中断,其请求标志位为RXIF.
若ADDEN有效,只有在接收到数据最高位为1才会产生中断,注意URE和EMI中断使能位也要使能才会产生中断.
地址的最高位为第9位(BNO=1)或第8位(BNO=0),若此位为高,则接收到的是地址而非数据.
只有接收的数据的最后一位为高才会产生中断.
若ADDEN除能,每接收到一个有效数据便会置位RXIF,而不用考虑数据的最后一位.
地址检测和奇偶校验在功能上相互排斥,若地址检测模式使能,为了确保操作正确,必须将奇偶校验使能位清零以除能奇偶校验.
ADDENBit9(BNO=1)Bit8(BNO=0)产生UART中断00√1√10*1√ADDEN位功能UART模块暂停和唤醒UART时钟fH关闭后UART模块将停止运行.
当传送数据时UART时钟fH关闭,发送将停止直到UART模块时钟再次使能.
同样地,当接收数据时单片机进入暂停模式,数据接收也会停止.
当单片机进入暂停模式,USR、UCR1、UCR2、接收/发送寄存器以及BRG寄存器都不会受到影响.
建议在单片机进入暂停模式前先确保数据发送或接收已完成.
UART功能中包括了RX引脚的唤醒功能,由UCR2寄存器中WAKE位控制.
当单片机进入空闲或休眠模式且UART时钟fH关闭时,若WAKE位与UART允许位UARTEN、接收器允许位RXEN和接收器中断允许位RIE都被置位,则RX引脚的下降沿可触发产生RX引脚唤醒UART的中断.
唤醒后系统需延时一段时间才能正常工作,在此期间,RX引脚上的任何数据将被忽略.
Rev.
1.
10872019-11-07中断中断是单片机一个重要功能.
当外部事件或内部功能如定时器模块或A/D转换器有效,并且产生中断时,系统会暂时中止当前的程序而转到执行相对应的中断服务程序.
该单片机提供一个外部中断和内部中断功能,外部中断由INT引脚动作产生,而内部中断由各种内部功能,如定时器模块、时基、EEPROM,UART和A/D转换器等产生.
中断寄存器中断控制基本上是在一定单片机条件发生时设置请求标志位,应用程序中中断使能位的设置是通过位于专用数据存储器中的一系列寄存器控制的.
寄存器总的分为三类.
第一类是INTC0~INTC1寄存器,用于设置基本的中断;第二类是MFI寄存器,用于设置多功能中断;最后一种有INTEG寄存器,用于设置外部中断边沿触发类型.
寄存器中含有中断控制位和中断请求标志位.
中断控制位用于使能或除能各种中断,中断请求标志位用于存放当前中断请求的状态.
它们都按照特定的模式命名,前面表示中断类型的缩写,紧接着的字母"E"代表使能/除能位,"F"代表请求标志位.
功能使能位请求标志注释总中断EMI——INT脚INTEINTF—UART功能UREURF—时基TBnETBnFn=0或1A/D转换器ADEADF—多功能MFEMFF—EEPROMDEEDEF—CTMCTMPECTMPF—CTMAECTMAF中断寄存器位命名模式寄存器名称位76543210INTEGINTS1INTS0INTC0—TB0FURFINTFTB0EUREINTEEMIINTC1TB1FADFDEFMFFTB1EADEDEEMFEMFI——CTMAFCTMPF——CTMAECTMPE中断寄存器列表Rev.
1.
10882019-11-07INTEG寄存器Bit76543210NameINTS1INTS0R/WR/WR/WPOR00Bit7~2未定义,读为"0"Bit1~0INTS1~INTS0:定义INT中断有效边沿00:除能01:上升沿10:下降沿11:双沿INTC0寄存器Bit76543210Name—TB0FURFINTFTB0EUREINTEEMIR/W—R/WR/WR/WR/WR/WR/WR/WPOR—0000000Bit7未定义,读为"0"Bit6TB0F:时基0中断请求标志位0:无请求1:中断请求Bit5URF:UART中断请求标志位0:无请求1:中断请求Bit4INTF:INT中断请求标志位0:无请求1:中断请求Bit3TB0E:时基0中断控制位0:除能1:使能Bit2URE:UART中断控制位0:除能1:使能Bit1INTE:INT中断控制位0:除能1:使能Bit0EMI:总中断控制位0:除能1:使能Rev.
1.
10892019-11-07INTC1寄存器Bit76543210NameTB1FADFDEFMFFTB1EADEDEEMFER/WR/WR/WR/WR/WR/WR/WR/WR/WPOR00000000Bit7TB1F:时基1中断请求标志位0:无请求1:中断请求Bit6ADF:A/D转换器中断请求标志位0:无请求1:中断请求Bit5DEF:数据EEPROM中断请求标志位0:无请求1:中断请求Bit4MFF:多功能中断请求标志位0:无请求1:中断请求Bit3TB1E:时基1中断控制位0:除能1:使能Bit2ADE:A/D转换器中断控制位0:除能1:使能Bit1DEE:数据EEPROM中断控制位0:除能1:使能Bit0MFE:多功能中断控制位0:除能1:使能MFI寄存器Bit76543210Name——CTMAFCTMPF——CTMAECTMPER/W——R/WR/W——R/WR/WPOR——00——00Bit7~6未定义,读为"0"Bit5CTMAF:CTM比较器A匹配中断请求标志位0:无请求1:中断请求Bit4CTMPF:CTM比较器P匹配中断请求标志位0:无请求1:中断请求Bit3~2未定义,读为"0"Bit1CTMAE:CTM比较器A匹配中断控制位0:除能1:使能Bit0CTMPE:CTM比较器P匹配中断控制位0:除能1:使能Rev.
1.
10902019-11-07中断操作若中断事件条件产生,如一个TM比较器P、比较器A匹配或A/D转换结束等等,相关中断请求标志将置起.
中断标志产生后程序是否会跳转至相关中断向量执行是由中断使能位的条件决定的.
若使能位为"1",程序将跳至相关中断向量中执行;若使能位为"0",即使中断请求标志置起中断也不会发生,程序也不会跳转至相关中断向量执行.
若总中断使能位为"0",所有中断都将除能.
当中断发生时,下条指令的地址将被压入堆栈.
相应的中断向量地址加载至PC中.
系统将从此向量取下条指令.
中断向量处通常为"JMP"指令,以跳转到相应的中断服务程序.
中断服务程序必须以"RETI"指令返回至主程序,以继续执行原来的程序.
各个中断使能位以及相应的请求标志位,以优先级的次序显示在下图.
一些中断源有自己的向量,但是有些中断却共用多功能中断向量.
一旦中断子程序被响应,系统将自动清除EMI位,所有其它的中断将被屏蔽,这个方式可以防止任何进一步的中断嵌套.
其它中断请求可能发生在此期间,虽然中断不会立即响应,但是中断请求标志位会被记录.
如果某个中断服务子程序正在执行时,有另一个中断要求立即响应,那么EMI位应在程序进入中断子程序后置位,以允许此中断嵌套.
如果堆栈已满,即使此中断使能,中断请求也不会被响应,直到SP减少为止.
如果要求立刻动作,则堆栈必须避免成为储满状态.
请求同时发生时,执行优先级如下流程图所示.
所有被置起的中断请求标志都可把单片机从休眠或空闲模式中唤醒,若要防止唤醒动作发生,在单片机进入休眠或空闲模式前应将相应的标志置起.
InterruptNameRequestFlagsEnableBitsMasterEnableVectorEMIautodisabledinISRPriorityHighLowInterruptscontainedwithinMulti-FunctionInterrupts10H04H0CH08H18HInterruptNameRequestFlagsEnableBitsINTPinINTFINTEEMIUARTURFUREEMIEMITimeBase0TB0FTB0EM.
Funct.
0MFFMFEEMIEMIA/DADFADECTMPCTMPFCTMPECTMACTMAFCTMAExxEEnableBitsxxFRequestFlag,autoresetinISRLegendxxFRequestFlag,noautoresetinISREEPROMDEFDEEEMI14H1CHTimeBase1TB1FTB1EEMI中断结构Rev.
1.
10912019-11-07外部中断通过INT引脚上的信号变化可控制外部中断.
当触发沿选择位设置好触发类型,INT引脚的状态发生变化,外部中断请求标志INTF被置位时外部中断请求产生.
若要跳转到相应中断向量地址,总中断控制位EMI和相应中断使能位INTE需先被置位.
此外,必须使用INTEG寄存器使能外部中断功能并选择触发沿类型.
外部中断引脚和普通I/O口共用,如果相应寄存器中的中断使能位被置位,并且通过引脚共用寄存器选择外部中断脚,此引脚将被作为外部中断脚使用.
此时该引脚必须通过设置控制寄存器,将该引脚设置为输入口.
当中断使能,堆栈未满并且外部中断脚状态改变,将调用外部中断向量子程序.
当响应外部中断服务子程序时,中断请求标志位INTF会自动复位且EMI位会被清零以除能其它中断.
注意,即使此引脚被用作外部中断输入,其上拉电阻仍保持有效.
寄存器INTEG被用来选择有效的边沿类型,来触发外部中断.
可以选择上升沿还是下降沿或双沿触发都产生外部中断.
注意INTEG也可以用来除能外部中断功能.
UART中断由几种UART条件来控制UART中断发生.
当发送器为空、发送器空闲、接收器数据有效、接收器溢出、地址检测和RX引脚唤醒,UART中断请求标志URF被置位,UART中断请求产生.
若要程序跳转到相应中断向量地址,总中断控制位EMI、UART中断使能位URE需先被置位.
当中断使能,堆栈未满且以上任何一种情况发生时,将调用UART中断向量子程序.
当响应中断服务子程序时,EMI位会被清零以除能其他中断,URF标志位也自动清除.
但是USR寄存器标志位只能通过UART的某些动作清楚,其中的细节在UART部分.
时基中断时基中断提供一个固定周期的中断信号,由各自的定时器功能产生溢出信号控制.
当各自的中断请求标志TB0F或TB1F被置位时,中断请求发生.
当总中断使能位EMI和时基使能位TB0E或TB1E被置位,允许程序跳转到各自的中断向量地址.
当中断使能,堆栈未满且时基溢出时,将调用它们各自的中断向量子程序.
当响应中断服务子程序时,相应的中断请求标志位TB0F或TB1F会自动复位且EMI位会被清零以除能其它中断.
时基中断的目的是提供一个固定周期的中断信号.
其时钟源fPSC来自内部时钟源fSYS、fSYS/4或fSUB.
fPSC输入时钟首先经过分频器,分频率由程序设置TB0C和TB1C寄存器相关位获取合适的分频值以提供更长的时基中断周期.
相应的控制时基中断周期的时钟源可通过PSCR寄存器的CLKSEL1~CLKSEL0位选择.
MUXfSYS/4fSYSfSUBPrescalerCLKSEL[1:0]fPSCfPSC/20~fPSC/27MUXMUXTB0[2:0]TB1[2:0]TimeBase0InterruptTimeBase1InterruptTB0ONTB1ONfPSC/24~fPSC/211时基中断Rev.
1.
10922019-11-07PSCR寄存器Bit76543210NameCLKSEL1CLKSEL0R/WR/WR/WPOR00Bit7~2未定义,读为"0"Bit1~0CLKSEL1~CLKSEL0:分频器时钟源选择00:fSYS01:fSYS/41x:fSUBTB0C寄存器Bit76543210NameTB0ON————TB02TB01TB00R/WR/W————R/WR/WR/WPOR0————000Bit7TB0ON:时基0使能/除能控制位0:除能1:使能Bit6~3未定义,读为"0"Bit2~0TB02~TB00:选择时基0溢出周期位000:fPSC001:2/fPSC010:22/fPSC011:23/fPSC100:24/fPSC101:25/fPSC110:26/fPSC111:27/fPSCTB1C寄存器Bit76543210NameTB1ON————TB12TB11TB10R/WR/W————R/WR/WR/WPOR0————000Bit7TB1ON:时基1使能/除能控制位0:除能1:使能Bit6~3未定义,读为"0"Bit2~0TB12~TB10:选择时基1溢出周期位000:24/fPSC001:25/fPSC010:26/fPSC011:27/fPSC100:28/fPSC101:29/fPSC110:210/fPSC111:211/fPSCRev.
1.
10932019-11-07A/D转换器中断A/D转换器中断由A/D转换动作的结束来控制.
当A/D转换器中断请求标志被置位,即A/D转换过程完成时,中断请求发生.
若要跳转到相应中断向量地址,总中断控制位EMI和A/D转换器中断使能位ADE需先被置位.
当中断使能,堆栈未满且A/D转换动作结束时,将调用A/D转换器中断向量子程序.
当响应中断服务子程序时,相应的中断请求标志位ADF会自动复位且EMI位会被清零以除能其它中断.
EEPROM中断当写周期结束,EEPROM中断请求标志DEF被置位,EEPROM中断请求产生.
若要程序跳转到相应中断向量地址,总中断控制位EMI、EEPROM中断使能位DEE需先被置位.
当中断使能,堆栈未满且EEPROM写周期结束时,可跳转至相应的EEPROM中断向量子程序中执行.
当EEPROM中断响应,相应中断请求标志位DEF会自动清零且EMI位也会被清零以除能其它中断.
多功能中断该单片机中有1个多功能中断,与其它中断不同,它没有独立源,但由其它现有的中断源构成,即TM中断.
当多功能中断中任何一种中断请求标志MFF被置位,多功能中断请求产生.
当中断使能,堆栈未满,包括在多功能中断中的任意一个中断发生时,将调用多功能中断向量中的一个子程序.
当响应中断服务子程序时,相关的多功能请求标志位会自动复位且EMI位会自动清零以除能其它中断.
但必须注意的是,在中断响应时,虽然多功能中断标志会自动复位,但多功能中断源的请求标志位不会自动复位,必须由应用程序清零.
TM中断简易型TM有两个中断,分别来自比较器P、A匹配,都属于多功能中断.
每个TM各有两个中断请求标志位CTMPF、CTMAF及两个使能位CTMPE、CTMAE.
当TM比较器P、A匹配情况发生时,任意TM中断请求标志被置位,TM中断请求产生.
若要程序跳转到相应中断向量地址,总中断控制位EMI、相应TM中断使能位和相关多功能中断使能位MFE需先被置位.
当中断使能,堆栈未满且TM比较器匹配情况发生时,可跳转至相关多功能中断向量子程序中执行.
当TM中断响应,EMI将被自动清零以除能其它中断,相关MFF标志也可自动清除,但TM中断请求标志需在应用程序中手动清除.
中断唤醒功能每个中断都具有将处于休眠或空闲模式的单片机唤醒的能力.
当中断请求标志由低到高转换时唤醒动作产生,其与中断是否使能无关.
因此,尽管单片机处于休眠或空闲模式且系统振荡器停止工作,如有外部中断脚上产生外部边沿跳变可能导致其相应的中断标志被置位,由此产生中断,因此必须注意避免伪唤醒情况的发生.
若中断唤醒功能被除能,单片机进入休眠或空闲模式前相应中断请求标志应被置起.
中断唤醒功能不受中断使能位的影响.
Rev.
1.
10942019-11-07编程注意事项通过禁止相关中断使能位,可以屏蔽中断请求,然而,一旦中断请求标志位被设定,它们会被保留在中断控制寄存器内,直到相应的中断服务子程序执行或请求标志位被软件指令清除.
多功能中断中所含中断相应程序执行时,多功能中断请求标志MFF可以自动清零,但各自的请求标志需在应用程序中手动清除.
建议在中断服务子程序中不要使用"CALL子程序"指令.
中断通常发生在不可预料的情况或是需要立刻执行的某些应用.
假如只剩下一层堆栈且没有控制好中断,当"CALL子程序"在中断服务子程序中执行时,将破坏原来的控制序列.
所有中断在休眠或空闲模式下都具有唤醒功能,当中断请求标志发生由低到高的转变时都可产生唤醒功能.
若要避免相应中断产生唤醒动作,在单片机进入休眠或空闲模式前需先将相应请求标志置为高.
当进入中断服务程序,系统仅将程序计数器的内容压入堆栈,如果中断服务程序会改变状态寄存器或其它的寄存器的内容而破坏控制流程,应事先将这些数据保存起来.
若从中断子程序中返回可执行RET或RETI指令.
除了能返回至主程序外,RETI指令还能自动设置EMI位为高,允许进一步中断.
RET指令只能返回至主程序,清除EMI位,除能进一步中断.
Rev.
1.
10952019-11-07应用说明章节HT45F5Q-2电池充电器应用说明简介充电器是能依照电池当前情况,以Buck降压电路进行充电管理的设备,电池充电分为CV/CC模式,HT45F5Q-2为专用充电器MCU,内置电池充电管理模块完成上述功能控制,说明如下.
功能说明工作原理HT45F5Q-2内置电池充电管理模块,内含三组OPA(OPA0~2)、一组8-bitDAC(DAC0)及一组12-bitDAC(DAC1),其中漏极开路(opendrain)OPA0~1和DAC0~1用于CV与CC信号控制,OPA输出可直推光耦合器,使一次测PWMIC能进行输出功率调整(如下图).
而内置的10倍信号放大OPA(OPA2)用于放大充电电流信号,提升电流分辨率并降低检测电阻功率.
以下依序说明CV模式、CC模式和10倍信号放大OPA用途.
U2PC817R9D1C2Battery1R1Rectifier/Filter/RegulatorQ1CurrentModePWMICR3R4R6ACDC5VLDOC3C45VD2B+5VR2C65VB+AC_NAC_LC5R5C7R7C9R8C812BitDAC8BitDACADCOPA0OPA1OPA2U1HT45F5Q-2VDDVSSOPA2POPA0NOPA1NOPAEC1电池充电管理模块恒压模式恒压充电即无论电池内阻如何变化,皆以固定电压充电.
其原理为充电电压(B+)经由分压电阻R3和R4分压,由OPA1N传至OPA1负端.
通过OPA1输出OPAE把OPA1N和DAC误差放大,并经由光耦合器传送到PWMIC.
若OPA1N电压低于DAC电压则PWMIC增加PWM占空比,反之则减少PWM占空比.
注:DAC1(DA1H和DA1L)即为设置最大电压阈值.
Rev.
1.
10962019-11-07恒流模式恒流充电即无论电池内阻如何变化,皆以固定电流充电.
其原理为充电电流经检测电阻R1产生电压(V=I*R),由OPA0N传至OPA0负端.
通过OPA0输出OPAE把OPA0N和DAC误差放大,并经由光耦合器传送到PWMIC.
若OPA0N电压低于DAC(DA0)电压则PWMIC增加PWM占空比,反之则减少PWM占空比.
注:DAC0(DA0)即为设置最大电流阈值.
提升恒压及恒流分辨率方法若遇到内置8/12-bitDAC分辨率仍不足时,可将OPA0/OPA1正端改由外部提供,以外部电阻分压方式,提升电压和电流分辨率.
硬件电路图5V5VLNAC1IC1PC8175VQ3TRxHT45F5Q-2ChargerVoutBATOPAEVoutChargerTemperatureBatteryTemperatureRLEDGLEDD2D1D3D5C4C5R12C7C13D6D7R13C10C8D4R15R16R17R18R20R24D8D9D10C15C18C22C23C17C14C9C11R10R5R6R9R22R23R25R26C19C20C21C12R11R1R2R3R4R8R7R14C1C2C3C6F1NTC1VDR1C16VinVoutGNDU2HT7550-2Q2R19B+B-R21R27B+B-B-B-CMP1VFB2CS3RC4VREF8VCC7OUT6GND5IC23844VSS/AVSS1VDD/AVDD234PB0/AN05678PA1/OPA2P9PB610PA0/OCDSCK/OCPDA/TX11PA2/OCDSCK/ICPCK/RX12PA3/INT13PA4/CTPB14PA715PB5/AN516PB4/AN417PB3/AN318PB2/AN219PB1/AN12012Bit10KDACOPA1POPA0P8Bit10KDACOPA1NOPA0NU1HT45F5Q-2Q1充电器应用电路图Rev.
1.
10972019-11-07指令集简介任何单片机成功运作的核心在于它的指令集,此指令集为一组程序指令码,用来指导单片机如何去执行指定的工作.
在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.
10982019-11-07分支和控制转换程序分支是采取使用JMP指令跳转至指定地址或使用CALL指令调用子程序的形式,两者之不同在于当子程序被执行完毕后,程序必须马上返回原来的地址.
这个动作是由放置在子程序里的返回指令RET来实现,它可使程序跳回CALL指令之后的地址.
在JMP指令中,程序则只是跳到一个指定的地址而已,并不需如CALL指令般跳回.
一个非常有用的分支指令是条件跳转,跳转条件是由数据存储器或指定位来加以决定.
遵循跳转条件,程序将继续执行下一条指令或略过且跳转至接下来的指令.
这些分支指令是程序走向的关键,跳转条件可能是外部开关输入,或是内部数据位的值.
位运算提供数据存储器中单个位的运算指令是Holtek单片机的特性之一.
这特性对于输出端口位的设置尤其有用,其中个别的位或端口的引脚可以使用"SET[m].
i"或"CLR[m].
i"指令来设定其为高位或低位.
如果没有这特性,程序设计师必须先读入输出口的8位数据,处理这些数据,然后再输出正确的新数据.
这种读入-修改-写出的过程现在则被位运算指令所取代.
查表运算数据的储存通常由寄存器完成,然而当处理大量固定的数据时,它的存储量常常造成对个别存储器的不便.
为了改善此问题,Holtek单片机允许在程序存储器中建立一个表格作为数据可直接存储的区域,只需要一组简易的指令即可对数据进行查表.
其它运算除了上述功能指令外,其它指令还包括用于省电的"HALT"指令和使程序在极端电压或电磁环境下仍能正常工作的看门狗定时器控制指令.
这些指令的使用则请查阅相关的章节.
Rev.
1.
10992019-11-07指令集概要下表中说明了按功能分类的指令集,用户可以将该表作为基本的指令参考.
惯例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.
101002019-11-07助记符说明指令周期影响标志位移位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.
101012019-11-07助记符说明指令周期影响标志位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.
101022019-11-07指令定义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.
101032019-11-07ANDA,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.
101042019-11-07CLRWDT1PreclearWatchdogTimer指令说明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.
101052019-11-07DAA[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.
101062019-11-07INCA[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.
101072019-11-07ORA,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.
101082019-11-07RLA[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.
101092019-11-07RRC[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.
101102019-11-07SDZA[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.
101112019-11-07SNZ[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.
101122019-11-07SZ[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.
101132019-11-07TABRDL[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.
101142019-11-07封装信息请注意,这里提供的封装信息仅作为参考.
由于这个信息经常更新,提醒用户咨询Holtek网站以获取最新版本的封装信息.
封装信息的相关内容如下所示,点击可链接至Holtek网站相关信息页面.
封装信息(包括外形尺寸、包装带和卷轴规格)封装材料信息纸箱信息Rev.
1.
101152019-11-0720-pinNSOP(150mil)外形尺寸)*+,-.
+/0=符号尺寸(单位:inch)最小值典型值最大值A0.
2280.
2360.
244B0.
1460.
1540.
161C0.
009—0.
012C'0.
3820.
3900.
398D——0.
069E—0.
032BSC—F0.
002—0.
009G0.
020—0.
031H0.
008—0.
010α0°—8°符号尺寸(单位:mm)最小值典型值最大值A5.
806.
006.
20B3.
703.
904.
10C0.
23—0.
30C'9.
709.
9010.
10D——1.
75E—0.
80BSC—F0.
05—0.
23G0.
50—0.
80H0.
21—0.
25α0°—8°Rev.
1.
101162019-11-07Copyright2019byHOLTEKSEMICONDUCTORINC.
使用指南中所出现的信息在出版当时相信是正确的,然而Holtek对于说明书的使用不负任何责任.
文中提到的应用目的仅仅是用来做说明,Holtek不保证或表示这些没有进一步修改的应用将是适当的,也不推荐它的产品使用在会由于故障或其它原因可能会对人身造成危害的地方.
Holtek产品不授权使用于救生、维生从机或系统中做为关键从机.
Holtek拥有不事先通知而修改产品的权利,对于最新的信息,请参考我们的网址http://www.
holtek.
com/zh/.

UCloud云服务器香港临时补货,(Intel)CN2 GIA优化线路,上车绝佳时机

至今为止介绍了很多UCLOUD云服务器的促销活动,UCLOUD业者以前看不到我们的个人用户,即使有促销活动,续费也很少。现在新用户的折扣力很大,包括旧用户在内也有一部分折扣。结果,我们的用户是他们的生存动力。没有共享他们的信息的理由是比较受欢迎的香港云服务器CN2GIA线路产品缺货。这不是刚才看到邮件注意和刘先生的通知,而是补充UCLOUD香港云服务器、INTELCPU配置的服务器。如果我们需要他...

2021年全新Vultr VPS主机开通云服务器和选择机房教程(附IP不通问题)

昨天有分享到"2021年Vultr新用户福利注册账户赠送50美元"文章,居然还有网友曾经没有注册过他家的账户,薅过他们家的羊毛。通过一阵折腾居然能注册到账户,但是对于如何开通云服务器稍微有点不对劲,对于新人来说确实有点疑惑。因为Vultr采用的是预付费充值方式,会在每月的一号扣费,当然我们账户需要存留余额或者我们采用自动扣费支付模式。把笔记中以前的文章推送给网友查看,他居然告诉我界面不同,看的不对...

Nocser:马来西亚独立服务器促销$60.00/月

Nocser刚刚在WHT发布了几款促销服务器,Intel Xeon X3430,8GB内存,1TB HDD,30M不限流量,月付$60.00。Nocser是一家注册于马来西亚的主机商,主要经营虚拟主机、VPS和马来西亚独立服务器业务,数据中心位于马来西亚AIMS机房,线路方面,AIMS到国内电信一般,绕日本NTT;联通和移动比较友好,联通走新加坡,移动走香港,延迟都在100左右。促销马来西亚服务器...

正在跳转电影空间为你推荐
重庆网络公司一九互联重庆本地的网约车平台有哪些?如何识别比较正规的网约车平台?支付宝蜻蜓发布想做支付宝蜻蜓刷脸支付的代理么?怎么做?中国企业信息网全国企业信息公示系统怎么查询企业信息什么是支付宝支付宝是什么意思?重庆网站制作请问重庆那一家网站制作公司资信度比较好?技术实力雄厚呢?购物车什么叫淘宝购物车泉州商标注册请问泉州商标注册要怎么办理?在哪办理?佛山海虹海虹好吃吗,我从来没吃过网站后台密码破解如何破解网站后台密码joomla安装下载app并安装
重庆虚拟空间 老域名 天津服务器租赁 BWH lamp配置 地址大全 双拼域名 web服务器的架设 699美元 linux服务器维护 vip域名 空间购买 万网主机管理 浙江服务器 lamp兄弟连 中国联通宽带测速 网络速度 存储服务器 万网服务器 hdsky 更多