守时器实际上也是计数器,仅仅计数的是固定周期的脉冲
守时/计数器很简单了解的啊
守时器实际上也是作业在计数方法下,仅仅计数的是固定周期的脉冲,因为脉冲周期固定,由计数值能够核算时刻,有守时功用。
守时和计数仅仅触发来历不同(时钟信号和外部脉冲)其他方面是相同的。
单片机里的寄存器能够当作一个个电子开关,用来切换不同的功用、信号。
51里经过TMOD里的T/C 位切换计数信号的来历
当T/C作业在守时器时,对振动源12分频的脉冲计数,即每个机器周期计数值加1,计数频率为1/12fosc,当晶振频率6MHZ时,计数频率为500KHz,每2us计数值加1;晶振12MHZ便是每1us加1 了。
当T/C作业在计数器是,计数脉冲来自外部脉冲输入管脚T0(P3.4)或T1(P3.5),当T0或T1脚上负跳变时计数值加1 ,辨认管脚负跳变需求2个机器周期,即24个振动周期。所以T0或T1脚输入的可计数的外部脉冲的最高频率为1/24fosc,当晶振12MHZ时,最高计数频率为500KHz,高于此频率将计数犯错。
至于赋初值便是杯子原理了,因为51只能加计数,且只能在杯子刚刚满的那一刻宣布中止,触发中止程序,所以咱们就往杯子里先放好必定的豆子,再来相应数量的豆子就满了,然后中止程序就主动作业了。
留意:
守时和计数仅仅触发来历不同(时钟信号和外部脉冲)其他方面是相同的。
假定咱们要守时一守时刻(100个机器周期),咱们就置初值为(溢出值-100)就行了,假定咱们要计件100个,实际上也是置初值为(溢出值-100),然后将输入脉冲设为外部输入就能够了
说:守时和计数仅仅触发来历不同(时钟信号和外部脉冲)其他方面是相同的。
在中止里置初值是为下一个循环作预备,没什么好说的,看需求定了。
因为守时计数器的值也能够随时读出来,所以咱们也能够从0开端计数,然后核算一段时刻或必定脉冲的数量哦,这是照样能够翻开中止,中止时就阐明现已又计数了(守时器溢出值)个脉冲哦,在中止里进行溢出处理,就能够核算出远远大于(守时器溢出值)的数字了
此刻也要留意一点:51读数时除了T/C2的捕捉功用,直接读TH和TL但是不断改变的哦,详细的仍是看书。当你了解了守时计数器后,咱们乃至还能够将计数值置为(溢出值-1),然后完成主动单步(守时形式)或作为外部中止(计数形式)用哦,细心想想吧,呵呵;-)
至于中止中的需求维护现场的原因,是为了避免不小心修改了其他程序的参数,然后影响其他程序的运转,所以要且只需维护中止程序自己动过的数据,将动过的那些存储器在退出中止时康复到进入时的状况,就不会影响被中止的程序了。
汇编需求自己保存现场,横竖程序便是自己编的嘛,全部尽在把握中;
C的话编译器会主动进行掩盖剖析,主动保存需求保存的变量,一般应用时尽可定心,当然,假如你很了解编译器做了什么,也能够嵌入汇编天马行空自由发挥啊,但新手可不主张这样哦,仍是交给编译器吧。
其实这些能够说都是基础知识啊,假如不明白肯定是你的书看的不行细心哦