PIC16F877A单片机 (中断与定时器Timer2)

  • 1 基本原理
  • 2 实现代码

1 基本原理


2 实现代码

主要根据定时器2的逻辑框图和中断的逻辑框图来编写代码,这样代码的可读性强,也便于理解。但有些寄存器在框图中可能没有说明,所以也需要仔细阅读定时器0的官方文档,即基本原理部分。


/*----------------函数功能:中断 定时器2
--------------------------*/#include<pic.h>// 调用PIC16f87XA单片机的头文件
//#include"delay.h"//调用延时子函数__CONFIG(0xFF32);//芯片配置字,看门狗关,上电延时开,掉电检测关,低压编程关
//__CONFIG(HS&WDTDIS&LVPDIS);/*-----------宏定义--------------*/
#define  uint  unsigned int
#define  uchar unsigned char
#define  V0     RD0uint i;/*-----------子函数声明--------------*//*-----------主函数--------------*/
void main()
{// The corresponding data direction register is TRISA. // Setting  a TRISA bit (= 1) will make the corresponding PORTA pi an input. // Clearing a TRISA bit (= 0) will make the corresponding PORTA pin an output.TRISD=0xfe;               // 设置数据方向 RD7-RD1为输入,RD0为输出// 1 = Port pin is > VIH,即高电平  ;  0 = Port pin is < VIL,即低电平PORTD=0x00;                // 端口赋初值/********定时器TMR1初始化**********/// 只有一个时钟,所以不用时钟选择//TMR2CS=0;             // TMR1时钟源选择内部指令周期(fosc/4)// Timer2 is an 8-bit timer with a prescaler and a postscaler//预分频器 The input clock (FOSC/4) has a prescale option of 1:1,  1:4  or  1:16T2CKPS1=1;T2CKPS0=1;//预分频 1:16,对应的编码为1X  1x = Prescaler is 16// The match output of TMR2 goes through a 4-bit postscaler // (which gives a 1:1 to 1:16 scaling inclusive)to generate a TMR2 interrupt//后分频器 Timer2 Output Postscale Select bitsTOUTPS3=0;TOUTPS2=0;TOUTPS1=0;TOUTPS0=0;//后分频 1:1,对应的编码为0000// Timer2 can be shut-off by clearing control bit, TMR2ON// TMR2ON: Timer2 On bit.  1 = Timer2 is on.  0 = Timer2 is offTMR2ON=1;               // 打开计数定时器TMR2,状态为ON// Timer2 is an 8-bit timer//8位计数寄存器给初值,在这里没有考虑中断所造成的时钟延迟13个指令周期TMR2=256-250+13;       // 定时250us*16(预分频,1:16)*1(后分频,1:1)=4000us. 13怎么来的,见Timer0// The Timer2 module has an 8-bit period register, PR2.// Timer2 increments from 00h until it matches PR2 and then resets to 00h on the next increment cycle.// PR2 is a readable and writable register. The PR2 register is initialized to FFh upon ResetPR2=0xff;                // 比较器的初值// The TMR2 interrupt, if enabled,is generated on overflow // which is latched in interrupt flag bit, TMR2IF   TMR2IF=0;              // 溢出中断标志位清零// This interrupt can be enabled/disabled by setting/clearing TMR2 interrupt enable bit, TMR2IE TMR2IE=1;              //溢出中断标志允许位置一PEIE=1;                   //外设中断允许位置一//*********开全局中断设置//定时器T0设置了中断允许,此处要开全局中断GIE=1;                  // 总中断允许while(1)                // 死循环,单片机初始化后,就一直运行这个死循环{}}/*************中断服务程序***************/
void interrupt ISR(void)    // PIC单片机的所有中断都是这样一个入口
{// TMR2IF标志位为在计数寄存器由全1变为全0的时候,自动得到TMR2IF=1.if(TMR2IF==1)         // 需要进一步判断是否为定时器1的溢出中断标志位    {//定时器中断后,要重置初值,以备下次中断TMR2=256-250+13; //溢出中断标志位清零     如果TMR2IF出现上升沿,则产生中断,所以中断发生之后要清零。TMR2IF=0;            // 执行中断处理程序,执行中断产生时想要执行的功能if(++i>125)           //4ms中断1次,125次中断就是5000ms{    i=0;V0=!V0;           // 取反  实现一秒的闪烁}}
}

为什么有下面两行语句,这是由中断决定的,如下图所示。

 PEIE=1;                    //外设中断允许位置一GIE=1;                  //总中断允许

PIC16F877A单片机 (中断与定时器Timer2)相关推荐

  1. C51单片机——中断与定时器

    中断是大多数CPU最精彩的部分之一,下面我们通过讲解和编程练习学习中断和定时器相关概念 目录 1.1.什么是中断 1.2.中断的种类 1.3中断的相关概念 1.4. 51单片机可用中断及相关引脚 1. ...

  2. 51单片机中断与定时器计数器,基于普中科技HC6800-ESV2.0

    目录 寄存器 置位复位 中断系统 中断概念 中断系统 中断系统构造 外部中断 计时器.定时器中段 串口中断 中断允许控制(控制中断方式) 总中断 各个中断 中断请求标志(控制触发方式) 外部中断触发方 ...

  3. 51单片机中断与定时器计数器,基于普中科技教学视频学习记录

    目录 寄存器 置位复位 中断系统 中断概念 中断系统 中断系统构造 外部中断 计时器.定时器中段 串口中断 中断允许控制(控制中断方式) 总中断 各个中断 中断请求标志(控制触发方式) 外部中断触发方 ...

  4. STC51单片机中断与定时器配置参考

    *外中断INT0--------void intsvr0(void) interrupt 0 using 1 *定时/计数器T0-----void timer0(void) interrupt 1 u ...

  5. PIC16F877A单片机 (中断与定时器Timer1)

    PIC16F877A单片机 (中断与定时器Timer1) 1 基本原理 2 实现代码 1 基本原理 上图中,如果RC0左边外接了外部的晶振,那么T1OSCEN必须置一.这个外部的晶振频率一般都比较低. ...

  6. PIC16F877A单片机 (外部中断)

    PIC16F877A单片机 (外部中断) 1 基本原理 2 实现代码 1 基本原理 2 实现代码 /*----------------函数功能:外部中断RB0/INT按下按键(即产生一个中断),此时L ...

  7. 串口中断和定时器中断_启士 | 蓝桥杯单片机教程12 中断与定时器 (上)

    这是 北航士谔书院 的第 949 篇推送 本文介绍中断(interrupt)的基本概念,并演示定时器中断.外部中断的使用方法.如果同学们对文章内容有疑问,或发现文中有任何不妥之处,请点击"阅 ...

  8. 单片机之魂——定时器、中断

    文章目录 一.中断是什么 (1)中断 (2)中断优先级 二.中断的使用 1.外部中断 (2)定时器中断 一.定时器中断使用 二.TMOD与TCON 2.中断服务程序写法 总结 一.中断是什么 中断的控 ...

  9. 串口中断和定时器中断_51单片机中断机制(定时器/计数器)

    单片机中断简介 52单片机一共有6个中断源,它们的符号,名称以及各产生的条件分别如下: INT0 - 外部中断0,由P3.2端口线引入,低电平或下降沿引起 INT1 - 外部中断1,由P3.3端口线引 ...

最新文章

  1. Struts2中action获取request、response、session的方式
  2. WebService using Spring throwed org.xml.sax.SAXException: Bad envelope tag: htm
  3. aac蓝牙编解码协议_蓝牙音频编码哪个音质好?今天我们来逐一解读
  4. 多线程中使用UNITY变量导致线程执行断掉却又不报错的问题
  5. mariadb集群初次启动方法
  6. 解决SQL单用户模式不能转为多用户模式
  7. 【手把手带你入门深度学习之150行代码的汉字识别系统】学习笔记 ·001 用OpenCV制作数据集
  8. Vitamix和Blendtec破壁料理机哪个更高端?
  9. matlab示例程序,matlab示例程序
  10. Eplan教程——项目检查错误 005013/005014:连接点类型不同
  11. PPT的默认设置以及快捷键的使用(超级实用的PPT操作)
  12. kirin710f是什么处理器_麒麟710F处理器怎么样
  13. 个人信用报告内容组成和解读(七) ---本人声明、异议标注、查询等
  14. 如何实现有多少人购买了此商品
  15. USB扫码枪二维码读取(二)——MFC篇
  16. 2021年JavaScript最新手机号码、电话号码正则表达式
  17. Python二级考试试题汇总(史上最全)
  18. BeanCopy 常用工具类
  19. 【SpringMVC】SpringMVC模型数据+视图解析器
  20. DVB Project 浅谈

热门文章

  1. Bitwise Operation
  2. 对ABAP程序调优的学习(一)select 改 read table
  3. 工程师文化:BAT为什么不喊老板?
  4. idea报错 Result Maps collection does not contain value for com.
  5. 【心电信号】基于matlab心率检测【含Matlab源码 1993期】
  6. 瑞典皇家理工学院计算机学什么,瑞典皇家理工大学学科设置是怎样的?
  7. 兰州理工大学计算机科学全国排名,兰州理工大学好吗,全国排名多少?
  8. 恢复rm -rf 的数据
  9. 入手评测AMD锐龙r7 6800u和酷睿i7 1260p选哪个 r76800u和i71260p对比
  10. Git--Git基本使用