PIC16F616单片机学习经验总结

发布者:真瓷堂最新更新时间:2019-12-23 来源: elecfans关键字:PIC16F616  单片机  经验总结 手机看文章 扫描二维码
随时随地手机看文章

    1.前言

  为了给前一段时间学习PIC16F616型单片机的一个总结和方便大家的交流,我写了这篇关于PIC单片机的学习心得,都是在看了手册和编程调试后用自己的语言组织的,其中有不足或者有疑问的地方希望大家能及时的给予纠正和批评,提出宝贵的意见。


  2.PIC单片机的概述

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


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


  3.存储器

  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.一般这么多就够用了。


  4.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口,不能产生电平变化中断和沿中断。


  5.定时器

  定时器是单片机的一个很重要的部分,用它可以产生很多不同的定时时间,来满足程序设计的不同需求.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具有以下功能:有两个分频器,一个是前分频器,一个是后分频器。分频可以软件进行设置,另外,Timer2的时钟源是指令时间(FOSC/4),Timer2有一个寄存器 PR2,此寄存器的功能是当TMR2增加到PR2的值时,将产生中断,当然,中断必须允许,然后PR2的值会重新变为00H.下面来介绍Timer2的编程:


  Timer2的控制寄存器T2CON作用是设置Timer2的开启关闭和前后分频的分频系数,寄存器T2CON的TOUTPS《3:0》 位设置后分频系数,可以被设置成1:1~1:16;位TMR2ON为1时,Timer2开启,为0时,Timer2关闭;位T2CKPS《1: 0》可以设置前分频系数,可以被设置成1、4、16.


  Timer2的中断可以这样控制,允许Timer2中断位TMR2IE(位于PIE1寄存器内)被置1时,Timer2中断被允许,被置0时, Timer2中断禁止。寄存器INTCON的PEIE位置1,同时总中断位GIE(位于寄存器INTCON中)置为1.通过上面的设置,Timer2就可以产生中断了。当定时器产生中断的时候,会把中断标志T2IF置为1(位于寄存器PIR1中),然后PC指针指向0004H地址。中断标志位T2IF必须软件清除。


  6.AD模块

  PIC16F616有一个十位、八路的AD转换器。其参考电压可以为电源电压VDD,也可以是外部参考电压(VREF引脚),当AD转换完成后可以产生一个中断,此中断可以把单片机从睡眠状态中唤醒。下面来介绍一下关于AD转换的编程方法。


  要使用一个ADC,要做的有一下几件事情:

  (1)设置端口,需要采样模拟信号的端口必须设置为模拟输入状态,如果设置为数字端口,将使转换结果不正确,端口的模拟输入可以由寄存器ANSEL来配置,在讲RA口的时候已经说到了如何配置了。

  (2)通道的选择,有八路外部通道和三路内部通道,可以通过ADCON0寄存器的CHS《3:0》位来设置通道的选择。

  (3)参考电压的选择,参考电压可以是VDD,也可以是外部参考电压,可以通过ADCON0寄存器的VCFG位来设置,当VCFG=0时,参考电压为VDD,当VCFG=1时,参考电压为外部参考电压(来自VREF引脚)

  (4)ADC的转换格式,AD转换后的结果保存在一个寄存器对里面:ADRESH和ADRESL,但是AD转换结果只有十位,设置AD转换格式可以通过设置 ADCON0的ADFM位来选择,当ADFM=1时10位的AD结果的低八位保存在ADRESL内,高两位保存在ADRESH内;当ADFM=0时10位的AD结果的高八位保存在ADRESH内,低两位保存在ADRESL内。

  (5)AD时钟源的选择,寄存器ADCON1专门来设置AD的时钟源,ADCS《2:0》不同组合,可以将AD的时钟源设置为不同的频率,可以为FOSC/2、FOSC/4、FOSC/8、FOSC/16、FOSC/32、FOSC/64和FRC(内部RC)。

  (6)AD中断的配置,要使用AD的中断功能,可以先把AD中断使能,ADIE位设置为1(在寄存器PIE1中),PEIE位置1(在INTCON寄存器中),总中断GIE位置1(INTCON寄存器中)。


  要开始一个AD转换,首先要使能ADC模块,即把寄存器ADCON0的ADON位置1即可,然后将GO/DONE位(ADCON0中)置1就可以启动AD转换了。


  AD转换需要时间,转换1bit需要Tad的时间,Tad与AD转换的时钟源和VDD有关,转换十位就需要11个Tad时间,如果第一个AD转换完成了,要进行第二个AD转换,必须还要等待2*Tad的时间才能开始。一个AD完成了,GO/DONE位会被置为0,如果中断允许的话,就会产生中断,且中断标志位ADIF(寄存器PIR1内)会被置1,在AD中断程序中就可以把AD转换结果读取出来(读ADRESH和ADRESL),需要时把AD中断标志位清零。


  AD中断可以把单片机从睡眠中唤醒,但是要注意,使用这个功能的时候,时钟源必须设置为FRC,否则的话在睡眠的时候就不会产生AD中断了。

关键字:PIC16F616  单片机  经验总结 引用地址:PIC16F616单片机学习经验总结

上一篇:在温度变送器中PIC单片机有什么应用?
下一篇:基于PIC单片机的机械臂制作教程

推荐阅读最新更新时间:2024-11-07 20:03

PlC单片机C语言程序设计(10)
4.C程序pic07.c的SlM软件仿真调试 在《PIC单片机C语言程序设计(8)》和《PIC单片机C语言程序设计(9)》中,我们已对C程序pic07 C进行了编辑和编译,现在需要查看该程序能否达到预期的设计目标,即能否完成pic07.C的0~99秒增量计时LED数码显示功能(脉冲发生器),因此需要调试程序。 调试程序,可以使用MPLABICD2在线调试器、MPLABICE2000硬件仿真器等开发工具。对于初学C语言程序,又没有上述硬件仿真调试器的读者,最好选用MPLAB SIM软件模拟仿真器进行程序的调试。 模拟仿真调试是检查程序是否正确,能否实现预期功能的有效手段。有了它,可以实现程序的“单步运行”、“单步越过”、
[单片机]
PlC<font color='red'>单片机</font>C语言程序设计(10)
飞思卡尔单片机DZ60---SCI(查询发送)
#include hidef.h /* for EnableInterrupts macro */ #include derivative.h /* include peripheral declarations */ #define LED_D1 PTDD_PTDD0 #define LED_D1_DIR PTDDD_PTDDD0 #define LED_ON 0 #define LED_OFF 1 unsigned char SCANF_SEND_STRINGS = HELLO MCU WORLD ; unsigned char *pSendString = SCANF_SEND_STRINGS;
[单片机]
单片机计数器T0作定时技术(记时器设计)
1.实验任务 用AT89S51单片机的定时/计数器T0产生一秒的定时时间,作为秒计数时间,当一秒产生时,秒计数加1,秒计数到60时,自动从0开始。下面我就开始介绍如何制作这款单片机记时器,硬件电路如下图所示 2.电路原理图 iframe id="iframe_0.8386292741633952" src="data:text/html;charset=utf8,%3Cstyle%3Ebody%7Bmargin:0;padding:0%7D%3C/style%3E%3Cimg%20id=%22img%22%20src=%22http://www.51hei.com/UpFiles/Pic/mcu/2007-05/20070516
[单片机]
<font color='red'>单片机</font>计数器T0作定时技术(记时器设计)
(海尔)东软单片机 HR7P153 SOP-16数码管显示程序
HR7P153 SOP-16三个数码管显示,共阴极。 单片机源程序如下: #include hic.h #include math.h #define u8 unsigned char #define u16 unsigned int u16 i,a=0; u8 const SEG7 ={0x77,0x06,0xb3,0x97,0xc6,0xd5,0xf5,0x07,0xf7,0xd7}; u8 const ACT ={0xfb,0xf7,0xef,}; /****************/ void Ram_Clr(void) //ram全清 { __asm { CLR IAAL; C
[单片机]
单片机应用系统的硬件电路设计
一、单片机电路 单片机采用ATF89S52 1.时钟电路Xl、C2、C3与单片机内部的反相放大器一起构成时钟振荡电路,采用12MHz晶振,AT89S52的机器周期为12个振荡周期,每个机器周期正好lμs. 2.复位电路Cl、R9构成上电复位电路,S5是手动复位按键。 3.其他AT89S52单片机内部有8k字节FlashROM、256字节RAM,不用外扩程序存储器和数据存储器,因此其EA脚固定接高电平,ALE和:IPSEN脚悬空。 二、电源 由于AT89S52的工作电压为4V~5.5V,而输出驱动的继电器采用9V直流电,故直接采用市售的9V直流稳压电源,再加5V稳压电路组成其电源电路。 三、键盘电路 根据系统要求,需要用按键来完成定
[电源管理]
<font color='red'>单片机</font>应用系统的硬件电路设计
基于单片机的串联锂离子电池组监测系统设计
介绍一个以51系列单片机为主控单元的串联锂离子电池组监测系统。采用差分放大器和模拟开关轮流检测单体电池电压,利用单片机的IO接口和DS18B20实现单总线多点温度检测。系统简单经济,经过试验,能可靠、准确地对串联锂离子电池组进行监测。 具有高电压、高容量、循环寿命长、安全性能好等优点的锂离子电池,在便携式电子设备、电动汽车、空间技术、国防工业等多方面具有广阔的应用前景。由若干节锂离子电池经串联组成的动力锂离子电池组目前应用最为广泛。由于每节单体电池的电压不一致,使用中电池不允许过充电、过放电,电池的性能和寿命受温度影响较大等特点,必须对串联锂离子电池组进行监测,确保在使用中锂离子电池具有良好的状态,或者使用中电池出现问题立即报
[电源管理]
基于<font color='red'>单片机</font>的串联锂离子电池组监测系统设计
基于MCS-51单片机的新型门禁控制器设计
随着我国现代化、城市化步伐加快,以及新技术新材料的不断出现,防盗门作为一种新型建筑材料和结构形式,走进了千家万户。然而现有的防盗门仍就依靠 传统钥匙打开门锁来实现开门这一动作,不仅开门繁琐,无报警功能,而且门锁最核心也最脆弱的位置是锁芯,利用机械钥匙的门锁,锁芯的位置就会一目了然,这 将会给不法分子带来可乘之机。 本项目实施的目的在于,在单片机的控制下,通过RF卡或语音识别或向GSM模块发送短信,来实现非陌生人开门这一动作,通过对讲机模块来实现门内主 人与门外到访人员的交流,并可一键开门,从而打破了只依靠钥匙开门这一固定模式,在安全方面,由于本门禁系统的 钥匙 与门锁之间是通过电信号进行通信 的,因此可将其隔离开,在外面无法确知锁的
[单片机]
基于MCS-51<font color='red'>单片机</font>的新型门禁控制器设计
基于89S52单片机的三相桥式可控触发电路的设计
1 引言 晶闸管作为一种半控性功率半导体器件,其基本功能是对电压进行整流、调压和斩波等进行控制,以满足实际需求。目前,晶闸管整流器装置已在工农业生产中得到了广泛的应用,特别是在直流调速系统中。触发电路是晶闸管电力变流技术的一种核心技术,触发电路应具有可靠性高,对称性好等要求。以分立元件及专用集成电路为主的触发电路,其性能不尽如人意,其具有电路复杂、易受电网电压影响、触发脉冲对称度不好等缺点。由单片机组成的控制,其触发电路具有性能良好、触发电路结构简单、控制灵活、温漂影响小、控制精度高、移相范围可任意调节等特点; 因其移相触发角通过软件计算完成,由于软件的可编程性,使微机数字触发器的调速范围更加灵活,能满足更多方面的需要。另外,本
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved