|
基本数据
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 |
| |