Hi Bruce, thanks for the reply,
I use the following code and INCLUDE it in my main PBP file:
The problem I am having is when invoking the PE_WRITE macro. To check what is being passed to the macro I am writing Data to PORTB. When I invoke the following:Code:' ============================================================================== ' Constants ' ============================================================================== CONTROL_BYTE con $40 ' write operation to device address $00 ' Port Expander Registers IOCON con $0A IODIRA CON $00 IODIRB CON $01 GPIOA CON $14 GPIOB con $15 ' ============================================================================== ' Pin Definitions ' ============================================================================== SCLK var PORTC.3 SDI var PORTC.4 SDO var PORTC.5 nCS var PORTA.2 nRST var PORTA.3 REGISTER_BYTE var byte DATA_BYTE var byte goto EndOfPortExpander ' ============================================================================== ' Macros ' ============================================================================== asm PE_Init_As_Outputs macro ; Send appropriate initialisation bytes for Outputs L?CALL _PE_INITIALISE_OUTPUTS endm PE_Write macro Data, Register ; Write Data to the Port Expander Register MOVLW Data MOVWF _DATA_BYTE MOVLW Data MOVWF PORTB MOVLW Register MOVWF _REGISTER_BYTE L?CALL _SEND_PE_BYTE endm endasm ' ============================================================================== ' Subs ' ============================================================================== PE_INITIALISE_OUTPUTS: nRST = 0 ' reset the port expander pause 10 nRST = 1 REGISTER_BYTE = IOCON DATA_BYTE = %00100000 gosub SEND_PE_BYTE ' setup IOCON for Bank 0 non-sequetial operation REGISTER_BYTE = IODIRA DATA_BYTE = $00 gosub SEND_PE_BYTE ' set PORTA as output REGISTER_BYTE = IODIRB DATA_BYTE = $00 gosub SEND_PE_BYTE ' set PORTB as output return SEND_PE_BYTE: nCS = 0 ' enable PE Shiftout SDO, SCLK, 1, [CONTROL_BYTE,REGISTER_BYTE,DATA_BYTE] nCS = 1 ' pause 10 return EndOfPortExpander:
I get 55h on PORTB - it works correctly. However when I call the following:Code:@ PE_Write 55h, _GPIOA
I get 22h on PORTB. I have tried other numbers for Temp but they all show 22h on PORTB.Code:Temp VAR BYTE Temp = $55 @ PE_Write _Temp, _GPIOA
I can only think that this is some kind of type mismatch but I don't see how. Any ideas?




Bookmarks