1.PIC单片机的概述
PIC16F616是一款14引脚、8位的CMOS单片机.采用精简指令集,仅有35条指令,由于采用了数据
和指令总线分离的哈佛总线结构,使得除少量指令不是单周期之外,大部分的指令都是单周期指令.这样有利于
提高单片机的运行速度和执行效率.
PIC16F616这款单片机供电电压可以在2V到5.5V之间,内部集成了一个RC振荡器,频率可以配置成
8MHZ或者4MHZ,也可以用外部晶振提供时钟.内部集成有AD转换、比较器等硬件模块,还具有上电复位
压复位、看门狗、代码保护等功能.三个定时器、PWM发生器等可以由用户编程.下面我来一一介绍关于
单片机的这些模块和功能.
2.存储器
PIC16F616分为程序存储其和数据存储器,程序存储器的大小是2048words,数据存储器的大小是128b
ytes.
程序存储器中0000H的地址为复位地址,当上电或者看门狗计时器等复位的时候,均会导致PC指
向复位地址.地址0004H为中断地址,当无论发生什么中断的时候,PC指针就会指向此地址.在地址0005H~07
FFH可以移植程序.
数据存储器分为两个部分,分别叫做bank0和bank1,其中bank0的地址范围为:00H-7FH,Bank1
地址范围为80H-FFH.一般的寄存器都放在里面.可以通过寄存器STATUSL里面的RP0位来选择bank0和
nk1.
在编程序的时候要注意的是,当你要操作的寄存器在bank0的时候,先要选择bank0(将寄存器STATUS
的RP0位置0),然后再对你所要操作的寄存器进行操作,当你要操作的寄存器在bank1的时候,同理先要选择
ank1.
如果想要定义一些变量,可以在数据存储器20H开始的地址定义,定义的地址范围为20H-7FH.一般
多就够用了.
3.PIC的输入输出端口
在学习这个部分的时候,曾经遇到过一些问题.PIC单片机的引脚不多,大多都是复用引脚,例如AD、
比较器、外接晶振等等,所以在配置端口的时候,一定要知道每个功能怎样设置才能实现的,在这一小节中
讲的是通用IO口的设置问题.
PIC16F616有12个IO口,但是有一个引脚(RA3)只能作为输入引脚用,不能用作输出,另外
具有电平变化中断的功能,而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
AIF位被置1),且总中断GIE被置为0.在中断服务程序中,要软件清除RAIF位和重新置GIE位才能继续开启
中断.
RA2/INT脚的沿中断设置:同样首先要将相应引脚设置为数字端口且为输入状态,设置INTCON的INTF
位为1,表示允许int引脚外部中断,寄存器OPTION_REG的INTEGD位可以设置是上升沿中断还是下降沿中
断.当发生中断时,INTCON的INTF位被置为1,GIE被清零,在中断服务程序中,要软件清除INTF位和重新置
E位才能继续开启此中断.
对于C口,不能产生电平变化中断和沿中断.
4.定时器
定时器是单片机的一个很重要的部分,用它可以产生很多不同的定时时间,来满足程序设计的不同需求
C16F616有三个定时器,分别是Timer0、Timer1、Timer2.它们的用法不是很相同,下面来分别谈谈这
定时器的用法和设置问题.
(1)Timer0
Timer0是一个八位的计数器,它有一个八位的计数寄存器TMR0,八位的预分频器(与看门狗共用),
选择内部或者是外部时钟源,有计数器溢出中断的功能.
Timer0可以作为一个定时器或者计数器来使用,与Timer0有关的寄存器有:TMR0,INTCON,OPTI
ON_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的时候会产生溢出,同时溢出标志位(INTCO
N寄存器的T0IF位)会置位(无论Timer0的中断是否开启),如果中断已经开启了(INTCON寄存器的T0IE
打赏帖 | |
---|---|
嵌入式LinuxC语言程序调试和宏使用技巧被打赏50分 | |
让代码中包含最新的编译时间信息被打赏50分 | |
rtthread硬件加密--2crc加密分析被打赏10分 | |
【分享开发笔记,赚取电动螺丝刀】mcxa156使用低功耗定时器适配硬件RTC框架被打赏26分 | |
【STM32F769】AI之与本地deepseek对接被打赏50分 | |
Buck电路工作在CCM模式下电感电流的计算公式是什么?被打赏5分 | |
buck电路工作原理被打赏5分 | |
基于MSPM0L1306的MODBUS-RTU协议通讯实验被打赏100分 | |
我想要一部加热台+多合一调试工具被打赏18分 | |
每周了解几个硬件知识+485硬件知识分享被打赏10分 |