PIC16F877原理简介
1.1 PIC16F877特性:PIC16F877是由Microchip公司所生产开发的新产品,属于PICmicro系列单片微机,具有Flash program程序内存功能,可以重复烧录程序,适合教学、开发新产品等用途;而其内建ICD(In Circuit Debug)功能,可以让使用者直接在单片机电路或产品上,进行如暂停微处理器执行、观看缓存器内容等,让使用者能快速地进行程序除错与开发。
如图1为PIC16F877的40根接脚图,PDIP是指一般最常见的DIP(Dual In Line Package)包装,而PIC单片机也有PLCC(Plastic Leaded Chip Carrier)与QFP(Quad Flat Package)两种形式的包装,依照不同的需求,寻找不同的包装形式。如图所示,每根接脚都有其特定功能,例如Pin11与Pin32(VDD)为正电源接脚,Pin12与Pin31(VSS)为地线接脚;而有些接脚有两种甚至三种以上功能,例如Pin2(RA0/AN0)代表PORTA的第一支接脚,在系统重置(Reset)后,可自动成为模拟输入接脚,接收模拟讯号,也可经由程序规划为数字输出输入接脚。
图1. 40引脚PIC16F877接脚说明 |
图2. 28引脚PIC16F877接脚图说明 |
图3. 44引脚PIC16F877脚位图说明 |
图4. 44引脚PIC16F877引脚图说明 |
|
PIC16F877属于闪控式(Flash)单片机,可以重复烧录,其ROM的容量总共是8K words,以2K为一个page,区分为4个pages;内部RAM总共有512个字节(00f~1FFh),以128个字节为一个Bank,共区分为4个Bank,如图5所示,每个Bank的前半段都有其特殊用途,分别连接到其特殊功能模块,例如I/O、CCP、Timer、USART、MSSP等。
图5. PIC16F877的RAM配置图(图片来源:Microchip PIC16F87X Data Sheet)
1.2 特殊内嵌功能
PIC16F877属于内嵌功能较多的单片机,除了CPU、POM、RAM、I/O等基本构造外,还包括以下各种功能,简介如下:
A/D converter:模拟数字转换器,最多可以读取8组模拟输入讯号。
CCP:Capture、Compare、PWM,用于控制直流马达。
Timer,内部定时器,有Timer0、Timer1、Timer2等。
USART:Universal Synchronous Asynchronous Receiver Transmitter,同步/异步串行传输,如RS232、RS485等。
MSSP;Master Synchronous Serial Port,两线式(I2C)与三线式(SPI)标准同步串行传输协定,常用于EEPROM内存资料的烧录与读取,或是与其它集成电路沟通与联系,形成多芯片网络。
2. PIC16F877基本电路
2.1 PIC振荡频率电路
单片机振荡电路与整体系统工作速度有直接的关系,例如同步∕异步串行传输、定时器等,都与振荡频率有关,不同系列单片机有不同振荡频率,根据产品资料手册,PIC16F877振荡频率最高可到20MHz;在图1中,振荡电路接于Pin13(OSC1/CLKIN)与Pin14(OSC2/CLKOUT),而振荡电路有以下四种形式:
LP:使用低功率振荡晶体(Low Power Crystal)
XT:使用振荡器∕谐振器(Crystal/Resonator)
HS:使用高速振荡器(High Speed Crystal/Resonator)
RC:使用电阻∕电容(Resister/Capacitor)
一般常用振荡晶体或是谐振器作为单片机振荡源,外接电路及PIC内部电路说明如图6所示。图中电容C1与C2规格大小是根据Crystal或Resonator而有所不同,表1列出电容建议值,使用其它振荡源的电路说明请参考产品资料手册。
图6. 振荡源电路图(图片来源:Microchip PIC16F87X Data Sheet)
表1. 建议电容值(图片来源:Microchip PIC16F87X Data Sheet)
2.2 外加电源与重置电路
PIC16F877的工作电压为5V,连接Pin11与Pin32,Pin12与Pin31为地线接脚;重置电路连接Pin1,按下Reset后,内部指令重头开始执行,系统重新运作。
2.3 输入输出接口
PIC16F877除了上述基本电路所占用的7支接脚外,其余的33支接脚都可当成输出、输入接脚,输入输出端口是单片机基本界面,可以与周边电路进行电路控制和信号传输与检测。PIC是8位的单片机,以接脚特性分组,每组尽量凑满8支接脚,并将I/O命名为PORTA(RA0~RA5)、PORTB(RB0~RB7)、PORTC(RC0~RC7)、PORTD(RD0~RD7)和PORTE(RE0~RE2)等,各分组接口特性说明如下:
PORTA
PIC16F877的PORTA总共有6个位(RA0~RA5),PORTA的接脚可作为数字输出输入端口,而系统重置后,PORTA自动成为模拟输入状态,可读取模拟输入讯号。
PORTB
PORTB总共有8个位(RB0~RB7),可以撰写程序规划输入输出方向、状态,其中,要进行烧录时,使用到三支接脚,分别是Pin36(RB3/PGM)、Pin39(RB6/PGC)与Pin40(RB7/PGD)。
PORTC
PORTC总共有8个位(RC0~RC7),除了可作为数位I/O外,还和一些特殊功能的周边电路共享接脚,例如CCP(直流马达控制)、I2C、SPI(同步串行通讯电路)、UART(异步串行传输电路)等等。
PORTD
PORTD总共有8个位(RD0~RD7),可作一般数字I/O,并与PSP(Parallel Slave Port)并列传输接口共享。当整体系统需要多单片机时,彼此可以经由并列传输接口来快速传输资料。
PORTE
PORTE总共有3个位(RE0~RE2),PORTE的Pin8、9、10有三种功能,除了基本I/O功能,也有模拟输入功能,而上述PORTD的并列传输接口设定所需的控制接脚,如/RD、/WR、/CS等,也是属于PORTE接脚。
3. PIC16F877指令简介
PIC16F877常用的语言有汇编语言与C语言两种,汇编语言是将每一个机器码使用一个文字代号代表,比较接近处理器真正动作模式;而C语言是比较符合人们的
使用习惯,事先将汇编语言组合成C语言形式,使用较为方便,但是C语言所组译的机器码程序通常比较大,且组译软件通常需要额外购买。以下简介汇编语言相关指令与一套C语言组译软件。
3.1 PIC16F877指令摘要
PIC是采用RISC(Reduced Instruction Set Computing,精简指令集),与8051系列采用的CISC(Complicated Instruction Set Computing,复杂指令集)不同,PIC16F877所有指令指有35个,8051高达111个指令,详细指令说明请参阅产品资料手册。