1  /  1  页   1 跳转 查看:77

PIC系列单片机简介

PIC系列单片机简介

图片:


一、引言
  据统计,我国的单片机年容量已达1-3亿片,且每年以大约16%的速度增长,但相对于世界市场我国的占有率还不到1%。这说明单片机应用在我国才刚刚起步,有着广阔的前景。培养单片机应用人才,特别是在工程技术人员中普及单片机知识有着重要的现实意义。
  当今单片机厂商琳琅满目,产品性能各异。针对具体情况,我们应选何种型号呢?首先,我们来弄清两个概念:集中指令集(CISC)和精简指令集(RISC)。采用CISC结构的单片机数据线和指令线分时复用,即所谓冯.诺伊曼结构。它的指令丰富,功能较强,但取指令和取数据不能同时进行,速度受限,价格亦高。采用RISC结构的单片机数据线和指令线分离,即所谓哈佛结构。这使得取指令和取数据可同时进行,且由于一般指令线宽于数据线,使其指令较同类CISC单片机指令包含更多的处理信息,执行效率更高,速度亦更快。同时,这种单片机指令多为单字节,程序存储器的空间利用率大大提高,有利于实现超小型化。属于CISC结构的单片机有Intel8051系列、Motorola和M68HC系列、Atmel的AT89系列、台湾Winbond(华邦)W78系列、荷兰Pilips的PCF80C51系列等;属于RISC结构的有Microchip公司的PIC系列、Zilog的Z86系列、Atmel的AT90S系列、韩国三星公司的KS57C系列4位单片机、台湾义隆的EM-78系列等。一般来说,控制关系较简单的小家电,可以采用RISC型单片机;控制关系较复杂的场合,如通讯产品、工业控制系统应采用CISC单片机。不过,RISC单片机的迅速完善,使其佼佼者在控制关系复杂的场合也毫不逊色。
  根据程序存储方式的不同,单片机可分为EPROM、OTP(一次可编程)、QTP(掩膜)三种。我国一开始都采用ROMless型单片机(片内无ROM,需片外配EPROM),对单片机的普及起了很大作用,但这种强调接口的单片机无法广泛应用,甚至走入了误区。如单片机的应用一味强调接口,外接I/O及存储器,便失去了单片机的特色。目前单片机大都将程序存储体置于其内,给应用带来了极大的方便。值得一提的是,以往OTP型单片机的价格是QTP的3倍,而现在已降至1.5-1.2倍,选用OTP型以免订货周期、批量的麻烦是可取的。

二、PIC系列单片机有什么优势?
  自从我95年接触PIC单片机以来,便一直热衷于这种单片机的开发与应用。有不少朋友问我:PIC到底有什么优势?也许你也会有这样的疑问,所以我在这里略谈几点自己的看法。
  1) PIC最大的特点是不搞单纯的功能堆积,而是从实际出发,重视产品的性能与价格比,靠发展多种型号来满足不同层次的应用要求。就实际而言,不同的应用对单片机功能和资源的需求也是不同的。比如,一个摩托车的点火器需要一个I/O较少、RAM及程序存储空间不大、可靠性较高的小型单片机,若采用40脚且功能强大的单片机,投资大不说,使用起来也不方便。PIC系列从低到高有几十个型号,可以满足各种需要。其中,PIC12C508单片机仅有8个引脚,是世界上最小的单片机,如图1所示:
            



图1 PIC12C508单片机外型



该型号有512字节ROM、25字节RAM、一个8位定时器、一根输入线、5根I/O线,市面售价在3-6元人人民币。这样一款单片机在象摩托车点火器这样的应用无疑是非常适合。PIC的高档型号,如PIC16C74(尚不是最高档型号)有40个引脚,其内部资源为ROM共4K、192字节RAM、8路A/D、3个8位定时器、2个CCP模块、三个串行口、1个并行口、11个中断源、33个I/O脚。这样一个型号可以和其它品牌的高档型号媲美。
  2) 精简指令使其执行效率大为提高。PIC系列8位CMOS单片机具有独特的RISC结构,数据总线和指令总线分离的哈佛总线(Harvard)结构,使指令具有单字长的特性,且允许指令码的位数可多于8位的数据位数,这与传统的采用CISC结构的8位单片机相比,可以达到2:1的代码压缩,速度提高4倍。
  3) 产品上市零等待(Zero time to market)。采用PIC的低价OTP型芯片,可使单片机在其应用程序开发完成后立刻使该产品上市。
  4) PIC有优越开发环境。OTP单片机开发系统的实时性是一个重要的指标,象普通51单片机的开发系统大都采用高档型号仿真低档型号,其实时性不尽理想。PIC在推出一款新型号的同时推出相应的仿真芯片,所有的开发系统由专用的仿真芯片支持,实时性非常好。就我个人的经验看,还没有出现过仿真结果与实际运行结果不同的情况。
  5) 其引脚具有防瞬态能力,通过限流电阻可以接至220V交流电源,可直接与继电器控制电路相连,无须光电耦合器隔离,给应用带来极大方便。
  6) 彻底的保密性。PIC以保密熔丝来保护代码,用户在烧入代码后熔断熔丝,别人再也无法读出,除非恢复熔丝。目前,PIC采用熔丝深埋工艺,恢复熔丝的可能性极小。
  7) 自带看门狗定时器,可以用来提高程序运行的可靠性。
  8) 睡眠和低功耗模式。虽然PIC在这方面已不能与新型的TI-MSP430相比,但在大多数应用场合还是能满足需要的。
 

PIC系列单片机简介

PIC系列单片机程序设计基础







1、程序的基本格式
  先介绍二条伪指令:
  EQU ——标号赋值伪指令
  ORG ——地址定义伪指令
  PIC16C5X在RESET后指令计算器PC被置为全“1”,所以PIC16C5X几种型号芯片的复位地址为:
   PIC16C54/55:1FFH
   PIC16C56:3FFH
   PIC16C57/58:7FFH
  一般来说,PIC的源程序并没有要求统一的格式,大家可以根据自己的风格来编写。但这里我们推荐一种清晰明了的格式供参考。
  TITLE This is …… ;程序标题
  ;--------------------------------------
  ;名称定义和变量定义
  ;--------------------------------------
  F0    EQU  0
  RTCC   EQU  1
  PC    EQU  2
  STATUS  EQU  3
  FSR   EQU  4
  RA    EQU  5
  RB    EQU  6
  RC    EQU  7  
       ┋
  PIC16C54 EQU 1FFH ;芯片复位地址
  PIC16C56 EQU 3FFH
  PIC16C57 EQU 7FFH
  ;-----------------------------------------
  ORG PIC16C54 GOTO MAIN   ;在复位地址处转入主程序
  ORG   0          ;在0000H开始存放程序
  ;-----------------------------------------
  ;子程序区
  ;-----------------------------------------
  DELAY MOVLW 255
      ┋
      RETLW 0
  ;------------------------------------------
  ;主程序区
  ;------------------------------------------
  MAIN
      MOVLW B‘00000000’
      TRIS RB       ;RB已由伪指令定义为6,即B口
       ┋
  LOOP
  BSF RB,7 CALL DELAY        
  BCF RB,7 CALL DELAY
        ┋
  GOTO LOOP
  ;-------------------------------------------
       END       ;程序结束
   注:MAIN标号一定要处在0页面内。
  2、程序设计基础
  1) 设置 I/O 口的输入/输出方向
  PIC16C5X的I/O 口皆为双向可编程,即每一根I/O 端线都可分别单独地由程序设置为输入或输出。这个过程由写I/O 控制寄存器TRIS f来实现,写入值为“1”,则为输入;写入值为“0”,则为输出。
  MOVLW 0FH  ;0000 1111(0FH)
  输入 输出
  TRIS 6    ;将W中的0FH写入B口控制器,
             ;B口高4位为输出,低4位为输入。
  MOVLW 0C0H ; 11 000000(0C0H)
              RB4,RB5输出0 RB6,RB7输出1
  2) 检查寄存器是否为零
  如果要判断一个寄存器内容是否为零,很简单,现以寄存器F10为例:
  MOVF 10,1      ;F10→F10,结果影响零标记状态位Z
  BTFSS STATUS,Z    ;F10为零则跳
  GOTO NZ        ;Z=0即F10不为零转入标号NZ处程序
       ┋          ;Z=1即F10=0处理程序
  3) 比较二个寄存器的大小
  要比较二个寄存器的大小,可以将它们做减法运算,然后根据状态位C来判断。注意,相减的结果放入W,则不会影响二寄存器原有的值。
  例如F8和F9二个寄存器要比较大小:
       MOVF 8,0       ;F8→W
       SUBWF 9,0      ;F9—W(F8)→W
       BTFSC STATUS,Z    ;判断F8=F9否
       GOTO F8=F9
       BTFSC STATUS,C    ;C=0则跳
       GOTO F9>F8       ;C=1相减结果为正,F9>F8
       GOTO F9<
F9       ;C=0相减结果为负,F9<F8
         ┋
   4) 循环n次的程序
  如果要使某段程序循环执行n次,可以用一个寄存器作计数器。下例以F10做计数器,使程序循环8次。
       COUNT EQU 10     ;定义F10名称为COUNT(计数器)
          ┋
       MOVLW 8
       MOVWF COUNT LOOP   ;循环体
  LOOP
           ┋
       DECFSZ COUNT,1    ;COUNT减1,结果为零则跳
       GOTO LOOP       ;结果不为零,继续循环
           ┋       ;结果为零,跳出循环
   5)“IF……THEN……”格式的程序
  下面以“IF X=Y THEN GOTO NEXT”格式为例。
       MOVF X,0      ;X→W
       SUBWF Y,0     ;Y—W(X)→W
       BTFSC STATUS,Z   ;X=Y 否
       GOTO NEXT      ;X=Y,跳到NEXT去执行。
          ┋       ;X≠Y
   6)“FOR……NEXT”格式的程序
  “FOR……NEXT”程序使循环在某个范围内进行。下例是“FOR X=0 TO 5”格式的程序。F10放X的初值,F11放X的终值。
  START  EQU  10
  DAEND  EQU  11
           ┋
  MOVLW 0
  MOVWF START     ; 0→START(F10)
  MOVLW 5
  MOVWF DAEND     ;5→DAEND(F11)
   LOOP
           ┋
      INCF START,1     ;START值加1
      MOVF START,0
      SUBWF DAEND,0     ;START=DAEND ?(X=5否)
      BTFSS STATUS,Z
      GOTO LOOP        ;X<5,继续循环
           ┋       ;X=5,结束循环
   7)“DO WHILE……END”格式的程序
  “DO WHILE……END”程序是在符合条件下执行循环。下例是“DO WHILE X=1”格式的程序。F10放X的值。
      X  EQU  10
        ┋
      MOVLW  1
      MOVWF  X     ;1→X(F10),作为初值
   LOOP
        ┋
      MOVLW 1
      SUBWF X,0
      BTFSS STATUS,Z   ;X=1否?
      GOTO LOOP      ;X=1继续循环
        ┋        ;X≠1跳出循环
   8) 查表程序
  查表是程序中经常用到的一种操作。下例是将十进制0~9转换成7段LED数字显示值。若以B口的RB0~RB6来驱动LED的a~g线段,则有如下关系:

     

  设LED为共阳,则0~9数字对应的线段值如下表:

十进数 线段值 十进数 线段值
0 C0H 5 92H
1 C9H 6 82H
2 A4H 7 F8H
3 B0H 8 80H
4 99H 9 90H

  
  PIC的查表程序可以利用子程序带值返回的特点来实现。具体是在主程序中先取表数据地址放入W,接着调用子程序,子程序的第一条指令将W置入PC,则程序跳到数据地址的地方,再由“RETLW”指令将数据放入W返回到主程序。下面程序以F10放表头地址。
  MOVLW  TABLE     ;表头地址→F10  
  MOVWF  10
          ┋
  MOVLW  1        ;1→W,准备取“1”的线段值
  ADDWF  10,1      ;F10+W =“1”的数据地址
  CALL  CONVERT
  MOVWF  6        ;线段值置到B口,点亮LED
          ┋
  CONVERT MOVWF  2        ;W→PC TABLE
  RETLW  0C0H      ;“0”线段值
  RETLW  0F9H      ;“1”线段值
          ┋
  RETLW  90H       ;“9”线段值
   9)“READ……DATA,RESTORE”格式程序
  “READ……DATA”程序是每次读取数据表的一个数据,然后将数据指针加1,准备取下一个数据。下例程序中以F10为数据表起始地址,F11做数据指针。
  POINTER  EQU  11   ;定义F11名称为POINTER
          ┋
  MOVLW   DATA
  MOVWF   10     ;数据表头地址→F10
  CLRF   POINTER   ;数据指针清零
          ┋
  MOVF   POINTER,0  
  ADDWF 10,0      ;W =F10+POINTER
          ┋
      INCF    POINTER,1  ;指针加1
      CALL CONVERT      ;调子程序,取表格数据
          ┋
  CONVERT MOVWF   2    ;数据地址→PC
  DATA  RETLW   20H    ;数据
          ┋
      RETLW 15H      ;数据
  如果要执行“RESTORE”,只要执行一条“CLRF POINTER”即可。
  10) 延时程序
  如果延时时间较短,可以让程序简单地连续执行几条空操作指令“NOP”。如果延时时间长,可以用循环来实现。下例以F10计算,使循环重复执行100次。
      MOVLW D‘100’
      MOVWF 10
  LOOP  DECFSZ 10,1   ;F10—1→F10,结果为零则跳
      GOTO LOOP
       ┋
  延时程序中计算指令执行的时间和即为延时时间。如果使用4MHz振荡,则每个指令周期为1��S。所以单周期指令时间为1��S,双周期指令时间为2��S。在上例的LOOP循环延时时间即为:(1+2)*100+2=302(��S)。在循环中插入空操作指令即可延长延时时间:
  MOVLW  D‘100’
  MOVWF  10
  LOOP   NOP
       NOP
       NOP
  DECFSZ 10,1
  GOTO LOOP
        ┋
  延时时间=(1+1+1+1+2)*100+2=602(��S)。
  用几个循环嵌套的方式可以大大延长延时时间。下例用2个循环来做延时:
  MOVLW   D‘100’
  MOVWF   10
  LOOP  MOVLW   D‘16’
  MOVWF   11
  LOOP1  DECFSZ   11,1
  GOTO    LOOP1
  DECFSZ   10,1
  GOTO LOOP
       ┋
  延时时间=1+1+[1+1+(1+2)*16-1+1+2]*100-1=5201(��S)
  11) RTCC计数器的使用
  RTCC是一个脉冲计数器,它的计数脉冲有二个来源,一个是从RTCC引脚输入的外部信号,一个是内部的指令时钟信号。可以用程序来选择其中一个信号源作为输入。RTCC可被程序用作计时之用;程序读取RTCC寄存器值以计算时间。当RTCC作为内部计时器使用时需将RTCC管脚接VDD或VSS,以减少干扰和耗电流。下例程序以RTCC做延时:
  RTCC  EQU  1
       ┋
  CLRF  RTCC    ;RTCC清0
  MOVLW  07H
  OPTION    ;选择预设倍数1:256→RTCC
   LOOP  MOVLW  255   ;RTCC计数终值
  SUBWF  RTCC,0
  BTFSS STATUS,Z   ;RTCC=255?
  GOTO LOOP
  ┋
  这个延时程序中,每过256个指令周期RTCC寄存器增1(分频比=1:256),设芯片使用4MHz振荡,则:
  延时时间=256*256=65536(��S)
  RTCC是自振式的,在它计数时,程序可以去做别的事情,只要隔一段时间去读取它,检测它的计数值即可。
  12) 寄存器体(BANK)的寻址
  对于PIC16C54/55/56,寄存器有32个,只有一个体(BANK),故不存在体寻址问题,对于PIC16C57/58来说,寄存器则有80个,分为4个体(BANK0-BANK3)。在对F4(FSR)的说明中可知,F4的bit6和bit5是寄存器体寻址位,其对应关系如下:


Bit6  Bit5 BANK 物理地址
  0    0 BANK0 10H~1FH
  0    1 BANK1 30H~3FH
  1    0 BANK2 50H~5FH
  1    1 BANK3 70H~7FH

  当芯片上电RESET后,F4的bit6,bit5是随机的,非上电的RESET则保持原先状态不变。
  下面的例子对BANK1和BANK2的30H及50H寄存器写入数据。
  例1.(设目前体选为BANK0)
  BSF   4,5    ;置位bit5=1,选择BANK1
  MOVLW  DATA
  MOVWF  10H    ; DATA→30H
  BCF   4,5
  BSF   4,6   ;bit6=1,bit5=0选择BANK2
  MOVWF  10H    ;DATA→50H
  从上例中我们看到,对某一体(BANK)中的寄存器进行读写,首先要先对F4中的体寻址位进行操作。实际应用中一般上电复位后先清F4的bit6和bit5为0,使之指向BANK0,以后再根据需要使其指向相应的体。
  注意,在例子中对30H寄存器(BANK1)和50H寄存器(BANK2)写数时,用的指令“MOVWF 10H”中寄存器地址写的都是“10H”,而不是读者预期的“MOVWF 30H”和“MOVWF 50H”,为什么?
  让我们回顾一下指令表。在PIC16C5X的所有有关寄存器的指令码中,寄存寻址位都只占5个位:fffff,只能寻址32个(00H—1FH)寄存器。所以要选址80个寄存器,还要再用二位体选址位PA1和PA0。当我们设置好体寻址位PA1和PA0,使之指向一个BANK,那么指令“MOVWF 10H”就是将W内容置入这个BANK中的相应寄存器内(10H,30H,50H,或70H)。
  有些设计者第一次接触体选址的概念,难免理解上有出入,下面是一个例子:
  例2:(设目前体选为BANK0)
  MOVLW  55H 
  MOVWF  30H   ;欲把55H→30H寄存器
  MOVLW  66H
  MOVWF  50H   ;欲把66H→50H寄存器
  以为“MOVWF 30H”一定能把W置入30H,“MOVWF 50H”一定能把W置入50H,这是错误的。因为这两条指令的实际效果是“MOVWF 10H”,原因上面已经说明过了。所以例2这段程序最后结果是F10H=66H,而真正的F30H和F50H并没有被操作到。
  建议:为使体选址的程序清晰明了,建议多用名称定义符来写程序,则不易混淆。   例3:假设在程序中用到BANK0,BANK1,BANK2的几个寄存器如下:


BANK0 地址 BANK1 地址 BANK2 地址 BANK3 地址
A 10H B 30H C 50H � 70H
� � � � � � � �
� � � � � � � �

  A   EQU  10H   ;BANK0
  B   EQU  10H   ;BANK1
  C   EQU  10H   ;BANK2
          ┋
  FSR  EQU  4
  Bit6  EQU  6
  Bit5  EQU  5
  DATA  EQU  55H
          ┋
  MOVLW  DATA
  MOVWF  A  
  BSF   FSR,Bit5
  MOVWF  B     ;DATA→F30H
  BCF   FSR,Bit5
  BSF   FSR,Bit6
  MOVWF  C     ;DATA→F50H
          ┋

  程序这样书写,相信体选址就不容易错了。
  13) 程序跨页面跳转和调用
  下面介绍PIC16C5X的程序存储区的页面概念和F3寄存器中的页面选址位PA1和PA0两位应用的实例。
  (1)“GOTO”跨页面
   例:设目前程序在0页面(PAGE0),欲用“GOTO”跳转到1页面的某个地方
KEY(PAGE1)。
       STATUS  EQU  3
       PA1   EQU  6
       PA0   EQU  5
           ┋
       BSF  STATUS,PA0  ;PA0=1,选择PAGE页面
       GOTO  KEY      ;跨页跳转到1页面的KEY
           ┋
       KEY   NOP     ;1页面的程序
           ┋
  (2)“CALL”跨页面
  例:设目前程序在0页面(PAGE0),现在要调用——放在1页面(PAGE1)的子程序DELAY。
           ┋
       BSF  STATUS,PA0   ;PA0=1,选择PAGE1页面
       CALL  DELAY      ;跨页调用
       BCF  STATUS,PA0   ;恢复0页面地址
           ┋
       DELAY NOP       ;1页面的子程序
           ┋
  注意:程序为跨页CALL而设了页面地址,从子程序返回后一定要恢复原来的页面地址。
  (3)程序跨页跳转和调用的编写
  读者看到这里,一定要问:我写源程序(.ASM)时,并不去注意每条指令的存放地址,我怎么知道这个GOTO是要跨页面的,那个CALL是需跨页面的? 的确,开始写源程序时并知道何时会发生跨页面跳转或调用,不过当你将源程序汇编时,就会自动给出。当汇编结果显示出:
       X X X(地址)“GOTO out of Range"
       X X X(地址)“CALL out of Range"
  这表明你的程序发生了跨页面的跳转和调用,而你的程序中在这些跨页GOTO和CALL之前还未设置好相应的页面地址。这时应该查看汇编生成的.LST文件,找到这些GOTO和CALL,并查看它们要跳转去的地址处在什么页面,然后再回到源程序(.ASM)做必要的修改。一直到你的源程序汇编通过(0 Errors and Warnnings)。
   (4)程序页面的连接
  程序4个页面连接处应该做一些处理。一般建议采用下面的格式: 即在进入另一个页面后,马上设置相应的页面地址位(PA1,PA0)。 页面处理是PIC16C5X编程中最麻烦的部分,不过并不难。只要做了一次实际的编程练习后,就能掌握了。
 

PIC系列单片机简介

PIC 8位单片机的分类和特点(一)







由美国Microchip公司推出的PIC单片机系列产品,首先采用了RISC结构的嵌入式微控制器,其高速度、低电压、低功耗、大电流LCD驱动能力和低价位OTP技术等都体现出单片机产业的新趋势。现在PIC系列单片机在世界单片机市场的份额排名中已逐年升位,尤其在8位单片机市场,据称已从1990年的第20位上升到目前的第二位。PIC单片机从覆盖市场出发,已有三种(又称三层次)系列多种型号的产品问世,所以在全球都可以看到PIC单片机从电脑的外设、家电控制、电讯通信、智能仪器、汽车电子到金融电子各个领域的广泛应用。现今的PIC单片机已经是世界上最有影响力的嵌入式微控制器之一。
  一、PIC 8位单片机的分类
  PIC 8位单片机产品共有三个系列,即基本级、中级和高级。
  1基本级系列 该级产品的特点是低价位,如PIC16C5X,适用于各种对成本要求严格的家电产品选用。又如PIC12C5XX是世界第一个8脚的低价位单片机,因其体积很小,完全可以应用在以前不能使用单片机的家电产品的空间。
  2中级系列 该级产品是PIC最丰富的品种系列。它是在基本级产品上进行了改进,并保持了很高的兼容性。外部结构也是多种的,从8引脚到68引脚的各种封装,如PIC12C6XX。该级产品其性能很高,如内部带有A/D变换器、E2PROM数据存储器、比较器输出、PWM输出、I2C和SPI等接口。PIC中级系列产品适用于各种高、中和低档的电子产品的设计中。
  3高级系列 该系列产品如PIC17CXX,其特点是速度快,所以适用于高速数字运算的应用场合中,加之它具备一个指令周期内(160ns)可以完成8�8(位)二进制乘法运算能力,所以可取代某些DSP产品。再有PIC17CXX具有丰富的I/O控制功能,并可外接扩展EPROM和RAM,使它成为目前8位单片机中性能最高的机种之一。所以很适用于高、中档的电子设备中使用。
  上述的三层次(级)的PIC 8位单片机还具有很高的代码兼容性,用户很容易将代码从某型号转换到另一个型号中。


PIC 8位单片机的分类和特点(二)







PIC 8位单片机具有指令少、执行速度快等优点,其主要原因是PIC系列单片机在结构上与其它单片机不同。该系列单片机引入了原用于小型计算机的双总线和两级指令流水结构。这种结构与一般采用CISC(复杂指令集计算机)的单片机在结构上是有不同的。
  1双总线结构
  具有CISC结构的单片机均在同一存储空间取指令和数据,片内只有一种总线。这种总线既要传送指令又要传送数据(如图1-a所示)。因此,它不可能同时对程序存储器和数据存储器进行访问。因与CPU直接相连的总线只有一种,要求数据和指令同时通过,显然“乱套”,这正如一个“瓶颈”,瓶内的数据和指令要一起倒出来,往往就被瓶颈卡住了。所以具有这种结构的单片机,只能先取出指令,再执行指令(在此过程中往往要取数),然后,待这条指令执行完毕,再取出另一条指令,继续执行下一条。这种结构通常称为冯�诺依曼结构,又称普林斯顿结构。
  在这里PIC系列单片机采用了一种双总线结构,即所谓哈佛结构。这种结构有两种总线,即程序总线和数据总线。这两种总线可以采用不同的字长,如PIC系列单片机是八位机,所以其数据总线当然是八位。但低档、中档和高档的PIC系列机分别有12位、14位和16位的指令总线。这样,取指令时则经指令总线,取数据时则经数据总线,互不冲突。这种结构如图1-b所示。
  指令总线为什么不用八位,而要增加位数呢?这是因为指令的位数多,则每条指令包含的信息量就大,这种指令的功能就强。一条12位、14位或16位的指令可能会具有两条八位指令的功能。因此PIC系列单片机的指令与CISC结构的单片机指令相比,前者的指令总数要少得多(即RISC指令集)。
  2两级指令流水线结构
  由于PIC系列单片机采用了指令空间和数据空间分开的哈佛结构,用了两种位数不同的总线。因此,取指令和取数据有可能同时交叠进行,所以在PIC系列微控制器中取指令和执行指令就采用指令流水线结构(如图2所示)。当第一条指令被取出后,随即进入执行阶段,这时可能会从某寄存器取数而送至另一寄存器,或从一端口向寄存器传送数等,但数据不会流经程序总线,而只是在数据总线中流动,因此,在这段时间内,程序总线有空,可以同时取出第二条指令。当第一条指令执行完毕,就可执行第二条指令,同时取出第3条指令,……如此等等。这样,除了第一条指令的取出,其余各条指令的执行和下一条指令的取出是同时进行的,使得在每个时钟周期可以获得最高效率。
  在大多数微控制器中,取指令和指令执行都是顺序进行的,但在PIC单片机指令流水线结构中,取指令和执行指令在时间上是相互重叠的,所以PIC系列单片机才可能实现单周期指令。
  只有涉及到改变程序计数器PC值的程序分支指令(例如GOTO、CALL)等才需要两个周期。
  此外,PIC的结构特点还体现在寄存器组上,如寄存器I/O口、定时器和程序寄存器等都是采用了RAM结构形式,而且都只需要一个周期就可以完成访问和操作。而其它单片机常需要两个或两个以上的周期才能改变寄存器的内容。上述各项,就是PIC系列单片机能做到指令总数少,且大都为单周期指令的重要原因。
 

PIC系列单片机简介

PIC8位单片机的基本组成



成都 卫东 



PIC系列8位单片机为适应各种不同的用途,有多种型号可供选用。但是,尽管PIC单片机有不同的档次和型号,但其最基本的组成则大同小异。因此,在这里先从型号PIC16F84的单片机入手,讨论其基本组成。PIC16F84是双列直插式(DIP)塑料封装,最大时钟频率可达4MHz。现为Microchip公司的独家产品,关于其具体技术指标,可查阅该公司的产品手册,或在网址www.microchip.com上查找。
  PIC16F84单片机的引脚排列可参阅本期本版的16F8X系列简介一文。本文的附图是该器件的主要组成部分。PIC16F84虽然体积不大,但仍然是一个完整的计算机,它有一个中央处理器(CPU)、程序存储器(ROM)、数据寄存器(RAM)和两个输入/输出口(I/O口)。
  和其它品种的单片机一样,CPU是此单片机的“首脑”,它从程序存储器中读取和执行指令。在取指和执行时,还可同时对数据寄存器进行取数(前已介绍PIC16F84采用哈佛结构)。由附图可明显看出,程序存储器和数据存储器各有一条总线与CPU相连。有些CPU将CPU内部的寄存器与其外部的RAM是分开管理的,但PIC单片机不是这样,它的通用数据RAM也归为寄存器,称为File寄存器。在PC16F84中,有68个字节的通用RAM,其地址为0CH~4FH。
  除了通用数据寄存器外,还有一些专用寄存器,其中最常用的工作寄存器为“W寄存器”。CPU将工作数据存放在W寄存器中。寄存器W的作用与其它单片机中的“累加器A”相似。此外,还有几个专用寄存器,它们分别以某种方式控制PIC的运作。
  PIC16F84的程序存储器是由Flash(闪速)EPROM构成,它可用电来记录和擦除,而在断电时,仍可保留其内容。PIC单片机有些型号的程序存储器用的是EPROM,需要用紫外线来擦除;还有一些型号是一次性可编程(OTP)的产品(一经编程便不能再擦除)。
  PIC16F84有两个输入/输出口,即A口和B口。每个口的每个引脚可单独设定为输入或输出。各个口的位是从0开始编号的。当A口为输出方式时,其第4位(即RA4)为开路集电极(或开路漏极)输出,而B口及A口其它各位为常规的全CMOS驱动电路。这些功能必须注意,否则会在编程时出错。CPU对每个端口都按一个字节8位来处理,但A口只有5位引脚。
  PIC输入与COMS兼容,所以PIC输出可驱动TTL或CMOS逻辑芯片。每个输出引脚可以流出或吸入20mA电流,即使一次只用了一个引脚亦是如此。
  PIC16F84还有一些其它功能,如用来长期存放数据的EEPROM、定时器/计数器模块等,这里也暂不讨论。
 

PIC系列单片机简介

PIC8位单片机的汇编语言







要单片机完成一项基本任务,必须将任务分解成一些具体步骤,再要求它去逐项执行每个步骤,还要对它下命令。该命令在单片机术语中称为“指令”(Inetruction)。完成一项任务所需的所有指令的有序集合就称为“程序”(Programm)。这些指令要预先一条一条顺序地放到单片机的程序存贮器中,单片机在运行时,片中的CPU从程序存贮器中逐条有序取出指令,执行指令,并将有关指令执行完毕,即可完成既定任务。
  不同种类的单片机有不同的一套命令(即所谓“指令系统”)。PIC系列的单片机其指令系统与51系列的完全不同。PIC16F84有30余条指令构成的指令系统。每条指令由14位(bit)构成,这些位是二进制码的0和1,如果要使16F84端口B的B0位输出高电平,以点亮一只发光二极管LED,而B口的其余各位仍保持低电平,则需要使单片机执行下列各条指令(机器码):
  11000000000000
  00000001100110
  11000000000001
  00000010000110
  10100000000100
  早先的技术人员就是用这样的二进制码来编写程序的。上列程序,看起来像天书,很费解,但它完全能指挥单片机的运作。因为单片机实际上是一种复杂的数字逻辑电路。我们都知道,要数字电路运作,必须相应输入高、低电平,对正逻辑而言,高电平为1,低电平为0。上述指令顺序在不同的数位上出现的0和1,经译码后,即可完成各种不同的运作,逐步完成单片机所要执行的任务,如点亮一个LED。
  上述各条指令的写法,虽然是完全面向单片机,是用来直接指示单片机该如何运作的。因此,这种由0、1组成的指令称为机器语言。
  实际上,这种由二进码构成的指令集不但难读懂,而且用来编程也有困难。因为程序往往不是从头到尾顺序执行,有时还需中途转移到其它单元执行一段程序后再返回来。而指令是一条一条顺序存放在存贮器各个单元内的。因此,如果要转移,需指明具体转到哪个单元,即要写出该单元的地址。但在编写程序时,该程序有多长,具体要放到哪些单元中,都是未知数,又怎能具体指明要转到哪个单元呢?
  由于用机器语言会使程序难写、难读,后来一种新型的语言形式——汇编语言就问世了。使用这种语言写程序较方便,也比较容易读懂。不过,和机器语言一样,不同类型的单片机有完全不同的汇编语言。就如不同地区的人有不同的方言一样。在汇编语言中,转移地址是用符号来表示的。现在,我们把上面由机器语言写成的程序改写成由汇编语言构成的程序:
  movlw B‘00000000’
  tris  PORT B
  movlw B‘00000001’
  movwf PORT B
fin: goto   fin
  上列各条指令实际上是英语缩写和一些数组成的。如第一条中的movlw就是move Literal to w的缩写,其意义为照原样移入工作寄存器W,而“原样”就是后接引号内的数字‘00000000’。引号前的B表示后续的是二进制数。第二句是将W内的数复制到B口的三态(tri-state)控制寄存器中,以设定B口为输出,然后将00000001送入W中,再复制到B口;最后执行一条无限循环语句以保持B口的状态不变。从单片机外部看去,16F84的第6脚(即B0)维持为高电平,以点亮LED。
  由上例可知,汇编语言较之机器语言要好懂得多。同时,最后一句自身循环也是一种转移语句,转移目的地就是此句所在单元地址,如用机器语言,就难以标出具体地址,而用汇编语言助记符fin即可替代。
  成都 卫东
 

PIC系列单片机简介

PIC8位单片机16F8X系列简介







Microchip公司生产的PIC 8位单片机16F8X系列产品是PIC单片机中级型产品之一。该系列产品的主要型号是16F83和16F84。其引脚功能如附图所示。该系列产品的最大特点是有8k�14的Flash(闪速E2PROM)程序存储器和带8位的Flash(闪速E2PROM)数据存储器,其擦写次数上万次,数据保存时间大于40年。所以该系列产品极适合那些可能会经常改动程序编程的应用,例如用户可以随时改动出厂产品中的单片机程序以增加或调整产品的功能。此外,对那些学习、开发PIC单片机的个人或单位,都是一种很好的可重复多次的实验芯片。还有它内部的Flash数据存储器不仅具有掉电保护数据的功能,加之它是由单片机内部进行控制操作的,自然外部电路无法对其进行读写,所以它有极高的数据保密性,使得PIC16F8X在智能IC卡、密码锁、电子防盗系统等方面得到广泛的应用。
  主要功能
  高性能RISC结构CPU;精简指令集35条单字节指令;执行速度DC~400ns;Flash程序和数据存储器;多种硬件中断和直接/间接/相对三种寻址方式。其余性能参见附表。
  微控制特性
  上电复位;自振式看门狗;程序保密位;微功耗睡眠功能和四种可选的振荡方式。
  电源和温度特性
  宽工作电压:2V~6V(PIC 16LF84工作电压为2V)
  宽工作温度范围:商用级0℃~+70℃;工作级-40℃~+85℃;汽车级-40℃~+125℃。
  这里的宽工作温度范围,特别是汽车级产品已大量用于汽车电子,甚至已用于航空仪表上。
成都 姜淑芳
 

PIC系列单片机简介

PIC8位8脚单片机12C5��和12CE5��系列的特点







Microchip公司生产的8位单片机PIC12C508(A)/509(A)型和PIC12CE518/519型产品,仅有8个引脚,其管脚排列如下图所示。该产品是PIC基本级之一,其特点是低功耗、多功能、高性能、体积小和售价低廉。因该产品体积小,所以它们可以嵌入几乎任何一种电子产品中,特别是便携式电子产品,如各种IC卡、电子身份牌、照相机、充电器、计时器、智能传感器、灯光调节器、儿童玩具等等,都已得到了广泛的应用。
  PIC12CE5��与12C5��系列产品的区别仅仅是前者带有E2PROM的数据存储器,而后者的数据区为RAM。其余特性和管脚排列、性能几乎完全相同,它们都属于OTP单片机(一次写入不可擦除),适于批量的电子产品使用。
  主要功能 高性能RISC结构CPU;精简指令集仅33条单字节指令,易学易用;执行速度DC~1��s;两级硬件堆栈;直接/间接/相对三种寻址方式。
  片内硬件性能 8位定时器/计数器TMRO,带有8位预分频器;驱动力强,I/O口可直接驱动数码管LED显示;内置上电复位电路(POR)以保证复位正常;内置自振式看门狗(1+WDT),防止程序死锁;程序保密位;防止程序代码非法拷贝;低功耗睡眠功能;内置4MHz RC型振荡器,可选三种振荡时钟(RC、XT、LP)。
  电源的温度特性 工作电压25V~55V;低功耗睡眠(Sleep)模式<1��A;时钟频率低,功耗小,如32kHz时功耗<15��A;工作温度:商用级0℃~+70℃;工业级-40℃~+85℃和汽车级-40℃~+125℃,特别是后者已大量应用于汽车电子和航空仪表中。
  成都 姜淑芳
 

PIC系列单片机简介

PIC8位单片机的电源和时钟







单片机是一种超大规模集成电路,在该集成电路内有成千上万个晶体管或场效应管,因此,要单片机正常运行,就必须为其提供能量,即为片内的晶体管或场效应管供给电源,使其能工作在相应的状态。
  PIC16F84需要一个5V电源(实际工作电压为40V~60V)。因此,最简单的办法是用三节15V的电池串联供电,也可用整流、稳压方式供电,如图1所示。图1-a为三节电池串联,可得45V左右的电压;图1-b为四节电池串联,又用一硅二极管降压,实际输出电压为54V左右。图1-c为经整流后(整流器图中未画出)将市电交流变为7V~20V的直流电压,再经集成稳压器7805稳压后得到稳定的+5V电压。图1-d与图1-c类似,只是不用集成稳压器,改用价廉的稳压二极管来稳压。PIC16F84本身耗电仅1mA(低时钟耗电更小),若PIC要驱动发光二极管LED或其它大电流器件,则单片机电源也必须为这类器件供电。因此,图1-d的电路是用齐纳二极管来稳压的,它不能驱动LED等器件,这一点应注意。
  在图1中,四种电源电路都需要在PIC16F84的引脚{14}(V+)与地之间接一电容01��F,而且,此电容应紧靠单片机安装,以滤除电源的纹波,并使PIC和相邻元件不受噪声干扰。这里要强调的是,不论电源如何“纯净”,均必须安装此电容。
  注意:这里的PIC16F84除了引脚{14}(V+或VDD)直接接至电源外,引脚4(MCLR——复位输入脚)通常也通过一个10k��的电阻接至电源V+。MCLR是低电平有效,如将其接地,将使PIC复位,并将RAM清零。如果上电很慢,则PIC可能会处于一种不定状态。这时,应当在MCLR与地之间装接一个常开复位按键。
  与任何微处理器一样,PIC16F84的运作是有节奏的,因此,就需要一个节拍发生器——时钟,以控制CPU的运行速度,步进执行各种操作。16F84-04P的最大时钟速变为4MHz。降低时钟频率,可节省能源,并使PIC执行速度减慢,当时钟频率为30kHz时只耗电01mA。
  PIC单片机最常用的时钟电路示于图2,图2-a为直接输入外部时钟,即钟信号由外部振荡电路产生。图2-b是用PIC的内部时钟电路,再从外部接上确定时钟频率的元件,即电阻R和电容C。图中给出了三种不同阻值的电阻,它们和100pF的电容配用,可产生15MHz、600kHz或100kHz三种不同的时钟频率。图2-c仍利用PIC片内振荡电路,但外接石英晶体,因而能产生更精确、更稳定的时钟信号,但石英晶体通常比电阻、电容贵,若利用电视机上常用的晶体(如358MHz晶体),则价格仍较低廉。
成都 卫东
 

PIC系列单片机简介

常用PIC系列8位单片机芯片引脚符号的功能







笔者读了本 版有关PIC 8位单片机的产品性能和相应的封装引脚介绍后,认为对初学者而言还需了解各引脚符号的意义,才能进一步学习和使用它。笔者为此作相关的说明,以便和初学者共同提高。
  一、关于I/O口符号 PIC单片机系列封装引脚最少的是8引脚(如PIC12C5XX和PIC12C6XX),多的可达84引脚(如PIC17C76X),其中I/O(输入/输出)口线按PIC单片机产品型号不同,其口线数量也不相同。8脚封装的I/O口线是6根线,而84脚封装的I/O线多达66根线。这些口线符号分别按英文字母顺序排列编号,简称A口、B口、C口、D口、E口、F口……,每个口是8位的,但不一定占满8位。这些口在封装引脚图的标注上均在各口之前加有R符号。例如B口标注为RB0、RB1、RB2……RB7;E口为RE0、RE1……RE7;G口为RG1、RG2……;而对8脚封装的单片机共有6根I/O口线,其引脚图的标注与上略有不同而是GP0~GP5。上述的各口线都是可独立编程的双向I/O口线。
  二、引脚的复用功能和符号 单片机的信号引脚是单片机外特性的体现,在硬件上用户只能使用引脚,通过引脚的连接组建单片机系统。PIC 8位单片机系列和MCS-51系列单片机一样,其引脚除电源VDD、VSS为单一功能外,其余的信号引脚常是多个功能,即引脚的复用功能。常见的引脚符号和主要功能如下:
  1MCLR/Vpp 清除(复位)输入/编程电压输入。其中MCLR为低电平时,对芯片复位。该脚上的电压不能超过VDD,否则会进入测试方法。Vpp代表编程电压。
  2OSC1/CLKIN 振荡器晶体/外部时钟输入端。
  3OSC2/CLKOUT 振荡器晶体输出端,在晶体振荡方式接晶体,在RC方式输出OSC1频率的1/4信号CLKOUT。
  4TOCK1  TMRO计数器输入端,如不用,为了减少功能应接地或接VDD。
  5TICK1  TMR1时钟输入端。
  6TIOSI  TMR1的振荡输入端。
  7TIOSO  TMR1的振荡输出端。
  8RD、WR、CS 分别代表并行口读信号、写信号和片选控制线。
  9AN0~AN7 A/D转换的模拟量输入端。AN0、AN1……分别表示通道的个数。
  10CCP 捕捉/比较/脉宽调制等功能端。CCP是Capture/Compare/PWM的缩写。有的PIC芯片内有两个CCP部件,其引脚用符号CCP1和CCP2表示。
  11SCK/SCL 同步串行通信时钟输入端。
  12TX/CK 异步通信发送端/SCI同步传输的时钟端。
  13SDI/SDA SPI通信数据输入端。
  14SD0 SPI通信数据输出端。
  15RD0/PSP0~RD7/PSP7 D口,双向可编程,亦可作为并行口。作并行口对TTL输入,作I/O口时为斯米特输入。
  以上是PIC 8位单片机系列封装引脚符号的说明,此外在阅读PIC 8位单片机有关资料时,常遇到一些字母符号和功能,也简介如下:
  1OTP 一次性编程。OTP是One Time Program的缩写。
  2RISC 简称精简指令集。RISC是Reduced Instruction Set Computer的缩写。
  3SSP 同步串行口。SSP是Synchronous Serial Port的缩写。
  4SCI 串行通信接口。SCI是Serial Communication Interface的缩写。
  5USART 全双工通用串行异步接收发送系统。USART是Universal Serial Aosynchronous Receiver Transmitter的缩写。
  6UART 通用异步接收发送器。
  7POR 上电复位功能。POR是Power On Reset的缩写。
  8OST 振荡器起振定时器。OST是Oscillator Start-up Timer的缩写。
  9PWRT 上电延时定时器。PWRT是Power-up Timer的缩写。
  10SFR 专用寄存器。SFR是Special Function Register的缩写。
  11PWM 脉宽调制器。PWM是Pulse Width Modulation的缩写。
  12MIPS 每秒可执行百万条指令。MIPS是Million Instructions Per Second的缩写。  成都 姜淑芳
 
1  /  1  页   1 跳转

版权所有 IACMall工业自动化(中国)商城--论坛  IACMall工业自动化(中国)商城  Sitemap

Powered by Discuz!NT 2.1.202    Copyright © 2001-2009 Comsenz Inc.
Processed in 0.140625 second(s) , 4 queries. 闽ICP备07073127号
返顶部