PIC16F877A单片机的Timer1是16位的,我们利用此定时器实现一个10ms的定时,在定时中断里我们再判断1s是否到了,到了之后将LED灯状态取反。
#include
#define u8 unsigned char
#define u16 unsigned int
__CONFIG(0xFF32);
#define LED PORTD
char Counter=0;
void timer1_init()
{
T1CKPS0=1; //1:8
T1CKPS1=1;
TMR1CS=0; //定时器模式
TMR1IE=1;
TMR1H=0xfb; //10ms@4MHz
TMR1L=0x1e;
TMR1ON=1;
PEIE=1;
GIE=1;
}
void main(void)
{
TRISD=0x00;
LED=0xff;
timer1_init();
while(1);
}
void interrupt ISR(void)
{
if(TMR1IF)
{
TMR1IF=0;
TMR1H=0xfb;
TMR1L=0x1e;
if(++Counter>100-1)
{
LED=~LED;
Counter=0;
}
}
}
程序还是比较简单的,这里有个需要特别说明就是定时器的初始值是怎么计算的问题:
系统时钟是经过4分配后才给外设的,所以Timer1的时钟就是1Mhz(单片机外接4Mhz晶振),
假设程序里配置为8分频,那么此时Timer1的时钟
是 : 1000000/8=125000Hz
所以要想实现10ms定时,可以这样计算, 10ms就是1s的百分之一,定时器1的百分之一时间内计数值就是1250,
由于定时器是从65535变成0的时候才会产生中断,所以我们要让初始值变成65536-1250=64286=0xFB1E
如果你觉得我说的很啰嗦那就直接看公式吧:
关键字:PIC16F877A 定时器1
引用地址:
PIC16F877A定时器1实验
推荐阅读最新更新时间:2024-03-16 16:23
PIC16F877A 点亮LED
知识重点: PORTA,PORTB,PORTC,PORTD,PORTE复位后为输入状态 PORTA.4为开漏输出 TRISx 为方向寄存器为0时表示输出,为1时表示输入 PORTx为IO端口 PORTA口,默认不是数字IO口,而是模拟IO口。如果我们 要把PORTA口当做数字IO口则要设置ADCON1 = 0x06; *****************************/ #include pic.h #include ../head/config.h //包含自己的配置头文件 __CONFIG(HS&WDTDIS&LVPDIS&PWRTEN);//对熔丝位进行设置 //HS振荡,禁止看门狗,低压编程关闭,启动延时定时器
[单片机]
关于PIC16F877A PWM计算的问题
第一次看这个图时候觉得有的懵~ 后来看懂也就好多了。 对pwm实验,我们一般只关心频率和占空比的问题,下来我来讲解下这个图: 首先假设单片机外接4MHz晶振; PWM波的周期是由PR2寄存器来决定的,占空比是由CCPR1L+2位组成一个10位分辨率; 而周期却是8位分辨率,分子大于分母,那这PWM还能正常工作吗? 我相信很多人一开始可能跟我一样,有这样的疑惑! 我们看下官方数据手册上面是如何计算周期的: PWM周期=(PR2+1)*4*Tosc*TMR2分频数 这个公式里有2个地方需要注意: ① Tosc是4MHz,而不是1MHz ② 乘以4这个就是CCPR1L 2(右移2位)的意思 假
[单片机]
单片机学习之十四:定时器应用(模式1)
一、 实验现象: 开机后程序作如下的灯光变换:第一次led0、led2亮;第二次led1、led3亮;第三次led4、led6亮;第四次led5、led7亮;第五次led0、led2、led4、led6亮;第六次led1、led3、led5、led7亮;第七次8个二极管全亮;第八次8个二极管全灭。然后重头开始循环。每次状态转换间隔时间是50ms。 二、 实验目的 掌握内部定时/计数器的作定时功能(模式1)的应用 三、 实验任务分析: 看到这个实验题目,大家可能会说,这个试验难度不大,我们只要把这几种灯光对应的输出存到一个表里面,然后查表就可以啦,灯光转换之间调用50ms的延时程序即可。 这样的思路当然可以,但是,如果这样
[单片机]
STM8S定时器概述及TIM1配置
20200831Add:TIM2,TIM3 configuration program. 其中:f CK_CNT为定时器计数频率;f CK_PSC为系统的时钟频率;PSCR 为预分频值。 Codes of configuration:
[单片机]
基本I/O口操作
//单片机I/O口的使用 //★★★★★★★★★单片机I/O口的使用★★★★★★★★★★★\\ //单片机型号:PIC16F877A //功能描述:让RC0口灯闪烁 #include pic.h //包含单片机内部资源预定义 __CONFIG(0XF73A); //芯片配置字 void delay(); //delay函数申明 //=============================================================================== //函数功能:主函数 //函数名称:void main() void main() /
[单片机]
基于PIC单片机的HT1621液晶显示控制器
0 引 言 HT1621液晶显示控制器是多功能全自动智能开关的显示部件,能实时、准确、在线监控供电线路的运行情况。一旦线路出现漏电、过载、短路、过压、欠压和缺相时,智能安全用电开关能立刻启动保护程序,并显示在HT1621液晶显示控制器上。在智能化楼宇、中高档家庭住宅、电力系统、工矿企业、国家重点消防单位以及石油化工、文教卫生、金融、电信等领域。基于单片机的HT1621液晶显示控制器应用广泛,其原理框图如图1所示。 美国MICROCHIP公司的PIC系列单片机主要有以下特点:(1)哈佛总线结构;(2)指令单字节化;(3)精简指令集;(4)寻址方式简单;(5)代码压缩率高;(6)运行速度高;(7)功耗低;(8)驱动
[单片机]
PIC16F877A单片机 (外部中断与定时器Timer0的综合使用)
1 实现原理 见前面的定时器0和外部中断的内容 2 实现电路图 3 源代码 /*----------------函数功能: 定时器0+外部中断的运用 功能1:LED0灯一直闪烁; 功能2:没有按键按下时,LED1灯灭。有按键按下时,LED1灯亮。 --------------------------*/ #include pic.h // 调用PIC16f87XA单片机的头文件 //#include delay.h //调用延时子函数 __CONFIG(0xFF32);//芯片配置字,看门狗关,上电延时开,掉电检测关,低压编程关 //__CONFIG(HS&WDTDIS&LVPDIS);
[单片机]
基于AT89S52与PIC16F877A的在线编程控制系统的设计
l 引 言 通常进行单片机的实验或开发时,传统的并行编程方法中,编程器是必不可少的。仿真、调试完的程序需要借助编程器烧到单片机内部或外接的程序存储器中。在开发过程中,程序每改动一次就要拔下电路板上的芯片,编程后再插上。随着计算机技术的发展,许多公司推出了带有片内FLASH存储器的MCU,FLASH存储器具有电可擦除、无需后备电源保护数据、可在线编程等特点。在线编程目前有两种实现方法:在线系统编程(ISP)和在线应用编程(IAP)。ISP一般是通过单片机专用的串行编程接口对单片机内部的FLASH存储器进行编程,例如AT-MEL公司的单片机AT89S52就提供了一个SPI串行接口对内部程序存储器编程(ISP)。 在线编程(ISP)
[应用]