' PicBasic Pro code for blinking an LED on portB.0
' BASIC code:
' ================================================
BEGIN:
    HIGH 0           ' Turn LED on
    PAUSE 500        ' Wait 500mS (1/2 second)
    LOW 0            ' Turn LED off
    PAUSE 500        ' Wait 500mS (1/2 second)
    GOTO BEGIN       ' Loop continuously
' ==================================================

' Below is the assembly language generated by PicBasic Pro
' from our BASIC source code above.

PM_USED			EQU	1
INCLUDE	"16F84A.INC"
LIST
INCLUDE 'M16F8x.INC'    ; PM header
LIST
device  pic16F84A, xt_osc, wdt_on, pwrt_on, protect_off
XALL
LIST
RAM_START       		EQU	0000Ch
RAM_END         		EQU	0004Fh
RAM_BANKS       		EQU	00001h
BANK0_START     		EQU	0000Ch
BANK0_END       		EQU	0004Fh
EEPROM_START    		EQU	02100h
EEPROM_END      		EQU	0213Fh
R0              		EQU	RAM_START + 000h
R1              		EQU	RAM_START + 002h
R2              		EQU	RAM_START + 004h
R3              		EQU	RAM_START + 006h
R4              		EQU	RAM_START + 008h
R5              		EQU	RAM_START + 00Ah
R6              		EQU	RAM_START + 00Ch
R7              		EQU	RAM_START + 00Eh
R8              		EQU	RAM_START + 010h
FLAGS           		EQU	RAM_START + 012h
GOP             		EQU	RAM_START + 013h
RM1             		EQU	RAM_START + 014h
RM2             		EQU	RAM_START + 015h
RR1             		EQU	RAM_START + 016h
RR2             		EQU	RAM_START + 017h
PORTL           		EQU	PORTB
_PORTH           		EQU	PORTA
_TRISL           		EQU	TRISB
_TRISH           		EQU	TRISA
INCLUDE	"1EXAMPLE.MAC"
LIST
INCLUDE	"PBPPIC14.LIB"
LIST
; Oscillator is 4MHz
LIST
ORG 0                       ; Reset vector at 0
LIST
GOTO    INIT            ; Finish initialization
LIST
PAUSE   clrf    R1 + 1
PAUSEL  movwf   R1
pauseloop movlw -1              ; 1 (9)
addwf   R1, F           ; 1
btfss   STATUS, C       ; 1 / 2
addwf   R1 + 1, F       ; 1 / 0
btfss   STATUS, C       ; 2
GOTO    DONE
movlw   (PAUSE_DELAY) >> 8      ; 1
movwf   R0 + 1          ; 1
movlw   LOW (PAUSE_DELAY)       ; 1
CALL    PAUSEUSL        ; -2 (PAUSEUSL gives you 2 less than you a
GOTO    pauseloop       ; 2
LIST
PAUSEUS clrf    R0 + 1          ; 1
PAUSEUSL addlw  -24             ; 1 Subtract overhead
movwf   R0              ; 1
comf    R0 + 1, F       ; 1
movlw   -4              ; 1
btfss   STATUS, C       ; 1 / 2
GOTO    pauseush        ; 2 / 0
pauseusloop addwf R0, F         ; 1
btfsc   STATUS, C       ; 1 / 2
GOTO    pauseusloop     ; 2 / 0
pauseush addwf  R0, F           ; 1 Do an extra countdown
clrwdt                  ; 1 Keep Watchdog clear
incfsz  R0 + 1, F       ; 1 / 2
GOTO    pauseusloop     ; 2 / 0
btfsc   R0, 0           ; 1 / 2
GOTO    $ + 1           ; 2 / 0 Burn an extra cycle
btfss   R0, 1           ; 1 / 2
GOTO    pauseusdone     ; 2 / 0
nop                     ; 1
GOTO    $ + 1           ; 2 Burn an extra 2 cycles
pauseusdone RETURN              ; 2 + 3 (call + setup)
LIST
DONE    bcf     STATUS, IRP     ; 1 Set FSR to bank 0/1
bcf     STATUS, RP1     ; 1 Show direct bank 0
bcf     STATUS, RP0     ; 1
clrwdt                  ; 1 Hit Watchdog timer
DONERET RETURN                  ; 2 Done
LIST
INIT
LIST
main

 LABEL?L     _BEGIN	
     LALL
     _BEGIN
     HIGH?C   000h
     bsf     _PORTL, 000h
     bsf     STATUS, RP0
     bcf     ((_PORTL) + 80h), 000h
     PAUSE?C 001F4h
     bcf     STATUS, RP0
     movlw   LOW (HIGH (001F4h))
     movwf   R1 + 1
     movlw   LOW (LOW (001F4h))
     CALL    PAUSEL
     LOW?C   000h
     bcf     _PORTL, 000h
     bsf     STATUS, RP0
     bcf     ((_PORTL) + 80h), 000h
     PAUSE?C	001F4h
     bcf     STATUS, RP0
     movlw   LOW (HIGH (001F4h))
     movwf   R1 + 1
     movlw   LOW (LOW (001F4h))
     CALL    PAUSEL
     GOTO?L	_BEGIN
     GOTO    _BEGIN
     END
Imagine your time savings by typing in only 5 simple lines of PicBasic code as opposed to all of this using assembly..!
Imagine how fast you can also learn assembly language by examining the code generated by PicBasic Pro..!
Click HERE to return to the previous page.