PIC51单片机定时器初值的计算计算方法及几种周期小结

PIC单片机定时器初值计算方法
164Mhz00FF16*256=4096us50ms
500005000050ms
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。PIC单片机 定时器初值计算
09:05:57编辑:什么鱼 关键字:&&&&
晶振8M 需定时25us 分频比1:2
初值(EE)=256 - 25/ (4/8*2) + 14/2& = 256- 25 + 7 = 238
关键字:&&&&
来源: eefocus
引用地址:
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。
关注eeworld公众号快捷获取更多信息
关注eeworld服务号享受更多官方福利
见过很多初学者对PIC16系列单片机的ID码的读和写犯迷糊。说实话,这方面的资料也不怎么全。有些教材可能会涉及ID区域的介绍,可是往往是一代而过。这对初学者来说是比较容易犯错的地方。今天有空,对相关的问题作了一些整理,分享给大家。可能有些地方说的不够妥当,欢迎大家多多探讨。&&&&&&& 1.什么是ID区域?ID区域是独立于EEPROM,FLASH,RAM的区域。程序设计人员可以利用该区域存放软件的版本号,编写日期,烧录日期,产品标识等信息。不过该区域很小PIC16系列只能存放4个字节。&&&&&&nbsp
1.6.5 PIC单片机的外接电压检测复位电路举例  1.设计思路  有许多型号单片机的内部均不具备掉电复位功能,即使对于内部包含该功能的PIC单片机,其复位门槛电压值是固定不可更改的,有时不能满足用户的需求,因此,外加电压检测复位电路也是较常见的设计方案。  对于片内带有掉电复位功能BOR的PIC单片机,在使用外接电压检测复位电路时,就必须将内部BUR功能禁止,方法是将系统配置字的BUDEN位设置为0。  对于内部不带BOR功能的PIC单片机,其电源控制寄存器PCUN没有BOR标志位,无法准确识别由外接电压检测复位电路引起的单片机复位,因此在程序执行过程中在MCLR引脚施加了人工复位信号引起的复位。  与外接电压检测复位电路相关
,也可以是在00H~FFH范围内由用户设定的一个起始值。&4位宽的预分频器,对于进入TMR2的时钟信号进行预先分频,允许选择3种不同的分频比(1:1、1:4或1:16)。注意:在对TMR2或控制寄存器进行写操作时,都可以使预分频器清0;在用任何方式复位时,都会对预分频器清0。周期寄存器PR2也是一个8位可读/写寄存器。用来预置一个作为TMR2一次计数过程结束的周期值。芯片复位后PR2寄存器被自动设置为全1(FFH)。比较器是一个8位宽的按位比较逻辑电路,只有当参加比较的两组数据完全相同之后,下一次递增时,“匹配”输出端才会送出高电平,其他情况下该输出端均保持低电平。4位宽的后分频器,对于比较器的输出信号进行后续分频,允许连续选择
#include &pic.h&#include&string.h&#include&STDIO.H&&__CONFIG(0x3F32); //芯片配置字& 选择HS模式振荡器,关WDTtypedef&&&& unsigned&typedef&& unsigned& int&uchar resive=0;uchar resive1=0;uchar send_buf[16]={'S',0x1
;/span&&3.为什么我的异步通信频繁报错?最常见的原因是:1. 对PIC16C187A单片机使用高速模式(BRGH置1), 而这些单片机在异步高速模式时,其采样电路的工作方式与其它型号单片机不同。2. 没有正确计算出要装入 SPBRG 寄存器的值。3. 发送和接收的波特率误差总和太大。
/*******************************************/&//功能:60倒计时,蜂鸣器以及数码管的使用&//开发板:PIC16F877&/*******************************************/includedefine uchar unsigned chardefine uint unsigned intvoid delay(uchar a,uchar x);&uchar table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x00};//数组&nbsp
热门资源推荐
最新单片机文章
最新视频课程
何立民专栏
北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。
相关热搜器件PIC单片机定时器初值计算方法及几种周_百度知道
PIC单片机定时器初值计算方法及几种周
答题抽奖
首次认真答题后
即可获得3次抽奖机会,100%中奖。
qsmm知道合伙人
来自科学教育类芝麻团
采纳数:139628
获赞数:2175815
参与团队:
1 可以按定时时间的计算公式, 计算出定时器的时间常数X:定时时间T=(2的N次方-X)12/单片机晶振频率2 N为定时器的工作方式:方式0时,N=13方式1时,N=16方式2时,N=83 根据定时时间和工作方式,计算出时间常数X把X转换成二进制数,高8位送给TH1,低8位送给TL1,就可以启动定时器开始定时了。例如:
工作在方式1,定时时间为1000微秒
晶振频率=12MHZ则
定时时间T=(2的16次方-X)12/12MHZ=1000
X=64536=FC18H
为你推荐:
其他类似问题
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。ATMAGE16定时器0初始值计算总结
18:07:12编辑:什么鱼 关键字:&&&&
今天在学习利用完成定时时发现在计算初始值时,不是很明白如何计算,就在网上找答案,看了很多人的例子和讲解总算是有点头绪了,先把那些有用的资料整理在一起供以后使用!谢谢各位在网上分享他们学习成果的大虾小虾和给为泡泡叔叔!!!
定时器0是8位的故可计数的范围是0-255这些数,我们在设置初始值时就就应该告诉计数器我们开始计数的位置,这也就是TCNT0的初始值,当计数到255时,有硬件在TIFR的bit0位TOV0置位触发中断,如果要使用比较匹配中断时就要告诉OCR0定时器计数的数值(也就是256-m,m为TCNT0的初始值),定时器记了多少数到达TOP值,当发生比较匹配值相同时在TIFR的bit1位OCF0置位从而触发中断!
以上是我学习过程的一点小总结,我会慢慢的将他弥补上的,如果说对了,有看到的网友有什么意见和建议给我留一下言我好肯定一下,如果说错了,给为大虾小虾也不要笑话我,请您也给我留下言,好给我指正我的错误和建议!在这里也谢谢你们了!!
首先依照AVR使用范例--定时器应用范例
http://www.avrvi.com/avr_examples/timer.html,使用ICC application bulider快速配置定时器生成代码如下:
//ICC-AVR application builder :
// Target : M16
// Crystal: 7.3728Mhz
void&port_init(void)
&&&&PORTA = 0x00;
&&&&DDRA&&= 0x00;
&&&&PORTB = 0x00;
&&&&DDRB&&= 0x00;
&&&&PORTC = 0x00;&//m103 output only
&&&&DDRC&&= 0x00;
&&&&PORTD = 0x00;
&&&&DDRD&&= 0x00;
TIMER0 initialize - prescale:1024
// WGM: Normal
// desired value: 20mSec
// actual value: 19.861mSec (0.7%)
void&timer0_init(void)
&&&&TCCR0 = 0x00;&//stop
&&&&TCNT0 = 0x71;&//set count
&&&&OCR0&&= 0x 8F;&&//set compare
&&&&TCCR0 = 0x05;&//start timer
这三位设置为1 0 1 :定时器的时钟为外部时钟频率的1024分频*/
#pragma interrupt_handler timer0_comp_isr:20
void&timer0_comp_isr(void)
&&&&//compare occured TCNT0=OCR0
#pragma interrupt_handler timer0_ovf_isr:10
void&timer0_ovf_isr(void)
&&&&TCNT0 = 0x71;&//reload counter value
//call this routine to initialize all peripherals
void&init_devices(void)
&&&&//stop errant interrupts until set up
&&&&CLI();&//disable all interrupts
&&&&port_init();
&&&&timer0_init();
&&&&MCUCR = 0x00;
&&&&GICR&&= 0x00;
&&&&TIMSK = 0x03;&//timer interrupt sources
&&&&SEI();&//re-enable interrupts
&&&&//all peripherals are now initialized
这里将以上程序用到的Time0寄存器如下所示:
T/C0控制寄存器& TCCR0
/FOC0/WGM00/COM01/COM00/WGM01/CS02/CS01/CS00&&& TCCR0
&& 7&&& 6&&&& 5&&&& 4&&&& 3&&&& 2&&& 1&&& 0
Bit 7 & FOC0: 强制输出比较
Bit 6, 3 & WGM01:0: 波形产生模式
Bit 5:4 & COM01:0: 比较匹配输出模式
Bit 2:0 & CS02:0: 时钟选择
MCU 控制寄存器- MCUCR
MCU 控制寄存器包含了电源管理的控制位
SM2/SE/SM1/SM0/ISC11/ISC10/ISC01/ISC00&&& &MCUCR
&7&& 6& 5&& 4&&& 3&&&& 2&&&& 1&&&& 0
Bits 7, 5, 4 & SM2..0: 休眠模式选择位 2、1 和0
SM2 SM1 SM0&&&&&&&& 休眠模式
0&&& 0&& 0&&&&&&&&&&空闲模式
0&&& 0&& 1&&&&&&&&& ADC 噪声抑制模式
0&&& 1& &0&&&&&&&&& 掉电模式
0&&& 1&& 1&&&&&&&&& 省电模式
1&&& 0& &0&&&&&&&&& 保留
1&&& 0&&&1&&&&&&&&& 保留
1&& &1&& 0&&&&&&&&&&Standby(1) 模式
1&&& 1&&&1&&&&&&&&& 扩展Standby(1) 模式
Bit 6 & SE: 休眠使能
Bit 3, 2 & ISC11, ISC10: 中断1 触发方式控制
Bit 1, 0 & ISC01, ISC00: 中断0 触发方式控制
通用中断控制寄存器- GICR
& 7&& 6&&& &5&& 4 3 2&&&& 1&&&& 0
INT1 INT0 INT2& & & &&& IVSEL IVCE&&& &GICR
Bit 7 & INT1: 使能外部中断请求 1
Bit 6 & INT0: 使能外部中断请求 0
Bit 5 & INT2: 使能外部中断请求 2
Bit 1 & IVSEL: 中断向量选择
Bit 0 & IVCE: 中断向量修改使能
T/C 中断屏蔽寄存器- TIMSK
& 7&&&& 6&&&& 5&&&&&& 4&&&&& 3&&&& 2&&&& 1&&&& 0
OCIE2 TOIE2 TICIE1 OCIE1A OCIE1B TOIE1 OCIE0 TOIE0&&&&& TIMSK
Bit 1 & OCIE0: T/C0 输出比较匹配中断使能
Bit 0 & TOIE0: T/C0 溢出中断使能
其余的未定义可参考ATMEGA16 datasheet!
上面啰嗦了很多,以后看的时候不用到处去翻datasheet,这里说TCNT0的初始值
&TCNT0 = 0x71;&//set count
&OCR0&&= 0x8F;&&//set compare
如何得到这两个值呢?&&
现假设最大计数值为M,timer0为8位,那M=256。(这是我看51的定时器/计数器的基本结构及工作原理,AVR应该差不多的吧,反正我后来用计算器算了一下,符合就得)
计数器初值X的计算式为:
X=M-比较值(计数值)
定时工作方式的计数初值X等于:
X = M -&比较值&= M - t / T = M - (&&* t) / prescal
为T/C0&最高频率的时钟源,prescal为预分频数。
现在我们知道
&&&&&&&&TCNT0 = 0x71;&// set count&&&&&&十进制的113
&&&&&&&&OCR0&&= 0x8F;&// set compare&&&&&十进制的143
就相当于OCR0是计数值,TCNT0是初始值。TCNT0=113,那么OCR0=M- TCNT0=143。
我们取=7.3728Mhz,prescal=1024,于是,我们利用公式得出比较值=144,和结果的143有点误差。接着呢,我们试着用公式倒推,算t&。
t =(143*1024)/(7.3728*&*&)= 19.86111````ms
刚好和设置那里的actual value误差一样。所以说,以倒推的为准取TCNT0和OCR0值
最后呢,&TCCR0 = 0x05;&//start timer
TCCR0预分频1024,具体可见上图,
应该提醒的是:
8位的定时器timer0根据公式,它最多可以完成35ms的定时任务,1秒的任务它不能完成,所以当想用来定时1秒的时候,只能用16位的定时器了;
且atmega128和atmega16的timer0选择时钟源是不一样的。请千万要注意。现在我们讨论的是atmega16;
还有上边的讨论是在工作模式(waveform mode)选择normal情况下。其他模式初始值和比较值的不一样的,具体你可以选择其他模式看一下它的变化值。
这样就得到了我们想要的TCNT0和OCR0的初始值了!
关键字:&&&&
来源: eefocus
引用地址:
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。
关注eeworld公众号快捷获取更多信息
关注eeworld服务号享受更多官方福利
,这一要求已经超过RS232接口所能提供的传输速率。如果使用CAN总线进行传输,则硬件设备较为复杂。综合比较后,采用PDIUSBD12作为接口芯片进行数据传输是较合适的选择。采用塑料极小封装的PDIUSBD12可以很容易安置在电路板上。而且对上位机的要求也较为宽松,只要有USB接口的计算机都可以作为本系统的上位机。& & 3& ATMAGE128单片机 3.1& ATMAGE128单片机介绍& & ATMAGE128单片机是由ATMEL公司出品的一款高性能低功耗的8位微型控制器,最高时钟频率可以达16MHz。片内集成有容量为128KB的闪存作为程序存储器,4KB的EEPROM
控制母线的可靠供电。&& & 基于ATMAGE16单片机的直流电源屏硅链自动调压装置将硅链、直流接触器、电压自动检测装置等组合而成。该装置根据控母电压,自动驱动接触器,通过接触器的“分”/“合”,调节硅链的“ 投入”与“退出”,改变控制母线电压,使其保持在额定值范围内。该装置也可运行在手动调压状态,强制吸合或断开执行接触器,调节输出电压。& & ATMAGE16是高性能,低功耗的8位AVR微处理器,采用RISC精简指令结构,大多数指令执行时间为单机器周期,在运用在硅链自动调压这种慢速设备上它工作非常从容,它具有8路10位的模数转换器,这是我们所关心的,因为自动调压涉及到两路直流电
;&&&&&& EOC&&& 方向:0&& DRRB=&0x06&
MCU:ATmage128
AD:MAX1168(16bit)
晶振:11.0592M
编写:Jesse Rei
**********************************************************/
#include&lcd.c&
#define uchar unsigned char
#define uint&nbsp
//ICC-AVR application builder :
// Target : M16
// Crystal: 8.0000Mhz
//TIMER1 initialize - prescale:64
// WGM: 10) PWM phz correct, TOP= ICRn
// desired value: 1Hz
// actual value: 1.000Hz (0.0%)
#include &iom16v.h&
#include &macros.h&
#define PWM1A &&PORTD5
基于ATMAGE16单片机的直流电源屏硅链自动调压装置将硅链、直流接触器、电压自动检测装置等组合而成。该装置根据控母电压,自动驱动接触器,通过接触器的&分&/&合&,调节硅链的& 投入&与&退出&,改变控制母线电压,使其保持在额定值范围内。该装置也可运行在手动调压状态,强制吸合或断开执行接触器,调节输出电压。
ATMAGE16是高性能,低功耗的8位AVR微处理器,采用RISC精简指令结构,大多数指令执行时间为单机器周期,在运用在硅链自动调压这种慢速设备上它工作非常从容,它具有8路10位的模数转换器,这是我们所关心的,因为自动调压涉及到两路
/*&名称:C51之定时器&说明: 对于C51单片机来说,其内部有2个定时器,分别是T0和T1。它输入的时钟源是固定的,就是晶振输送的。当然它还可以作为计数器,统计外部输入的脉冲信号。这个实验是定时器中断实验。对于定时器中断,这是属于中断的一种。使用它也需要配置先前所属的相关寄存器。不同的是,关于定时器中断,还需要配置一些其他与定时器相关的寄存器,如定时器方式寄存器(TMOD)、计数器TH、TL等。要注意一点的是,C51单片机的定时器可以工作在中断方式,也可以工作在查询方式。在本实验中,使用定时器0(C51有两个定时器),采用中断方式进行精确时间的显示。*///定时器0中断初始化void
热门资源推荐
最新单片机文章
最新视频课程
何立民专栏
北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。
相关热搜器件PIC单片机定时器初值计算方法及几种周期小结
单片机&嵌入式
单片机应用
嵌入式操作系统
学习工具&教程
学习和开发单片机的必备工具
(有问必答)
(带你轻松入门)
电子元件&电路模块
当前位置: >>
>> 浏览文章
PIC单片机定时器初值计算方法及几种周期小结
PIC定时器也用是蛮多的,据说网上还有计算初值的强力软件,不过我还是手动算下吧。总结了下&&&&
PIC单片机定时器初值计算方法
PIC的指令周期是4个震荡周期,在没有使用分频器的情况下,TMR0 会在每个指令周期信号(等于晶体振荡器产生的主时钟周期的 4 倍)到来时自动加 1。在配置了分频器的情况下,TMR0 会在每次收到由分频器将指令周期信号分频一个固定倍数后产生的信号时自动加 1。如果 TMR0在累加计数的过程中,CPU 执行一条往 TMR0 中写入数据的指令,则累加计数器的加 1 操作将被推迟两个指令周期,重新开始计数。这两个指令周期的偏差在用户编写时间精度要求较高的程序时应引起注意,可以通过在每次写入 TMR0 时给一个调整值的方法来解决。
假设的是时钟频率为 4MHz。因此,一个指令周期就是一个微秒(&s)的时间。
,也就是计数一次时间是1us。
没有分频比定时器的初值计算公式:T0=256-Tc+2
&& 其中TC是想得到的次数。加2的原因是写值的时候要消耗两个指令周期。
如果分频器给了定时器,最好不要再读写TMR0了,不然会照成误差。
假设分频器是16,晶振是4Mhz,一次由00到FF的时间是16*256=4096us。假设50ms的时间
在中断每次加上4096,
主程序检查是不是超过5000,超过了就减掉5000,这样算是50ms就得到了。
再来张图,就更加一目了然了,有木有?哈哈。
晶振8M 需定时25us 分频比1:2
初值(EE)=256 - 25/ (4/8*2) + 14/2& = 256- 25 + 7 = 238
简述时钟周期、机器周期、指令周期的概念及三者之间的关系
时钟周期也称为振荡周期,定义为时钟脉冲的倒数(可以这样来理解,时钟周期就是单片机外接晶振的倒数,例如12M的晶振,它的时间周期就是1/12 us),是计算机中最基本的、最小的时间单位。
在一个时钟周期内,CPU仅完成一个最基本的动作。对于某种单片机,若采用了1MHZ的时钟频率,则时钟周期为1us;若采用4MHZ的时钟频率,则时钟周期为250us。由于时钟脉冲是计算机的基本工作脉冲,它控制着计算机的工作节奏(使计算机的每一步都统一到它的步调上来)。显然,对同一种机型的计算机,时钟频率越高,计算机的工作速度就越快。但是,由于不同的计算机硬件电路和器件的不完全相同,所以其所需要的时钟周频率范围也不一定相同。我们学习的8051单片机的时钟范围是1.2MHz-12MHz。
在8051单片机中把一个时钟周期定义为一个节拍(用P表示),二个节拍定义为一个状态周期(用S表示)。
在计算机中,为了便于管理,常把一条指令的执行过程划分为若干个阶段,每一阶段完成一项工作。例如,取指令、存储器读、存储器写等,这每一项工作称为一个基本操作。完成一个基本操作所需要的时间称为机器周期。一般情况下,一个机器周期由若干个S周期(状态周期)组成。8051系列单片机的一个机器周期同6个S周期(状态周期)组成。前面已说过一个时钟周期定义为一个节拍(用P表示),二个节拍定义为一个状态周期(用S表示),8051单片机的机器周期由6个状态周期组成,也就是说一个机器周期=6个状态周期=12个时钟周期。
指令周期是执行一条指令所需要的时间,一般由若干个机器周期组成。指令不同,所需的机器周期数也不同。对于一些简单的的单字节指令,在取指令周期中,指令取出到指令寄存器后,立即译码执行,不再需要其它的机器周期。对于一些比较复杂的指令,例如转移指令、乘法指令,则需要两个或者两个以上的机器周期。
通常含一个机器周期的指令称为单周期指令,包含两个机器周期的指令称为双周期指令。
【】【】【】【】
上一篇:下一篇:
CopyRight @
单片机教程网 51hei.com , All Rights Reserved}

我要回帖

更多关于 51单片机定时器初值的计算 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信