透过HT48R10-1 BZ 口输出32768HzCrystal 的使用使用说明将32K 晶振直接挂在PA.0 和PA.1 上,PA.0 作为输入口,记作OSCI,PA.1 作为输出口,记作OSCO,其作用为读取OSCI 的值并将其取反输出。程序运行后将会从PB.0 口输出一个频率为32K 的方波,同时在PA.1 口也可以看到与PB.0 同步的波形。C_TMRC,C_TMR 和C_INTC 的值分别为在程序中需写入TMRC,TMR 及INTC 的值,C_INIT_L和C_INIT_H 为使32K 晶振起振所需的循环次数的低位及高位。R_INIT 为记忆C_INIT_L 值的缓存器。子程序INI_TIAL 作用为设置IO 口的输入输出状态,对TMR 及INT 进行初始设置。子程序INI_32K 作用为实时追踪OSCI 的输入状态并及时改变OSCO 的输出状态,使32K 晶振能起振并达到稳定状态。子程序SBR_OSCI_L 作用为等待OSCI 输入变为低准位,随后将OSCO 取反输出,同时将OSCO 输出的值从PB.0 同步输出。子程序SBR_OSCI_H 作用为等待OSCI 输入变为高准位,随后将OSCO 取反输出,同时将OSCO 输出的值从PB.0 同步输出。TIMER 的中断服务程序ISR_TIMER 的作用为等待OSCI 状态的翻转然后改变OSCO 及PB.0 的输出。在32K 晶振稳定起振后,微控制器每隔28 个指令周期才会进入一次TIMER 中断,这28 个指令周期可以运行其它的程序。由于每个32K 的晶振所振出的频率略有不同,如果使用中发现32K 晶振短暂振荡后停振,可以将C_TMR 改为一个较大的值直到能使32K 晶振稳定振荡。注意:改变C_TMR 的值后会影响微控制器进入中断的时间。
猜您喜欢
评论