pic18f4550-examples/c/rotac/main.asm

711 lines
13 KiB
NASM
Executable File

;--------------------------------------------------------
; File Created by SDCC : free open source ISO C Compiler
; Version 4.5.0 #15242 (Linux)
;--------------------------------------------------------
; PIC16 port for the Microchip 16-bit core micros
;--------------------------------------------------------
list p=18f4550
radix dec
CONFIG XINST=OFF
CONFIG FOSC=HS
CONFIG WDT=OFF
CONFIG LVP=OFF
CONFIG MCLRE=OFF
;--------------------------------------------------------
; public variables in this module
;--------------------------------------------------------
global _main
global _rota1
global _rota2
global _rota3
global _rota4
global _rota5
global _sram_end
;--------------------------------------------------------
; extern variables in this module
;--------------------------------------------------------
extern _SPPCFGbits
extern _SPPEPSbits
extern _SPPCONbits
extern _UFRMLbits
extern _UFRMHbits
extern _UIRbits
extern _UIEbits
extern _UEIRbits
extern _UEIEbits
extern _USTATbits
extern _UCONbits
extern _UADDRbits
extern _UCFGbits
extern _UEP0bits
extern _UEP1bits
extern _UEP2bits
extern _UEP3bits
extern _UEP4bits
extern _UEP5bits
extern _UEP6bits
extern _UEP7bits
extern _UEP8bits
extern _UEP9bits
extern _UEP10bits
extern _UEP11bits
extern _UEP12bits
extern _UEP13bits
extern _UEP14bits
extern _UEP15bits
extern _PORTAbits
extern _PORTBbits
extern _PORTCbits
extern _PORTDbits
extern _PORTEbits
extern _LATAbits
extern _LATBbits
extern _LATCbits
extern _LATDbits
extern _LATEbits
extern _DDRAbits
extern _TRISAbits
extern _DDRBbits
extern _TRISBbits
extern _DDRCbits
extern _TRISCbits
extern _DDRDbits
extern _TRISDbits
extern _DDREbits
extern _TRISEbits
extern _OSCTUNEbits
extern _PIE1bits
extern _PIR1bits
extern _IPR1bits
extern _PIE2bits
extern _PIR2bits
extern _IPR2bits
extern _EECON1bits
extern _RCSTAbits
extern _TXSTAbits
extern _T3CONbits
extern _CMCONbits
extern _CVRCONbits
extern _CCP1ASbits
extern _ECCP1ASbits
extern _CCP1DELbits
extern _ECCP1DELbits
extern _BAUDCONbits
extern _BAUDCTLbits
extern _CCP2CONbits
extern _CCP1CONbits
extern _ECCP1CONbits
extern _ADCON2bits
extern _ADCON1bits
extern _ADCON0bits
extern _SSPCON2bits
extern _SSPCON1bits
extern _SSPSTATbits
extern _T2CONbits
extern _T1CONbits
extern _RCONbits
extern _WDTCONbits
extern _HLVDCONbits
extern _LVDCONbits
extern _OSCCONbits
extern _T0CONbits
extern _STATUSbits
extern _INTCON3bits
extern _INTCON2bits
extern _INTCONbits
extern _STKPTRbits
extern _SPPDATA
extern _SPPCFG
extern _SPPEPS
extern _SPPCON
extern _UFRM
extern _UFRML
extern _UFRMH
extern _UIR
extern _UIE
extern _UEIR
extern _UEIE
extern _USTAT
extern _UCON
extern _UADDR
extern _UCFG
extern _UEP0
extern _UEP1
extern _UEP2
extern _UEP3
extern _UEP4
extern _UEP5
extern _UEP6
extern _UEP7
extern _UEP8
extern _UEP9
extern _UEP10
extern _UEP11
extern _UEP12
extern _UEP13
extern _UEP14
extern _UEP15
extern _PORTA
extern _PORTB
extern _PORTC
extern _PORTD
extern _PORTE
extern _LATA
extern _LATB
extern _LATC
extern _LATD
extern _LATE
extern _DDRA
extern _TRISA
extern _DDRB
extern _TRISB
extern _DDRC
extern _TRISC
extern _DDRD
extern _TRISD
extern _DDRE
extern _TRISE
extern _OSCTUNE
extern _PIE1
extern _PIR1
extern _IPR1
extern _PIE2
extern _PIR2
extern _IPR2
extern _EECON1
extern _EECON2
extern _EEDATA
extern _EEADR
extern _RCSTA
extern _TXSTA
extern _TXREG
extern _RCREG
extern _SPBRG
extern _SPBRGH
extern _T3CON
extern _TMR3
extern _TMR3L
extern _TMR3H
extern _CMCON
extern _CVRCON
extern _CCP1AS
extern _ECCP1AS
extern _CCP1DEL
extern _ECCP1DEL
extern _BAUDCON
extern _BAUDCTL
extern _CCP2CON
extern _CCPR2
extern _CCPR2L
extern _CCPR2H
extern _CCP1CON
extern _ECCP1CON
extern _CCPR1
extern _CCPR1L
extern _CCPR1H
extern _ADCON2
extern _ADCON1
extern _ADCON0
extern _ADRES
extern _ADRESL
extern _ADRESH
extern _SSPCON2
extern _SSPCON1
extern _SSPSTAT
extern _SSPADD
extern _SSPBUF
extern _T2CON
extern _PR2
extern _TMR2
extern _T1CON
extern _TMR1
extern _TMR1L
extern _TMR1H
extern _RCON
extern _WDTCON
extern _HLVDCON
extern _LVDCON
extern _OSCCON
extern _T0CON
extern _TMR0
extern _TMR0L
extern _TMR0H
extern _STATUS
extern _FSR2L
extern _FSR2H
extern _PLUSW2
extern _PREINC2
extern _POSTDEC2
extern _POSTINC2
extern _INDF2
extern _BSR
extern _FSR1L
extern _FSR1H
extern _PLUSW1
extern _PREINC1
extern _POSTDEC1
extern _POSTINC1
extern _INDF1
extern _WREG
extern _FSR0L
extern _FSR0H
extern _PLUSW0
extern _PREINC0
extern _POSTDEC0
extern _POSTINC0
extern _INDF0
extern _INTCON3
extern _INTCON2
extern _INTCON
extern _PROD
extern _PRODL
extern _PRODH
extern _TABLAT
extern _TBLPTR
extern _TBLPTRL
extern _TBLPTRH
extern _TBLPTRU
extern _PC
extern _PCL
extern _PCLATH
extern _PCLATU
extern _STKPTR
extern _TOS
extern _TOSL
extern _TOSH
extern _TOSU
extern _delay1ktcy
;--------------------------------------------------------
; Equates to used internal registers
;--------------------------------------------------------
STATUS equ 0xfd8
FSR1L equ 0xfe1
FSR2L equ 0xfd9
POSTDEC1 equ 0xfe5
PREINC1 equ 0xfe4
; Internal registers
.registers udata_ovr 0x0000
r0x00 res 1
r0x01 res 1
ustat_main_00 udata 0X07FF
_sram_end res 0
;--------------------------------------------------------
; interrupt vector
;--------------------------------------------------------
;--------------------------------------------------------
; global & static initialisations
;--------------------------------------------------------
; I code from now on!
; ; Starting pCode block
S_main__main code
_main:
; .line 23; main.c TRISD = 0;
CLRF _TRISD
; .line 24; main.c LATD = 0;
CLRF _LATD
; .line 25; main.c TRISE = 0;
CLRF _TRISE
; .line 26; main.c LATE = 0x04;
MOVLW 0x04
MOVWF _LATE
; .line 27; main.c TRISB = 0xff;
MOVLW 0xff
MOVWF _TRISB
; .line 30; main.c INTCON2bits.RBPU = 0;
BCF _INTCON2bits, 7
; .line 31; main.c ADCON1 = 0x0f;
MOVLW 0x0f
MOVWF _ADCON1
_00112_DS_:
; .line 35; main.c port = PORTB;
MOVFF _PORTB, r0x00
; .line 36; main.c switch (port) {
MOVF r0x00, W
XORLW 0x01
BZ _00105_DS_
MOVF r0x00, W
XORLW 0x02
BZ _00106_DS_
MOVF r0x00, W
XORLW 0x04
BZ _00107_DS_
MOVF r0x00, W
XORLW 0x08
BZ _00108_DS_
MOVF r0x00, W
XORLW 0x10
BZ _00109_DS_
BRA _00110_DS_
_00105_DS_:
; .line 38; main.c rota1();
CALL _rota1
; .line 39; main.c break;
BRA _00110_DS_
_00106_DS_:
; .line 41; main.c rota2();
CALL _rota2
; .line 42; main.c break;
BRA _00110_DS_
_00107_DS_:
; .line 44; main.c rota3();
CALL _rota3
; .line 45; main.c break;
BRA _00110_DS_
_00108_DS_:
; .line 47; main.c rota4();
CALL _rota4
; .line 48; main.c break;
BRA _00110_DS_
_00109_DS_:
; .line 50; main.c rota5();
CALL _rota5
_00110_DS_:
; .line 53; main.c delay1ktcy(50); // 1s @ 1MHz
MOVLW 0x32
CALL _delay1ktcy
BRA _00112_DS_
; .line 55; main.c }
RETURN
; ; Starting pCode block
S_main__rota5 code
_rota5:
; .line 134; main.c void rota5(void) {
MOVFF FSR2L, POSTDEC1
MOVFF FSR1L, FSR2L
; .line 135; main.c LATD = 0x55;
MOVLW 0x55
MOVWF _LATD
; .line 136; main.c delay1ktcy(150);
MOVLW 0x96
CALL _delay1ktcy
; .line 137; main.c LATD = 0xAA;
MOVLW 0xaa
MOVWF _LATD
; .line 138; main.c delay1ktcy(150);
MOVLW 0x96
CALL _delay1ktcy
; .line 139; main.c }
MOVFF PREINC1, FSR2L
RETURN
; ; Starting pCode block
S_main__rota4 code
_rota4:
; .line 122; main.c void rota4(void) {
MOVFF FSR2L, POSTDEC1
MOVFF FSR1L, FSR2L
MOVFF r0x00, POSTDEC1
MOVFF r0x01, POSTDEC1
; .line 123; main.c LATD = 1;
MOVLW 0x01
MOVWF _LATD
_00343_DS_:
; .line 124; main.c while (LATD != 0x80) {
MOVF _LATD, W
XORLW 0x80
BZ _00345_DS_
; .line 125; main.c delay1ktcy(150);
MOVLW 0x96
CALL _delay1ktcy
; .line 126; main.c RLCF(LATD);
RLNCF _LATD, W
ANDLW 0xfe
MOVWF r0x00
RLNCF _LATD, W
ANDLW 0x01
MOVWF r0x01
MOVF r0x01, W
IORWF r0x00, W
MOVWF _LATD
BRA _00343_DS_
_00345_DS_:
; .line 128; main.c LATD = 0x80;
MOVLW 0x80
MOVWF _LATD
_00346_DS_:
; .line 129; main.c while (LATD != 0x01) {
MOVF _LATD, W
XORLW 0x01
BZ _00349_DS_
; .line 130; main.c delay1ktcy(150);
MOVLW 0x96
CALL _delay1ktcy
; .line 131; main.c RRCF(LATD);
RRNCF _LATD, W
ANDLW 0x7f
MOVWF r0x00
RRNCF _LATD, W
ANDLW 0x80
MOVWF r0x01
MOVF r0x01, W
IORWF r0x00, W
MOVWF _LATD
BRA _00346_DS_
_00349_DS_:
; .line 133; main.c }
MOVFF PREINC1, r0x01
MOVFF PREINC1, r0x00
MOVFF PREINC1, FSR2L
RETURN
; ; Starting pCode block
S_main__rota3 code
_rota3:
; .line 73; main.c void rota3(void) {
MOVFF FSR2L, POSTDEC1
MOVFF FSR1L, FSR2L
MOVFF r0x00, POSTDEC1
MOVFF r0x01, POSTDEC1
; .line 74; main.c LATD = 0x01;
MOVLW 0x01
MOVWF _LATD
_00212_DS_:
; .line 75; main.c while (LATD != 0x80) {
MOVF _LATD, W
XORLW 0x80
BZ _00214_DS_
; .line 76; main.c delay1ktcy(150);
MOVLW 0x96
CALL _delay1ktcy
; .line 77; main.c RLCF(LATD);
RLNCF _LATD, W
ANDLW 0xfe
MOVWF r0x00
RLNCF _LATD, W
ANDLW 0x01
MOVWF r0x01
MOVF r0x01, W
IORWF r0x00, W
MOVWF _LATD
BRA _00212_DS_
_00214_DS_:
; .line 79; main.c LATD = 0x81;
MOVLW 0x81
MOVWF _LATD
_00215_DS_:
; .line 80; main.c while (LATD != 0xC0) {
MOVF _LATD, W
XORLW 0xc0
BZ _00217_DS_
; .line 81; main.c delay1ktcy(150);
MOVLW 0x96
CALL _delay1ktcy
; .line 82; main.c LATD = LATD << 1;
BCF STATUS, 0
RLCF _LATD, F
; .line 83; main.c LATD |= 0x80;
BSF _LATD, 7
BRA _00215_DS_
_00217_DS_:
; .line 85; main.c LATD = 0xC1;
MOVLW 0xc1
MOVWF _LATD
_00218_DS_:
; .line 86; main.c while (LATD != 0xE0) {
MOVF _LATD, W
XORLW 0xe0
BZ _00220_DS_
; .line 87; main.c delay1ktcy(150);
MOVLW 0x96
CALL _delay1ktcy
; .line 88; main.c LATD = LATD << 1;
BCF STATUS, 0
RLCF _LATD, F
; .line 89; main.c LATD |= 0xC0;
MOVLW 0xc0
IORWF _LATD, F
BRA _00218_DS_
_00220_DS_:
; .line 91; main.c LATD = 0xE1;
MOVLW 0xe1
MOVWF _LATD
_00221_DS_:
; .line 92; main.c while (LATD != 0xF0) {
MOVF _LATD, W
XORLW 0xf0
BZ _00223_DS_
; .line 93; main.c delay1ktcy(150);
MOVLW 0x96
CALL _delay1ktcy
; .line 94; main.c LATD = LATD << 1;
BCF STATUS, 0
RLCF _LATD, F
; .line 95; main.c LATD |= 0xE0;
MOVLW 0xe0
IORWF _LATD, F
BRA _00221_DS_
_00223_DS_:
; .line 97; main.c LATD = 0xF1;
MOVLW 0xf1
MOVWF _LATD
_00224_DS_:
; .line 98; main.c while (LATD != 0xF8) {
MOVF _LATD, W
XORLW 0xf8
BZ _00226_DS_
; .line 99; main.c delay1ktcy(150);
MOVLW 0x96
CALL _delay1ktcy
; .line 100; main.c LATD = LATD << 1;
BCF STATUS, 0
RLCF _LATD, F
; .line 101; main.c LATD |= 0xF0;
MOVLW 0xf0
IORWF _LATD, F
BRA _00224_DS_
_00226_DS_:
; .line 103; main.c LATD = 0xF9;
MOVLW 0xf9
MOVWF _LATD
_00227_DS_:
; .line 104; main.c while (LATD != 0xFC) {
MOVF _LATD, W
XORLW 0xfc
BZ _00229_DS_
; .line 105; main.c delay1ktcy(150);
MOVLW 0x96
CALL _delay1ktcy
; .line 106; main.c LATD = LATD << 1;
BCF STATUS, 0
RLCF _LATD, F
; .line 107; main.c LATD |= 0xF8;
MOVLW 0xf8
IORWF _LATD, F
BRA _00227_DS_
_00229_DS_:
; .line 109; main.c LATD = 0xFD;
MOVLW 0xfd
MOVWF _LATD
_00230_DS_:
; .line 110; main.c while (LATD != 0xFE) {
MOVF _LATD, W
XORLW 0xfe
BZ _00232_DS_
; .line 111; main.c delay1ktcy(150);
MOVLW 0x96
CALL _delay1ktcy
; .line 112; main.c LATD = LATD << 1;
BCF STATUS, 0
RLCF _LATD, F
; .line 113; main.c LATD |= 0xFC;
MOVLW 0xfc
IORWF _LATD, F
BRA _00230_DS_
_00232_DS_:
; .line 115; main.c delay1ktcy(150);
MOVLW 0x96
CALL _delay1ktcy
; .line 116; main.c LATD = 0xFE;
MOVLW 0xfe
MOVWF _LATD
; .line 117; main.c delay1ktcy(150);
MOVLW 0x96
CALL _delay1ktcy
; .line 118; main.c LATD = 0xFF;
MOVLW 0xff
MOVWF _LATD
; .line 119; main.c delay1ktcy(150);
MOVLW 0x96
CALL _delay1ktcy
; .line 121; main.c }
MOVFF PREINC1, r0x01
MOVFF PREINC1, r0x00
MOVFF PREINC1, FSR2L
RETURN
; ; Starting pCode block
S_main__rota2 code
_rota2:
; .line 65; main.c void rota2(void) {
MOVFF FSR2L, POSTDEC1
MOVFF FSR1L, FSR2L
MOVFF r0x00, POSTDEC1
MOVFF r0x01, POSTDEC1
; .line 66; main.c LATD = 0x80;
MOVLW 0x80
MOVWF _LATD
_00189_DS_:
; .line 67; main.c while (LATD != 0x01) {
MOVF _LATD, W
XORLW 0x01
BZ _00192_DS_
; .line 68; main.c delay1ktcy(150);
MOVLW 0x96
CALL _delay1ktcy
; .line 69; main.c RRCF(LATD);
RRNCF _LATD, W
ANDLW 0x7f
MOVWF r0x00
RRNCF _LATD, W
ANDLW 0x80
MOVWF r0x01
MOVF r0x01, W
IORWF r0x00, W
MOVWF _LATD
BRA _00189_DS_
_00192_DS_:
; .line 72; main.c }
MOVFF PREINC1, r0x01
MOVFF PREINC1, r0x00
MOVFF PREINC1, FSR2L
RETURN
; ; Starting pCode block
S_main__rota1 code
_rota1:
; .line 57; main.c void rota1(void) {
MOVFF FSR2L, POSTDEC1
MOVFF FSR1L, FSR2L
MOVFF r0x00, POSTDEC1
MOVFF r0x01, POSTDEC1
; .line 58; main.c LATD = 1;
MOVLW 0x01
MOVWF _LATD
_00166_DS_:
; .line 59; main.c while (LATD != 0x80) {
MOVF _LATD, W
XORLW 0x80
BZ _00169_DS_
; .line 60; main.c delay1ktcy(150);
MOVLW 0x96
CALL _delay1ktcy
; .line 61; main.c RLCF(LATD);
RLNCF _LATD, W
ANDLW 0xfe
MOVWF r0x00
RLNCF _LATD, W
ANDLW 0x01
MOVWF r0x01
MOVF r0x01, W
IORWF r0x00, W
MOVWF _LATD
BRA _00166_DS_
_00169_DS_:
; .line 64; main.c }
MOVFF PREINC1, r0x01
MOVFF PREINC1, r0x00
MOVFF PREINC1, FSR2L
RETURN
; Statistics:
; code size: 608 (0x0260) bytes ( 0.46%)
; 304 (0x0130) words
; udata size: 0 (0x0000) bytes ( 0.00%)
; access size: 2 (0x0002) bytes
end