I make fairly heavy use of macros in my PIC assembly programs. In fact, parts of my programs almost read like English because of all the macros. I like using macros in my programs for two reasons:
The thing that still gives me the most trouble when writing PIC assembly programs is the various skip instructions, especially when using them on input pins. The fact that you're dealing with negative logic, on top of the fact that you need to consider whether the pin is pulled up or down, makes me have to think really hard about each condition.
To simplify the process, I have written the following set of code:
PULLED_HIGH EQU 1
PULLED_LOW EQU 0
IF_ON macro pulled_status, port, pin
if pulled_status == PULLED_HIGH
btfss port, pin
endif
if pulled_status == PULLED_LOW
btfsc port, pin
endif
endm
IF_OFF macro pulled_status, port, pin
if pulled_status == PULLED_HIGH
btfsc port, pin
endif
if pulled_status == PULLED_LOW
btfss port, pin
endif
endm
For the pulled_status parameter, pass in either PULLED_HIGH or PULLED_LOW. This code makes writing conditions on input pins straight-forward. For each input pin, simply write two macros, such as:
IF_BUTTON_PRESSED macro
IF_ON PULLED_HIGH, PORTB, 4
endm
IF_BUTTON_NOT_PRESSED macro
IF_OFF PULLED_HIGH, PORTB, 4
endm
Then, in the body of the code, all you need to do is write:
IF_BUTTON_PRESSED
goto handle_button_press
No more complicated conditions.
Back to the index.
Page last modified on 03/13/2004