PIC16F84单片机内部硬件资源一

2019-10-12来源: eefocus关键字:PIC16F84  单片机  内部硬件资源

    上期笔者介绍的PIC16F84单片机点亮一只发光二极管的源程序实例是为了说明PIC单片机16F84具体应用时的基本格式。


  现在我们已经知道要单片机工作,就需用汇编语言编制程序。而对某个PIC单片机编程时,还需对选用的PIC单片机内部硬件资源有所了解。这里介绍PIC16F84单片机的内部结构,如图1所示的框图。由图1看出,其基本组成可分为四个主要部分,即运算器ALU和工作寄存器W;程序存储器;数据存储器和输入/输出(I/O)口;堆栈存储器和定时器等。现分别介绍如下。


  1运算器ALU及工作寄存器W
  运算器ALU是一个通用算术、逻辑运算单元,用它可以对工作寄存器W和任何通用寄存器中的两个数进行算术(如加、减、乘、除等)和逻辑运算(如与、或、异或等)。16F84是八位单片机,ALU的字长是八位。在有两个操作数的指令中,典型的情况是一个操作数在工作寄存器W中,而另一个操作数是在通用寄存器中,或者是一个立即数。在只有一个操作数的情况下,该数要么是在工作寄存器W中,要么是在通用寄存器中。W寄存器是一个专用于ALU操作的寄存器,它是不可寻址的。


  根据所执行的指令,ALU还可能会影响框图中状态寄存器STATUS的进位标志C、全零标志Z等。


  2程序存储器
  单片机内存放程序指令的存储器称为程序存储器。PIC16F84的所有指令字长为14位。所以程序存储器的各存储单元是14位宽。一个存储单元存放一条指令。16F84的程序存贮器有1024(28)个存储单元(存储容量为1k)。这些程序存储器都是由FPEROM构成的。


  程序存储器是由程序计数器PC寻址的。16F84的程序计数器为13位宽,可寻址8K(8×1024)的程序存储器空间,但16F84实际上只使用了1k的空间(单元地址为0~3FFH)。当访问超过这些地址空间的存储单元时,将导致循环回到有效的存储空间。


  对于用过其它单片机的用户,可能会感到16F84的片内存储器容量太少了。实际上并非如此,因为16F84的指令系统都是由单字指令构成的,相应于其它由二字节、三字节甚至四字节指令的单片机而言,PIC单片机的程序存储器有效容量要比标称值扩大25倍到3倍。


  知识竞赛试题:
  15简述PIC系列单片机助记符指令中操作数f、d、b、k取值的可能范围,并简要说明其依据。
  16指出PIC16F84单片机框图(上文图1)中寄存器的类型和不能访问的寄存器名称?


关键字:PIC16F84  单片机  内部硬件资源 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic476942.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:PIC8位单片机引脚符号的功能
下一篇:PIC8位单片机源程序的组成

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

PIC16F676单片机内部EEPROM的程序
BSF    STATUS,RP0         CLRF    EEADR        ;地址0    MOVLW    .9    MOVWF    EEDAT     
发表于 2019-10-17
PIC16F877单片机运算子程序
1  PIC16F877汇编语言程序主体框架以下是一个典型的程序结构:;***************程序说明区*******************    LIST    p=16f877    ;指定微控制器型号和文件输出格式    INCLUDE    p16f877.inc    ;读入MPLAB提供的定义文件P16F877.INC;***片内RAM常用资源、变量定义和相应的说明*********    ACCALO    EQU 
发表于 2019-10-17
PIC16F877的应用--AD转换器
PIC16F877单片机片内有8路10位A/D转换器,引脚②~⑤为AN0~AN3、⑦~⑩为AN4~AN7。MPLAB-ICD的实验板上16F877单片机的RA0口接了一只供有电压的10kΩ电位器,在D口(RD0~RD7)接了8只LED,如附图所示。笔者用16F877 A/D转换通道其中一路作A/D转换,以说明A/D转换编写程序的方法和在线调试及编程。在附图中,笔者把R6的可变输出(电压模拟量)端接到RA0/AN0作为模拟量输入;用D口(RD0~RD7)的8只LED显示A/D转换的结果(按二进制显示)。一、 建立A/D转换源程序的要点  编写10位的一路A/D转换程序看似简单,但对初学者却有
发表于 2019-10-15
PIC16F877的应用--AD转换器
PIC16F877A定时器1实验
PIC16F877A单片机的Timer1是16位的,我们利用此定时器实现一个10ms的定时,在定时中断里我们再判断1s是否到了,到了之后将LED灯状态取反。#include <htc.h> #define u8 unsigned char#define u16 unsigned int __CONFIG(0xFF32); #define LED PORTD char Counter=0; void timer1_init(){ T1CKPS0=1; //1:8 T1CKPS1=1; TMR1CS=0; //定时器模式 TMR1IE=1; TMR1H=0xfb
发表于 2019-01-31
PIC16F877A定时器1实验
关于PIC16F877A PWM计算的问题
相关寄存器的值?首先计算10kHz周期也就是100us100=(PR2+1)*4*0.25*1(分频数)则PR2=99CCPR1L:X:Y=90*4*0.25*1可以取X:Y=0:0(等式两边同时右移2位)则CCPR1L=90到这里我还没有回答为什么分子比分母大?其实分子和分母都是10bit,只不过分母的最低2bit始终是0;而分子的10bit都是可以设置的,这样的好处是可以精确的设计出想要的占空比,比如27%,61%,84%... 本次实验程序如下:#include <htc.h> __CONFIG(0xFF32);  void init_ccp1(void){ TRISC
发表于 2019-01-31
关于PIC16F877A PWM计算的问题
STM32F030F4P6单片机由外部时钟改为内部时钟的步骤
; else  { /* If HSE fails to start-up, the application will have wrong clock          configuration. User can add here some code to deal with this error */  }  } 三.接下来我们想将系统时钟改为内部时钟,修改办法依旧是修改  SetSysClock()这个函数中的配置.首先我们要知道单片机内部的时钟到底是怎样一种
发表于 2019-10-09
STM32F030F4P6单片机由外部时钟改为内部时钟的步骤
小广播
何立民专栏 单片机及嵌入式宝典

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

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