PIC16F877A的定时,计数器TMR1
发布时间:2012/6/12 19:57:52 访问次数:4111
PIC16F877A芯片有三HY628400LLG-55个不同的定时器,这里以TMR1为例来讲解。
TMR1是一个1 6位的定时,计数器,图3是简化后的TMR1工作原理图。
TMR1的讣数信号可以有2个来源,第一个来源是内部时钟(fosc)经4分频后得到,使用这一来源就是将TMR1作为定时器来使用。第二个来源是RCO引脚或者是RC1引脚,由T10SCEN选择,该部分与本文无关,不作展开说明。计数信号随即送入前分频器进行处理,可以对信号进行4种分频处理,即1分频、2分频、4分频和8分频,这通过TICKPS1和”CKPSO两位进行设定。经过前分频器后的信号可以直接送入计数器,也可以在通过同步处理后再进入计数器,这通过TISYNC位来设置。TMR10N作为计数信号的最后一道控制关,只有该位为“1”计数信号才能进入计数器。
TMR1由TMRlH和TMRIL两个8位的寄存器组成一个1 6位的计数器,每来一个计数脉>中,其值加1,当其计数值从OOOOH增加到FFFFH,再加1即回到OOOOH,此时产生中断溢出标志TMR11F。如果中断允许,那么CPU将接收到中断请求标志。
TICON寄存器是控制TMR1工作模式最关键的一个寄存器,它的定义如表1所示,其中bit7和bit6没有定义,其余各位的定义已在上文中描述。
在学习了PIC 16F877A的定时器和中断系统后,下面就用定时中断的方法点亮如图4所示的LED点阵块。
图4中J1是编程和调试插座,J2是音频信号输入插座,点阵块使用SD411988,由PORTB和PORT∞Ⅸ动列,而PORTD驱动行。PZ1和P22分别是100kfl和10k(l的排电阻;S1一S4是按钮开关。
【程序分析】:main()函数调用Init_10 TMRl()对及定时器TMR1进行初始化。因为系统晶振频率是12MHz,计数信号是12MHz的4分频即3MHz,因此指令周期是0.333“s。定时初值设定为3000,因此定时周期是3000×0.3333~1000U s。main()函教在初始化工作结束及开启中断允许位,没有什么事要做,使用for㈥:进入无限循环,将所有工作交给中断程序处理。
Hrl-ECH的C编译器使用interrupt关键字来描述中断处理程序,因此,void interrupt TimerlO是中断处理程序,程序名Timerl可以自行定义。进入中断处理程序后,用if(TMRlIF==1&&TMRlIE==1)语句查询TMR11F及TMR lIE是否同时为1,如果是,说明确实是TMR1产生的中断。每次中断处理一列数据,根据计数器静态变量I的值来决定在16列中的哪一列显示数据,这通过对变量Vscan逐次右移来实现对待显示列进行控制。
根据i的值从显示缓j中区取得待显示数据,显示缓/中区的数据在0—8之间,如果是0就不点亮任何一个LED,否则点亮相应个数的LED,程序中通过if语句来判断,如果显示缓>中区中的值为0则送Oxff到PORTD,否则通过查Code[]表来确定应该送到PORTD的数据。
TMR1是一个1 6位的定时,计数器,图3是简化后的TMR1工作原理图。
TMR1的讣数信号可以有2个来源,第一个来源是内部时钟(fosc)经4分频后得到,使用这一来源就是将TMR1作为定时器来使用。第二个来源是RCO引脚或者是RC1引脚,由T10SCEN选择,该部分与本文无关,不作展开说明。计数信号随即送入前分频器进行处理,可以对信号进行4种分频处理,即1分频、2分频、4分频和8分频,这通过TICKPS1和”CKPSO两位进行设定。经过前分频器后的信号可以直接送入计数器,也可以在通过同步处理后再进入计数器,这通过TISYNC位来设置。TMR10N作为计数信号的最后一道控制关,只有该位为“1”计数信号才能进入计数器。
TMR1由TMRlH和TMRIL两个8位的寄存器组成一个1 6位的计数器,每来一个计数脉>中,其值加1,当其计数值从OOOOH增加到FFFFH,再加1即回到OOOOH,此时产生中断溢出标志TMR11F。如果中断允许,那么CPU将接收到中断请求标志。
TICON寄存器是控制TMR1工作模式最关键的一个寄存器,它的定义如表1所示,其中bit7和bit6没有定义,其余各位的定义已在上文中描述。
在学习了PIC 16F877A的定时器和中断系统后,下面就用定时中断的方法点亮如图4所示的LED点阵块。
图4中J1是编程和调试插座,J2是音频信号输入插座,点阵块使用SD411988,由PORTB和PORT∞Ⅸ动列,而PORTD驱动行。PZ1和P22分别是100kfl和10k(l的排电阻;S1一S4是按钮开关。
【程序分析】:main()函数调用Init_10 TMRl()对及定时器TMR1进行初始化。因为系统晶振频率是12MHz,计数信号是12MHz的4分频即3MHz,因此指令周期是0.333“s。定时初值设定为3000,因此定时周期是3000×0.3333~1000U s。main()函教在初始化工作结束及开启中断允许位,没有什么事要做,使用for㈥:进入无限循环,将所有工作交给中断程序处理。
Hrl-ECH的C编译器使用interrupt关键字来描述中断处理程序,因此,void interrupt TimerlO是中断处理程序,程序名Timerl可以自行定义。进入中断处理程序后,用if(TMRlIF==1&&TMRlIE==1)语句查询TMR11F及TMR lIE是否同时为1,如果是,说明确实是TMR1产生的中断。每次中断处理一列数据,根据计数器静态变量I的值来决定在16列中的哪一列显示数据,这通过对变量Vscan逐次右移来实现对待显示列进行控制。
根据i的值从显示缓j中区取得待显示数据,显示缓/中区的数据在0—8之间,如果是0就不点亮任何一个LED,否则点亮相应个数的LED,程序中通过if语句来判断,如果显示缓>中区中的值为0则送Oxff到PORTD,否则通过查Code[]表来确定应该送到PORTD的数据。
PIC16F877A芯片有三HY628400LLG-55个不同的定时器,这里以TMR1为例来讲解。
TMR1是一个1 6位的定时,计数器,图3是简化后的TMR1工作原理图。
TMR1的讣数信号可以有2个来源,第一个来源是内部时钟(fosc)经4分频后得到,使用这一来源就是将TMR1作为定时器来使用。第二个来源是RCO引脚或者是RC1引脚,由T10SCEN选择,该部分与本文无关,不作展开说明。计数信号随即送入前分频器进行处理,可以对信号进行4种分频处理,即1分频、2分频、4分频和8分频,这通过TICKPS1和”CKPSO两位进行设定。经过前分频器后的信号可以直接送入计数器,也可以在通过同步处理后再进入计数器,这通过TISYNC位来设置。TMR10N作为计数信号的最后一道控制关,只有该位为“1”计数信号才能进入计数器。
TMR1由TMRlH和TMRIL两个8位的寄存器组成一个1 6位的计数器,每来一个计数脉>中,其值加1,当其计数值从OOOOH增加到FFFFH,再加1即回到OOOOH,此时产生中断溢出标志TMR11F。如果中断允许,那么CPU将接收到中断请求标志。
TICON寄存器是控制TMR1工作模式最关键的一个寄存器,它的定义如表1所示,其中bit7和bit6没有定义,其余各位的定义已在上文中描述。
在学习了PIC 16F877A的定时器和中断系统后,下面就用定时中断的方法点亮如图4所示的LED点阵块。
图4中J1是编程和调试插座,J2是音频信号输入插座,点阵块使用SD411988,由PORTB和PORT∞Ⅸ动列,而PORTD驱动行。PZ1和P22分别是100kfl和10k(l的排电阻;S1一S4是按钮开关。
【程序分析】:main()函数调用Init_10 TMRl()对及定时器TMR1进行初始化。因为系统晶振频率是12MHz,计数信号是12MHz的4分频即3MHz,因此指令周期是0.333“s。定时初值设定为3000,因此定时周期是3000×0.3333~1000U s。main()函教在初始化工作结束及开启中断允许位,没有什么事要做,使用for㈥:进入无限循环,将所有工作交给中断程序处理。
Hrl-ECH的C编译器使用interrupt关键字来描述中断处理程序,因此,void interrupt TimerlO是中断处理程序,程序名Timerl可以自行定义。进入中断处理程序后,用if(TMRlIF==1&&TMRlIE==1)语句查询TMR11F及TMR lIE是否同时为1,如果是,说明确实是TMR1产生的中断。每次中断处理一列数据,根据计数器静态变量I的值来决定在16列中的哪一列显示数据,这通过对变量Vscan逐次右移来实现对待显示列进行控制。
根据i的值从显示缓j中区取得待显示数据,显示缓/中区的数据在0—8之间,如果是0就不点亮任何一个LED,否则点亮相应个数的LED,程序中通过if语句来判断,如果显示缓>中区中的值为0则送Oxff到PORTD,否则通过查Code[]表来确定应该送到PORTD的数据。
TMR1是一个1 6位的定时,计数器,图3是简化后的TMR1工作原理图。
TMR1的讣数信号可以有2个来源,第一个来源是内部时钟(fosc)经4分频后得到,使用这一来源就是将TMR1作为定时器来使用。第二个来源是RCO引脚或者是RC1引脚,由T10SCEN选择,该部分与本文无关,不作展开说明。计数信号随即送入前分频器进行处理,可以对信号进行4种分频处理,即1分频、2分频、4分频和8分频,这通过TICKPS1和”CKPSO两位进行设定。经过前分频器后的信号可以直接送入计数器,也可以在通过同步处理后再进入计数器,这通过TISYNC位来设置。TMR10N作为计数信号的最后一道控制关,只有该位为“1”计数信号才能进入计数器。
TMR1由TMRlH和TMRIL两个8位的寄存器组成一个1 6位的计数器,每来一个计数脉>中,其值加1,当其计数值从OOOOH增加到FFFFH,再加1即回到OOOOH,此时产生中断溢出标志TMR11F。如果中断允许,那么CPU将接收到中断请求标志。
TICON寄存器是控制TMR1工作模式最关键的一个寄存器,它的定义如表1所示,其中bit7和bit6没有定义,其余各位的定义已在上文中描述。
在学习了PIC 16F877A的定时器和中断系统后,下面就用定时中断的方法点亮如图4所示的LED点阵块。
图4中J1是编程和调试插座,J2是音频信号输入插座,点阵块使用SD411988,由PORTB和PORT∞Ⅸ动列,而PORTD驱动行。PZ1和P22分别是100kfl和10k(l的排电阻;S1一S4是按钮开关。
【程序分析】:main()函数调用Init_10 TMRl()对及定时器TMR1进行初始化。因为系统晶振频率是12MHz,计数信号是12MHz的4分频即3MHz,因此指令周期是0.333“s。定时初值设定为3000,因此定时周期是3000×0.3333~1000U s。main()函教在初始化工作结束及开启中断允许位,没有什么事要做,使用for㈥:进入无限循环,将所有工作交给中断程序处理。
Hrl-ECH的C编译器使用interrupt关键字来描述中断处理程序,因此,void interrupt TimerlO是中断处理程序,程序名Timerl可以自行定义。进入中断处理程序后,用if(TMRlIF==1&&TMRlIE==1)语句查询TMR11F及TMR lIE是否同时为1,如果是,说明确实是TMR1产生的中断。每次中断处理一列数据,根据计数器静态变量I的值来决定在16列中的哪一列显示数据,这通过对变量Vscan逐次右移来实现对待显示列进行控制。
根据i的值从显示缓j中区取得待显示数据,显示缓/中区的数据在0—8之间,如果是0就不点亮任何一个LED,否则点亮相应个数的LED,程序中通过if语句来判断,如果显示缓>中区中的值为0则送Oxff到PORTD,否则通过查Code[]表来确定应该送到PORTD的数据。