《(34)--[7.1.4] 定时计数器的初始化编程.ppt》由会员分享,可在线阅读,更多相关《(34)--[7.1.4] 定时计数器的初始化编程.ppt(13页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、定时计数器的定时计数器的初始化编程初始化编程7.1.4 定时/计数器的初始化编程n定时器定时器/计数器的功能是由软计数器的功能是由软 件编程确定的,在使用定时器,件编程确定的,在使用定时器,计数器前都要对其进行初始化。计数器前都要对其进行初始化。nMCS-51MCS-51对定时对定时/计数器的编程计数器的编程过程可以分为查询法和中断法。过程可以分为查询法和中断法。1.1.查询法查询法(1)(1)根据要求选择方式,确定根据要求选择方式,确定方式控制字,写入方式控制寄方式控制字,写入方式控制寄存器存器TMODTMOD。7.1.4 定时/计数器的初始化编程(2 2)根据定时时间要求或计)根据定时时间
2、要求或计数要求,计算定时数要求,计算定时/计数器的计数器的计数值,再由计数值求得初值,计数值,再由计数值求得初值,送计数初值的高送计数初值的高8 8位和低位和低8 8位到位到TH0TH0(或(或TH1TH1)和)和TL0TL0(或(或TL1TL1)寄存器中。寄存器中。7.1.4 定时/计数器的初始化编程1.1.查询法查询法(3 3)设置定时)设置定时/计数器控制寄计数器控制寄存器存器TCONTCON的值(即将其的值(即将其TR0TR0或或TR1TR1置位置位),启动定时),启动定时/计数器计数器开始工作。开始工作。7.1.4 定时/计数器的初始化编程1.1.查询法查询法(4 4)不断的判断溢出
3、标志,)不断的判断溢出标志,溢出标志等于溢出标志等于1 1,则进行相应的则进行相应的定时处理。定时处理。7.1.4 定时/计数器的初始化编程1.1.查询法查询法n根据要求选择方式,确定方式控制字,写入方式控制寄存器TMOD。n根据定时时间要求或计数要求,计算定时/计数器的计数值,再由 计数值求得初值,送计数初值的高8位和低8位到TH0(或TH1)和TL0 (或TL1)寄存器中。7.1.4 定时/计数器的初始化编程2.2.中断法中断法n如果工作于中断方式,则根据需要开放定时/计数器的中断,即对IE 寄存器赋值(后面还需编写中断服务程序)。n设置定时/计数器控制寄存器TCON的值(即将其TR0或T
4、R1置位),启动定时/计数器开始工作。n等待定时/计数时间到,定时/计数到则执行中断服务程序。7.1.4 定时/计数器的初始化编程2.2.中断法中断法3.定时器/计数器的计数初值计算nMCS-51的定时器/计数器采用增量计数。根据定时/计数器的计数结构,其最大计数为M=2m,其中m为计数器的位数,对于工作方式0,m=13,其最大计数为213=8192;对于工作方式1,m=16,其最大计数为216=65536;对于工作方式2和工作方式3,m=8,其最大计数为28=256。7.1.4 定时/计数器的初始化编程由于定时器计数器工作的实质是做由于定时器计数器工作的实质是做“加加1”1”计数,所以,当最
5、计数,所以,当最大计数值大计数值 M M 值为已知且计数值为值为已知且计数值为N N 时,初值时,初值X X 可计算为:可计算为:X=MX=MN N在实际应用中,经常会有少于在实际应用中,经常会有少于2m个计数值的要求,例如,要个计数值的要求,例如,要求计数到求计数到10001000就产生溢出,这时可在计数时,不从就产生溢出,这时可在计数时,不从0 0开始,而开始,而是从一个固定值开始,这个固定值的大小,取决于被计数的是从一个固定值开始,这个固定值的大小,取决于被计数的大小。如要计数大小。如要计数10001000,预先在计数器里放进,预先在计数器里放进(2m 1000)的的数,再来数,再来10
6、001000个脉冲,就到了个脉冲,就到了2m,就会产生溢出,置位,就会产生溢出,置位TF0TF0。这个这个(2m 1000)的数称作计数初值,也称作预置值。的数称作计数初值,也称作预置值。7.1.4 定时/计数器的初始化编程定时也有同样的问题,并且也可采用同样的方法来解决。当定时定时也有同样的问题,并且也可采用同样的方法来解决。当定时/计数器为工作方式计数器为工作方式0 0,并假设单片机的晶振是,并假设单片机的晶振是12MHz12MHz,那么每个计时,那么每个计时 脉冲是脉冲是1 1s s,计满,计满2 21313=8192=8192个脉冲需要个脉冲需要8.192ms8.192ms,如果只需定
7、时,如果只需定时1ms1ms,可以作这样的处理:可以作这样的处理:1ms1ms即即l000l000s s,也就是计数,也就是计数10001000时满。因此,计时满。因此,计 数之前预先在计数器里放进数之前预先在计数器里放进2 213131000=81921000=81921000=71921000=7192,开始计数,开始计数 后,计满后,计满10001000个脉冲到个脉冲到81928192即产生溢出。如果计数初值为即产生溢出。如果计数初值为X X,则计算,则计算 定时时间定时时间 t t 为:为:t=(2NX)Tcy=(2NX)12/fosc 式中:式中:TcyTcy为机器周期,为机器周期,
8、foscfosc为晶振周期。为晶振周期。7.1.4 定时/计数器的初始化编程n例如,如果定时/计数器为工作方式0,需要定时3ms(3000s),fosc为12MHz。设计数初值为X,则根据上述公式可得:3000=(2mX)12fosc=(213X)12/12 由此可得,X=5192 n需要说明的是,单片机中的定时器通常要求不断重复定时,一次定时 时间到之后,紧接着进行第二次的定时操作。一旦产生溢出,计数器 中的值就回到0,下一次计数从0开始,定时时间将不正确,为使下一 次的定时时间不变,需要在定时溢出后马上把计数初值送到计数器。7.1.4 定时/计数器的初始化编程n当fosc=12MHz,时,Tcy=1s,N=100s/1s=100 方式0(13位方式):X=213100=8092=1F9CH 方式1(16位方式):X=216100=65436=FF9CH 方式2、3(8位方式):X=28100=156=9CH 注意:工作方式0的初值装入方法:1F9CH=1 1111 100 1 1100 B TH0的8位 TL0的低5位 可见,TH0=0FCH,TL0=1CH MOV TH0,#0FCH MOV TL0,#1CH 例T0运行于定时器状态,时钟振荡周期为12MHz,要求定时100s。试求不同工作方式时的定时初值X。7.1.4 定时/计数器的初始化编程