|
基本数据
Question 1
HT48 I/O Type MCU内容如何?
Answer HT48 I/O Type
MCU提供1K、2K、4K及8K的OTP Type及Mask
Type各一对MCU,编号为HT48R10A-1/HT48C10-1、HT48R30A-1/HT48C30-1、HT48R50A-1/HT48C50-1、HT48R70A-1/HT48C70-1、HT48R52、48R53总共10颗IC,规格功能请参考Holtek
Data Sheet。
Question 2
HT48 I/O Type MCU提供何种类的封装型式?
Answer
HT48R10A-1 : 24 SKDIP & SOP HT48R30A-1 : 24 SKDIP
& SOP (与HT48R10A-1脚位功能相同,方便客户MCU升级使用) HT48R30A-1 : 28 SKDIP &
SOP HT48R50A-1 : 28 SKDIP & SOP
(与HT48R30A-1脚位功能相同,方便客户MCU升级使用) HT48R50A-1 : 48 SSOP HT48R70A-1 : 48
SSOP (与HT48R50A-1脚位功能相同,方便客户MCU升级使用) HT48R70A-1 : 64 QFP HT48R52 :
52QFP HT48R53 : 52QFP
注:Mask type MCU HT48CXX-1同样提供上述相同封装
Question
3
HT48 I/O Type MCU有何重要功能及特性?
Answer
操作电压范围 2.2V ~ 5.5V 工业温度规格 -40°C ~ +85°C Low Voltage
Reset功能 OTP / Mask Type MCU兼容 其它请参考 Holtek Data Sheet
Question 4
HT48 I/O Type MCU是否提供Dice form?
Answer
Holtek 同时提供OTP Type及Mask Type MCU的Dice form的量产服务,但使用OTP MCU
Dice量产时,客户要特别注意打线及烧录的操作问题。
Question 5
HT48 I/O Type MCU的工作频率为何?
Answer
在5V、3.3V及3个电池的应用,工作频率达Max. 8MHz
(3.3V)。 在3V及2个电池的应用,工作频率达Max. 4MHz (2.2V)。
Question 6
HT48 I/O Type MCU的系统频率有那些?
Answer
HT48 I/O Type MCU的系统频率来源有三种,如下:
-
外部RC
-
外部 Crystal
-
内部
RC,如果选择内部RC只有3.2MHz、1.6MHz、800kHz和400kHz 四种选择
Question
7
当UARTEN、TXEN 和 RXEN 置位时,和TX、RX复用的 I/O口的状态会怎样?
Answer
在UARTEN、TXEN 和 RXEN 这三位置位时,I/O口将自动转换成相应TX
输出和RX输入并且禁止任何可能存在于RX脚的上拉电阻。
功能说明
Question 1
HT48 I/O Type MCU功能有何不同?
Answer
|
Part No. |
VDD |
System Clock |
Program Memory |
Data Memory |
I/O |
Timer |
Interrupt |
PFD |
UART |
Stack |
Package |
| 8-bit |
16-bit |
RTC |
Ext. |
Int. |
HT48R10A-1
HT48C10-1 |
2.2V~ 5.5V |
400kHz~ 8MHz |
1Kx14 |
64x8 |
21 |
1 |
-- |
v |
1 |
1 |
v |
-- |
4 |
24SKDIP/SOP |
HT48R30A-1
HT48C30-1 |
2.2V~ 5.5V |
400kHz~ 8MHz |
2Kx14 |
96x8 |
25 |
1 |
-- |
v |
1 |
1 |
v |
-- |
4 |
24SKDIP/SOP, 28SKDIP/SOP |
HT48R50A-1
HT48C50-1 |
2.2V~ 5.5V |
400kHz~ 8MHz |
4Kx15 |
160x8 |
35 |
1 |
1 |
v |
1 |
2 |
v |
-- |
6 |
28SKDIP/SOP, 48SSOP |
HT48R70A-1
HT48C70-1 |
2.2V~ 5.5V |
400kHz~ 8MHz |
8Kx16 |
224x8 |
56 |
-- |
2 |
v |
1 |
2 |
v |
-- |
16 |
48SSOP, 64QFP |
HT48R90A-1* HT48C90-1* |
2.2V~ 5.5V |
400kHz~ 8MHz |
16Kx16 |
576x8 |
56 |
1 |
2 |
v |
2 |
4 |
v |
v |
16 |
48SSOP, 64QFP |
|
Part No. |
VDD |
System Clock |
Program Memory |
Data Memory |
I/O |
Timer |
Interrupt |
Buzzer Output |
Stack |
Package |
| 8-bit |
RTC |
Ext. |
Int. |
| HT48R52 |
2.2V~5.5V |
400kHz~8MHz or 32768Hz |
2Kx14 |
88x8 |
36 |
1 |
v |
1 |
1 |
v |
4 |
52QFP |
| HT48R53 |
2.2V~5.5V |
400kHz~8MHz or 32768Hz |
4Kx15 |
88x8 |
36 |
1 |
v |
1 |
1 |
v |
4 |
52QFP |
注:细节规格请参考Holtek Data Sheet。
Question 2
间接寻址如何使用?
Answer
首先将要读写之Data Memory的地址先存入地址指针缓存器 (MP),然后对IAR执行读写 (例如: MOV a,
IAR),即可读到MP所指到的Data (MP的内容当地址)。间接寻址功能特别方便于数列 (array)
的处理,一般先将数列地址放入MP做运算后再读取所需的数列Data。
Question 3
查表指令如何使用,有何注意事项?
Answer
查表指令有二种,一种是TABRDC指令,此指令读取目前指令所在表数据,另一种为TABRDL指令,此指令固定读取最后一页表数据。要查表时首先必需将表的Low
Address填入TBLP再执行查表指令,表的Low Byte Data将存入指令指定的内存;表的High Byte
Data被存入TBLH中,要注意未满16-Bit之表Data高位被补0。
Question 4
已经进入HALT Mode为何还有耗电?
Answer
MCU进入HALT会将系统OSC关闭,但WDT OSC (如果Option选WDT Enable) 和RTC
OSC仍在工作,而且全部I/O会保持HALT前状态,除了WDT OSC和RTC OSC会耗一些电外,最要注意的是Input
Port是否浮接或者Output Port是否仍有负载,这些I/O处理要非常小心,否则会耗大电流。
Question 5
PA已经Low为何没有唤醒MCU?
Answer
MCU的PA
Port唤醒为瞬间下降缘触发,若在执行HALT之前PA已经Low,且在HALT期间一直维持在Low,因为没有下降缘动作,所以无法唤醒MCU。
Question 6
8-Bit TMR值如何设定?
Answer
8-Bit Timer/Counter为一向上数之计数器 (Counter),每当Counter数到255
(0FFH) 溢位0H时产生中断 (Interrupt),所以若要计数为N (N < 256);则TMR值要设定成
256-N,设定好后启动TMR;TMR即从设定值往上数到255溢出到0 (即256),故所得值即256-(256-N)=N。
Question 7
16-Bit TMR值如何设定?
Answer
16-Bit Timer/Counter为一向上数之计数器 (Counter),每当Counter数到65535
(0FFFFH)溢位0H时产生中断 (Interrupt),所以若要计数为N (N <
65536);则TMR值要设定成 65536-N,设定好后启动TMR;TMR即从设定值往上数到65535溢出到0
(即65536),故所得值即65536-(65536-N)=N。
Question 8
16-Bit Timer/Counter的设定和读取顺序?
Answer
HT48 I/O Type MCU内部Data
Bus均为8-Bit,对于16-Bit的数据必需两次才能完成,对16-Bit Timer/Counter的写必需先写Low
Byte然后High Byte,而读的顺序必需先读High Byte然后Low Byte。
Question
9
8-Bit Timer/Counter之Timer Mode如何设定?
Answer
因Timer/Counter有3种模式,即Timer、Event Counter和Pulse
Width等3种。 要执行Timer Mode要执行以下动作设定:
-
设定Timer/Counter为Timer Mode
(TM1、TM0=10H)
-
依据Timer的长短选定Prescaler值 (PSC2~PSC0)
-
设定计数初始值 (TMR)
-
打开相对应中断致能旗标 (ETI和EMI)
-
设定 Timer ON (TMRC.4=1)
当Timer被打开后,Timer开始向上计数,若Timer OFF
(TMRC.4=0),则Timer立即停止。下次Timer再ON,则从上次停留值继续往上数,直到满位溢出产生中断,同时Timer
重新加载初始值。
Question 10
16-Bit Timer/Counter之Timer Mode如何设定?
Answer
因Timer/Counter有3种模式,即Timer、Event Counter和Pulse
Width等3种。 要执行Timer Mode要执行以下动作设定:
-
设定Timer/Counter为Timer Mode
(TM1、TM0=10H)
-
设定计数初始值 (TMR)
-
打开相对应中断致能旗标 (ETI和EMI)
-
设定 Timer ON (TMRC.4=1)
当Timer被打开后,Timer开始向上计数,若Timer OFF
(TMRC.4=0),则Timer立即停止。下次Timer再ON,则从上次停留值继续往上数,直到满位溢出产生中断,同时Timer
重新加载初始值。
Question 11
Timer/Counter之Event Counter Mode如何设定?
Answer
因Timer/Counter有3种模式,即Timer、Event Counter和Pulse
Width等3种。 要执行Event Counter Mode要执行以下动作:
-
设定Timer/Counter为Event Counter Mode
(TM1、TM0=01H)
-
选择TE; TE=1则Count Falling
Edge,TE=0则Count Rising Edge
-
设定计数初始值 (TMR)
-
打开相对应中断致能旗标 (ETI和EMI)
-
控制Timer ON (TMRC.4=1)
Question 12
8-Bit Timer/Counter之Pulse Width Mode如何设定?
Answer
因Timer/Counter有3种模式,即Timer、Event Counter和Pulse
Width等3种。 要执行Pulse Width Mode要执行以下动作:
-
设定Timer/Counter为Pulse Width Mode
(TM1、TM0=11H)
-
选择TE; TE=1量High Pulse,TE=0量Low Pulse
-
依据Pulse长短需求选定Prescaler值 (PSC2~PSC0=n)
-
设定TMR计数初始值 (一般设定=0)
-
打开相对应中断致能旗标
-
打开Timer ON (TMRC.4)
执行完以上步骤,程序可抽空Check TON值,若TON=0表示Pulse Width量度完成,Timer的值
x 2 n+1即是Pulse时间的宽度。
Question 13
16-Bit Timer/Counter之Pulse Width Mode如何设定?
Answer
因Timer/Counter有3种模式,即Timer、Event Counter和Pulse
Width等3种。 要执行Pulse Width Mode要执行以下动作:
-
设定Timer/Counter为Pulse Width Mode
(TM1、TM0=11H)
-
选择TE; TE=1量High Pulse,TE=0量Low Pulse
-
设定TMR计数初始值 (一般设定=0)
-
打开相对应中断致能旗标
-
打开Timer ON (TMRC.4)
执行完以上步骤,程序可抽空Check TON值,若TON=0表示Pulse
Width量度完成,Timer的值即是Pulse时间的宽度。
Question 14
PFD和Buzzer Mode如何设定?
Answer
PFD功能同Buzzer功能。
要实现Buzzer Mode要执行以下设定:
-
Configuration Option选择BZ Option Enable
-
依据所要频率选择Prescaler (PSC2~PSC0=n)和TMR值
(fPFD = fSYS / (2n+1 x
(256-TMR) x 2))
-
打开Timer ON (TMRC.4)
-
将PB.0和PB.1设成Output Mode即PBC.0、PBC.1=0
执行以上设定后,若PB.0=1则Buzzer ON,若PB.0=0则Buzzer OFF
Question
15
当系统频率选用Int. RC + RTC时Timer的Clock Source有何选择?
Answer
当系统频率选用Int. RC + RTC时Timer的Clock
Source有fSYS/4和RTC
OSC两种选项,当选用fSYS/4时,则HALT时Timer跟着停止。若选用RTC
OSC,则HALT时,此Timer不会停止;亦即是此Timer可以当Real Time Clock (RTC)使用。
Question 16
Real Time Clock (RTC)要如何设定?
Answer
首先系统频率必需选用Int. RC + RTC,并且OSC1、OSC2必需外挂32768Hz
Crystal,然后设定Timer/Counter为Timer Mode,并选RTC
OSC为时钟源。以上动作即使在HALT之下,Timer会继续计数并产生Interrupt和Wake-up
CPU,使时间不会漏数达到RTC功能。
Question
17
Power On Reset时间为何?
Answer
在3V时,Power On Reset时间为45ms~180ms;5V时,Power On
Reset的时间为35ms~140ms
Question 18
低电压Reset (LVR) 在HALT时,是否会耗电?
Answer
LVR在HALT时没有作用,所以没有耗电问题。
Question
19
如何使用MCU都有定时器自动重载功能?
Answer
如果希望在下一次定时器自动重载时,装载另一个初值的话,只需要给TMR赋新值就可以了。 如果希望定时器马上装载另一个初值,并开始计数的话,请做以下步骤:
-
关闭允许计数位TMRC.4;
-
给TMR赋新值;
-
打开允许计数位TMRC.4。
Question
20
如何使用外部晶振结合仿真器调试程序?
Answer
首先,在设置OPTION
的SYSFREQ时,Internal不要打勾。这样可以使用外部的晶振,外部晶振可以加在Interface
Card上面的Y1处。同时也要检查JP4处的跳线,是RC振荡还是x'tal。这样就可以使用外部晶振结合仿真器调试程序。
Question
21
请问WDT之功能为何?
Answer
Watchdog Timer(WDT)主要用于监视MCU内部功能(software及hardware)之执行是否正常,
使用者必须适当设计software及运用clear WDT(CLR WDT, CLR WDT1, CLR WDT2)之指令,
使程序正常执行时, WDT不会overflow, 并且在当系统不正常执行时, WDT可以overflow造成WDT
reset, WDT reset之效能, 主要由software设计所决定。
Question
22
如何用I/O口测温度值?
Answer
用I/O口测试温度只能用I/O充放电来测量,需要三个I/O,两个输出口,一个输入口,两输出口分别连接参考电阻R1,热敏电阻R2,
R1和R2的另一端相连,并接入输入口和电容C1的一端,电容的另一端接地。
用输入口的门限电平判断充放电的结束否,R1是为修正R2的测量误差,其原理:ΔT1=R1C1 ΔT2=R2C1-->
R2=ΔT2R1/ΔT1。
Question
23
HT MCU具有LVR功能,它动作时,MCU的I/O、OSC等管脚处于何种状态?
Answer
当电压低于低电压复位电压时,此时LVR启动。
当最小工作电压<Vdd<低电压复位电压时,I/O口处于初始输入状态,OSC起振。
LVR的复位电压会因制程的不同有一定漂移,具体请参看相关的Datasheet的D.C.参数表格。
Question
24
如打算用定时中断把处在HALT下的CPU唤醒,遇到这样的问题:
HOLTEK的资料上说: 暂停模式是通过"HALT"指令实现且造成如下结果:系统振荡器将被关闭
,那么这是否说在HALT状态下,定时器也不可用?
Answer
HALT状态下,系统振荡器关闭,若定时器时钟来源为系统时钟,则定时器在HALT下停止;若以非系统时钟(如RTC)为时钟来源,则在HALT下,定时器仍然工作,溢出中断时唤醒MCU。
Question 25
HT48RU80的UART功能有哪些特性,触发UART中断的条件有哪些?
Answer
特性:全双工异步传输,可选择8位或9位传输格式,可选择奇偶校验类型,可选择1或2位停止位,8位预分频波特率发生器,各种传输错误检测,支持中断和地址检测,两层FIFO接收缓冲器,发送和接收中断。
中断触发条件:发送完成时、发送缓存器空闲、接收完成时、过速错误、地址匹配。
Question 26
上电重置,RESET重置与LVR重置后RAM变化有何异同?
Answer
一般MCU的上电重置,其特殊缓存器会被初始化(初始化值可参考datasheet),而通用缓存器的值是随机数。
而RESET重置,其特殊缓存器会被重新初始化,而通用缓存器的值保持不变。
LVR重置与外部RESET信号重置有相同的效果,但需注意LVR低电压状态要持续1ms以上。
应用说明
- Question 1
为什么HT48R10A-1/HT48C10-1与HT48R30A-1/HT48C30-1之MP
Bit7写入0,但读出却是1?
- Question 2
没有Push和POP指令;中断时数据要如何备份?
- Question 3
可以在Interrupt
Service Routine内执行Call吗?
- Question 4
中断处理中可否允许相同的中断再进入?
- Question 5
没有用到的I/O
Pin如何处理?
- Question 6
为何外部中断有下降缘,仍然没有唤醒MCU?
- Question 7
可以让外部中断不产生唤醒MCU吗?
- Question 8
WDT选用WDT
OSC时钟源时,看门狗如何计算?
- Question 9
WDT
Clock Source选择WDT OSC和选择fSYS/4有何差别?
- Question 10
2个CLR
WDT指令如何使用?
- Question 11
当8-Bit
Timer之时钟来源为Prescaler, 可以Reset Prescaler吗?
- Question 12
2颗电池
(2.2V~3.8V) 的工作电压操作可以使用LVR吗?
- Question 13
在Data
Sheet的Reset电路,是否可适用各种应用状况?
- Question 14
当系统时钟选择RC振荡器时,应用电路上OSC1外接的电阻与电容有何功能?电容可以不加吗?
- Question 15
当系统时钟选择RC振荡器时,频率误差为何?
- Question 16
用HT48系列MCU可以实现LCD
的driver吗?
- Question 17
当选择RC振荡电路作为系统时钟来源时,如何量测其振荡频率?
- Question 18
请问OTP
dice 烧录流程为何?
- Question 19
我需要使用OTP的DIE生产,请问如何烧录?
- Question 20
进省电模式时,应如何设置I/O状态,使功耗最小?No
load是指什么状态?
- Question 21
3
pin 之resonator/crystal用于MCU之时基时, 电容之Vss pin可改接Vdd吗?
- Question 22
写程序时,如欲在program
memory建立Table,如何建于绝对地址,为何ORG不适用,有其它方法吗?
- Question 23
为何写TMRL和TMRH不能改变其中的值?程序如下: mov
a,131 mov tmrl,a mov a,0ffh mov
tmrh,a 执行了以上这几条指令,TMRL和TMRH中的值依然保持原来的数据而未被改变!
- Question 24
使用HOLTEK
MCU做一个声音的产品,在程序中,会应用到查表:
| TABLE1: |
DC 0FFE1H,0FE32H,0FA34H,0FC78H |
|
|
DC 0FECDH,0FEDCH,0FE57H,0FD87H |
; 16位表格值 |
请问16位的查表表格定义能否按TABLE1的格式?
-
Question 25
在HT48X10A-1/HT48X30A-1的ROM存放表格内容时候,为什么有些数据查表后高字节内容不正确。例如0FFFFH,查表之后得到的数据是03FFFH。
-
Question 26
使用带有PA控制寄存器(PAC)的8位MCU作母体调试程序时,为什么向PA
PIN脚的某一位写0再写1,在寄存器观察窗口中却看不到PA PIN脚这一位的值有所变化?
- Question 27
当直接向Tmr中写入数据时,会发生什么结果?
- Question 28
当我在Tmr溢出产生后,向Tmr写入数据,此时Tmr为打开,为什么写入的数据会影响Tmr的计数?
- Question 29
当Mcu从halt中,由于WDT溢出唤醒后,向Tmr写入数据会有什么影响?
- Question 30
当Mcu在halt中,由Pa口唤醒后,向Tmr写入数据会有什么影响?
-
Question 31
MCU input pin 若用于侦测110或220V/230 AC 讯号之过零点(Zero Crossing)功能时,外部应串接多大的电阻才不会造成 IC 损坏?
-
Question 32
Input port可承受之最大输入电流为多少?
-
Question 33
HT48RU80的UART的波特率如何计算?
-
Question 34
HT48RU80中,缓存器TBHP如何使用?
-
Question 35
用C写程序时,RAM没有用完,为何编译会出现“RAM空间不足”的提示?
-
Question 36
HT48RU80 UART发送器和接收器初始化有哪些步骤?
- Question 37
在使用HT48RU80时,为何我根据波特率计算公式算出的波特率与实际的波特率会有误差?
- Question 38
在有多个RAM BANK的MCU中,如何将变量定义到BANK0以外的BANK?
- Question 39
请问Holtek MCU使用汇编语言中的RR和RL操作与使用C语言中的位移运算符>>和<<操作的结果是否相同?
Question 1
为什么HT48R10A-1/HT48C10-1与HT48R30A-1/HT48C30-1之MP
Bit7写入0,但读出却是1?
Answer
HT48R10A-1/HT48C10-1 Data RAM从40H~7FH,HT48R30A-1/HT48C30-1
Data RAM从20H~7FH,因为两者之Data RAM皆不超过80H,故其MP仅有7个Bits
(Bit0~Bit6)有效,亦即MP之Bit7写入无效且读到始终为1。
虽然MP写入70H读到F0H;实质上是指向70H,所以其间接寻址读写是完全正确的。
Question
2
没有Push和POP指令;中断时数据要如何备份?
Answer
虽然没有Push和POP指令,程序员仍可指定专用记忆RAM BYTE (例如:db ACCStack; for ACC
Storage)
储存中断时会被破坏的数据。首先将ACC存入专用内存,然后利用ACC依序将Status和其它数据搬移至各别之专用内存。在中断返回前,再反序将其它备份数据,Status和ACC回存,最后再执行RETI返回主程序。
Question 3
可以在Interrupt Service Routine内执行Call吗?
Answer
因为HT48 I/O Type MCU
Stack数目有限,在Interrupt中执行Call要特别注意,如果在进入Interrupt时Stack已经满了,则会造成Stack
Over,而使得程序无法返回。所以若要在Interrupt内执行Call,必需考虑在最差情况下之Stack使用数目,务必使在最差状况下进入Interrupt仍有Stack空间。
Question 4
中断处理中可否允许相同的中断再进入?
Answer
理论上在进入中断时MCU会自动清除EMI旗标 (EMI=0),并禁止所有中断的再进入,若中断处理中用软件设定EMI旗标
(EMI=1),则在Stack有空之下,所有中断(含相同中断)皆可再进入。要允许相同的中断再进入,需特别注意备份数据的处理,应避免已备份之数据被再进入的中断所破坏。若不是非常紧急中断,一般不建议中断再中断。
Question 5
没有用到的I/O Pin如何处理?
Answer
若不用之I/O Pin浮接时,会造成IC的耗电,最好的处理方式就是将不用的I/O Pin设定成Output
Pin。如果要设成Input Pin则要选择Pull-high 电阻,如果不选用Pull-high电阻,则将Pin脚接地。
Question
6
为何外部中断有下降缘,仍然没有唤醒MCU?
Answer
虽然MCU可由中断唤醒,但严格的说是要靠中断要求旗标 (Request Flag)
EIF由0变1才能唤醒。若在MCU进入HALT之前EIF已经设定
(EIF=1),则再来之INT无法改变EIF的值,亦即是EIF不能由0变1,所以不能唤醒MCU。
Question 7
可以让外部中断不产生唤醒MCU吗?
Answer
在执行HALT之前先清除EMI再设定EIF=1,则外部中断就无法唤醒MCU。
Question 8
WDT选用WDT OSC时钟源时,看门狗如何计算?
Answer
WDT OSC的时钟周期在工作5V时约介于8 ms~33 ms,看门狗的溢出时间为,时钟周期 x 2
(WS2~WS0),例如:选WS2~WS0=7,则看门狗溢出时间将介于为8 ms x
27=1 sec 到33 ms x 27=4.2 sec。
Question 9
WDT Clock Source选择WDT OSC和选择 fSYS/4有何差别?
Answer
WDT Clock Source选择WDT OSC则在系统误入HALT时WDT Timer仍然继续工作,当WDT
Time-out可以再启动系统。若选择
fSYS/4则在误入HALT后,则一直沈睡下去无法Wake-up,但选择WDT OSC则需花一些代价
(消耗电流)。在另外一种情形,如果系统正常就有HALT功能,且在HALT时不希望被WDT叫醒,则此时WDT Source可选
fSYS/4。
Question 10
2个CLR WDT指令如何使用?
Answer
2个CLR WDT可以增加系统可靠性。若程序有2个主要的交替循环Loop;则可在1个Loop放CLR
WDT1,在另1个Loop放CLR
WDT2,一旦程序错误或受噪声干扰造成一直停留在某一个Loop时;WDT就会启动,发出WDT
Time-out重新启动CPU。
Question 11
当8-Bit Timer之时钟来源为Prescaler, 可以Reset Prescaler吗?
Answer
Prescaler在Power On
Reset后,就一直不停的Run,没有任何指令可以Reset此Prescaler。
Question 12
2颗电池 (2.2V~3.8V) 的工作电压操作可以使用LVR吗?
Answer
LVR的动作点在2.7V~3.3V之间,所以2.2V的工作电压不能选择LVR,若一定要侦测2.2V低压,可以外加Voltage
Detector (HT70XX系列)。
Question 13
在Data Sheet的Reset电路,是否可适用各种应用状况?
Answer
Data
Sheet所提供的Reset电路一般可适用各种应用状况,若在特殊情形,要参考当时环境及Noise,再设计适当Reset电路。
Question
14
当系统时钟选择RC振荡器时,应用电路上OSC1外接的电阻与电容有何功能?电容可以不加吗?
Answer
OSC1外加电阻是为了产生一bias以控制内部的RC充放电,电阻值决定RC震荡频率。外加电容建议为470pF,OSC1外加电容是为了避免和OSC2产生交越干扰,以便让OSC2输出一稳定1/4系统频率的频率。假如你不需要使用到OSC2输出的1/4系统频率的频率,那么电容器是可以省略的。
Question 15
当系统时钟选择RC振荡器时,频率误差为何?
Answer 当系统时钟选择RC振荡器时,由于制程的因素造成的每个批号频率误差为±20%。假如外加电阻之误差为±5%,那么总频率误差就是±25%。
Question
16
用HT48系列MCU可以实现LCD 的driver吗?
Answer
可以,但最多只能做到1/2 bias,I/O用
pull high 和pull low进行偏置,然后输出高,输入,输出低就可以有三种电压。
Question
17
当选择RC振荡电路作为系统时钟来源时,如何量测其振荡频率?
Answer
当选择RC振荡电路作为系统时钟来源,OSC2引脚将有系统时钟四分频信号输出,可以通过量测OSC2的频率信号再乘以4获得实际的系统时钟频率; 因为OSC2是NMOS
OPEN DRAIN结构,量测时需要OSC2接一个到VDD的上拉电阻。
Question
18
请问OTP dice 烧录流程为何?
Answer
Question
19
我需要使用OTP的DIE生产,请问如何烧录?
Answer
HOLTEK的OTP烧录会使用到11根引脚,所以如果需要使用OTP的DIE生产,在画PCB时,需要预留出这11根引脚,关于引脚的详细定义请向相关的代理商索取。使用者需制作治具将11根引脚连接到烧录器的40
PIN的Textool上,之后就可以按照OTP封装片的烧录程序烧录。
需要注意的是,在PCB
Layout的时候,使用到的这11根引脚在PCB上的走线不要过长,其中PA0~PA6做烧录使用避免连结到其它线路的输出,如无法避免则需串接1kohm电阻,
以免影响烧录;从PCB到烧录器的联机不要超过15cm,越短越好。
Question
20
进省电模式时,应如何设置I/O状态,使功耗最小?No load是指什么状态?
Answer
不用的I/O可以设置为输入模式,但一定要选择上拉电阻,否则会因为"浮空"而耗电。也可以设置为输出模式,并输出"0"。
No load是指I/O不任何接外部电路,即MCU只接VDD, VSS, OSC1/OSC2, RES。
Question
21
3 pin 之resonator/crystal用于MCU之时基时, 电容之Vss
pin可改接Vdd吗?
Answer
3pin之resonator/crystal 用于MCU之时基时,配合Layout方便, 电容之Vss
pin亦可改接Vdd。
Question
22
写程序时,如欲在program
memory建立Table,如何建于绝对地址,为何ORG不适用,有其它方法吗?
Answer
ORG expression : expression 是对于目前SECTION
起始地址的offset,并非绝对地址,可使用SECTION来建立Table于绝对地址,例如:
table .section at 300 'code' -即可将接下去之Table起始位置建立于绝对地址300。
Question
23
为何写TMRL和TMRH不能改变其中的值?程序如下: mov
a,131 mov tmrl,a mov a,0ffh mov
tmrh,a 执行了以上这几条指令,TMRL和TMRH中的值依然保持原来的数据而未被改变!
Answer
在写入TMRL和TMRH前要先关掉计时中断。
Question
24
使用HOLTEK MCU做一个声音的产品,在程序中,会应用到查表:
| TABLE1: |
DC 0FFE1H,0FE32H,0FA34H,0FC78H |
|
|
DC 0FECDH,0FEDCH,0FE57H,0FD87H |
; 16位表格值 |
请问16位的查表表格定义能否按TABLE1的格式?
Answer
HOLTEK各系列MCU的ROM有不同的字节长度,每一个字节最低含14个位,最多含16个位。 字节长度为16位的MCU可以按TABLE1格式定义出16位表格,其它MCU只能定义出最长14位或15位的表格。
Question
25
在HT48X10A-1/HT48X30A-1的ROM存放表格内容时候,为什么有些数据查表后高字节内容不正确。例如0FFFFH,查表之后得到的数据是03FFFH。
Answer
对于HT48X10A-1/HT48X30A-1的ROM来说,每个WORD字只有14位,也就是另外的最高2位不能存放任何信息。如果整字读出来的话,最高2位默认为"0"。因此当在ROM里面写入0FFFFH时候,实际上最高两位并没有被写入,所以查表读出来的高两位为"0",即03FFFH。
另外HT48X50A-1的ROM是15位,也就是说最高1位不能存放任何信息。同上理由,如果在ROM中写入0FFFFH的时候,实际上最高1位没有被写入,所以查表读出来的高1位为"0",即07FFFH。
HT48X70A-1不存在此问题,因为它的ROM是16位的。
Question
26
使用带有PA控制寄存器(PAC)的8位MCU作母体调试程序时,为什么向PA
PIN脚的某一位写0再写1,在寄存器观察窗口中却看不到PA PIN脚这一位的值有所变化?
Answer
要向PA数据寄存器的某一位写入数据,必需先将PA的控制寄存器(PAC)的对应位清0,也就是将其设置为输出口时,才能有效的将数据写入数据寄存器(PA)中,反之,如果此位是输入状态则通过程序不能改变数据寄存器这一位的值。
Question
27
当直接向Tmr中写入数据时,会发生什么结果?
Answer
直接向Tmr写数据,会由于Tmr的工作状态分为两种情况。
当Tmr关闭时,写入的数据会直接修改到当前的计数寄存器和默认值寄存器。
如果Tmr是打开的,写入的数据只会修改默认值寄存器,当前的计数值不会被修改,当计数到溢出后,再从默认值寄存器中取值。
Question
28
当我在Tmr溢出产生后,向Tmr写入数据,此时Tmr为打开,为什么写入的数据会影响Tmr的计数? Answer
Tmr的溢出和装载默认值会相差半个周期1/2 period。即从Tmr溢出,到Tmr装载默认值会相隔半个计数周期。如果在Tmr装载计数值之前,向Tmr写入数据,由于Tmr计数器是开启的,此时只能写入Tmr的装载寄存器。当Tmr装载时,会加载新写入的值,因此造成在Tmr中断时写入Tmr寄存器会直接修改Tmr的计数值的假像。
Question
29
当Mcu从halt中,由于WDT溢出唤醒后,向Tmr写入数据会有什么影响?
Answer
Wdt唤醒后会进入热复位,即仅仅将pc和stack重置,其余的寄存器内容不变。
此时写入Tmr,遵循两个原则:
- 当Tmr计数是打开的,写入的数据只会修改默认值寄存器,当前的计数值不会被修改,当计数到溢出后,再从默认值寄存器中取值。
- 当Tmr关闭时,写入的数据会直接修改到当前的计数寄存器和默认值寄存器。
Question
30
当Mcu在halt中,由Pa口唤醒后,向Tmr写入数据会有什么影响?
Answer
当Mcu在halt中,由Pa口唤醒,会延时1024个Tsys(Tsys=1/Fsys),然后继续运行。
此时写入Tmr,遵循两个原则:
- 当Tmr计数是打开的,写入的数据只会修改默认值寄存器,当前的计数值不会被修改,当计数到溢出后,再从默认值寄存器中取值。
- 当Tmr关闭时,写入的数据会直接修改到当前的计数寄存器和默认值寄存器。
Question 31
MCU input pin 若用于侦测110或220V/230 AC 讯号之过零点(Zero Crossing)功能时,外部应串接多大的电阻才不会造成 IC 损坏?
Answer
由 AC LINE 直接连接至 IC I/P,主要须考虑的是来自AC LINE的浪涌电压及高频噪声可能对 IC I/P造成的过流及过压破坏。
在110 V之应用下,建议串接一个 2M 奥姆电阻。在220/230 V 之应用下,建议串接4M~5M奥姆。若使用SMD零件,
由于其耐压值只有200V,故必须串接2个2M~2.5M电阻。
Question 32
Input port可承受之最大输入电流为多少?
Answer
请不要超过 400uA。
Question
33
HT48RU80的UART的波特率如何计算?
Answer
UART自身有一个波特率发生器,它由BRG缓存器和UCR2缓存器的第2位BRGH一起来控制。BRGH为0时,波特率=Fsys/[64*(N+1)];当BRGH为1时,波特率=Fsys/[16*(N+1)]。N的范围为0~255。
Question
34
HT48RU80中,缓存器TBHP如何使用?
Answer
TBHP一般应用在查表指令TABRDC中,用来指明表格地址的高位字节(bit8~bit15),表格地址的低位字节(bit7~bit0)保存在缓存器TBLP中。
Question
35
用C写程序时,RAM没有用完,为何编译会出现“RAM空间不足”的提示?
Answer
用C写程序时,编译器会自动分配一些缓存器用于中断,乘除法运算等,当自定义缓存器与编译器自动分配的缓存器之和超出RAM的空间时,编译时就会出现“RAM空间不足”的提示。
Question
36
HT48RU80 UART发送器和接收器初始化有哪些步骤?
Answer
发送器初始化步骤:
1.设置BN0、PRT、PREN和STOPS以确定数据长度、校验类型和停止位长度。
2.设置BRG缓存器,选择波特率。
3.置位TXEN,使能UART发送功能。
4.读USR缓存器,将待发数据写入TXR缓存器,此步骤会清除TXIF旗标位。
5.如要发送多个数据只需重复上一步操作。
接收器初始化步骤:
1.设置BN0、PRT、PREN和STOPS以确定数据长度、校验类型和停止位长度。
2.设置BRG缓存器,选择波特率。
3.置位RXEN,使能UART接收功能。此时UART开始检测数据的起始位。
4.当数据正常接收完之后,读USR缓存器,此步骤会清除RXIF旗标位。
5. 读RXR缓存器,获得数据。
Question
37
在使用HT48RU80时,为何我根据波特率计算公式算出的波特率与实际的波特率会有误差?
Answer
由于根据波特率计算公式所计算出的N值一般为浮点数,写入BRG缓存器的是对N取近似值之后的数,所以实际的波特率与理论值之间难免会有误差
Question
38
在有多个RAM BANK的MCU中,如何将变量定义到BANK0以外的BANK?
Answer
可以用伪指令RAMBANK,例如:在RAM BANK1中定义一个变量
RAMBANK 1 dsec1
dsec1 .SECTION 'data'
SD DB ?
Question
39
请问Holtek MCU使用汇编语言中的RR和RL操作与使用C语言中的位移运算符>>和<<操作的结果是否相同?
Answer
两种操作的结果是不同的。使用汇编语言中的RR和RL指令,会将相应的数据存储器右移一位,结果放回数据存储器中,不影响C标(进位标志位)。而使用C语言中的位移运算符>>和<<会对运算符左边的操作数执行向右或向左的位移运动,移动的位数由运算符右边的操作数决定,如果进行右移操作则左边高位会补0,反之进行左移操作则右边低位会补0,同时需要注意右移或左移时的移出数据会进入标志位C,从而改变C标的原值
。
注意事项
Question 1
MCU Power On时,VDD的上升时间有何限制?
Answer
MCU Power On时为了使Reset可以完全成功,建议Power On
VDD上升时间在20ms以内。当电池逐渐没电,电池内阻增大,造成VDD上升缓慢会影响Reset成功。
Question
2
在客户用到HT48系列MCU做家电控制,在什么情况下使用LVR功能,
在什么情况下不使用LVR功能?
Answer
根据具体情况分析。LVR的电压是否3.3V,一般情况下,在电池供电的情况下不使用LVR,在产品使用交流电源的场合,使用LVR功能。
Question
3
烧写OTP时,同一程序用HOLTEK的HandyWriter -F 和
河洛公司PRO-201(PRO-204,PRO-208)来烧写OTP时,为什么CheckSUM会不同?
Answer
因为CheckSUM
计算方式不同。
Question
4
我使用OTP DICE,但是发现烧录不良率较高,这是为什么呢?
Answer
首先,要排除打线不良的问题,一般来说打线不良是OTP
DIE烧录不良的重要原因。如果你自己没有办法确定打线是否良好,可以通过技术支持的方式,将绑定完好没有封胶的样片寄到HOLTEK相关的技术服务部门分析。
Question
5
我使用HT-Writer烧录OTP DICE,联机的时候出现"MCU:Cannot
identify"信息会出现在信息窗口中,是打线不好?还是OTP有问题?
Answer
OTP的封装片在出厂前会有一些信息在里面,使用HT-Writer
烧录器时会显示于信息窗口中。如果OTP芯片中没有此等信息,那么烧录程序就会认为无法辨认此ID,会出现这么一个警告信息。而OTP
DICE一般来说,出厂前是不会有这样的信息的,所以烧录器会不认识此颗IC。
如在Option菜单中将Check ID的选择去掉,这样在今后的烧录过程中,烧录程序就不会再去Check
IC里面的ID信息;如果是脱机烧录模式的话,请将HT-Writer背面的DIP开关的DIP1拨为OFF,这样在脱机烧录的时候,就不会去Check
IC里面的ID信息了。
Question
6
请问MCU的Reset 与Oscillator线路设计有无需注意事项?
Answer
请参阅 "应用范例" 网页,其中的 "HA0075S" 供使用者参考。
Question
7
采用系统频率来自内部RC震荡的时候,请问误差是多少?
Answer
因为芯片工艺和温度等等影响,一般内部RC的误差最大可以达到40%左右。因此如果需要蜂鸣器输出或者计时等功能,建议采用外部RC或者晶振。
Question
8
当以HT-ICE仿真HT48 系列I/O TYPE MCU;关于PB之设定如下程序时:
| CLR TON |
;Disable timer counting |
| CLR PBC |
;PB设成OUTPUT |
| SET PB |
;PB输出High |
| JMP $ |
|
当执行上述程序时输出结果:PB0为LOW,其它PB Pin为 HIGH
意即软件显示PB0为HIGH,但实际量得却为LOW,请教这问题出在那?
Answer
HT48 系列I/O TYPE MCU之PB0/BZ,PB1//BZ是共享的,请先进入OPTION TABLE将BZ和/BZ
Disable,即可将PB0,PB1当GPIO使用,再作上述之程序测试,PB0即可量得HIGH.
Question
9
用HT48系列MCU的IO脚来驱动LCD,有没有什么限制要求?Answer
因为IO脚只能做到VDD、VDD/2、GND三种电平状态,所以比较适用于驱动1/2
Bias的LCD;对于其它Bias规格的LCD,用IO脚驱动的效果不好.
Question
10 如何在程序中通过软件设置来解决因干扰引起的重置问题?
Answer
防止干扰最有效的方法是去除干扰源、隔断干扰路径,但往往很难做到。在恶劣环境影响下,单片机可能受到较大干扰,最常见的现象就是重置,至于程序跑飞可以用软件陷阱和看门狗将程序拉回到重置状态。
Holtek MCU提供有TO(暂停旗标位)和PDF(看门狗溢出旗标位)旗标缓存器,可以用来判断重置原因;另外也可以自己在RAM中埋一些旗标。在每次程序重置时,通过判断这些旗标,可以判断出不同的重置原因;还可以根据不同的旗标直接跳到相应的程序段,这样可以使程序运行有连续性,用户在使用时也不会察觉到程序被重新重置过。
其它
Question 1
HT48 I/O Type MCU的ESD及Latch-up能力如何?
Answer
HT48 I/O Type MCU为适合在工业产品使用;在ESD和Latch-up特别加强。
在ESD方面;依据美国军方标准MIL-STD-883E
3015.7;采用人体放电模式测试;每一I/O脚皆超过正负5KV以上。 在Latch-up方面;依据JEDEC-NO.17标准,采用Current
Mode方式测试,每一I/O脚皆超过正负100mA以上。
Question
2
HT48R70A-1,HT48C70-1 之/INT pin 为何没有pull high resistor
option ?
Answer
HT48R70A-1 与 HT48C70-1 之 /INT pin 为一独立之Input pin 没有与其它I/O
pin 共享,所以没有pull high resistor option。使用者应依照应用时实际需要决定是否须外加pull
high 电阻;避免造成floating。
Question 3
Holtek MCU 之Stack 除了做CHIP reset之外, 有无其它方法可以重设 stack
pointer?
Answer
堆栈指针会受到中断与呼叫附程序与返回指令影响,除此之外,除了透过CHIP reset,
并无其它方法可以重设(reset) Holtek MCU 的堆栈指针。
Question
4
使用Assembly Directives之MACRO,可否节省Program
memory之空间,对MCU之执行速度有何影响?
Answer
在Assemble后MACRO所属指令将填入Program space,故对Program
memory之空间和MCU之执行速度没有影响,但其使的程序简化,容易维护。
Question
5
LVR启动时和RES PIN 拉低有何区别?
Answer
区别在于:当低电压复位电压>Vdd>最小工作电压时, 若开启LVR,则OSC起振; 若让RES
PIN 拉低,则OSC停振。
Question
6
请问要如何以C语言读取OTP WRITER烧入IC之序号?
Answer
在C语言中须以Inline assembly来读取OTP WRITER烧入IC之序号, 程序范例如下:
首先, 宣告一变量并指定 ram 地址 unsigned long series_num @0x80;
然后, 将 serial number 读入此 variable, 方法如下:
| #asm |
|
| tblp equ [07h] |
; define table address |
| mov a,20h |
|
| mov tblp,a |
; set table pointer to 20h (series number
at 20h of last page) |
| tabrdl [80h] |
; load first byte of series number to
series_num (0x80h); |
| inc tblp |
|
| tabrdl [81h] |
;second byte of series number |
| inc tblp |
|
| tabrdl [82h] |
;third byte of series number |
| inc tblp |
|
| tabrdl [83h] |
;fourth byte of series number |
| #endasm |
|
Question
7
用HT46/HT47/HT48/HT49系列单片机的BZ/BZB功能时感觉声音不够响亮,该怎么办?
Answer
BZ/BZB的输出频率要与蜂鸣器的频率对应,每种蜂鸣器都有各自的中心频率,设置的频率要尽量靠近中心频率。如果蜂鸣器直接接在BZ,BZB两个管脚,那么这两个管脚
对应的IO口都要设成输出。
Question
8
如果要进行I/O口远距离通讯等应用,I/O口是否需要外接保护器件?
Answer
I/O口采用斯密特输入,并且内部有对VDD和VSS的保护二极管,因此它的抗干扰能力比较强的,但是为了避免静电等强干扰源,建议在I/O口上串联一个电阻为好。
Question
9
当芯片内部的程序空间没有被写满时,如何处理空余的程序空间?
Answer
为了保证程序运行的可靠性,防止程序乱跑之后跳入未编程的ROM空间,建议将所有的空余程序空间全部写JMP 00H
,机器代码是2800H。这样一旦程序跑到空余程序空间,也会马上跳到程序开头执行,避免程序跑错。
Question
10
如何得知编译后总程序占多少空间?
Answer
可以打开.map文件来观看具体的ROM使用情况。.map文件和.prj文件在同一个目录下。如果找不到这个文件,请在编译程序前,打开HT-IDE3000中的菜单"选项-〉项目",在弹出的对话框中,选中"产生映射文件",然后再编译程序就会自动产出.map文件了。
|