________________________________________ Question 11 请问Holtek MCU使用汇编语言中的RR和RL操作与使用C语言中的位移运算符>>和<<操作的结果是否相同? Answer 两种操作的结果是不同的。使用汇编语言中的RR和RL指令,会将相应的数据存储器右移一位,结果放回数据存储器中,不影响C标(进位标志位)。而使用C语言中的位移运算符>>和<<会对运算符左边的操作数执行向右或向左的位移运动,移动的位数由运算符右边的操作数决定,如果进行右移操作则左边高位会补0,反之进行左移操作则右边低位会补0,同时需要注意右移或左移时的移出数据会进入标志位C,从而改变C标的原值 。 ________________________________________ Question 12
采用系统频率来自内部RC震荡的时候,请问误差是多少? Answer 因为芯片工艺和温度等等影响,一般内部RC的误差最大可以达到40%左右。因此如果需要蜂鸣器输出或者计时等功能,建议采用外部RC或者晶振。 ________________________________________ Question 13 如何在程序中通过软件设置来解决因干扰引起的重置问题? Answer 防止干扰最有效的方法是去除干扰源、隔断干扰路径,但往往很难做到。在恶劣环境影响下,单片机可能受到较大干扰,最常见的现象就是重置,至于程序跑飞可以用软件陷阱和看门狗将程序拉回到重置状态。 Holtek MCU提供有TO(暂停旗标位)和PDF(看门狗溢出旗标位)旗标缓存器,可以用来判断重置原因;另外也可以自己在RAM中埋一些旗标。在每次程序重置时,通过判断这些旗标,可以判断出不同的重置原因;还可以根据不同的旗标直接跳到相应的程序段,这样可以使程序运行有连续性,用户在使用时也不会察觉到程序被重新重置过。 ________________________________________ Question 14
当芯片内部的程序空间没有被写满时,如何处理空余的程序空间? Answer 为了保证程序运行的可靠性,防止程序乱跑之后跳入未编程的ROM空间,建议将所有的空余程序空间全部写JMP 00H ,机器代码是2800H。这样一旦程序跑到空余程序空间,也会马上跳到程序开头执行,避免程序跑错。 ________________________________________ Question 15 生产中发现HT1380很多不能可靠起振,是否对晶体要求很高,HOLTEK是否有相应的指导意见? Answer 出现晶体不可靠起振的原因比较多,与晶体的质量当然有关系,但1380对晶体的要求不高。首先你要根据我们datasheet上推荐的参数设计振荡电路,另外,晶体尽可能的靠近IC,避免因衰减导致不可靠起振。 ________________________________________ Question 16 在使用汇编语言编程时,针对如HT46R24等具有多个RAM Bank的MCU,是否可以对定义在非RAM BANK 0中的变量进行直接寻址操作? Answer 不可以。 在汇编语言中,不管BP是何值,直接寻址方式只能对RAM Bank 0内的数据寄存器进行操作,如需对RAM BANK 0以外的通用数据存储器进行操作的话只能通过MP1进行间接寻址操作。 ________________________________________ Question 17 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 18
HT MCU具有LVR功能,它动作时,MCU的I/O、OSC等管脚处于何种状态? Answer 当电压低于低电压复位电压时,此时LVR启动。 当最小工作电压<Vdd<低电压复位电压时,I/O口处于初始输入状态,OSC起振。 LVR的复位电压会因制程的不同有一定漂移,具体请参看相关的Datasheet的D.C.参数表格。 ________________________________________ Question 19 Holtek MCU中断有优先级的区别,请问高优先级中断会不会打断低优先级中断? Answer Holtek MCU中断优先级区别是,当有多个中断申请同时存在时(对应中断请求旗标置起)MCU将首先响应高优先级的中断。但不论哪一级中断只要被MCU响应后,其对应的中断请求旗标会被重置且EMI(总中断控制位)会被清零从而除能其它中断,所以如果MCU已进入了低优先级的中断则不会被更高优先级的中断所打断,直到中断服务子程序返回后才会响应。 ________________________________________ Question 20
如打算用定时中断把处在HALT下的CPU唤醒,遇到这样的问题: HOLTEK的资料上说: 暂停模式是通过"HALT"指令实现且造成如下结果:系统振荡器将被关闭 ,那么这是否说在HALT状态下,定时器也不可用? Answer HALT状态下,系统振荡器关闭,若定时器时钟来源为系统时钟,则定时器在HALT下停止;若以非系统时钟(如RTC)为时钟来源,则在HALT下,定时器仍然工作,溢出中断时唤醒MCU。 ________________________________________ Question 21 程序中建的表格在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 22
把金属晶振外面的金属层与GND连接,这种接法是不是可以提高抗干扰性,使晶振更稳定? Answer 一般来说,这种晶体外壳焊接到地,只是为了结构上的稳定:抗震!电路特性能够充分抑制EMI干扰。只有频率较高的晶体,EMI方面才需要着重考虑其振荡波形上的overshoot毛刺对CPU时序带来的问题!要求不高的地方,其实不必要太考虑,基本电路余量,合理配搭,组件参数,LAYOUT做好就足够了! ________________________________________ Question 23 HT82A851R 做为USB设备,哪些USB事件可使SIE向MCU发出中断请求?如何识别是哪种USB事件产生了中断? Answer HT82A851R 做为USB设备,有以下USB事件可使SIE向MCU发出中断请求。 1.USB休眠(SUSPEND)。 2.USB复位(RESET)。 3.USB恢复(RESUME)。 4.USB各个端点被访问(ACCESS)。 以上USB事件产生中断时,可通过以下方法来识别: 1.当USB进入休眠状态时,USC(20H) 缓存器之bit0(SUSP位)会被SIE设置为1,并产生USB中断,在USB中断服务程序中只要看到此位为1,就知道是USB休眠事件产生了中断。 2.当USB发生复位时,USC(20H) 缓存器之bit2(URST位)会被SIE设置为1,并产生USB中断,在USB中断服务程序中只要看到此位为1,就知道是USB因复位而产生了中断。 3.当USB离开休眠而被恢复(RESUME)时,USC(20H) 缓存器之bit3(RESUME位)会被SIE设置为1,并产生USB中断,在USB中断服务程序中只要看到此位为1, 就知道是USB因RESUME而产生了中断。 4.当HT82A851R 的端点0~端点4,任何一个端点被访问时,均可产生USB中断,其相应的中断旗标元EP0F~EP4F(USR (21H)缓存器之bit0~bit4))会被SIE设置为1, 在USB中断服务程序中查看相应的旗标,就知道是那个端点发生了中断。 ________________________________________ Question 24 Phone MCU系列的看门狗时钟(WDT)有那些选择? Answer Phone的看门狗时钟(WDT)在掩模选项(Mask Option)中有四种选择: 1. 使用WDT OSC,其时钟周期在5伏特时约 78µs,看门狗时钟产生溢位(WDT overflow)的时间为 78µs x 2(WS2WS1WS0)+9,例如:WS2,WS1,WS0=7,则看门狗时钟溢位(WDT overflow)的时间为78µs x 27+9 = 5.11s。 2. 使用T1 (四分之一系统频率),其时钟周期在Normal Mode高频模式为1.117µs x 29 ,在Green Mode低频模式为122.07µs x 29 , 在Sleep及Idle省电模式下将不会有动作,而看门狗时钟产生溢位(WDT overflow)的时间为 T1 x 2(WS2WS1WS0)+9。 3. 使用32768Hz,其时钟周期在Normal Mode高频模式、Green Mode低频模式、Sleep省电模式皆为 30.52µs x 29,在Idle省电模式下不会有动作,而看门狗时钟产生溢位(WDT overflow)的时间为 30.52 x 2(WS2WS1WS0)+9。 4. 不使用看门狗时钟 (WDT Disable)。 ________________________________________ Question 25 HT48FXXE内嵌有EEPROM,微控制器在正常工作中是如何对其进行读/写的? Answer 微控制器是通过EECR缓存器(在Bank1的40H地址)来控制的。 通过读写EECR缓存器,控制EEPROM的CS、SK和DI/DO信号,以软件的方式?生EEPROM的操作时序,进而达到读写EEPROM的目的。控制EEPROM数据存储器共有7条命令:READ、ERASE、WRITE、EWEN、EWDS、ERAL和WRAL,详细可参看规格书。 ________________________________________ Question 26 HT48F06E具有使用内部PFD分频器输出信号驱动蜂鸣器的特性,如何应用? Answer BZ和/BZ分别与PB0和PB1共享引脚,要应用内部PFD分频器输出信号驱动蜂鸣器的功能时,将无源蜂鸣器的两个脚分别与BZ和/BZ相连接,在掩膜选项中选择Output Type PB0-PB1为PFD BZ_BZB,设定定时器产生的PFD频率与蜂鸣器的鸣响频率一致,并且在使用中要将定时器输出致能,此时控制PB0的输出,为1则蜂鸣器响,为0则蜂鸣器不响。 ________________________________________ Question 27 HT48FXXE使用ISP烧录时,一共享到哪几个脚? Answer HT48FXXE ISP烧录一共享到5个脚,分别为VSS,VDD,RESET,SDATA(PA0),SCLK(PA4)。 ________________________________________ Question 28
HT46单片机怎样在PD口输出自己所需要的PWM频率? Answer HT46系列MCU的PWM输出频率是由系统频率决定的,Fpwm=Fsys/256;即系统频率定了之后,PWM频率也就定了。PWM频率是不可调的,只能调占空比(通过给PWM寄存器赋值)。 ________________________________________ Question 29
HT24LC系列 & HT93LC系列Serial EEPROM的差异为何? Answer Feature 2-Wire (HT24LCxx) 3-Wire (HT93LCxx) Interface Serial data I/O, Clock Data in, Data out, Clock, CS Clock Rate (max) 400K 2M Page Write Yes No Memory Organization X8 bit X8 bit or x16 bit Write to All mode No Yes Specific features Hardware write protect WP pin Software write protect EWDS instruction ________________________________________ Question 30
对HT93系列操作时,在两个不同的命令码发送之间,一定要将CS引脚拉低吗?
Answer
是的。而且在两个命令码之间CS拉低时间至少要保持250ns,如果工作电压在2.2V时候,CS的拉低时间至少要保持1000ns。要注意的是,如果此时你进行写操作,当你所要写的数据发送完毕,将CS拉低保持一定时间后拉高CS,在读到HT93系列给出的ready信号之后,你必须再一次作一次拉低CS的动作,才能给出你要进行的下一条命令码的START位,也就是说需要两次拉低CS引脚。 ________________________________________ Question 31
如何用I/O口测温度值? Answer 用I/O口测试温度只能用I/O充放电来测量,需要三个I/O,两个输出口,一个输入口,两输出口分别连接参考电阻R1,热敏电阻R2, R1和R2的另一端相连,并接入输入口和电容C1的一端,电容的另一端接地。 用输入口的门限电平判断充放电的结束否,R1是为修正R2的测量误差,其原理:ΔT1=R1C1 ΔT2=R2C1--> R2=ΔT2R1/ΔT1。 ________________________________________ Question 32
Ht49R50A-1是否有内置32768晶体? Answer HT49内部有两个晶体振荡电路,其一是32768晶体振荡电路,另一个是400KHZ~8MHZ的晶体振荡电路,这两个电路外部需要接晶体才能正常工作。另外,芯片内部还有一个WDT的RC振荡电路,外部不需要接任何电路。 ________________________________________ Question 33 请教一下holtek c语言中没有float类型,那小数该怎么表示? Answer 用整数保存咯(原始的AD值 或则 将电压值扩大10倍,100倍保存),然后需要显示的时候再处理成小数来显示,计算的话就用整数计算就可以了,反正你的计算过程也没人看到,全部再内部处理的。最简单的,就是用除法,除10,把位数一个一个的分离出来 比如1.01,扩大100倍后就是101,也就是65H,需要把它换成小数显示的时候,就是(65H/100)=1(整数部分),然后(65H%100)得余数1,然后1/10,得小数点后第一位,1%10得余数。。。。 ________________________________________ Question 34 请问HT的工程师:46RU25 AD采样的速度如何?能否满足交流采样的速度,频率40~70Hz,每周期采样80个点左右? Answer tadc典型为80个tad ,tadcs典型为32个tad ,整个时间为tadc+tadcs ,而tad最小为1us, 所以典型为112us 。 应该差不多够采80个点吧,这些在规格书里都有说明。 ________________________________________ Question 35
求AD转换C语言范例 Answer unsigned long ad_temp; void main() { _acsr=0x01; _adcr=0x21; _start=0; _start=1; _start=0; while(_eoc); *((unsigned char *)&ad_temp+1)=_adrh; *((unsigned char *)&ad_temp+0)=_adrl; //ad_temp移位 _nop(); } ________________________________________ Question 36 HT46RB70的时钟是否支持RC Oscillator? Answer HT46RB70的时钟不支持RC Oscillator,其只支持Crystal Oscillator (6M or 12M)。 ________________________________________ Question 37 HT82 Keyboard/Mouse MCU 的 ESD 及 Latch-up 能力如何? Answer HT82 Keyboard/Mouse MCU 为适合在工业产品使用, 在 ESD 和 Latch-up 特别加强。 在 ESD 方面: 依据美国军方标准 MIL-STD-883E 3015.7, 采用人体放电模式测试, 每一 I/O 脚皆超过正负 5KV 以上。 在 Latch-up方面: 依据 JEDEC-NO.17 标准, 采用 Current Mode 方式测试, 每一 I/O 脚皆超过正负 100mA以上。 ________________________________________ Question 38
HT46R54A与HT46R54的RAM有何区别? Answer HT46R54的RAM为88X8,MP0和MP1指针为7位。 而HT46R54A的RAM为280X8,MP0和MP1指针为8位。 ________________________________________ Question 39
HT46单片机怎样在PD口输出自己所需要的PWM频率? Answer HT46系列MCU的PWM输出频率是由系统频率决定的,Fpwm=Fsys/256;即系统频率定了之后,PWM频率也就定了。PWM频率是不可调的,只能调占空比(通过给PWM寄存器赋值)。 ________________________________________ Question 40
HT46R64晶振问题: 用仿真器运行一切正常,写片后32768的晶振不振荡,换了几个晶振都没有解决问题。 Answer 可能是晶振离MCU比较远造成的,试着将晶振直接焊到MCU pin上。焊接完要将焊锡膏/助焊剂用酒精擦干净,不然也会造成32K Crystal无法起振。 ________________________________________ Question 41
PWM的(6+2)模式与(7+1)模式分别应用于什么场合? Answer 两种模式在于PWM调制频率不一样,应用时根据PWM调制频率要求来选择。例如用于DA应用时,最好用(6+2)模式,调制频率高,载波容易过滤掉。 ________________________________________ Question 42
使用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 43
HT46 A/D Type MCU如何判断A/D转换过程是否结束? Answer 有两种方法: 1. 轮询ADCR寄存器中的EOCB位:A/D转换前清除A/D中断使能位,转换开始后轮询EOCB位,如果为零则表示转换完成,处理转换结果,否则继续轮询。 2. 等待A/D内部中断的发生:A/D转换前置位A/D中断使能位,转换开始后继续执行其它程序,转换完成后,如果堆栈未满,程序进入A/D中断服务子程序中处理转换结果。 ________________________________________ Question 44
在Demo板上进行A/D采样电压转换时,采样结果不稳定有波动,如何消除? Answer 一般来说,仿真器(ICE)都是工作在一个电压比较稳定的环境下(通常为5V),在使用ICE的A/D调试时,需要注意A/D转换的参考电压是由ICE的内部提供, 或者由外部供给。A/D转换需要一个连续的时钟周期,所以不能使用单步调试的方法,否则会造成A/D采样值不准。要消除A/D采样的波动,可以在A/D通道输入口加一滤波电容; 或者在程序中采用中值滤波的方法。 ________________________________________ Question 45
使用带A/D功能的Holtek芯片时,怎样提高转换精度? Answer 一般考虑,首先要选取合适的系统时钟,由于Holtek允许的A/D时钟周期tAD的最小值是1us,所以要注意ADSC1和ADSC0选择的系统分频,以免A/D时钟周期小于1us;在A/D转换开始或者改变输入通道后,要保持合适的采样时间和转换时间,时间太长或太短,都可能会产生不准确的A/D转换值,具体细节可以参考datasheet数据。 另外建议在转换通道加一104电容,可以改善仿真信道的采样电压,提高转换精度。 ________________________________________ Question 46 Holtek MCU中断有优先级的区别,请问高优先级中断会不会打断低优先级中断? Answer Holtek MCU中断优先级区别是,当有多个中断申请同时存在时(对应中断请求旗标置起)MCU将首先响应高优先级的中断。但不论哪一级中断只要被MCU响应后,其对应的中断请求旗标会被重置且EMI(总中断控制位)会被清零从而除能其它中断,所以如果MCU已进入了低优先级的中断则不会被更高优先级的中断所打断,直到中断服务子程序返回后才会响应。 ________________________________________ Question 47 HT-ICE和实际电路直接相连进行A/D仿真时,需要注意什么? Answer 仿真器与目标电路连接时,仿真器电源VDD与外部电源要隔离;如果外部电路有AC电源输入,则最好采用隔离变压器。 ________________________________________ Question 48
请问OTP dice 烧录流程为何? Answer • Dice 打线在 COB 上。 • 利用烧录器如 HT-Writer 等作OTP 烧录。 • COB 功能测试。 • 功能正常之 COB 将 Dice 封胶, 之后再焊上其它零件。 ________________________________________ Question 49 是否可以利用HT46R22的IIC接口来读写HT24系列的EEPROM? Answer HT46R22的IIC接口只能工作于从器件模式,不能做为主器件来读写EEPROM。若要读写EEPROM可以用IO来仿真IIC接口。 ________________________________________ Question 50 C/R-F type MCU做触摸按键时设置灵敏度的一般方法是什么? Answer 以Timer B计数溢出读取Timer A的值为例。 1、读取基准值,即所有按键均无触摸动作时各RC通道对应的Timer A的值,设值为A1~An
2、读取相应RC信道按键有触摸动作时,其对应的Timer A的值,设值为Bn。例如读取RC3对应按键有触摸时Timer A的计数值B3 3、读取某按键周围其它按键有触摸动作时,此按键受到干扰或间接被感应到时的Timer A的最大值,设值为Cn。例如RC4对应按键与RC3对应按键相邻,RC4有触摸动作,此时RC3通道打开时其Timer A的计数值C3。 4、给出判断相应按键触摸与否的值Dn_min,Dn_max,应满足Dn_max >(Bn- An) >Dn_min>(Cn- An),通过调整Dn_min的大小可以调整相应按键的灵敏度。 由于仿真器本身与实际芯片之间存在一定的差异性,以及在RC通道的引线长度、粗细等与实际PCB板有差异,所以仿真器仅仅能调试相关功能,得到的灵敏度等数据和实际情况却不尽相同。最终所用的灵敏度最好由实际芯片及PCB板测得。以上数据的获得可以通过一些辅助工具和测试程序在实际的PCB板上得到。
|