Click on the link to find out bits of information about the code used in this project.
;blink.asm
;This is a program which turns on and off pin B0
;Port A is set as an input and port B as an output
;The prescaler is set in the option register to 256 (to give timing pulse of 1/32 s)
;1s and 0.5 s time delays are created in the subroutines
;uses a 32768 Hz xtal
;*************************************************************
;EQUATES SECTION TMR0 EQU 1 ;TMR0 means 1 STATUS EQU 3 ;STATUS means 3 PORTA EQU 5 ;PORTA means 5 PORTB EQU 6 ;PORTB means 6 ZEROBIT EQU 2 ;ZEROBIT means 2 COUNT EQU 20H ;COUNT means 20h OPT_REG EQU 81H ;OPT_REG means 81h
;*************************************************************
PROCESSOR 16F628a ;means we are using the 16F628a chip __CONFIG H'2168' ;sets config bits ORG 0 ;the start address in program memory is 0 GOTO START ;go to START!
;*************************************************************
;SUBROUTINE SECTION
;1.0 SECOND DELAY DELAY1 CLRF TMR0 ;sets the TMR0 register to 0 LOOPA MOVF TMR0,W ;moves the contents of TMR0 reg to W reg SUBLW .32 ;the W reg is sub from 32 and result put in W reg BTFSS STATUS,ZEROBIT ;if ZEROBIT is 1(arith op is zero) then next op is skipped GOTO LOOPA ;GOTO LOOPA RETLW 0 ;return to main program with 0 in W reg
;0.5 SECOND DELAY DELAYP5 CLRF TMR0 ;sets the TMR0 register to 0 LOOPB MOVF TMR0,W ;moves the contents of TMR0 reg to W reg SUBLW .16 ;the W reg is sub from 16 and result put in W reg BTFSS STATUS,ZEROBIT ;if ZEROBIT is 1(arith op is zero) then next op is skipped GOTO LOOPB ;GOTO LOOPB RETLW 0 ;return to main program with 0 in W reg
;************************************************************
;CONFIGURATION SECTION
START BSF STATUS,5 ;activates addressing (of ram) to bank 1
MOVLW B'00011111' ;puts 00011111 into W reg MOVWF PORTA ;puts W reg into PORTA direction reg (input)
MOVLW B'00000000' ;puts 00000000 into W reg MOVWF PORTB ;puts W reg into PORTB direction reg (input)
MOVLW B'00000111' ;puts 00000111 into W reg MOVWF OPT_REG ;puts W reg into option reg to set prescaler
BCF STATUS,5 ;activates addressing (of ram) to bank 2 CLRF PORTA ;sets PORTA data (input) status to 0's CLRF PORTB ;sets PORTB data (output) status to 0's
;*********************************************************
;PROGRAM STARTS NOW
BEGIN BSF PORTB,0 ;turns on B0 CALL DELAY1 ;delays 1.0 seconds BCF PORTB,0 ;turns off B0 CALL DELAYP5 ;delays 0.5 seconds GOTO BEGIN ;loops to begin
END ;must have an end statement