CHAPTER -3
PROGRAMS & REFERENCES
Page | 33
PROGRAMS:- CALL DELAY
PROGRAM FOR LED BLINKING:- RLF PORTB,1
LISTP=PIC16F877A
CALL DELAY
# INCLUDE<P16F877A.INC>
DECFSZ COUNT,1
GOTO $-3
_CONFIG_CP_OFF&WDT_OFF&_PWRTE_
ON&_XT_OSC GOTO $-8
CBLOCK 0x20 DELAY:
DEL1 MOVLW 0XFF
DEL2 MOVWF DEL1
COUNT MOVLW 0XFF
ENDC MOVWF DEL2
ORG 0x00 DECFSZ DEL2,1
GOTO START GOTO $-1
START: DECFSZ DEL1,1
CLRF PORTB GOTO $-5
BANKSEL TRISB RETURN
CLRF TRISB END
BANKSEL PORTB
MOVLW 0X04
MOVWF COUNT PROGRAM FOR SEVEN SEGMENT
DISPLAY
BSF PORTB,0
LIST P = PIC16F877A
Page | 34
#INCLUDE<P16F877A.INC> MOVWF PORTC
ORG 0x00 BCF PORTB,2
GOTO START BSF PORTB,2
START: MOVLW 0XF3
CLRF PORTB MOVWF PORTC
BANKSEL TRISB BCF PORTB,3
CLRF TRISB BSF PORTB,3
CLRF TRISC GOTO LOOP
BANKSEL PORTC END
CLRF PORTC
MOVLW 0X0F PROGRAM FOR ANALOG TO DIGITAL
CONVERTER
MOVWF PORTB
LIST P = PIC16F877A
LOOP
#INCLUDE<P16F877A.INC>
MOVLW 0X49
ORG 0x00
MOVWF PORTC
GOTO START
BCF PORTB,0
START:
BSF PORTB,0
CLRF PORTB
MOVLW 0XF3
CLRF PORTA
MOVWF PORTC
CLRF PORTD
BCF PORTB,1
CLRF ADCON0
BSF PORTB,1
CLRF ADRESH
MOVLW 0X49
BANKSEL TRISA
Page | 35
CLRF TRISB MOVWF PORTD
CLRF TRISD BCF PIR1,6
MOVLW 0XFF GOTO CONVERT
MOVWF TRISA END
MOVLW 0XFE
MOVWF ADCON1
CLRF ADRESL PROGRAM FOR PWM
BANKSEL PORTA LIST P=PIC16F877A
BSF ADCON0,0 #INCLUDE<P16F877A.INC>
NOP ORG 0x00
NOP GOTO START
GOTO CONVERT START:
CLRF PORTC
CONVERT CLRF T2CON
BSF ADCON0,2 BANKSEL TRISC
BTFSC ADCON0,2 CLRF TRISC
GOTO $-1 BANKSEL PR2
MOVF ADRESH,W MOVLW .40
MOVWF PORTB MOVWF PR2
BANKSEL ADRESL BANKSEL CCPR1L
MOVF ADRESL,W MOVLW .13
BANKSEL PORTD MOVWF CCPR1L
Page | 36
MOVLW 0X0C CLRF PORTD
MOVWF CCP1CON BANKSEL TRISD
BSF T2CON,TMR2ON CLRF TRISD
GOTO $ MOVLW 0XFF
END MOVWF TRISC
CALL INT
GOTO SCAN
PROGRAM USING RETLW INT
LIST P = PIC16F877A BANKSEL PORTC
#INCLUDE<P16F877A.INC> MOVLW 0XFD
MOVWF MOTOR1
CBLOCK 0x20 MOVLW 0XFB
MOTOR1 MOVWF MOTOR2
MOTOR2 MOVLW 0XF9
MOTOR3 MOVWF MOTOR3
MOTOR4 MOVLW 0XF7
MOTOR5 MOVWF MOTOR4
ENDC MOVLW 0XFA
ORG 0x00 MOVWF MOTOR5
GOTO START RETURN
START: SCAN
CLRF PORTC MOVF PORTC,W
Page | 37
XORWF MOTOR1,0 CALL TABLE
BTFSSSTATUS,2 MOVWF PORTD
GOTO M2 GOTO SCAN
MOVLW 0X00 M4
CALL TABLE MOVF PORTC,W
MOVWF PORTD XORWF MOTOR4,0
GOTO SCAN BTFSSSTATUS,2
M2 GOTO M5
MOVF PORTC,W MOVLW 0X03
XORWF MOTOR2,0 CALL TABLE
BTFSSSTATUS,2 MOVWF PORTD
GOTO M3 GOTO SCAN
MOVLW 0X01 M5
CALL TABLE MOVF PORTC,W
MOVWF PORTD XORWF MOTOR5,0
GOTO SCAN BTFSSSTATUS,2
M3 GOTO SCAN
MOVF PORTC,W MOVLW 0X04
XORWF MOTOR3,0 CALL TABLE
BTFSSSTATUS,2 MOVWF PORTD
GOTO M4 GOTO SCAN
MOVLW 0X02
Page | 38
TABLE CLRF TRISB
ADDWF PCL,F BSF TRISB,0
RETLW 0X89 BCF TRISB,1
RETLW 0X85 BANKSEL TRISD
RETLW 0X8A CLRF TRISD
RETLW 0X86 BANKSEL PORTD
RETLW 0X00 CLRF PORTD
END BANKSEL PORTB
BTFSC PORTB,0
CALL CLOCKWISE
PROGRAM FOR STEPPER MOTOR CALL ANTICLOCK
LIST P = PIC16F877A CLOCKWISE:
#INCLUDE<P16F877A.INC> MOVLW 0x10
CBLOCK 0x20 MOVWF PORTD
DEL1 CALL DELAY
DEL2 MOVLW 0X20
ENDC MOVWF PORTD
ORG 0x00 CALL DELAY
GOTO START MOVLW 0X40
START: MOVWF PORTD
CLRF PORTB CALL DELAY
BANKSEL TRISB MOVLW 0X80
Page | 39
MOVWF PORTD DECFSZ DEL2,1
CALL DELAY GOTO $-1
GOTO START DECFSZ DEL1,1
ANTICLOCK: GOTO $-5
MOVLW 0x80 RETURN
MOVWF PORTD END
CALL DELAY
MOVLW 0X40 PROGRAM FOR LCD DISPLAY
MOVWF PORTD
CALL DELAY LIST P=PIC16F877
MOVLW 0X20 INCLUDE "P16F877.INC"
MOVWF PORTD CBLOCK 0X20
CALL DELAY TEMP
MOVLW 0X10 COUNT
MOVWF PORTD DEL1
CALL DELAY DEL2
GOTO START
DELAY: ENDC
MOVLW 0X45 ORG 0X2100
MOVWF DEL1 CH_TBL DE "ESTC WELCOMES U "
MOVLW 0X45 ORG 0X00
MOVWF DEL2 GOTO START
Page | 40
START
BANKSEL TRISA ;IN DISPLAY
BANK1
BANKSEL TEMP
CLRF TRISA ; CLEAR
MOVLW 0X28
TRISA, ALL PINS ARE OUTPUT PINS
;FUNCTION SET SETTIN (DL-0 4BIT
CLRF TRISD ; CLEAR DATA;N-1 2LINES,
TRISD, ALL PINS ARE OUTPUT PINS
;F=0
BANKSEL PORTA ;INBANK 5X7 MATRIX
0
MOVWF TEMP
CLRF PORTA ;
CALL WRITE
CLEAR PORTA LATCHES
MOVLW 0X0E ; For
CLRF PORTD ;
DISPLAY ON ,CURSOR NOT BLINKING
CLEAR PORT D LATCHES
MOVWF TEMP
BANKSEL ADCON1
CALL WRITE
MOVLW B'00001110'
MOVLW 0X01 ;FOR
MOVWF ADCON1 ; A0 IS
CLEAR DISPLAY SCREEN
ANALOG INPUT A1-A5 DIGITAL PINS
MOVWF TEMP
BANKSEL PORTA ;INBANK
0 CALL WRITE
MOVLW 0X06
;INCREMENT CURSER ,SHIFT IT TO
BANKSEL
RIGHT
EEADR
MOVWF TEMP
MOVLW 0X00
CALL WRITE
MOVWF
EEADR
Page | 41
MOVLW 0X80 ;FORCE CALL DELAY
CURSER TO THE BEGINNING OF THE
BANKSEL EEADR
FIRST LINE
INCF EEADR,1
MOVWF TEMP
GOTO READ
CALL WRITE
WRITE
BANKSEL PORTA
BANKSEL PORTA
BSF PORTA,3
SWAPF TEMP,0
READ
MOVWF PORTD
BANKSEL
CALL ENABLE
EECON1
MOVF TEMP,W
BCF
EECON1,EEPGD MOVWF PORTD
BSF CALL ENABLE
EECON1,RD
CALL DELAY
BANKSEL
EEDATA RETURN
MOVF ENABLE
EEDATA,W
BANKSEL PORTA
BANKSEL
BSF PORTA,1
TEMP
NOP
MOVWF
TEMP NOP
BANKSEL NOP
PORTA
NOP
CALL
NOP
WRITE
Page | 42
NOP ENDC
NOP ORG 0X00
BCF PORTA,1 GOTO START
CALL DELAY START
RETURN CLRF PORTA
DELAY CLRF PORTB
MOVLW 0XFF BANKSEL TRISB
MOVWF DEL1 CLRF TRISB
MOVLW 0XFF CLRF TRISA
MOVWF DEL2 BSF TRISA,4
DECFSZ DEL2,F BANKSEL PORTB
GOTO $-1 CLRF T1CON
DECFSZ DEL1,F CLRF TMR1H
GOTO $-5 CLRF TMR1L
RETURN ; MOVLW 0X00
END ; MOVWF T1CON
GLOW
LED BLINKING PROGRAM WITH BCF PORTA,4
VARIABLE TIMING
MOVLW 0X08
LIST P=PIC16F877
MOVWF PORTB
#INCLUDE<P16F877.INC>
CALL TIMER
CBLOCK 0X20
BTFSS PORTA,4
COUNT1
Page | 43
CALL SCALE ; MOVLW 0XFE
MOVLW 0X01 ; MOVWF TMR1H
MOVWF PORTB ; MOVLW 0XFA
CALL TIMER ; MOVWF TMR1L
BTFSS PORTA,4 BSF T1CON,TMR1ON
CALL SCALE BTFSS PIR1,0
MOVLW 0X04 GOTO $-1
MOVWF PORTB BCF T1CON,TMR1ON
CALL TIMER BCF PIR1,0
BTFSS PORTA,4 DECFSZ COUNT1,1
CALL SCALE GOTO $-8
MOVLW 0X02 RETURN
MOVWF PORTB SCALE
CALL TIMER SWAPF T1CON,F
BTFSS PORTA,4 INCF T1CON,1
CALL SCALE SWAPF T1CON,F
GOTO GLOW BCF PORTA,4
TIMER RETURN
MOVLW .31 END
MOVWF COUNT1 PROGRAM FOR FINDING AVERAGE
CLRF TMR1H LIST P = PIC16F877
CLRF TMR1L #INCLUDE<P16F877.INC>
Page | 44
CBLOCK 0X20 MOVLW .40
COUNT MOVWF INDF
SUM INCF FSR,1
NUMBER MOVLW .73
ENDC MOVWF INDF
ORG 0X00 INCF FSR,1
GOTO START MOVLW .68
START MOVWF INDF
BANKSEL TRISB MOVLW 0X23
CLRF TRISB MOVWF FSR
BANKSEL PORTB MOVLW 0X04
MOVLW 0X00 MOVWF COUNT
MOVWF STATUS MOVWF NUMBER
CLRF PORTB INCF NUMBER,1
MOVLW 0X23 MOVF INDF,W
MOVWF FSR MOVWF SUM
MOVLW .52 INCF FSR,1
MOVWF INDF MOVF INDF,W
INCF FSR,1 ADDWF SUM,F
MOVLW .12 DECFSZ COUNT,1
MOVWF INDF GOTO $-4
INCF FSR,1 INCF COUNT,1
Page | 45
AVG ENDC
MOVLW 0X00 ORG 0X00
MOVWF COUNT GOTO START
MOVF NUMBER,W START
SUBWF SUM,1 BANKSEL TRISB
INCF COUNT,1 CLRF TRISB
SUBWF SUM,W BANKSEL PORTB
BTFSC STATUS,0 MOVLW 0X00
GOTO $-5 MOVWF STATUS
MOVF COUNT,W CLRF PORTB
MOVWF PORTB
NOP MOVLW 0X22
GOTO $-1 MOVWF FSR
END MOVLW .67
MOVWF INDF
INCF FSR,1
PROGRAM FOR FINDING LARGEST MOVLW .27
NUMBER
MOVWF INDF
LIST P = PIC16F877
INCF FSR,1
#INCLUDE<P16F877.INC>
MOVLW .55
CBLOCK 0X20
MOVWF INDF
MAX
INCF FSR,1
COUNT
Page | 46
MOVLW .88 CHANGE
MOVWF INDF MOVF INDF,W
INCF FSR,1 MOVWF MAX
MOVLW .87 RETURN
MOVWF INDF END
MOVLW 0X22
MOVWF FSR
MOVF INDF,W
MOVWF MAX
MOVLW 0X04
MOVWF COUNT
INCF FSR,1
MOVF INDF,W
SUBWF MAX,W
BTFSSSTATUS,0
CALL CHANGE
DECFSZ COUNT,1
GOTO $-6
MOVF MAX,W
MOVWF PORTB
NOP
GOTO $-1
Page | 47