|
基本数据
Question
1
HT46 A/D Type MCU内容如何?
Answer
HT46 A/D Type MCU提供1K, 2K、4K、8K及16K的OTP Type及Mask Type的MCU,其中HT46R22/HT46C22、HT46R23/HT46C23、HT46R24/HT46C24、HT46R25/HT46C25,内含I2C序列传输接口。HT46R51A,HT46R52A,HT46R53A,HT46R54A为12位A/D,具体规格功能请参考Holtek
Data Sheet。
Question
2
HT46 A/D Type MCU功能有何不同?
Answer
|
Part No. |
VDD |
System
Clock |
Program
Memory |
Data
Memory |
I/O |
8-bit
Timer |
Interrupt |
A/D |
PWM |
PFD |
Stack |
Package |
| Ext. |
Int. |
| HT46R01* |
2.2V~
5.5V |
400kHz~
12MHz |
1Kx14 |
64x8 |
8 |
1 |
1 |
2 |
8-bitx4 |
8-bitx1 |
v |
4 |
10MSOP |
| HT46R02* |
2.2V~
5.5V |
400kHz~
12MHz |
2Kx14 |
96x8 |
8 |
2 |
1 |
3 |
9-bitx4 |
8-bitx1 |
v |
6 |
10MSOP |
| HT46R03* |
2.2V~
5.5V |
400kHz~
12MHz |
4Kx15 |
160x8 |
8 |
2 |
1 |
3 |
12-bitx4 |
8-bitx1 |
v |
6 |
10MSOP |
|
Part No. |
VDD |
System
Clock |
Program
Memory |
Data
Memory |
I/O |
Timer |
Interrupt |
I2C |
A/D |
PWM |
PFD |
UART |
Stack |
Package |
| 8-bit |
16-bit |
Ext. |
Int. |
HT46R22
HT46C22 |
2.2V~
5.5V |
400kHz~
8MHz |
2Kx14 |
64x8 |
19 |
1 |
-- |
1 |
3 |
v |
9-bitx8 |
8-bitx1 |
v |
-- |
6 |
24SKDIP,
24SOP |
|
HT46RU22 |
v |
HT46R23
HT46C23 |
2.2V~
5.5V |
400kHz~
8MHz |
4Kx15 |
192x8 |
23 |
-- |
1 |
1 |
3 |
v |
10-bitx8 |
8-bitx2 |
v |
-- |
8 |
24SKDIP,
24SOP,
28SKDIP,
28SOP |
HT46R232
HT46C232 |
2.2V~
5.5V |
400kHz~
8MHz |
4Kx16 |
192x8 |
40 |
-- |
2 |
1 |
4 |
v |
10-bitx8 |
8-bitx4 |
v |
-- |
8 |
28SKDIP,
28SOP,
48SSOP |
HT46R24
HT46C24 |
2.2V~
5.5V |
400kHz~
8MHz |
8Kx16 |
384x8 |
40 |
-- |
2 |
1 |
4 |
v |
10-bitx8 |
8-bitx4 |
v |
-- |
16 |
28SKDIP,
28SOP,
48SSOP |
HT46RU25
HT46CU25* |
2.2V~
5.5V |
400kHz~
8MHz |
16Kx16 |
576x8 |
48 |
1 |
2 |
1 |
5 |
v |
12-bitx8 |
8-bitx4 |
v |
v |
16 |
48SSOP,
56SSOP |
|
Part No. |
VDD |
System
Clock |
Program
Memory |
Data
Memory |
I/O |
8-bit
Timer |
Interrupt |
A/D |
PWM |
PFD |
Stack |
Package |
| Ext. |
Int. |
|
HT46R46-H |
3.3V~
5.5V |
400kHz~
8MHz |
1Kx14 |
64x8 |
13 |
1 |
1 |
2 |
8-bitx4ch |
8-bitx1 |
v |
4 |
18DIP/SOP |
|
HT46R47-H |
3.3V~
5.5V |
400kHz~
8MHz |
2Kx14 |
64x8 |
13 |
1 |
1 |
2 |
9-bitx4ch |
8-bitx1 |
v |
6 |
18DIP/SOP |
|
Part No. |
VDD |
System
Clock |
Program
Memory |
Data
Memory |
I/O |
8-bit
Timer |
Interrupt |
A/D |
PWM |
PFD |
Stack |
Package |
| Ext. |
Int. |
|
HT46R51A |
2.2V~
5.5V |
400kHz~
8MHz |
1Kx15 |
96x8 |
14 |
1 |
1 |
2 |
12-bitx5 |
8-bitx1 |
v |
6 |
18DIP,
20SOP/SSOP |
|
HT46R52A |
2.2V~
5.5V |
400kHz~
8MHz |
2Kx15 |
128x8 |
14 |
1 |
1 |
2 |
12-bitx5 |
8-bitx1 |
v |
6 |
18DIP,
20SOP/SSOP |
|
HT46R53A |
2.2V~
5.5V |
400kHz~
8MHz |
2Kx15 |
192x8 |
22 |
1 |
1 |
2 |
12-bitx8 |
8-bitx1 |
v |
6 |
28SKDIP/SOP |
|
HT46R54A |
2.2V~
5.5V |
400kHz~
8MHz |
4Kx15 |
208x8 |
22 |
1 |
1 |
2 |
12-bitx8 |
8-bitx1 |
v |
6 |
28SKDIP/SOP |
|
Part No. |
VDD |
System
Clock |
Program
Memory |
Data
Memory |
I/O |
8-bit
Timer |
Interrupt |
A/D |
Comparator |
PPG |
PFD |
Stack |
Package |
| Ext. |
Int. |
| HT46R12A |
2.2V~
5.5V |
400kHz~
8MHz |
2Kx14 |
88x8 |
16 |
2 |
2 |
3 |
9-bitx4 |
2 |
1 |
v |
8 |
24SKDIP,
24SOP |
| HT46R14A |
2.2V~
5.5V |
400kHz~
8MHz |
4Kx15 |
192x8 |
20 |
2 |
3 |
3 |
9-bitx8 |
2 |
2 |
v |
8 |
28SKDIP,
28SOP |
注:细节规格请参考 Holtek Data Sheet。
Question
3
HT46 A/D Type MCU提供何种类的封装型式?
Answer
HT46 A/D Type MCU提供下列几种封装型式 :
| HT46R22/HT46C22 |
24SKDIP/SOP |
| HT46R23/HT46C23 |
24SKDIP/SOP, 28SKDIP/SOP |
| HT46R24/HT46C24 |
28SKDIP/SOP, 48SSOP |
| HT46R25/HT46C25 |
48/56SSOP |
| HT46R51A |
20SOP/SSOP |
| HT46R52A |
20SOP/SSOP |
| HT46R53A |
28SKDIP/SOP |
| HT46R54A |
28SKDIP/SOP |
为了方便客户MCU升级使用,HT46R22/HT46C22之24SKDIP/SOP脚位与HT46R23/HT46C23之24SKDIP/SOP脚位功能兼容,HT46R23/HT46C23之28SKDIP/SOP脚位与HT46R24/HT46C24之28SKDIP/SOP脚位功能兼容,
HT46R51A脚位与HT46R52A脚位功能兼容, HT46R53A脚位与HT46R54A脚位功能兼容。
Question
4
HT46 A/D Type MCU的工作频率为何?
Answer
在5V、3.3V及3个电池的应用,工作频率达Max. 8MHz
(3.3V)。 在3V及2个电池的应用,工作频率达Max. 4MHz (2.2V)。
Question
5
当系统时钟选择RC振荡器时,频率误差为何?
Answer
当系统时钟选择RC振荡器时,由于制程的因素造成的每个批号频率误差为±20%。假如外加电阻之误差为±5%,那么总频率误差就是±25%。
Question
6
在使用汇编语言编程时,针对如HT46R24等具有多个RAM Bank的MCU,是否可以对定义在非RAM BANK
0中的变量进行直接寻址操作?
Answer
不可以。
在汇编语言中,不管BP是何值,直接寻址方式只能对RAM Bank 0内的数据寄存器进行操作,如需对RAM BANK
0以外的通用数据存储器进行操作的话只能通过MP1进行间接寻址操作。
Question
7
为什么18 DIP-A封装 的HT46R51A/HT46R52A没有 VREF 引脚?
Answer
不可以。
HT46R51A 和 HT46R52A 有两种封装:18-pin DIP-A 封装和 20-pin SOP-A/SSOP-A
封装。18-pin DIP-A 封装中 VREF 引脚和 VDD
是连接在一起的,所以在外部看来是没有 VREF 这个引脚;20-pin SOP-A/SSOP-A
封装就有该引脚。
功能说明
Question
1
间接寻址如何使用?
Answer
首先将要读写之Data Memory的地址先存入地址指针缓存器 (MP),然后对IAR执行读写 (例如: MOV a,
IAR),即可读到MP所指到的Data (MP的内容当地址)。间接寻址功能特别方便于数列 (array)
的处理,一般先将数列地址放入MP做运算后再读取所需的数列Data。
Question
2
HT46 A/D Type MCU有何重要功能及特性?
Answer
操作电压范围 2.2V ~ 5.5V 工业温度规格 -40°C ~ +85°C Low Voltage
Reset功能 OTP / Mask Type MCU兼容 其它请参考 Holtek Data
Sheet
Question
3
HT46R23/HT46C23有两组MP使用有何不同?
Answer
MP0/IAR0和MP1/IAR1必需配对使用,其中MP0/IAR0只能用在RAM
BANK0,MP1/IAR1则可以在任何RAM BANK使用。
Question
4
查表指令如何使用,有何注意事项?
Answer
查表指令有二种,一种是TABRDC指令,此指令读取目前指令所在表数据,另一种为TABRDL指令,此指令固定读取最后一页表数据。要查表时首先必需将表的Low
Address填入TBLP再执行查表指令,表的Low Byte Data将存入指令指定的内存;表的High Byte
Data被存入TBLH中,要注意未满16-Bit之表Data高位被补0。
Question
5
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
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系列MCU内部Data Bus均为8-Bit,对于16-Bit的数据必需两次才能完成,对16-Bit
Timer/Counter的写必需先写Low Byte然后High Byte,而读的顺序必需先读High Byte然后Low
Byte。
Question
9
当8-Bit Timer之时钟来源为Prescaler, 可以Reset Prescaler吗?
Answer
Prescaler在Power On
Reset后,就一直不停的Run,没有任何指令可以Reset此Prescaler。
Question
10
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,则从上次停留值继续往上数,直到满位溢出00H时产生中断,同时Timer从TMR
Register重新Load初始值。
Question
11
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
12
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
13
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
2n即是Pulse时间的宽度。
Question
14
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
15
8-Bit PFD如何设定?
Answer
HT46X22为8-Bit Timer,使用PFD设定如下:
-
Configuration Option选择PFD Option Enable
-
依据所要频率选择Prescaler
(PSC2~PSC0=n)和TMR值 (fPFD = fSYS
/ 2n x (256-TMR) x 2 )
-
打开Timer ON (TMRC.4)
-
将PA.3设成Output Mode即PAC.3=0
执行以上设定后,若PA.3=1则PFD ON,若PA.3=0则PFD OFF
Question
16
16-Bit PFD如何设定?
Answer
HT46X23为16-Bit Timer,使用PFD设定如下:
-
Configuration Option选择PFD Option Enable
-
依据所要频率设定TMR值 (fPFD =
fSYS / ((65536-TMR) x 2) )
-
打开Timer ON (TMRC.4)
-
将PA.3设成Output Mode即PAC.3=0
执行以上设定后,若PA.3=1则PFD ON,若PA.3=0则PFD OFF
Question
17
PWM (6+2) Mode和 (7+1) Mode之频率为何?
Answer
PWM (6+2) Mode是将PWM的值分成4次送出,即每64个时钟送出PWM/4,其PWM频率为
fSYS/26。PWM (7+1)
Mode是将PWM的值分成2次送出,即每128个时钟送出PWM/2,其PWM频率为
fSYS/27。所以说 (6+2) Mode与8 Bit
Mode相比其PWM频率提高为4倍,而 (7+1) Mode与8 Bit Mode相比其频率提高为2倍。
Question
18
HT46 A/D Type MCU I2C Bus的功能?
Answer
HT46 A/D Type MCU除HT46X47外均有I2C
Bus界面,此I2C
Bus可经由SCL和SDA两条线接收,由Master传来的Data或者应Master要求回传Data给Master,亦即此I2C
Bus完全处在被动(Slave)角色,所以说此I2C仅有Salve功能,而无Master功能。
Question
19
TAD的时钟频率如何计算?
Answer
A/D转换需要76个TAD时钟,时钟的频率由ADCS1和ADCS0决定,其计算如下表:
| ADCS1 |
ADCS0 |
TAD频率 |
| 0 |
0 |
fSYS/2 |
| 0 |
1 |
fSYS/8 |
| 1 |
0 |
fSYS/32 |
| 1 |
1 |
Undefined |
Question
20
ADCLK时钟频率设定是否有限制 , 如何计算?
Answer
HT46 A/D Type MCU 的 A/D Clock Period (TAD) 最快为1us ,
因此由ADCS1和ADCS0设定时钟频率需确定tAD不可小于1us . 其计算可参考下表:
| fsys |
A/D Clock Period
(tAD) |
ADCS1,ADCS0 = 00 (fSYS/2) |
ADCS1,ADCS0 = 01 (fSYS/8) |
ADCS1,ADCS0 = 10 (fSYS/32) |
ADCS1,ADCS0 =11 |
| 1 MHz |
2 us |
8 us |
32 us |
Undefine |
| 2 MHz |
1 us |
4 us |
16 us |
| 4 MHz |
*500 ns |
2 us |
8 us |
| 8 MHz |
*250 ns |
1 us |
4 us |
*星号表示ADCS1和ADCS0设定值不正确 ,
tAD小于1us .
Question
21
A/D取样时间为何?
Answer
A/D取样时间(A/D Sampling Time) 需32tAD . 若A/D Clock
Period 为4us 则A/D Sampling Time = 128us。
Question
22
A/D type MCU其外部模拟讯号源输入A/D 的等效电路为何?
Answer
A/D type MCU其外部模拟讯号源输入A/D 模拟输入PIN的等效电路如下:

符号说明: VA : 外部的模拟讯号源 RA :
外部的模拟讯号源输出阻抗 AN0~AN7 : 模拟讯号输入PIN CPIN :
模拟讯号输入PIN输入电容, CPIN = 5pF D1,
D2 : PAD 上的保护二极管, VT=0.6V II : PAD
上的漏电流, II = ±1μA (最大值) SS :
模拟讯号取样开关 RSS : 模拟讯号取样开关等效阻抗; 大约等于100/200Ω at
5V/3V CS/H : 取样保持电容; 其值请参考下列表格
| |
HT46R23, HT46R24,
HT46R64, HT46R65 |
HT46C23, HT46C24,
HT46C64, HT46C65 |
HT46R47, HT46R22,
HT46R62 |
HT46C47, HT46C22,
HT46C62 |
HT46R63 |
HT46C63 |
| CS/H |
225.3pF |
94.2pF |
112.6pF |
71.3pF |
56.32pF |
35.6pF |
| A/D 分辨率 |
10-bit |
10-bit |
9-bit |
9-bit |
8-bit |
8-bit |
| A/D 转换时间 |
76tAD |
76tAD |
76tAD |
76tAD |
64tAD |
64tAD |
| A/D 取样时间 |
32tAD |
32tAD |
32tAD |
32tAD |
32tAD |
32tAD |
Note: tAD为 DATA SHEET 中 A/D clock period.
Question
23
HT46R23、HT46R24各提供2及4 channel PWM output,如各channel之PWM
register填入一样的值, 请问于不同时间依次enable 各channel之PWM
output,是否可产生不同相位的PWM output 波形?
Answer
无法产生不同相位的PWM output 波形, 因为各channel之PWM output 来自同一个PWM
counter。
Question
24
使用HT46R22时,在4MHz系统时钟下,内部定时器时钟来源的频率应该是多少?
Answer
此时内部定时器来源频率等于系统时钟频率,即也是4MHz。
Question
25
请问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 26
A/D转换中(A/D用8位逼近型),电压值应为N*参考电压/255还是N*参考电压/256?
Answer
由于AD转换的结果是离散型数值,所以A/D中的二进值并不表示某一个固定的值,它仅表示一个值的范围。即0表示(0,Vref/256)、1表示(1Vref/256,2Vref/256)……,采用V=N*Vref/256计算,每个区间的最大误差都是-Vref/256;采用V=N*Vref/255计算,每个区间的误差在-Vref/256到Vref/256之间,两者绝对误差范围是一样的,所以采用/255计算与采用/256计算都可以。
Question
27
HT MCU具有LVR功能,它动作时,MCU的I/O、OSC等管脚处于何种状态?
Answer
当电压低于低电压复位电压时,此时LVR启动。
当最小工作电压<Vdd<低电压复位电压时,I/O口处于初始输入状态,OSC起振。
LVR的复位电压会因制程的不同有一定漂移,具体请参看相关的Datasheet的D.C.参数表格。
Question
28
LVR启动时和RES PIN 拉低有何区别?
Answer
区别在于:当低电压复位电压>Vdd>最小工作电压时, 若开启LVR,则OSC起振; 若让RES
PIN 拉低,则OSC停振。
Question
29
请问HT46r65的bank2中的变量如何定义?在使用指令( data db ?
)定义变量,当变量数超过192以后,编译时提示"超出RAM内存空间"。
Answer
需用RAMBANK banknum section-name[,section-name,...]
宣告数据存储器的区块。
此伪指令是用来宣告数据存储器(data memory)的区块所包含的数据段(data
section)。banknum 指定数据存储器的区块编号,范围从0
到单片机最大的数据存储器区块数。section-name
则是先前已定义的数据段的名称,可以在同一个内存区块内宣告不只一个数据段。
具体用法请参看: http://www.holtek.com.tw/chinese/literature/ht-ide3k-c.pdf
Question
30
是不是只要把HT46R22的PB口的任一口线设为AD输入,则剩余的其它口线都不能作为普通IO使用?
Answer
做为AD输入或做为IO使用,可通过ADCR寄存器的不同设置来进行不同的选择。如果ADCR寄存器的PCR2、PCR1、PCR0设置为"1XX",则PB口线都做为AD输入;如果设置为"001",则仅有PB0口线做为AD输入,其余则作为IO使用。详见下表:
| 符号(ADCR) |
位 |
功能 |
ACS0 ACS1 ACS2 |
0 1 2 |
ACS2,ACS2,ACS0:A/D通道选择 0,0,0:AN0 0,0,1:AN1 0,1,0:AN2 0,1,1:AN3 1,x,x:未定义,不可用 |
PCR0 PCR1 PCR2 |
3 4 5 |
PCR2,PCR1,PCR0:PB3~PB0定义 0,0,0:PB3,PB2,PB1,PB0 0,0,1:PB3,PB2,PB1,AN0 0,1,0:PB3,PB2,AN1,AN0 0,1,1:PB3,AN2,AN1,AN0 1,x,x:AN3,AN2,AN1,AN0 |
| EOC |
6 |
A/D转换结束标志(0:A/D转换结束) |
| START |
7 |
A/D转换启始控制位 0→1→0:开始 1→0:A/D转换复位,EOC设置为"1" |
Question
31
HT46R22的RAM空间是在0x40--0x7f,系统的6层堆栈在哪里,是在0x40--0x7f内吗?
Answer
系统堆栈是特殊存储空间,不是RAM与ROM的一部分。
Question
32
HT46R47中AD转换是否可以不用AD中断?启动START后,通过查询EOC是否为0来判断AD转换结束。
Answer
可以的。
Question 33
HT46RU25的UART功能有哪些特性?
Answer
全双工异步传输,可选择8位或9位传输格式,可选择奇偶校验类型,可选择1或2位停止位,8位预分频波特率发生器,各种传输错误检测,支持中断和地址检测,两层FIFO接收缓冲器,发送和接收中断。
Question 34
UART有哪些中断触发条件?
Answer
当UART满足下列条件之一时,均可触发中断:发送完成时、发送缓存器空闲、接收完成时、过速错误、地址匹配。
Question 35
HT46RU25 UART的波特率如何计算?
Answer
UART自身有一个波特率发生器,它由BRG缓存器和UCR2缓存器的第2位BRGH一起来控制。BRGH为0时,波特率=Fsys/[64*(N+1)];当BRGH为1时,波特率=Fsys/[16*(N+1)]。N的范围为0~255。
Question 36
为何我根据波特率计算公式算出的波特率与实际的波特率会有误差?
Answer
由于根据波特率计算公式所计算出的N值一般为浮点数,写入BRG缓存器的是对N取近似值之后的数,所以实际的波特率与理论值之间难免会有误差。
Question 37
UART发送和接收的数据格式及波形是怎样的?
Answer
发送和接收格式请参考附表如下:

数据波形请参考附图如下:

Question 38
UART发送器初始化有哪些步骤?
Answer
1.设置BN0、PRT、PREN和STOPS以确定数据长度、校验类型和停止位长度。
2.设置BRG缓存器,选择波特率。
3.置位TXEN,使能UART发送功能。
4.读USR缓存器,将待发数据写入TXR缓存器,此步骤会清除TXIF标志位。
5.如要发送多个数据只需重复上一步操作。
Question 39
UART接收器初始化有哪些步骤?
Answer
1.设置BN0、PRT、PREN和STOPS以确定数据长度、校验类型和停止位长度。
2.设置BRG缓存器,选择波特率。
3.置位RXEN,使能UART接收功能。此时UART开始检测数据的起始位。
4.当数据正常接收完之后,读USR缓存器,此步骤会清除RXIF标志位。
5. 读RXR缓存器,获得数据。
Question 40
什么叫UART过速错误,发生该错误后UART将作什么处理?
Answer
RXR缓存器有两层FIFO缓冲区,可以保存两帧数据同时接收第三帧数据,应用程序必须在第三帧数据接收完之前读RXR缓存器,否则会发生过速错误。该错误发生后将发生以下事件:USR缓存器中OERR被置位,RXR中数据不会丢失,RSR缓存器数据被覆盖,若RIE为1将产生中断。
Question 41
UART有几个缓存器及各功能如何?
Answer
UART有5个缓存器,分别是:USR、UCR1、UCR2、BRG、 TXR/RXR。
USR是UART的状态缓存器,可以通过程序读取,所以USR位是只读的。
UCR1和UCR2时UART的控制缓存器,用来定义各种UART功能,例如UART的使能和除能、奇偶校验控制和传输数据长度等等。
UCR2的主要功能是使能或除能发送和接收允许以及UART的各种中断源,它也可控制波特率,使能接收唤醒和地址侦测。
BRG控制波特率,BRG的值与BRGH的设置有关。
TXR/RXR控制数据的发送与接收。
Question 42
UART是怎么发送数据的?
Answer
当UART发送数据时,数据从移位缓存器中移到TX引脚上,其低位在前高位在后。在发送模式中,TXR缓存器在内部总线和发送移位缓存器闲置形成一个缓冲(FIFO)。如果选择9位数据传输格式,最高位MSB存储在UCR1缓存器的TX8中。
Question 43
UART会产生几种接收错误?
Answer
会产生四种接收错误:(1) 过速错误;(2) 噪音干扰;(3) 帧错误;(4) 奇偶校验错误。
Question 44
HT46R54A与HT46R54的RAM有何区别?
Answer
HT46R54的RAM为88X8,MP0和MP1指针为7位。
而HT46R54A的RAM为280X8,MP0和MP1指针为8位。
Question 45
在ICE上能仿真LVR功能吗?
Answer
ICE上用的VDD是固定的5V,所以不能模拟LVR。
Question 46
HT46R49E和HT46R49有什么区别?
Answer
HT46R49E使用先进的封装方式将一个封装内置入二颗集成电路:一颗八位MCU(HT46R49)及一颗1K
Bits的Data EEPROM。
此类产品除可节省封装费用提供使用者更经济便利的解决方案外,更可节省空间,适用于有空间限制的产品。HT46R49及HT46R49E二者的封装方式都是24/28-Pin
SKDIP/SOP, 并且脚位彼此兼容
Question 47
Timer/Counter已经打开且正在计数时,可否对其进行写数据?
Answer
可以,但此写入的数据会先保留在预置缓存器中,只有在下一个溢出发生时才会被写入实际定时器。
Question 48
A/D type MCU 的多个A/D转换口可否同时打开?
Answer
不可以。但可以通过轮换的方法分别打开它们,并采用查询或中断方式依次读取它们之数值。
应用说明
- Question 1
没有Push和POP指令;中断时数据要如何备份?
- Question 2
可以在Interrupt
Service Routine内执行Call吗?
- Question 3
中断处理中可否允许相同的中断再进入?
- Question 4
没有用到的I/O
Pin如何处理?
- Question 5
PA已经Low为何没有唤醒MCU?
- Question 6
为何外部中断有下降缘,仍然没有唤醒MCU?
- Question 7
可以让外部中断不产生唤醒MCU吗?
- Question 8
2个CLR
WDT指令如何使用?
- Question 9
HT46
A/D Type MCU PWM如何使用?
- Question 10
HT46
A/D Type MCU的 A/D Converter 如何使用?
- Question 11
HT46
A/D Type MCU I2C Bus如何使用?
- Question 12
2颗电池
(2.2V~3.8V) 的工作电压操作可以使用LVR吗?
- Question 13
系统频率Fsys=4MHz
, ADCLK = fsys/32 , A/D input signal 是一个square
wave(250us), A/D要对square wave之 level 进行转换,但是有时就转换不正确 .
- Question 14
Holtek
MCU 之Stack 除了做CHIP reset之外, 有无其它方法可以重设 stack pointer?
- Question 15
当系统时钟选择RC振荡器时,应用电路上OSC1外接的电阻与电容有何功能?电容可以不加吗?
- Question 16
如何决定
RA ?
- Question 17
如何看待
A/D 的输入阻抗呢 ?
- Question 18
与
A/D 相关的另一个参数是 A/D Acquisition Time(tAC), 通常我们需要知道
A/D Acquisition Time(tAC) 的最小值为何?
- Question 19
A/D
模拟输入 PIN 的输入电压范围为何 ?
- Question 20
如何使用HT46
series 单片机的I/O口作为LCD驱动?
- Question 21
如何使用MCU都有定时器自动重载功能?
- Question 22
HT46单片机怎样在PD口输出自己所需要的PWM频率?
- Question 23
如何使用外部晶振结合仿真器调试程序?
- Question 24
HT46系列之MCU,如有使用A/D
Converter,当进入HALT MODE前,应作何处理以省电?
- Question 25
进省电模式时,应如何设置I/O状态,使功耗最小?No
load是指什么状态?
- Question 26
多通道AD转换时,是否会产生AD互相干扰的情况?
- Question 27
3
pin 之resonator/crystal用于MCU之时基时, 电容之Vss pin可改接Vdd吗?
- Question 28
写程序时,如欲在program
memory建立Table,如何建于绝对地址,为何ORG不适用,有其它方法吗
- Question 29
如何启动AD转换和得到AD转换值?
- Question 30
如何利用HT46R22的PWM口,来实现多级电压输出?
- Question 31
请问要如何以C语言读取OTP
WRITER烧入IC之序号?
- Question 32
用HT46/HT47/HT48/HT49系列单片机的BZ/BZB功能时感觉声音不够响亮,该怎么办?
- Question 33
启动TMR(初值赋=240)后,紧接着执行"CLR
TMR",但仍然立即产生定时中断,而此时计时时间根本没到。请问是何原因?
- Question 34
HT46R64晶振问题:
用仿真器运行一切正常,写片后32768的晶振不振荡,换了几个晶振都没有解决问题。
- Question 35
如果要进行I/O口远距离通讯等应用,I/O口是否需要外接保护器件?
- Question 36
PWM的(6+2)模式与(7+1)模式分别应用于什么场合?
- Question 37
如何在HT46R64的C程序中写LCD的变量?
- Question 38
使用HT46系列仿真器仿真HT46R23时,使用外部晶振,不勾选Internal编译会出现以下错误提示: a."power_on
reset has failed" b."detect program counter
overflow(2101h) check:(1)last instruction (2) program flow
(3) Tbhp (4) bp usage" 是什么原因?
- Question 39
为何写TMRL和TMRH不能改变其中的值?程序如下: mov
a,131 mov tmrl,a mov a,0ffh mov
tmrh,a 执行了以上这几条指令,TMRL和TMRH中的值依然保持原来的数据而未被改变!
- Question 40
使用HOLTEK
MCU做一个声音的产品,在程序中,会应用到查表:
| TABLE1: |
DC 0FFE1H,0FE32H,0FA34H,0FC78H |
|
|
DC 0FECDH,0FEDCH,0FE57H,0FD87H |
; 16位表格值 |
请问16位的查表表格定义能否按TABLE1的格式?
-
-
Question 41
使用带有PA控制寄存器(PAC)的8位MCU作母体调试程序时,为什么向PA
PIN脚的某一位写0再写1,在寄存器观察窗口中却看不到PA PIN脚这一位的值有所变化?
-
Question 42
HT46
A/D Type MCU如何判断A/D转换过程是否结束?
-
Question 43
HT46R51/52的PWM该如何使用?
-
Question 44
HT46R53A在用ICE模拟时,其MP0的B7一直是1,也就是写入00H,缓存器的值却是80H,请问,IC的RAM
80H后的内容应该如何间接访问﹖
-
Question 45
应用电路中采用Crystal振荡模式时,为何晶震旁要并联一电阻?
-
Question 46
在使用HT46R12A的比较器功能时,为什么已将比较器使能,但向比较器输入口送2.8V信号时,IC的比较器输入口端电压还是为0准位,使比较器失去比较功能?
Question
1
没有Push和POP指令;中断时数据要如何备份?
Answer
虽然没有Push和POP指令,程序员仍可指定专用记忆RAM BYTE (例如:db ACCStack; for ACC
Storage)
储存中断时会被破坏的数据。首先将ACC存入专用内存,然后利用ACC依序将Status和其它数据搬移至各别之专用内存。在中断返回前,再反序将其它备份数据,Status和ACC回存,最后再执行RETI返回主程序。
Question
2
可以在Interrupt Service Routine内执行Call吗?
Answer
因为HT46 A/D Type MCU
Stack数目有限,在Interrupt中执行Call要特别注意,如果在进入Interrupt时Stack已经满了,则会造成Stack
Over,而使得程序无法返回。所以若要在Interrupt内执行Call,必需考虑在最差情况下之Stack使用数目,务必使在最差状况下进入Interrupt仍有Stack空间。
Question
3
中断处理中可否允许相同的中断再进入?
Answer
理论上在进入中断时MCU会自动清除EMI旗标 (EMI=0),并禁止所有中断的再进入,若中断处理中用软件设定EMI旗标
(EMI=1),则在Stack有空之下,所有中断(含相同中断)皆可再进入。要允许相同的中断再进入,需特别注意备份数据的处理,应避免已备份之数据被再进入的中断所破坏。若不是非常紧急中断,一般不建议中断再中断。
Question
4
没有用到的I/O Pin如何处理?
Answer
若不用之I/O Pin浮接时,会造成IC的耗电,最好的处理方式就是将不用的I/O Pin设定成Output
Pin。如果要设成Input Pin则要选择Pull-high
电阻,如果不选用Pull-high电阻,则将Pin脚接地。
Question
5
PA已经Low为何没有唤醒MCU?
Answer
MCU的PA
Port唤醒为瞬间下降缘触发,若在执行HALT之前PA已经Low,且在HALT期间一直维持在Low,因为没有下降缘动作,所以无法唤醒MCU。
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
2个CLR WDT指令如何使用?
Answer
2个CLR WDT可以增加系统可靠性。若程序有2个主要的交替循环Loop;则可在1个Loop放CLR
WDT1,在另1个Loop放CLR
WDT2,一旦程序错误或受噪声干扰造成一直停留在某一个Loop时;WDT就会启动,发出WDT
Time-out重新启动CPU。
Question
9
HT46 A/D Type MCU PWM如何使用?
Answer
首先Configuration
Option需选择PWM功能,使用时,先设PDC.0=0再写入一个欲输出的值丢到PWM缓存器,当PD.0=0则PWM输出0;当PD.0=1输出PWM波形
(若有第2个PWM则控制PDC.1和PD.1)。
Question
10
HT46 A/D Type MCU的 A/D Converter 如何使用?
Answer
使用A/D要执行以下动作:
-
首先定义Port B Configuration
(PCR2、PCR1、PCR0) 选定有几个模拟输入通道。
-
选定特定通道 (ACS2、ACS1、ACS0),此通道必需在前项选定通道内。
-
命令A/D开始转换 (ADCR.7=0 --> 1 -->
0),此时A/D显示忙碌 (EOCB=1)。
-
等待76个TAD时钟,A/D显示转换完成
(EOCB=0);并产生中断要求旗标(ADF=1)。
-
读取数据 (ADRL和ADRH)。
Question
11
HT46 A/D Type MCU I2C Bus如何使用?
Answer
首先必需设好地址(HADR)并打开I2C Bus
(HEN=1)和中断(EHI=1);从此I2C电路开始接收SDA传来的地址数据,若地址数据与HADR内容一致;I2C自动应答(ACK)
Master;并设定HASS (HASS=1)旗标,进入中断。
此时MCU判断Master的要求是读或是写数据,若Master要读数据,则MCU将Data写入HDR并设定传送(HTX=1)旗标,若Master要写数据则I2C继续接收Data。总体来说;此I2C有自动接收地址、自动比对地址、自动应答(ACK)和将HDR之数据,依据Master的时钟信号(SCL)传送出去,所以MCU祇要简单的从HDR读和写数据即可,详细流程请参照Data
Sheet。
Question
12
2颗电池 (2.2V~3.8V) 的工作电压操作可以使用LVR吗?
Answer
LVR的动作点在2.7V~3.3V之间,所以2.2V的工作电压不能选择LVR,若一定要侦测2.2V低压,可以外加Voltage
Detector (HT70XX系列)。
Question
13
系统频率fSYS=4MHz,ADCLK = fSYS/32,A/D
input signal 是一个square wave(250us),A/D要对square wave之 level
进行转换,但是有时就转换不正确。
Answer
HT46 A/D Type MCU 的转换时间(A/D conversion
time)为76tAD。于此转换进行期间会先进行 S&H
动作,其时间为32tAD 。参考下图 : A/D Conversion Timing。
若 fSYS = 4MHz, ADCLK = fSYS/32,A/D
Sampling Time需32tAD = 256us 因 ADCLK之除级为free run
counter,所以A/D Sampling Time tolerance应为31~32 ADCLK;
248us<A/D S&H time<256us,就造成A/D conversion
结果有时数值正确,有时又不正确 。
此问题可修改 ADCLK 为fSYS/8,缩短A/D Sampling Time 为64us。
Question
14
Holtek MCU 之Stack 除了做CHIP reset之外, 有无其它方法可以重设 stack
pointer?
Answer
堆栈指针会受到中断与呼叫附程序与返回指令影响,除此之外,除了透过CHIP reset,
并无其它方法可以重设(reset) Holtek MCU 的堆栈指针。
Question
15
当系统时钟选择RC振荡器时,应用电路上OSC1外接的电阻与电容有何功能?电容可以不加吗?
Answer
OSC1外加电阻是为了产生一bias以控制内部的RC充放电,电阻值决定RC震荡频率。外加电容建议为470pF,OSC1外加电容是为了避免和OSC2产生交越干扰,以便让OSC2输出一稳定1/4系统频率的频率。假如你不需要使用到OSC2输出的1/4系统频率的频率,那么电容器是可以省略的。
Question
16
如何决定 RA ?
Answer
以 5V, 10-bit A/D 来看, VA 输入到 AN0~AN7 PIN,
讯号衰减不得超过 1/4 LSB,以维持 ADC 转换过程中的精确度, 因此相对应下来为 5V/4096 约等于
1.2mV
所以 1uA×RA < 1.2 mV → RA < 1.2kΩ
, 1uA 为 II 的值 建议 RA 不要大于 1.2kΩ, 以维持
10-bit ADC 的精确度
对 9-bit 及 8-bit ADC而言, RA 不要大于 2.4kΩ及4.8kΩ,
以维持其相对的精确度
Question
17
如何看待 A/D 的输入阻抗呢 ?
Answer
在 A/D 不做转换时, SS 是处在 OPEN 的状态, 在 A/D 开始转换时, 会有两段时间, 一是
SAMPLE 的时间, 需要 32 个 tAD, 此时 SS CLOSE; 之后的 44个
tAD 时间SS OPEN, 执行 A/D 转换的工作,
执行A/D转换总共需要76个tAD, tAD为 DATA SHEET 中 A/D
clock period.
所以我们分两个部分来看 A/D 的输入阻抗 (1). 当模拟讯号取样开关SS OPEN 时, A/D输入阻抗,
只剩下漏电流产生的等效阻抗

此时输入阻抗大约等于 RVDD 并联 RVSS,
RVDD 与 RVSS 分别为 PIN 漏电流所产生的电阻,
RVDD = RVSS = 5V/1uA =
5MΩ RVDD 并联 RVSS = 2.5MΩ
(2). 当模拟讯号取样开关 SS CLOSE 时, A/D输入阻抗约等于如下之等效电路(忽略CPIN
)

此时输入阻抗分析如下: 以DC来分析, 其DC输入阻抗 大约等于 RVDD 并联
RVSS, RVDD 与 RVSS 分别为 PIN
漏电流所产生的电阻, RVDD = RVSS = 5V/1uA =
5MΩ RVDD 并联 RVSS = 2.5MΩ
以AC来分析, 其 time constant = (RA+RSS)×C,
其值如下表
| |
HT46R23, HT46R24,
HT46R64, HT46R65 |
HT46C23, HT46C24,
HT46C64, HT46C65 |
HT46R47, HT46R22,
HT46R62 |
HT46C47, HT46C22,
HT46C62 |
HT46R63 |
HT46C63 |
| CS/H |
225.3pF |
94.2pF |
112.6pF |
71.3pF |
56.32pF |
35.6pF |
| RA+RSS |
1.3kΩ |
1.3kΩ |
2.5kΩ |
2.5kΩ |
4.9kΩ |
4.9kΩ |
| Time constant |
0.29μs |
0.12μs |
0.28μs |
0.18μs |
0.28μs |
0.17μs |
Question
18
与 A/D 相关的另一个参数是 A/D Acquisition Time(tAC),
通常我们需要知道 A/D Acquisition Time(tAC) 的最小值为何?
Answer
其求法为, 假设 VA 模拟讯号源输入到 CS/H 的电压不得误差
VA/2048, 才能维持 10-bit ADC 的精确度, 所以当 SS CLOSE 时,
CS/H 的电压, 必须大于 VA-VA/2048
所以 VA-VA/2048 <
VA(1-EXP(-tAC/R×C);
R=RA+RSS, C=CS/H
VA-VA/2048 <
VA(1-EXP(-tAC/R×C) → 1/1028 >
EXP(-tAC/R×C) → -7.625 > -
tAC/R×C → tAC > 7.625×R×C
以不同型号的MCU, 可得到下表不同的值
| |
HT46R23,HT46R24,
HT46R64,HT46R65 |
HT46C23,HT46C24,
HT46C64,HT46C65 |
HT46R47,HT46R22, HT46R62 |
HT46C47,HT46C22, HT46C62 |
HT46R63 |
HT46C63 |
| CS/H |
225.3pF |
94.2pF |
112.6pF |
71.3pF |
56.32pF |
35.6pF |
| RA+RSS |
1.3kΩ |
1.3kΩ |
2.5kΩ |
2.5kΩ |
4.9kΩ |
4.9kΩ |
| tAC |
2.2μs |
0.93μs |
2.1μs |
1.4μs |
2.1μs |
1.3μs |
| A/D 取样时间 |
32tAD 32μs(最小值) |
32tAD 32μs(最小值) |
32tAD 32μs(最小值) |
32tAD 32μs(最小值) |
32tAD 32μs(最小值) |
32tAD 32μs(最小值) |
由上表可知 A/D 取样时间为 32tAD,根据规格tAD 最小值为
1μs,算出取样时间最小为32μs, 必须大于tAC。
Question
19
A/D 模拟输入 PIN 的输入电压范围为何 ?
Answer
因为 AN0~AN7 PIN上都有 保护二极管,所以 AN0~AN7 PIN上的电压,绝对不得大于VDD + 0.3
或是小于 VSS-0.3,以免造成其它不可预期的耗电及误动作。
Question
20
如何使用HT46 series 单片机的I/O口作为LCD驱动?
Answer
LCD显示由Common和Segment动态扫描实现,Common产生bias波形,具体波形与Common数有关,而Segment可以为方波。要用I/O驱动LCD,关键在于产生Common波形。
HT46
series的I/O可以设置为CMOS输出或Shmitt输入,所以可以产生三种状态:输出High、输出Low、高阻态(输入模式)
根据这三种状态,再配合I/O外接分压电阻,I/O可产生三种电平:VDD(I/O输出High)、VDD/2(I/O为输入模式,引脚电压由外接分压电阻产生)、0(I/O输出Low)。所以I/O可以模拟出3Commom的波形,可以驱动Common*Segment为3*n的LCD。
Question
21
如何使用MCU都有定时器自动重载功能?
Answer
如果希望在下一次定时器自动重载时,装载另一个初值的话,只需要给TMR赋新值就可以了。 如果希望定时器马上装载另一个初值,并开始计数的话,请做以下步骤:
-
关闭允许计数位TMRC.4;
-
给TMR赋新值;
-
打开允许计数位TMRC.4。
Question
22
HT46单片机怎样在PD口输出自己所需要的PWM频率?
Answer
HT46系列MCU的PWM输出频率是由系统频率决定的,Fpwm=Fsys/256;即系统频率定了之后,PWM频率也就定了。PWM频率是不可调的,只能调占空比(通过给PWM寄存器赋值)。
Question
23
如何使用外部晶振结合仿真器调试程序?
Answer
首先,在设置OPTION
的SYSFREQ时,Internal不要打勾。这样可以使用外部的晶振,外部晶振可以加在Interface
Card上面的Y1处。同时也要检查JP1处的跳线,是RC振荡还是x'tal。这样就可以使用外部晶振结合仿真器调试程序。
Question
24
HT46系列之MCU,如有使用A/D Converter,当进入HALT
MODE前,应作何处理以省电?
Answer
由于进入HALT MODE时,A/D Converter并不会关掉,仍会耗电,故当进入HALT
MODE前,应将ADCR Register之PCR0,PCR1,PCR2等3位设为000,以关掉A/D
Converter达成省电,待WAKE UP返回NORMAL MODE后再重设PCR0,PCR1,PCR2等3位,将A/D
Converter 开启。
Question
25
进省电模式时,应如何设置I/O状态,使功耗最小?No
load是指什么状态?
Answer
不用的I/O可以设置为输入模式,但一定要选择上拉电阻,否则会因为"浮空"而耗电。也可以设置为输出模式,并输出"0"。
No load是指I/O不任何接外部电路,即MCU只接VDD, VSS, OSC1/OSC2, RES。
Question 26
多通道AD转换时,是否会产生AD互相干扰的情况?
Answer
会产生相互干扰的情况。解决方法是,从一个通道AD转换结束到另一个通道A/D开始之前,应该加入一段延时,以便在AD器件的输入口稳定传送的数据,让AD器件准确读取。一般DELAY
10us以上。
Question
27
3 pin 之resonator/crystal用于MCU之时基时, 电容之Vss
pin可改接Vdd吗?
Answer
3pin之resonator/crystal 用于MCU之时基时,配合Layout方便, 电容之Vss
pin亦可改接Vdd。
Question
28
写程序时,如欲在program
memory建立Table,如何建于绝对地址,为何ORG不适用,有其它方法吗?
Answer
ORG expression : expression 是对于目前SECTION
起始地址的offset,并非绝对地址,可使用SECTION来建立Table于绝对地址,例如:
table .section at 300 'code'
-即可将接下去之Table起始位置建立于绝对地址300。
Question
29
如何启动AD转换和得到AD转换值?
Answer
以HT46R22为例,AD转换子程序如下:
| clr |
adcr.7 |
;启动AD转换 |
| set |
adcr.7 |
|
| clr |
adcr.7 |
|
| sz |
adcr.6 |
;等待AD转换完成 |
| jmp |
$-1 |
|
| mov |
a,adrl |
;保存AD转换值 |
| mov |
adl,a |
|
| mov |
a,adrh |
|
| mov |
adh,a |
|
| ret |
|
|
Question
30
如何利用HT46R22的PWM口,来实现多级电压输出?
Answer
采用电路如下图,改变[PWM]的值,可实现256级电压输出。

Question
31
请问要如何以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
32
用HT46/HT47/HT48/HT49系列单片机的BZ/BZB功能时感觉声音不够响亮,该怎么办?
Answer
BZ/BZB的输出频率要与蜂鸣器的频率对应,每种蜂鸣器都有各自的中心频率,设置的频率要尽量靠近中心频率。如果蜂鸣器直接接在BZ,BZB两个管脚,那么这两个管脚
对应的IO口都要设成输出。
Question
33
启动TMR(初值赋=240)后,紧接着执行"CLR
TMR",但仍然立即产生定时中断,而此时计时时间根本没到。请问是何原因?
Answer
"CLR
TMR"并不会立即将TMR的值清为0,只会将预置寄存器清为0。等到TMR溢出并重新加载时,才会将预置寄存器的值赋给TMR。
启动定时器时,TMR加载的值是240,而当执行到"CLR
TMR"时,TMR还未溢出,所以不会重新加载为0。程序接着往下执行,而在执行的同时,TMR是以240为初值进行计数,所以会很快溢出并产生中断。
Question
34
HT46R64晶振问题:
用仿真器运行一切正常,写片后32768的晶振不振荡,换了几个晶振都没有解决问题。
Answer
可能是晶振离MCU比较远造成的,试着将晶振直接焊到MCU
pin上。焊接完要将焊锡膏/助焊剂用酒精擦干净,不然也会造成32K Crystal无法起振。
Question
35
如果要进行I/O口远距离通讯等应用,I/O口是否需要外接保护器件?
Answer
I/O口采用斯密特输入,并且内部有对VDD和VSS的保护二极管,因此它的抗干扰能力比较强的,但是为了避免静电等强干扰源,建议在I/O口上串联一个电阻为好。
Question
36
PWM的(6+2)模式与(7+1)模式分别应用于什么场合?
Answer
两种模式在于PWM调制频率不一样,应用时根据PWM调制频率要求来选择。例如用于DA应用时,最好用(6+2)模式,调制频率高,载波容易过滤掉。
Question
37
如何在HT46R64的C程序中写LCD的变量?
Answer
在C中,是直接定义变量到BANK0或BANK1,不需要对MP1与IAR1进行操作。
例: int v1 @ 0x40; //declare v1 in the RAM bank 0 offset
0x40 int v2 @ 0x160; //declare v2 in the RAM bank 1
offset 0x60
Question
38
使用HT46系列仿真器仿真HT46R23时,使用外部晶振,不勾选Internal编译会出现以下错误提示: a."power_on
reset has failed" b."detect program counter
overflow(2101h) check:(1)last instruction (2) program flow (3)
Tbhp (4) bp usage" 是什么原因?
Answer
这种情况,一般是接口板右上角的74HC04地线因撞击等原因松动所致,可以重新焊接一下它的Pin7,使其有效接地就行了。
Question
39
为何写TMRL和TMRH不能改变其中的值?程序如下: mov
a,131 mov tmrl,a mov a,0ffh mov
tmrh,a 执行了以上这几条指令,TMRL和TMRH中的值依然保持原来的数据而未被改变!
Answer
在写入TMRL和TMRH前要先关掉计时中断。
Question
40
使用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
41
使用带有PA控制寄存器(PAC)的8位MCU作母体调试程序时,为什么向PA
PIN脚的某一位写0再写1,在寄存器观察窗口中却看不到PA PIN脚这一位的值有所变化?
Answer
要向PA数据寄存器的某一位写入数据,必需先将PA的控制寄存器(PAC)的对应位清0,也就是将其设置为输出口时,才能有效的将数据写入数据寄存器(PA)中,反之,如果此位是输入状态则通过程序不能改变数据寄存器这一位的值。
Question
42
HT46 A/D Type MCU如何判断A/D转换过程是否结束?
Answer
有两种方法:
- 轮询ADCR寄存器中的EOCB位:A/D转换前清除A/D中断使能位,转换开始后轮询EOCB位,如果为零则表示转换完成,处理转换结果,否则继续轮询。
- 等待A/D内部中断的发生:A/D转换前置位A/D中断使能位,转换开始后继续执行其它程序,转换完成后,如果堆栈未满,程序进入A/D中断服务子程序中处理转换结果。
Question
43
HT46R51/52的PWM该如何使用?
Answer
首先在掩模选项里设置PWM为Enable,此时PWM地址为1AH
然后赋值得给 PWM:
| MOV A,100 |
;[PWM]=100 |
| MOV PWM,A |
; |
| CLR PDC.0 |
;PWM引脚和PD.0脚公用 |
| SET PD.0 |
|
HT46R51/52只有(6+2)模式,所以每个PWM周期平均分为四个调制阶段,每个阶段周期为64个系统周期,上述例子中给PWM赋值为100,所以每个调制阶段中高电平持续时间为25个系统周期(100/4),即调制占空比为25/64.
Question
44
HT46R53A在用ICE模拟时,其MP0的B7一直是1,也就是写入00H,缓存器的值却是80H,请问,IC的RAM
80H后的内容应该如何间接访问﹖
Answer
在IDE-3000的MASK OPTION中"MP BITS"选项设定为8BITS
Question
45
应用电路中采用Crystal振荡模式时,为何晶震旁要并联一电阻?
Answer
晶震旁并联电阻保证了在低电压(此低电压值低于微控制器的最低工作电压)的时候确保关闭振荡,
当LVR ENABLE 时,此电阻是不需要的。
Question
46
在使用HT46R12A的比较器功能时,为什么已将比较器使能,但向比较器输入口送2.8V信号时,IC的比较器输入口端电压还是为0准位,使比较器失去比较功能?
Answer
因为在HT46R12A中所有比较器口均是与PC口复用,所以在使用比较器功能之前必须要按各管脚功能要求,设置好相应的输入/输出状态,比较器才能正常工作。
同时在使用时还必须注意比较器控制器CMPXC的设置,确保当前比较器是处于比较模式而非校正模式。具体设置如下例所示:
clr cmp0c.5
clr cmp1c.5 ;比较器模式选择
mov a, 0f3h
mov pcc, a ;将比较器输出口置为输出状态,输入口置为输入状态
mov a, 3
mov ppg0c, a ;比较器致能
:
Question 47
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 48
Input port可承受之最大输入电流为多少?
Answer
请不要超过 400uA。
Question 49
在Demo板上进行A/D采样电压转换时,采样结果不稳定有波动,如何消除?
Answer
一般来说,仿真器(ICE)都是工作在一个电压比较稳定的环境下(通常为5V),在使用ICE的A/D调试时,需要注意A/D转换的参考电压是由ICE的内部提供,
或者由外部供给。A/D转换需要一个连续的时钟周期,所以不能使用单步调试的方法,否则会造成A/D采样值不准。要消除A/D采样的波动,可以在A/D通道输入口加一滤波电容;
或者在程序中采用中值滤波的方法。
Question 50
使用带A/D功能的Holtek芯片时,怎样提高转换精度?
Answer
一般考虑,首先要选取合适的系统时钟,由于Holtek允许的A/D时钟周期tAD的最小值是1us,所以要注意ADSC1和ADSC0选择的系统分频,以免A/D时钟周期小于1us;在A/D转换开始或者改变输入通道后,要保持合适的采样时间和转换时间,时间太长或太短,都可能会产生不准确的A/D转换值,具体细节可以参考datasheet数据。
另外建议在转换通道加一104电容,可以改善仿真信道的采样电压,提高转换精度。
Question 51
ADC转换的时候,需要时间进行采样转换,此时MCU可以执行其它指令吗?
Answer
HOLTEK A/D Tyep MCU内嵌逐位逼近的A/D转换电路,A/D转换时间会由于选取芯片的不同而不同,参考单位为A/D时钟周期(tAD),具体可参考datasheet。由于ADC转换是硬件完成的,所以在AD转换期间,MCU可以执行其它指令,配合使用ADC中断,可满足A/D转换实时性的要求。
Question 52
在HT46RU25中,如何在ROM BANK0中呼叫位于ROM BANK1的子程序?
Answer
在HT46RU25中,在ROM BANK0中如果想呼叫位于ROM
BANK1中的子程序,必须先将BP的第五位写1,使其指向ROM
BANK1,然后再执行CALL指令,子程序执行RET返回后,须将BP的第五位写0,使其重新指向ROM BANK0。
Question 53
如何使用HT46RU25的ROM Bank1?
Answer
由于HT46RU25的ROM有16K,分为了两个BANK,每一个BANK的地址范围为0~1FFFH,当需要将ROM地址定义在BANK1时,需要用以下两条指令:
ROMBANK 1 CODE1
CODE1 .SECTION AT 'CODE'
ORG XXXXH
其中XXXXH为所有访问的BANK1的地址。
Question 54
Holtek MCU中断有优先级的区别,请问高优先级中断会不会打断低优先级中断?
Answer
Holtek MCU中断优先级区别是,当有多个中断申请同时存在时(对应中断请求旗标置起)MCU将首先响应高优先级的中断。但不论哪一级中断只要被MCU响应后,其对应的中断请求旗标会被重置且EMI(总中断控制位)会被清零从而除能其它中断,所以如果MCU已进入了低优先级的中断则不会被更高优先级的中断所打断,直到中断服务子程序返回后才会响应。
Question 55
HT46R22在开始传送数据前,初始化IIC总线时,需要注意什么?
Answer
需要注意:
1、向IIC 总线地址缓存器(HADR)写入从器件地址。
2、置位IIC总线控制缓存器(HCR)的HEN 位,以打开IIC总线。
3、置位IIC总线中断控制缓存器1(INTC1)的EHI 位,以允许IIC总线中断。
Question 56
HT46R22作IIC从机端,在进行IIC通信中如何释放SDA端口?
Answer
从机释放SDA端口以接收主机发来的信号。释放SDA端口的方法如下:
1:CLR HTX
CLR TXAK
2:虚读HDR
如:MOV A,HDR
执行上面第一步后将从机设为接收模式,执行第二步后将对HSR状态缓存器中相关的状态位重置,如重置HAAS位和HCF位。
注意事项
Question
1
为什么HT46X22之MP Bit7写入0,但读出却是1?
Answer
HT46X22 Data RAM从40H~7FH,因爲不超过80H,故其MP仅有7个Bits
(Bit0~Bit6)有效,亦即MP之Bit7写入无效且读到始终爲1。虽然MP写入70H读到F0H;实质上是指向70H,所以其间接寻址读写是完全正确的。
Question
2
已经进入HALT Mode为何还有耗电?
Answer
MCU进入HALT会将系统OSC关闭,但WDT OSC (如果Option选WDT Enable)
仍在工作,而且全部I/O会保持HALT前状态,除了WDT OSC会耗一些电外,最要注意的是Input
Port是否浮接或者Output Port是否仍有负载,这些I/O处理要非常小心,否则会耗大电流。
Question
3
使用HT46系列的HT-ICE(集成了OTP烧录)来仿真A/D转换,需要注意些什么?
Answer
A/D仿真时,可直接将模拟输入电压接至ICE的AN0-
AN7口,但注意输入电压不能高于5V,否则有可能会打坏ICE。
用HT-ICE仿真A/D时还要注意Interface上JP2跳线的位置:
JP2 = 1-2:A/D转换参考电压为ICE内部电压(5V)。 JP2 =
2-3:A/D转换参考电压为外接电压(外接电压至JP3/JP4)。
Question
4
HT-ICE和实际电路直接相连进行A/D仿真时,需要注意什么?
Answer
仿真器与目标电路连接时,仿真器电源VDD与外部电源要隔离;如果外部电路有AC电源输入,则最好采用隔离变压器。
Question
5
请问OTP dice 烧录流程为何?
Answer
Question
6
我需要使用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
7
我使用OTP DICE,但是发现烧录不良率较高,这是为什么呢?
Answer
首先,要排除打线不良的问题,一般来说打线不良是OTP
DIE烧录不良的重要原因。如果你自己没有办法确定打线是否良好,可以通过技术支持的方式,将绑定完好没有封胶的样片寄到HOLTEK相关的技术服务部门分析。
Question
8
我使用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
9
请问MCU的Reset 与Oscillator线路设计有无需注意事项?
Answer
请参阅 "应用范例" 网页,其中的 "HA0075S" 供使用者参考。
Question
10
HT46R64 IC 的衬底接到VSS还是VDD上?
Answer
HOLTEK的MCU现在以POLY GATE为主,所以衬底是接到VSS。
Question
11
当芯片内部的程序空间没有被写满时,如何处理空余的程序空间?
Answer
为了保证程序运行的可靠性,防止程序乱跑之后跳入未编程的ROM空间,建议将所有的空余程序空间全部写JMP 00H
,机器代码是2800H。这样一旦程序跑到空余程序空间,也会马上跳到程序开头执行,避免程序跑错。
Question
12
如何得知编译后总程序占多少空间?
Answer
可以打开.map文件来观看具体的ROM使用情况。.map文件和.prj文件在同一个目录下。如果找不到这个文件,请在编译程序前,打开HT-IDE3000中的菜单"选项-〉项目",在弹出的对话框中,选中"产生映射文件",然后再编译程序就会自动产出.map文件了。
Question
13
如打算用定时中断把处在HALT下的CPU唤醒,遇到这样的问题:
HOLTEK的资料上说: 暂停模式是通过"HALT"指令实现且造成如下结果:系统振荡器将被关闭
,那么这是否说在HALT状态下,定时器也不可用?
Answer
HALT状态下,系统振荡器关闭,若定时器时钟来源为系统时钟,则定时器在HALT下停止;若以非系统时钟(如RTC)为时钟来源,则在HALT下,定时器仍然工作,溢出中断时唤醒MCU。
Question
14
请问在SIMULATION方式下,是否可以仿真HT46系列的AD转换?
Answer
此方式下无法正常模拟,需在EMULATION方式下实现。
Question
15 是否可以利用HT46R22的IIC接口来读写HT24系列的EEPROM?
Answer
HT46R22的IIC接口只能工作于从器件模式,不能做为主器件来读写EEPROM。若要读写EEPROM可以用IO来仿真IIC接口。
Question 16
HT46R49E中的EEPROM Timing有什么要求?
Answer
对EEPROM 操作时要注意EEPROM
Timing,特别是在高速时钟工作的情况下,时钟频率太大有可能有读写不正常的情况发生,具体数值请参考附件EEPROM
A.C.Characteristics。


Question 17
在用IDE3000仿真HT46R52A时,其缓存器MP0的第七位为何恒为1?
Answer
在IDE3000中,HT46R52A的Mask Option可以选择MP bits是"7 bits"还是"8
bits",当MP bits选择为"7
bits"时,HT46R52A的缓存器MP0的第七位将恒为1,如果想对MP0的第七位进行控制,需要在Mask
Option中将MP bits选择为"8 bits"。
Question 18
程序中建的表格在ROM范围之内,并且程序语句占用空间也在ROM范围内,但编译时却报错:Program code
is too large!原因可能出现在哪?
Answer
请注意“MOV A, OFFSET TAB_Address+Num”语句的使用。譬如TAB_Address是程序中所建立的表格的首地址,如果该表整体都在ROM范围内,而当TAB_Address+Num(Num是程序员自己定的一个地址偏移量)指向的地址却超出了ROM空间时,就会出现题目中所说的报错。
这一点很容易被忽略,所以要慎用“MOV A, OFFSET TAB_Address+Num”语句。建议用下面两语句来代用:
MOV A, OFFSET TAB_Address
ADD A, Num
。。。(后面再视情况而定做ADD算法是否溢出的判断,作相应处理)
则不会出现这种错误,因为表地址TAB_Address是否在ROM范围内能很容易发现。
Question 19
在HT46系列中ADCR寄存器PCR(0-2)位设定A/D通道数量,当仿真输入只有一个且接在PB2脚,而PB0和PB1作基本I/O使用时,这样PB0和PB1作I/O口功能使用会不会受到影响?
Answer
会受到影响。因为当PB2作为A/D输入时(PCR(0-2)位的设置如附件图),同时PB0和PB1已将被设置为A/D转换通道,此时其基本I/O功能将失效。因此,假如要选取PBx(x=0~7)作为模拟输入时,建议从PB口低位开始选取。比如,这里可以选取PB0作为A/D输入,而PB1和PB2选作为基本I/O口输入。
其它
Question
1
HT46 A/D Type MCU是否提供Dice form?
Answer
Holtek 同时提供OTP Type及Mask Type MCU的Dice form的量产服务,但使用OTP MCU
Dice量产时,客户要特别注意打线及烧录的操作问题。
Question
2
HT46 A/D Type MCU的ESD及Latch-up能力如何?
Answer
HT46 A/D 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
3
Power On Reset时间为何?
Answer
在3V时,Power On Reset时间为45ms~180ms;5V时,Power On
Reset的时间为35ms~140ms
Question
4
MCU Power On时,VDD的上升时间有何限制?
Answer
MCU Power On时为了使Reset可以完全成功,建议Power On
VDD上升时间在20ms以内。当电池逐渐没电,电池内阻增大,造成VDD上升缓慢会影响Reset成功。
Question
5
在Data Sheet的Reset电路,是否可适用各种应用状况?
Answer
Data
Sheet所提供的Reset电路一般可适用各种应用状况,若在特殊情形,要参考当时环境及Noise,再设计适当Reset电路。
Question
6
低电压Reset (LVR) 在HALT时,是否会耗电?
Answer
LVR在HALT时没有作用,所以没有耗电问题。
Question
7
当选择RC振荡电路作为系统时钟来源时,如何量测其振荡频率?
Answer
当选择RC振荡电路作为系统时钟来源,OSC2引脚将有系统时钟四分频信号输出,可以通过量测OSC2的频率信号再乘以4获得实际的系统时钟频率; 因为OSC2是NMOS
OPEN DRAIN结构,量测时需要OSC2接一个到VDD的上拉电阻。
Question
8
使用Assembly Directives之MACRO,可否节省Program
memory之空间,对MCU之执行速度有何影响?
Answer
在Assemble后MACRO所属指令将填入Program space,故对Program
memory之空间和MCU之执行速度没有影响,但其使的程序简化,容易维护。
Question
9
把金属晶振外面的金属层与GND连接,这种接法是不是可以提高抗干扰性,使晶振更稳定?
Answer
一般来说,这种晶体外壳焊接到地,只是为了结构上的稳定:抗震!电路特性能够充分抑制EMI干扰。只有频率较高的晶体,EMI方面才需要着重考虑其振荡波形上的overshoot毛刺对CPU时序带来的问题!要求不高的地方,其实不必要太考虑,基本电路余量,合理配搭,组件参数,LAYOUT做好就足够了! |