PIC16F877
PIC16F877 03 16F877 05 06 MPLAB 08 16F877 13 LED 15 LED 17 20 24 2
PIC16F877 PIC16F877 DIP VDD VSS CLOCK CPU :,AND,OR,XOR ROM: CPU ROM RAM: CPU,CPU I/O:CPU, CPU,, 16F877 RAM 512 128 Bank Bank 16F877, CPU,ROM,RAM,I/O. Timer: A/D converter: CCP:,, Transmitter: MSSP: 3
PIC16F877 RAM 4
40 16F877 C C 5
,,,,,,, MPLAB 6
,, pspice ( ) mplab pcb pcb,,, P lc-evm, 7
MPLAB MPLAB 啓 File New File,MPLAB MPLAb MPLAB 8
MPLAB Project Project Build Node 1.8 1.9 MPLAB 9
MPALB MPLAV SIM Simulator 16F877 OK MPLAB 10
Project New Project 1.12 Windows Project 1.14 Source Code 11
1.14 Project Make Project Build completed successfully Window Special Registers Windows Tile Vertical 1.15 reset Special Function Registers w pcl Simulation OK 12
16F877 16F877 33 I/O PORT PORT PORT PORT PORT 13
14
LED LIST P=16F877,R=DEC 16 F877, INCLUDE<P16F877.INC> : 16 F877 CBLOCK H 20 : ENDC : ORG 0 0000 NOP icd nop BANKSEL TRISD TRISD Bank1 MOVLW 0 0--W MOVWF TRISD portd BANKSEL PORTD bank0 AGAIN:, MOVLW B 11101110 portd w MOVWF PORTD w portd CALL D100mS 0.1sec MOVLW B 11011101 MOVWF PORTD 11011101 portd CALL D100mS 0.1sec MOVLW B 10111011 10111011 portd MOVWF PORTD :delay 0.1 sec CALL D100mS MOVLW B 01110111 MOVWF PORTD portd 01110111 CALL D100mS delay 0.1 sec GOTO AGAIN 100ms CBLOCK R0_D100mS R1_D100mS, R2_D100mS ENDC 15
D100mS: MOVLW 10 MOVWF R0_D100mS D100mS1: MOVLW 50 MOVWF R1_D100mS D100mS2: MOVLW 200 MOVWF R2_D100mS D100mS3: NOP 1ck*200*50*10 DECFSZ R2_D100mS 1ck*200*50*10 GOTO D100mS3 2ck*200*50*10 DECFSZ R1_D100mS GOTO D100mS2 DECFSZ R0_D100mS GOTO D100mS1 RETURN END, LED,0.1,,, PORTA I/O, 16
LED, LED 4 LED DISPLAY LIST P=16F877,R=DEC #INCLUDE <P16F877.INC> CBLOCK 0X20 ENDC CBLOCK R0 use s register. DATBF0,DATBF1 use s registers ENDS PORTSEG EQU PORTD portd TRISEG EQU TRISD PORTCA EQU PORTB portb TRICA EQU TRISB ORG 0 0X0000 NOP ICD BANKSL TRICA TRICA BAND1 MOVLW 0 MOVWF TRICA MOVWF TRISEG BANKSEL PORTCA PORTC BANDK0 MOVLW 0XFF, MOVWF PORTCA 0XFF MOVWF PORTCA 1234 MOVLW H 12 0X12 DATRF 1( ) MOVWF DATBF1 MOVLW H 34 17
MOVWF DATBF0 FOUBLED: MOVF DATBFO,W DATBF0 W CALL TABLE W MOVWF PORTSEG MOVLW B 11111110 LED MOVWF PORTCA W, LED CALL DLY2_5ms 2.5MS BSF PORTCA,0 LED SWAPF DATBF0,W DATBF0 W, CALL TABLE W MOVWF PORTSEG MOVLW B 11111101 LED MOVWF PORTCA W, LED CALL DLY2_5MS 2.5MS BSF PORTCA1 MOVF DATBF1W, DATBF1 LED CALL TABLE MOVWF PORTSEG output unit digit here MOVLW B11111011 MOVWF PORTCA light up LED3 CALL DLY25MS delay 2.5MS BSF PORTCA2 turn off LED3 SWAPF DATBF1W DATBF1 W CALL TABLE MOVWF PORTSEG MOVLW B11110111 MOVWF PORTCA CALL DLY25MS BSF PORTCA3 GOTO FOURLED FOURLED TABLE READER TABLE ANDLW B00001111 W, ADDWF PCL W 18
TABLE1 RETLW HF9 RETLW HA4 RETLW HB0 RETLW H99 RETLW H92 RETLW H82 RETLW HF8 RETLW H80 RETLW H90 RETLW H88 RETLW H83 RETLW HC6 RETLW HA1 RETLW H86 RETLW H8E RETLW HC0 END 0 1 2 3 4 5 6 7 8 9 A B C D E F 19
LED EX0501.ASM LSIT P=16F877,R=DEC #INCLUDE <P16F877.INC> CBLOCK 0X20 ENDC CBLOCK KYBUF,R0 ENDC ORG 0 NOP ICD BANKSEL TRISB PORTB PORTD MOVLW 0 MOVWF TRISB MOVWF TRISD BANKSEL PORTB MOVLW H FF MOVWF PORTB 20
CLRF DATBF1 CLRF DATBF2 MAIN: CALL FOURLED CALL KB4x4 BTFSC DYBUF,4 KB4x4 H 10 GOTO MAIN LED MOVF KYBUF,W MOVWF DATBF1 MAIN2: CALL KB4x4 BTFSS DYBUF,4 H 10 GOTO MAIN2 GOTO MAIN Define port 4x4 PORT4x4 EQU PORTD TRIS4x4 EQU TRISD KB4x4: MOVLW H FF MOVWF PORT4x4 BANKSEL TRIS4x4 TRIS4x4 bank1 MOVLW B 00001111 bo~3=input,b4~7=output MOVWF TRIS4x4 BANKSDEL PORT4x4 PORT4x4 bank0 MOVLW B 11101111 BOVWF PORT4X4 MOVLW H 10 KYBUF 0X10 BTFSS PORT4x4,0 0 MOVLW 0 0->w BTFSS PORT4x4,1 MOVLW 1 BTFSS PORT4x4,2 MOVLW 2 BTFSS PORT4x4,3 MOVLW3 MOVWF DYBUF BTFSS KYBUF,4 GOTO KB4x4_1 21
BSF PORT4x4,4 BCF PORT4x4,5 CALL KB4x4_DLY BTFSS PORT4x4,0 MOVLW 4 BTFSS PORT4x4,1 MOVLW 5 BTFSS PORT4x4,2 MOVLW 6 BTFSS PORT4x4,3 MOVLW 7 MOVWF KYBUF BTFSS KYBUF,4 GOTO KB4x4_1 BSF PORT4x4,5 BCF PORT4x4,6 CALL KB4x4_DLY BTFSS PORT4x4,0 MOVLW 8 BTFSS PORT4x4,1 MOVLW 9 BTFSS PORT4x4,2 MOVLW H A BTFSS PORT4x4,3 MOVLW H B MOVWF KYBUF BTFSS PORT4x4,4 GOTO KB4x4_1 BSF PORT4x4,6 BCF PORT4x4,7 CALL KB4x4_DLY BTFSS PORT4X4,0 MOVLW H C BTFSS PORT4x4,1 MOVLW H D BTFSS PORT4x4,2 MOVLW H E BTFSS PORT4x4,3 MOVLW H F MOVWF KYBUF KB4x4_1: BSF PORT4X4,7 RETURN 22
KB4x4_DLY: 16MHz NOP NOP NOP RETURN #INCLUDE<FOURLED.INC> ecternally defined pins (in main program) PORTSEG EQU PORTD segment port TRISEG EQU TRISD direction of segment port PORTCA EQU PORTB common anode port TRICA EQU TRISB direction of segment port #INCLUDE <DLY2_5MS.INC> END 23
16F877 A/D LED A/D EX0601.ASM LIST P=16F877, R=DEC #INCLUDE P16F877.INC CBLOCK 0X20 ENDC ORG 0 NOP BANKSEL TRISB ICD MOVLW 0 PORTB PORTD MOVWF TRISB MOVWF TRISD BANKSEL PORTB MOVLW H FF LED MOVWF PORTB CLRF DATBF1 CLRF DATBF2 MAIN: BANKSEL ADCON1 bank (ADCON1 BANK1) MOVLW B 10001110 A/D 1ch(AN0)/0refs MOVWF ADCON1 BANKSEL ADCON0 bank0(adcon0 BANK0) 24
BOVLW B 10000001 Fosc/32(10),ANK(000) MOVWF ADCON0 a/d done (0),x(0),a/d on(1) CALL DLY2_5ms A/D (>20us) MAIN1: BSF ADCON0,GO A/D MAIN2: BTFSC ADCON0,GO A/D GOTO MAIN2 GO=1 BANKSEL ADRESL ADRESL bank1 MOVF ADRESL,W A/D BANKSEL DATBF1 MOVWF DATBF1 A/D MOVF ADRESH,W A/D MOVWF DATBF2 A/D DATBF2 CALL FOURLED LED A/D GOTO MAIN1 A/D #INCLUDE<FOURLED.INC> externally defined pins (in main program) PORTSEG EQU PORTD segment port TRISEG EQU TRISD direction of segment port POTRCA EQU PORTB common ande port TRICA EQU TRISB direction of segment port #INCLUDE <DLY2_5ms.INC> END 25