Follow along with the video below to see how to install our site as a web app on your home screen.
Note: This feature may not be available in some browsers.
;************************************************************************
; *
; Filename: BA_L2-Flash_LED.asm *
; Date: 8/9/07 *
; File Version: 1.0 *
; *
; Author: David Meiklejohn *
; Company: Gooligum Electronics *
; *
;************************************************************************
; *
; Architecture: Baseline PIC *
; Processor: 12C508a/509 *
; *
;************************************************************************
; *
; Files required: none *
; *
;************************************************************************
; *
; Description: Lesson 2, example 1 *
; *
; Flashes a LED at approx 1 Hz. *
; LED continues to flash until power is removed. *
; *
;************************************************************************
; *
; Pin assignments: *
; GP1 - flashing LED *
; *
;************************************************************************
list p=12C508a
#include <p12C508a.inc>
; ext reset, no code protect, no watchdog, 4Mhz int clock
__CONFIG _MCLRE_ON & _CP_OFF & _WDT_OFF & _IntRC_OSC
;***** VARIABLE DEFINITIONS
UDATA
sGPIO res 1 ; shadow copy of GPIO
dc1 res 1 ; delay loop counters
dc2 res 1
;************************************************************************
RESET CODE 0x000 ; effective reset vector
movwf OSCCAL ; update OSCCAL with factory cal value
;***** MAIN PROGRAM
;***** Initialisation
start
movlw b'111101' ; configure GP1 (only) as an output
tris GPIO
clrf sGPIO ; start with shadow GPIO zeroed
;***** Main loop
flash
movf sGPIO,w ; get shadow copy of GPIO
xorlw b'000010' ; flip bit corresponding to GP1 (bit 1)
movwf GPIO ; write to GPIO
movwf sGPIO ; and update shadow copy
; delay 500ms
movlw .244 ; outer loop: 244 x (1023 + 1023 + 3) + 2
movwf dc2 ; = 499,958 cycles
clrf dc1 ; inner loop: 256 x 4 - 1
dly1 nop ; inner loop 1 = 1023 cycles
decfsz dc1,f
goto dly1
dly2 nop ; inner loop 2 = 1023 cycles
decfsz dc1,f
goto dly2
decfsz dc2,f
goto dly1
goto flash ; repeat forever
END