加载中...
定时器及其编程
发表于:2009-11-24 | 分类: 硬件设计
字数统计: 662 | 阅读时长: 2分钟 | 阅读量:

关于定时器

独立于CPU的硬件独立于CPU工作,而不是靠CPU拖延时间实现

实现的定时和基本间隔的计算

定时器计算的是脉冲的次数,是从初值开始递增计数,直到最大值然后溢出,初值越大定时基本间隔越小 溢出一次的基本定时单元/间隔=定时器时钟周期*(2^8-初值) 定时器的时钟:可以从系统时钟获取,也可直接外接;从系统时钟获取时又可设置时直接采用系统时钟振荡周期,还是采用指令周期(PIC又是其1/4),然后还要算上分频系数 假如CPU采用8M晶振,Fosc=8M,定时器时钟采用指令周期,即Fosc/4,预分频系数为1:1 则: BasicInterval=(1*4/8M)*(256-56)=100us 然后可以通过计数器获取N个基本定时间隔 定时器计算要准确公式化,要准确,又省的麻烦 #define T0_BASIC 0.0001  //100us #define T0_PRE 4 #define T0_CLK Fosc/4/T0_PRE #define T0_LOAD (255-T0_BASIC*T0_CLK)

使用例子

初始化设置定时器和加载初值;中断中进行次数变量变化并重新加载初值;在中断或者循环中对达到条件进行处理 74: 初始化相关内容: T0CS=0;//选择内部时钟 PSA=0;//使用预分频器 PS2=1;PS1=1;PS0=1;//设置预分频值 TMR0=0X63;//赋初值,8位 TMR0IE=1;//开中断 中断中: TMR0IF) { TMR0IF=0; TMR0=0X63; TMR0IE=1; … } 没有定时器开关,和中断开关一起 6490 初始化: T0CS=0;//选择内部时钟 T08BIT=1;//选择16位 PSA=0;//使用分频器 T0PS2=1;T0PS2=1;T0PS0=1;//配置分频值 TMR0H=0;TMR0L=0X63; TMR0ON=1;//打开 TMR0IE=1; 中断中: if(TMR0IF) { TMR0IF=0; TMR0H=0X00; TMR0L=0X63;//00 TMR0ON=1; TMR0IE=1; …} 1/4 *64* (65536- 65536-X=256-131=125 2ms=(65536-x)*N/4*1us (65536-x)*N=8000 8位最小间隔到最大间隔 最小间隔0 最大间隔 1/4M *256*256=16.38MS 16位 最小间隔0 最大间隔1/4M*256*65536=4S多 TIMER1直接定时1S得了 1S=1/4M*N*(65536-X) (65536-X)*N=4M 65536-25536=40000 N=100分频 选择64分频 (65536-X)=62500 X=3036 —————-实时时钟 实时时钟用定时器做即可 秒大于60分递增,分大于60小时递增,如此而已

上一篇:
温习一些基本运算和常用算法
下一篇:
触摸方案
本文目录
本文目录