ioca0中断 pic单片机_关于PIC单片机的模块和功能总结

PIC 单片机的概述

PIC16F616 是一款 14 引脚、8 位的 CMOS 单片机。采用精简指令集,仅有 35 条指令,由于采用了数据总线和指令总线分离的哈佛总线结构,使得除少量指令不是单周期之外,大部分的指令都是单周期指令。这样有利于提高单片机的运行速度和执行效率。

PIC16F616 这款单片机供电电压可以在 2V 到 5。5V 之间,内部集成了一个 RC 振荡器,频率可以配置成 8MHZ 或者 4MHZ,也可以用外部晶振提供时钟。内部集成有 AD 转换、比较器等硬件模块,还具有上电复位、欠压复位、看门狗、代码保护等功能。三个定时器、PWM 发生器等可以由用户编程。下面我来一一介绍关于 PIC 单片机的这些模块和功能。

存储器

PIC16F616 分为程序存储其和数据存储器,程序存储器的大小是 2048words,数据存储器的大小是 128bytes。

程序存储器中 0000H 的地址为复位地址,当上电或者看门狗计时器等复位的时候,均会导致 PC 指针指向复位地址。地址 0004H 为中断地址,当无论发生什么中断的时候,PC 指针就会指向此地址。在地址 0005H~07FFH 可以移植程序。

数据存储器分为两个部分,分别叫做 bank0 和 bank1,其中 bank0 的地址范围为:00H-7FH,Bank1 的地址范围为 80H-FFH。一般的寄存器都放在里面。可以通过寄存器 STATUSL 里面的 RP0 位来选择 bank0 和 bank1。

在编程序的时候要注意的是,当你要操作的寄存器在 bank0 的时候,先要选择 bank0(将寄存器 STATUS 的 RP0 位置 0),然后再对你所要操作的寄存器进行操作,当你要操作的寄存器在 bank1 的时候,同理先要选择 bank1。

如果想要定义一些变量,可以在数据存储器 20H 开始的地址定义,定义的地址范围为 20H-7FH。一般这么多就够用了。

PIC 的输入输出端口

在学习这个部分的时候,曾经遇到过一些问题。PIC 单片机的引脚不多,大多都是复用引脚,例如 AD、IO、比较器、外接晶振等等,所以在配置端口的时候,一定要知道每个功能怎样设置才能实现的,在这一小节中,我要讲的是通用 IO 口的设置问题。

PIC16F616 有 12 个 IO 口,但是有一个引脚(RA3)只能作为输入引脚用,不能用作输出,另外,A 口具有电平变化中断的功能,而 C 口没有,在设计的时候要注意。

在设置的时候,一般要进行以下几项设置:

(1)设置端口是模拟端口还是数字端口,可以通过寄存器 ANSEL 来设置。例如你想用 AD,就要将相应的引脚设置为模拟输入端口。

(2)如果你选择的是数字端口,接下来就要设置端口的方向,是输入还是输出(RA3 除外),可通过寄存器 TRISA(A 口)或 TRISC(C 口)来设置。

(3)设置端口的输出电平,可以通过寄存器 PORTA(A 口)或 PORTC(C 口)来设置。

这是对 IO 口的通用设置,但是这不是全部的设置,接下来的设置要看时 A 口还是 C 口了。对于 A 口,它有几个特殊的功能:内部弱上拉、电平变化中断、RA2/INT 引脚的沿中断。如果想要这些功能,就要对相应的寄存器进行设置。

弱上拉的设置:只有当引脚为输出的时候弱上拉才有效,可以通过寄存器 WPUA 来设置相应引脚的弱上拉,值得一提的如果开启了弱上拉,会有多余的电流浪费,这样对于低功耗的设计是不可取的,但是如果在进行一些例如键盘电路设计的候,可以开启弱上拉功能,这样就不需要在键盘电路中加上拉电阻了。

电平变化中断的设置:可以通过寄存器 IOCA 来设置,但是首先要将相应引脚设置为数字端口且为输入状态。同时要将寄存器 INTCON 的 REIE 位设置为 1,总中断要允许(置寄存器 INTCON 的 GIE 位),如果设置相应引脚有这个功能,当此引脚电平发生的时候,就会产生一个中断,同时一些中断标志位被置上(INTCON 的 RAIF 位被置 1),且总中断 GIE 被置为 0。在中断服务程序中,要软件清除 RAIF 位和重新置 GIE 位才能继续开启此中断。

RA2/INT 脚的沿中断设置:同样首先要将相应引脚设置为数字端口且为输入状态,设置 INTCON 的 INTF 位为 1,表示允许 int 引脚外部中断,寄存器 OPTION_REG 的 INTEGD 位可以设置是上升沿中断还是下降沿中断。当发生中断时,INTCON 的 INTF 位被置为 1,GIE 被清零,在中断服务程序中,要软件清除 INTF 位和重新置 GIE 位才能继续开启此中断。

对于 C 口,不能产生电平变化中断和沿中断。

定时器

定时器是单片机的一个很重要的部分,用它可以产生很多不同的定时时间,来满足程序设计的不同需求。PIC16F616 有三个定时器,分别是 Timer0、Timer1、Timer2。它们的用法不是很相同,下面来分别谈谈这三个定时器的用法和设置问题。

(1)Timer0

Timer0 是一个八位的计数器,它有一个八位的计数寄存器 TMR0,八位的预分频器(与看门狗共用),可以选择内部或者是外部时钟源,有计数器溢出中断的功能。

Timer0 可以作为一个定时器或者计数器来使用,与 Timer0 有关的寄存器有:TMR0,INTCON,OPTION_REG,TRISA。

当 Timer0 作为定时器来使用的时候,要设置 OPTION_REG 的 T0CS 位为 0,表示用的是内部时钟,每一个指令周期 TMR0 的值会增加(当没有预分频的时候),当 TMR0 被赋值的时候,会有两个指令周期的延时。预分频器可以和看门狗共用,可以由 OPTION_REG 的 PSA 位来设置,当 PSA 为 0 的时候分频器选择 Timer0,当 PSA 为 1 的时候分频器选择看门狗。同时,与分频器的分频值可以通过寄存器 OPTION_REG 来设置,设置的值可以由 1:2 到 1:256。当 Timer0 的计数器 TMR0 计数从 FFH 到 00H 的时候会产生溢出,同时溢出标志位(INTCON 寄存器的 T0IF 位)会置位(无论 Timer0 的中断是否开启),如果中断已经开启了(INTCON 寄存器的 T0IE 被置位),那么就会产生溢出中断。T0IF 位需要软件对其进行清零。

当 Timer0 作为计数器来使用的时候,就要用外部时钟源(OPTION_REG 的 T0CS 置 1),每次当引脚 T0CK1 的沿到来时 Timer0 的 TMR0 会增加 1,上升沿和下降沿可以由 OPTION_REG 的 T0SE 来设置。中断和 Timer0 作为定时器使用时一样。在我们编程序的时候,可以用 Timer0 进行定时或产生定时信息,下面我来解释定时器的定时时间的计算。假设 Timer0 用的时钟源是内部的 4MHZ,那么每条指令的执行时间就是 1us,设 Timer0 的预分频系数是 1:256,TMR0 的初值是 6,那么定时时间为:

256×(256-6)×1us=64ms

在编程的时候需要注意的是 Timer0 的中断是不能把单片机从 SLEEP 的状态唤醒的。

(2)Timer1

Timer1 是一个十六位的计数器。它有一个计数寄存器对(TMR1H:TMR1L),时钟源也是内外可选的,具有一个 2bit 的预分频器,可以同步或者异步操作,具有中断功能,但是溢出中断只能在外部时钟、异步的模式才能将单片机从 SLEEP 中唤醒,Timer1 具有捕获 / 比较功能,还有被一些特殊事件触发功能(ECCP),比较器的输出可以与 Timer1 的时钟同步。下面来一一介绍这些功能。

在编程的时候也可以按照这样的步骤来进行。设置寄存器 T1CON,时钟源可以选择外部或者内部的时钟源,外部时钟源可以选择 LP 晶体。Timer1 在选择内部时钟时,可以运行在定时器的状态,选择外部时钟的时候,可以运行在定时器或者是计数器状态,工作于计数器状态时可以选择门限是高电平还是低电平计数。这些都可以通过寄存器 T1CON 来设置。

以下是 T1CON 每个位的具体功能:bit1:Timer1 是否开启位,当此位设为 1 时,Timer1 开启,设为 0 时,Timer1 关闭;bit2:时钟源选择位,置 1 时,选择外部时钟(T1CK1 引脚的上升沿),此位置 0 时,选择的是内部时钟,并且和 T1ACS(寄存器 CM2CON1 中)配合,当 T1ACS 位为 0 时,时钟为 FOSC/4,当 T1ACS 位为 1 时,时钟为 FOSC。bit2:T1SYNC:定时器 1 的外部时钟输入同步位,当 TMR1CS 位为 1、T1SYNC 位为 1,定时器 1 被设置成与外部时钟不同步,T1SYNC 位为 0 时,定时器 1 被设置成与外部时钟同步模式。Bit3:T1OSCEN:此位为 1 时 Timer1 的时钟选择 LP,为 0 时 LP 晶体被关闭。Bit5-4:T1CKPS:Timer1 时钟的预分频系数设置,通过这两位的是指,可以讲 Timer1 设置成 1:1、1:2、1:4、1:8 几种分频值。Bit6:TMR1GE:只有当 TMR1ON 位为 1 时才有效,当此位为 1 时,Timer1 计数被 Timer1 的门限控制,此位为 0 时,Timer1 正常计数。Bit7:T1GINV:此位为 1 时,Timer1 在门限为高时计数,此位为 0 时,Timer1 在门限为低时计数。

Timer1 的中断编程:当 Timer1 的计数产生溢出的时候,如果 Timer1 中断允许的话,就会产生中断。中断可以这样设置,Timer1 的中断允许位 TMR1IE(在 PIE1 寄存器中)置 1,寄存器 INTCON 的 PEIE 位置 1,同时总中断位 GIE(位于寄存器 INTCON 中)要置为 1。当定时器产生中断的时候,会把中断标志 T1IF 置为 1(位于寄存器 PIR1 中),然后 PC 指针指向 0004H 地址。T1IF 位必须软件清除。

(3)Timer2

Timer2 的功能于 Timer1 有些不同,Timer2 时一个八位的计数器,有一个八位的计数寄存器 TMR2,Timer2 具有以下功能:有两个分频器,一个是前分频器,一个是后分

[1] [2] [3]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/486502.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux open 头文件_linux下通过共享内存和mmap实现进程间通讯

前言最近在学习GNU/Linux内核,看到mmap的时候书上说:mmap/munmap接口函数是用户最常用的两个系统调用接口,无论是在用户程序中分配内存、读写大文件、链接动态库文件,还是多进程间共享内存,都可以看到mmap/munmap的身影…

java编程思想第四版第十四章 类型信息习题

fdadfa第三题u package net.mindview.typeinfo.test4;import java.util.ArrayList; import java.util.Arrays; import java.util.List;abstract class Shape {void draw(){/** 重点在这里: * this指代的是实例对象,由于使用连接字符串, 会自动调用对象的toString()方法.*/Syste…

TinyML:下一轮人工智能革命

来源:AI前线作者:Matthew Stewart译者:盖磊策划:陈思人工智能的一个趋势是正快速从“云端”走向“边缘”。TinyML 是在海量的物联网设备端微控制器上实现的人工智能,有望在未来几年内,成为人工智能在工业领…

springboot导入项目依赖报错_最详细的 Spring Boot 多模块开发与排坑指南

来源于公众未读代码 ,作者达西呀创建项目创建一个 SpringBoot 项目非常的简单,简单到这里根本不用再提。你可以在使用 IDEA 新建项目时直接选择 Spring Initlalize 创建一个 Spring Boot 项目,也可以使用 Spring 官方提供的 Spring Boot 项目…

图书管理系统html_结自主可控数字化硕果,同方鼎欣推进基于OFD技术的数字档案管理系统研发...

01浅谈建立自主可控版式格式的重要性说起版式文档,相信大家首先想到的就是Adobe公司推出的PDF,这种格式的电子文档,其效果不因软硬件环境变化而变化,在版面、字体、字号方面可以与纸质文件保持一致,这就是版式文档的重…

联结你与万物的8种元素

本文经授权转载自《原理》微信公众号你不仅由元素构成,你其实就是元素。不同元素的原子在你的身体里,它们随你而动,它们与你一同经历成功的狂喜,一同承受失败的悲痛,也一同走过平淡的日常。当你吃下食物时,…

Spring中的用到的设计模式大全

spring中常用的设计模式达到九种,我们举例说明: 第一种:简单工厂又叫做静态工厂方法(StaticFactory Method)模式,但不属于23种GOF设计模式之一。 简单工厂模式的实质是由一个工厂类根据传入的参数&#xff…

crontab 日志_聊聊老板让我删除日志文件那些事儿

一、背景老板:小白,刚才咱们的机器告警磁盘空间不足了,你去定位一下原因。我:(......空间不足碍我屁事儿)好的,马上定位我:老板,太多N天前的日志文件占用了太多空间。 老板:你感觉你…

欧氏空间内积定义_MP5:内积、外积、面积、Hermite内积、辛内积

我们发现,内积和外积都是和相对夹角相关,而和一对向量的整体刚体变换无关。本讲用一种特别的角度,从勾股定理出发,把两个向量长度构成的矩形面积分解称内积和外积两个部分。两个向量的夹角,在复数上可以表达为一个向量…

【专家观点】刘经南院士:北斗+5G为何能引领新基建?

来源:智能研究院日前,“第四届全球未来出行大会(GFM2020)”在德清召开。本次大会旨在探讨未来的城市、未来的出行、未来的汽车如何为居民提供更加经济、便捷、安全、科技友好的新出行方式。在论坛的演讲中,中国工程院院…

Linux 笔记 - 第九章 Linux 中软件的安装

博客地址:http://www.moonxy.com 一、前言 在 Linux 系统中,应用程序的软件包主要分为两种:1)第一种是二进制的可执行软件包,也就是解开包后就可以直接运行。在 Windows 中几乎所有的软件包都是这种类型,类…

ae中心点重置工具_(精品)AE从小白到大神之路(七)-AE动画—动效常见的设计方法...

动画——动效常见的设计方法一.基础动画:1.通过物体本身的旋转/缩放/位移/不透明度等基本属性来做的一些动效属于最基础的动画效果。二.路径动画:(1)修剪路径动画(前面系列案例——下载提示完成…

css 透明度_如何使用CSS实现精美视频片头制作

借助CSS所提供的动画效果,旋转效果除了能够制作动画及网页页面元素,如按钮之外,还可以使用CSS实现精美的动态片头的制作。本文主要介绍CSS与HTML实现精美的动画片头制作实例。如何使用CSS实现精美片头制作CSS动态片头设计实例本例设计使用烟雾…

重磅盘点:过去8年中深度学习最重要的想法

原文:Deep Learning’s Most Important Ideas[1]作者:Denny Britz(ML 研究员,Google Brain 前成员)译者:REN深度学习是一个瞬息万变的领域,层出不穷的论文和新思路可能会令人不知所措。即使是经…

ActiveMQ 发送和接收消息

一、添加 jar 包 <dependency><groupId>org.apache.activemq</groupId><artifactId>activemq-all</artifactId><version>5.11.2</version> </dependency> 二、消息传递的两种形式 1、点对点&#xff1a;发送的消息只能被一个消…

机器人 蓝buff 钩_机器人要在S赛登场了?Ming韩服练起来了,这是RNG黑科技?

随着S9全球总决赛日程的逼近&#xff0c;各大战队也纷纷结束了休假&#xff0c;投入到了紧张的训练之中。对于这次S9世界赛的版本&#xff0c;应该是上中野的版本&#xff0c;因为不少战士单带型上单得到了巨大加强&#xff0c;而且中路会有一些法师英雄回归&#xff0c;总体来…

java构造器_Java类加载的过程

阅读本文约需要8分钟 大家好&#xff0c;我是你们的导师&#xff0c;经常看我朋友圈的同学应该知道&#xff0c;我每天会在微信上给大家免费提供以下服务&#xff01;1、长期为你提供最优质的学习资源&#xff01;2、给你解决技术问题&#xff01;3、每天在朋友圈里分享优质的技…

再讲卷积的本质及物理意义,解释的真幽默!

来源&#xff1a;电子工程专辑编辑 ∑Gemini分三个部分来理解&#xff1a;1&#xff0e;信号的角度2&#xff0e;数学家的理解&#xff08;外行&#xff09;3&#xff0e;与多项式的关系>>>>卷积这个东东是“信号与系统”中论述系统对输入信号的响应而提出的。因为…

jdbcTemplate小用总结

一、queryForList重写 public List<Map<String, Object>> queryForList(String tablename, Map<String, String> param) {//TODO valid tablename is nullStringBuilder sql new StringBuilder("select sys_id from "); sql.append(tablename);s…

分区助手扩大c盘后自动修复_磁盘分区工具,这个好用;无论调整C盘还是系统迁移...

使用傲梅分区助手安全地对磁盘进行分区安全分区注意事项1.对于重要数据&#xff0c;最好习惯定期备份。 您可以使用免费备份软件- 傲梅轻松备份进行备份。2.当傲梅分区助手正在移动数据时&#xff0c;请不要轻易地结束过程或强制关闭程序。3.在分区过程中&#xff0c;请确保您的…