为了给前一段时间学习PIC16F616型单片机的一个总结和方便大家的交流,我写了这篇关于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的状态唤醒的.

pic16f616单片机C语言编程,PIC16F616型单片机介绍相关推荐

  1. 51单片机c语言编程100,51单片机C语言编程100例.doc

    51单片机C语言编程100例.doc 目 录实例3用单片机控制第一个灯亮3实例4用单片机控制一个灯闪烁认识单片机的工作频率3实例5将 P1口状态分别送入P0.P2.P3口认识I/O口的引脚功能4实例6 ...

  2. 单片机+c语言+运算符,单片机C语言编程常用的运算符介绍

    在单片机C语言编程中,通常用到30个运算符,如表1,其中算术运算符13个,关系运算符6个,逻辑运算符3个,位操作符7个,指针运算符1个. 在C语言中,运算符具有优先级和结合性. 算术运算符优先级规定为 ...

  3. 单片机常用编程c语言单词列表,单片机C语言编程常用的运算符介绍

    在单片机C语言编程中,通常用到30个运算符,如表1,其中算术运算符13个,关系运算符6个,逻辑运算符3个,位操作符7个,指针运算符1个. 在C语言中,运算符具有优先级和结合性. 算术运算符优先级规定为 ...

  4. 单片机c语言编程教学大纲,《单片机C语言编程》教学大纲

    <单片机C语言编程>教学大纲 课程代码:000002336 课程英文名称:Microcontroller C Programming Language 课程总学时:24 讲课:16 实验: ...

  5. pic16f616单片机C语言编程,PIC16F616单片机学习经验总结

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

  6. 杜洋单片机C语言编程组成,8051单片机C语言编程模板

    c语言 本文由fan159147贡献 doc文档可能在WAP端浏览体验不佳.建议您优先选择TXT,或下载源文件到本机查看. <8051 单片机 C 语言编程模板> 杜洋 2009.7 [程 ...

  7. 微控制器编程技术c语言,1.单片机C语言编程技术分析.pptx

    单片机C语言编程;掌握利用C语言进行单片机程序设计的方法掌握单片机的C程序开发工具Keil 的使用方法掌握单片机仿真软件proteus的使用方法了解单片机常用外部接口元件和接口电路了解单片机系统的集成 ...

  8. 按照题目打印菜单c语言,--单片机C语言编程实训

    实 习 报 告 实习地点:201机房 实习时间:2014.12.1--2014.12.6 实习项目:单片机C语言编程实训 指导老师:骆 乐 姓 名: 班 级:电信3121 一. 实习内容 1.计算字符 ...

  9. c语言延空指令,单片机C语言编程空指令产生短延时怎么办.doc

    单片机C语言编程空指令产生短延时怎么办.doc (6页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 7.9 积分 个人收集整理-仅供参考单片机语言编程空 ...

  10. c语言编程过程应注意什么意思,单片机C语言编程应注意的若干问题

    <单片机C语言编程应注意的若干问题>由会员分享,可在线阅读,更多相关<单片机C语言编程应注意的若干问题(4页珍藏版)>请在人人文库网上搜索. 1.单片机C语言编程应注意的若干问 ...

最新文章

  1. session、flask session知识的相关收集
  2. 听说你想去大厂看学姐,带你看看京东软件产品经理岗长啥样?
  3. python并发编程之协程
  4. 利用photoshop制作gif图片
  5. oracle olap报告,10g部署oracle olap组件
  6. 【华为云技术分享】“技术-经济范式”视角下的开源软件演进剖析-part 1
  7. java整段标记_聊聊JAVA GC系列(7) - 标记整理算法
  8. Android APK反编译详解 .
  9. 最简单的基于FFmpeg的libswscale的示例附件:测试图片生成工具
  10. 思科路由视频_HCNA-HNTD(H12-211)中文题库H10.24
  11. JavaCV的摄像头实战之七:推流(带声音)
  12. autocad 职称计算机,2015职称计算机考试《AutoCAD》考点总结(1)
  13. 触动精灵 获取getColor颜色失败
  14. 二进制与base64
  15. u盘作为重要的计算机存储介质,U盘是采用FLASH MEMORY作为存储介质的移动存储设备...
  16. [生存志] 第39节 郑伯克段于鄢
  17. ICP经营许可证与ICP备案有什么区别?
  18. Python学习笔记——eofs.standard的使用
  19. C++之memcpy的用法
  20. Day16-01 P71 面向对象12什么是多态 P72 对象13:instanceof和类型转换 P73 static关键字详解 P74 抽象类 P75 接口的定义与实现 P76N种内部类

热门文章

  1. python从入门到精通——完整教程
  2. 说一下OFO带给我们的启示
  3. 如何在Inceptor中使用日期函数获取与转换时间
  4. 【听说有人想转码】入门----凯撒密码(密文解密,偏移)
  5. Qi v1.2.4协议 之 定频调压方案
  6. python怎么画散点图_用python画xy散点图
  7. adb小天才,小天才调试工具包下载
  8. sap期初导资产代码_SAP S/4固定资产导入期初科目设置
  9. 你想学的都在这里!传智播客java就业班教程
  10. GB/T 4754-2017 国民经济行业分类