本方案中采用定时器 0 进行 10 毫秒定时,当进行了 100 次定时中断后 定时时
间为 1 秒,此时将定时标志位清零重新计数,并提供 1 秒信号使二极管电 平翻转,同时使
扬声器发生声音频率变化。
定时中断子程序见源代码。程序中定时器,一直处于运行状态,也就是 说定时器是理想运
作的,其中断程序每隔 0.1 秒执行一次,在理想状态下,定时 器定时是没有系统误差的,
但由于定时器中断溢出后,定时器从 0 开始计数,直
到被重新置数,才开始正确定时,这样中断溢出到中断响应到定时器被重新置数, 其间消
耗的时间就造成了定时器定时的误差。如果在前述定时器不关的情况下, 在中断程序的一
开始就给定时器置数, 此时误差最小,误差大约为:每 0.01 秒, 误差 7—12 个机器周期。
当然这是在定时器定时刚好为 0.01 秒时的情况,由以 上分析,在定时值设置时,可以适
当的扣除 9 个机器周期的时间值。
对于延时程序,其作用是产生 1.8KHZ 和 1.5KHZ 的脉冲,其周期分别为 556us
和 667us,即 556 和 667 个机器周期,由于计算复杂,不可能做到完全准确, 寄存器初值必
定存在误差,考虑到人听觉的灵敏度,此误差可忽略不计。