Hello,

For inline assembly better to use GLOBAL variables which takes place
outside of all function and you can avoid renaming variables.

Better choice not using inline assembly rather writing assembly code in a
separate files. Then you can make LIBRARIES or simple link to the main
program by an EXTERNal function.

Here is a short example in assemly and C:

------------------------------------ ASM
---------------------------------------

    list    p=pic16f887
    #include <p16f887.inc>

global _initports
global _PORTA_update
global _PORTB_update
global _PORTC_update
global _PORTD_update
global _PORTE_update
global _wPORTA
global _wPORTB
global _wPORTC
global _wPORTD
global _wPORTE

portio_data UDATA

_wPORTA RES 1
_wPORTB RES 1
_wPORTC RES 1
_wPORTD RES 1
_wPORTE RES 1

portio_code CODE

_initports

banksel ANSELH
clrf ANSELH
banksel ANSEL
clrf ANSEL

banksel TRISA
movlw 0xFF
movwf TRISA

clrf TRISB

movlw 0x4F
movwf TRISC

movlw 0x0F
movwf TRISD

movlw 0x06
movwf TRISE
 banksel _wPORTA

clrf _wPORTA
clrf _wPORTB
clrf _wPORTC
clrf _wPORTD
clrf _wPORTE

pagesel _PORTA_update
call _PORTA_update
pagesel _PORTB_update
call _PORTB_update
pagesel _PORTC_update
call _PORTC_update
pagesel _PORTD_update
call _PORTE_update
pagesel _PORTE_update
call _PORTE_update

return

_PORTA_update

banksel _wPORTA
movf _wPORTA,W
banksel PORTA
movwf PORTA

return

_PORTB_update

banksel _wPORTB
movf _wPORTB,W
banksel PORTB
movwf PORTB

return

_PORTC_update

banksel _wPORTC
movf _wPORTC,W
banksel PORTC
movwf PORTC

return

_PORTD_update

banksel _wPORTD
movf _wPORTD,W
banksel PORTD
movwf PORTD

return

_PORTE_update

banksel _wPORTE
movf _wPORTE,W
banksel PORTE
movwf PORTE

return

end


--------------------- C ----------------------------------

#include <pic16f887.h>

typedef unsigned int configword;

configword __at _CONFIG1 CONFIG1 =
_LVP_OFF & _FCMEN_OFF & _IESO_OFF &
_BOR_ON & _CPD_OFF & _CP_ON & _MCLRE_ON &
_PWRTE_ON & _WDT_OFF & _HS_OSC;

configword __at _CONFIG2 CONFIG2 = _WRT_OFF & _BOR21V;

extern void initports( void );

extern void PORTA_update( void );
extern void PORTB_update( void );
extern void PORTB_update( void );
extern void PORTD_update( void );
extern void PORTE_update( void );

extern unsigned char wPORTA,wPORTB,wPORTC,wPORTD,wPORTE;

main()
{

    initports();

    // ...........................


   while()
    {


        wPORTB &= 0x08;


        PORTA_update( void );
  PORTB_update( void );
  PORTB_update( void );
  PORTD_update( void );
  PORTE_update( void );

    }

}

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Here is an other example to show, how to aviod variables in inline assembly:

http://galzsolt.zzl.org/Elektronika/Soroskijelzo_v01/Soroskijelzo_v01.c

There are useful snipets on the internet...
------------------------------------------------------------------------------
Rapidly troubleshoot problems before they affect your business. Most IT 
organizations don't have a clear picture of how application performance 
affects their revenue. With AppDynamics, you get 100% visibility into your 
Java,.NET, & PHP application. Start your 15-day FREE TRIAL of AppDynamics Pro!
http://pubads.g.doubleclick.net/gampad/clk?id=84349831&iu=/4140/ostg.clktrk
_______________________________________________
Sdcc-user mailing list
Sdcc-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/sdcc-user

Reply via email to