Added working ADC example
This commit is contained in:
parent
b65be9a729
commit
44f377fd1c
32
c/adc/Makefile
Executable file
32
c/adc/Makefile
Executable file
|
|
@ -0,0 +1,32 @@
|
|||
# My pic workflow makefile by Fernando R Jacobo
|
||||
# Dependencies
|
||||
# SDCC Small Device C Compiler
|
||||
# pk2cmd for pickit pic programmers
|
||||
|
||||
# C compiler variables
|
||||
SRC=*.c
|
||||
CC=sdcc
|
||||
FAMILY=pic16
|
||||
PROC=18f4550
|
||||
|
||||
# ASM and program variables
|
||||
PPROC=PIC18F4550
|
||||
ASMPROC=18F4550
|
||||
|
||||
all: $(SRC:.c=.hex)
|
||||
|
||||
comp: $(SRC)
|
||||
$(CC) --use-non-free -m$(FAMILY) -p$(PROC) $^
|
||||
|
||||
clean:
|
||||
rm -f $(SRC:.c=.asm) $(SRC:.c=.cod) $(SRC:.c=.hex) $(SRC:.c=.lst) $(SRC:.c=.o)
|
||||
|
||||
program:
|
||||
pk2cmd -M -P${PPROC} -Fmain.hex
|
||||
|
||||
asm: *.asm
|
||||
gpasm -p ${ASMPROC} -o main.hex $^
|
||||
|
||||
asmp: asm program
|
||||
|
||||
.PHONY: all clean
|
||||
960
c/adc/main.asm
Normal file
960
c/adc/main.asm
Normal file
|
|
@ -0,0 +1,960 @@
|
|||
;--------------------------------------------------------
|
||||
; 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 _isr
|
||||
global _tmr_isr
|
||||
global _number_to_7seg
|
||||
global _display
|
||||
global _cleardisp
|
||||
global _count1k
|
||||
global _count1kbak
|
||||
global _start_adc
|
||||
global _setup
|
||||
global _main
|
||||
global _sram_end
|
||||
global _digit
|
||||
global _dsp_en
|
||||
|
||||
;--------------------------------------------------------
|
||||
; 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
|
||||
extern _delay100ktcy
|
||||
extern _adc_read
|
||||
extern __moduint
|
||||
extern __divuint
|
||||
|
||||
;--------------------------------------------------------
|
||||
; Equates to used internal registers
|
||||
;--------------------------------------------------------
|
||||
STATUS equ 0xfd8
|
||||
PCL equ 0xff9
|
||||
PCLATH equ 0xffa
|
||||
PCLATU equ 0xffb
|
||||
WREG equ 0xfe8
|
||||
BSR equ 0xfe0
|
||||
FSR0L equ 0xfe9
|
||||
FSR0H equ 0xfea
|
||||
FSR1L equ 0xfe1
|
||||
FSR2L equ 0xfd9
|
||||
INDF0 equ 0xfef
|
||||
POSTINC1 equ 0xfe6
|
||||
POSTDEC1 equ 0xfe5
|
||||
PREINC1 equ 0xfe4
|
||||
PLUSW2 equ 0xfdb
|
||||
PRODL equ 0xff3
|
||||
PRODH equ 0xff4
|
||||
|
||||
|
||||
idata
|
||||
_digit db 0x00, 0x00, 0x00, 0x00
|
||||
_dsp_en db 0x00
|
||||
|
||||
|
||||
; Internal registers
|
||||
.registers udata_ovr 0x0000
|
||||
r0x00 res 1
|
||||
r0x01 res 1
|
||||
r0x02 res 1
|
||||
r0x03 res 1
|
||||
r0x04 res 1
|
||||
r0x05 res 1
|
||||
r0x06 res 1
|
||||
r0x07 res 1
|
||||
r0x08 res 1
|
||||
|
||||
|
||||
ustat_main_00 udata 0X07FF
|
||||
_sram_end res 0
|
||||
|
||||
;--------------------------------------------------------
|
||||
; interrupt vector
|
||||
;--------------------------------------------------------
|
||||
|
||||
;--------------------------------------------------------
|
||||
; global & static initialisations
|
||||
;--------------------------------------------------------
|
||||
; ; Starting pCode block for absolute section
|
||||
; ;-----------------------------------------
|
||||
S_main_ivec_0x1_isr code 0X000008
|
||||
ivec_0x1_isr:
|
||||
GOTO _isr
|
||||
|
||||
; I code from now on!
|
||||
; ; Starting pCode block
|
||||
S_main__main code
|
||||
_main:
|
||||
; .line 176; main.c setup();
|
||||
CALL _setup
|
||||
; .line 177; main.c start_adc();
|
||||
CALL _start_adc
|
||||
; .line 178; main.c ADCON0bits.ADON = 1;
|
||||
BSF _ADCON0bits, 0
|
||||
_00255_DS_:
|
||||
; .line 181; main.c ADCON0bits.GO = 1;
|
||||
BSF _ADCON0bits, 1
|
||||
; .line 182; main.c delay1ktcy(100);
|
||||
MOVLW 0x64
|
||||
CALL _delay1ktcy
|
||||
_00251_DS_:
|
||||
; .line 183; main.c while (ADCON0bits.GO);
|
||||
BTFSC _ADCON0bits, 1
|
||||
BRA _00251_DS_
|
||||
; .line 184; main.c cuenta = adc_read();
|
||||
CALL _adc_read
|
||||
MOVWF r0x00
|
||||
MOVFF PRODL, r0x01
|
||||
; .line 185; main.c cleardisp();
|
||||
CALL _cleardisp
|
||||
; .line 186; main.c display(cuenta);
|
||||
MOVF r0x01, W
|
||||
MOVWF POSTDEC1
|
||||
MOVF r0x00, W
|
||||
MOVWF POSTDEC1
|
||||
CALL _display
|
||||
MOVF POSTINC1, F
|
||||
MOVF POSTINC1, F
|
||||
BRA _00255_DS_
|
||||
; .line 189; main.c }
|
||||
RETURN
|
||||
|
||||
; ; Starting pCode block
|
||||
S_main__setup code
|
||||
_setup:
|
||||
; .line 137; main.c void setup(void){
|
||||
MOVFF FSR2L, POSTDEC1
|
||||
MOVFF FSR1L, FSR2L
|
||||
; .line 139; main.c LATD = 0;
|
||||
CLRF _LATD
|
||||
; .line 140; main.c TRISD = 0;
|
||||
CLRF _TRISD
|
||||
; .line 142; main.c TRISB = 0xff;
|
||||
MOVLW 0xff
|
||||
MOVWF _TRISB
|
||||
; .line 143; main.c LATB = 0x00;
|
||||
CLRF _LATB
|
||||
; .line 146; main.c TRISE = 0;
|
||||
CLRF _TRISE
|
||||
; .line 147; main.c LATE = 0;
|
||||
CLRF _LATE
|
||||
; .line 149; main.c TRISA = 0x1;
|
||||
MOVLW 0x01
|
||||
MOVWF _TRISA
|
||||
; .line 150; main.c LATA = 0;
|
||||
CLRF _LATA
|
||||
; .line 153; main.c INTCONbits.GIE = 1;
|
||||
BSF _INTCONbits, 7
|
||||
; .line 154; main.c INTCONbits.PEIE = 1;
|
||||
BSF _INTCONbits, 6
|
||||
; .line 155; main.c INTCONbits.RBIE = 0;
|
||||
BCF _INTCONbits, 3
|
||||
; .line 156; main.c INTCON2bits.RBPU = 0;
|
||||
BCF _INTCON2bits, 7
|
||||
; .line 157; main.c INTCON2bits.RBIP = 1;
|
||||
BSF _INTCON2bits, 0
|
||||
; .line 158; main.c RCONbits.IPEN = 1;
|
||||
BSF _RCONbits, 7
|
||||
; .line 161; main.c INTCONbits.TMR0IE = 1;
|
||||
BSF _INTCONbits, 5
|
||||
; .line 162; main.c INTCON2bits.TMR0IP = 1;
|
||||
BSF _INTCON2bits, 2
|
||||
; .line 164; main.c T0CONbits.T08BIT = 1;
|
||||
BSF _T0CONbits, 6
|
||||
; .line 165; main.c T0CONbits.T0CS = 0; // Source internal oscilator
|
||||
BCF _T0CONbits, 5
|
||||
; .line 166; main.c T0CONbits.PSA = 0;
|
||||
BCF _T0CONbits, 3
|
||||
; .line 170; main.c T0CONbits.T0PS = 0x7;
|
||||
MOVF _T0CONbits, W
|
||||
ANDLW 0xf8
|
||||
IORLW 0x07
|
||||
MOVWF _T0CONbits
|
||||
; .line 171; main.c T0CONbits.TMR0ON = 1;
|
||||
BSF _T0CONbits, 7
|
||||
; .line 172; main.c }
|
||||
MOVFF PREINC1, FSR2L
|
||||
RETURN
|
||||
|
||||
; ; Starting pCode block
|
||||
S_main__start_adc code
|
||||
_start_adc:
|
||||
; .line 128; main.c void start_adc(void) {
|
||||
MOVFF FSR2L, POSTDEC1
|
||||
MOVFF FSR1L, FSR2L
|
||||
; .line 129; main.c ADCON0bits.CHS = 0;
|
||||
MOVF _ADCON0bits, W
|
||||
ANDLW 0xc3
|
||||
MOVWF _ADCON0bits
|
||||
; .line 130; main.c ADCON1bits.PCFG = 0xE;
|
||||
MOVF _ADCON1bits, W
|
||||
ANDLW 0xf0
|
||||
IORLW 0x0e
|
||||
MOVWF _ADCON1bits
|
||||
; .line 131; main.c ADCON2bits.ADFM = 1;
|
||||
BSF _ADCON2bits, 7
|
||||
; .line 132; main.c ADCON2bits.ACQT = 0x5;
|
||||
MOVF _ADCON2bits, W
|
||||
ANDLW 0xc7
|
||||
IORLW 0x28
|
||||
MOVWF _ADCON2bits
|
||||
; .line 133; main.c ADCON2bits.ADCS = 0x1;
|
||||
MOVF _ADCON2bits, W
|
||||
ANDLW 0xf8
|
||||
IORLW 0x01
|
||||
MOVWF _ADCON2bits
|
||||
; .line 134; main.c ADCON0bits.ADON = 1;
|
||||
BSF _ADCON0bits, 0
|
||||
; .line 135; main.c }
|
||||
MOVFF PREINC1, FSR2L
|
||||
RETURN
|
||||
|
||||
; ; Starting pCode block
|
||||
S_main__count1kbak code
|
||||
_count1kbak:
|
||||
; .line 122; main.c void count1kbak(void) {
|
||||
MOVFF FSR2L, POSTDEC1
|
||||
MOVFF FSR1L, FSR2L
|
||||
MOVFF r0x00, POSTDEC1
|
||||
MOVFF r0x01, POSTDEC1
|
||||
MOVFF r0x02, POSTDEC1
|
||||
MOVFF r0x03, POSTDEC1
|
||||
; .line 123; main.c for(int i = 9999; i >= 0; i--) {
|
||||
MOVLW 0x0f
|
||||
MOVWF r0x00
|
||||
MOVLW 0x27
|
||||
MOVWF r0x01
|
||||
_00234_DS_:
|
||||
BSF STATUS, 0
|
||||
BTFSS r0x01, 7
|
||||
BCF STATUS, 0
|
||||
BC _00236_DS_
|
||||
; .line 124; main.c display(i);
|
||||
MOVF r0x00, W
|
||||
MOVWF r0x02
|
||||
MOVF r0x01, W
|
||||
MOVWF r0x03
|
||||
MOVF r0x03, W
|
||||
MOVWF POSTDEC1
|
||||
MOVF r0x02, W
|
||||
MOVWF POSTDEC1
|
||||
CALL _display
|
||||
MOVF POSTINC1, F
|
||||
MOVF POSTINC1, F
|
||||
; .line 125; main.c delay100ktcy(5);
|
||||
MOVLW 0x05
|
||||
CALL _delay100ktcy
|
||||
; .line 123; main.c for(int i = 9999; i >= 0; i--) {
|
||||
MOVLW 0xff
|
||||
ADDWF r0x00, F
|
||||
ADDWFC r0x01, F
|
||||
BRA _00234_DS_
|
||||
_00236_DS_:
|
||||
; .line 127; main.c }
|
||||
MOVFF PREINC1, r0x03
|
||||
MOVFF PREINC1, r0x02
|
||||
MOVFF PREINC1, r0x01
|
||||
MOVFF PREINC1, r0x00
|
||||
MOVFF PREINC1, FSR2L
|
||||
RETURN
|
||||
|
||||
; ; Starting pCode block
|
||||
S_main__count1k code
|
||||
_count1k:
|
||||
; .line 116; main.c void count1k(void) {
|
||||
MOVFF FSR2L, POSTDEC1
|
||||
MOVFF FSR1L, FSR2L
|
||||
MOVFF r0x00, POSTDEC1
|
||||
MOVFF r0x01, POSTDEC1
|
||||
MOVFF r0x02, POSTDEC1
|
||||
MOVFF r0x03, POSTDEC1
|
||||
; .line 117; main.c for(int i = 0; i < 9999; i++) {
|
||||
CLRF r0x00
|
||||
CLRF r0x01
|
||||
_00210_DS_:
|
||||
MOVF r0x01, W
|
||||
ADDLW 0x80
|
||||
ADDLW 0x59
|
||||
BNZ _00227_DS_
|
||||
MOVLW 0x0f
|
||||
SUBWF r0x00, W
|
||||
_00227_DS_:
|
||||
BC _00212_DS_
|
||||
; .line 118; main.c display(i);
|
||||
MOVF r0x00, W
|
||||
MOVWF r0x02
|
||||
MOVF r0x01, W
|
||||
MOVWF r0x03
|
||||
MOVF r0x03, W
|
||||
MOVWF POSTDEC1
|
||||
MOVF r0x02, W
|
||||
MOVWF POSTDEC1
|
||||
CALL _display
|
||||
MOVF POSTINC1, F
|
||||
MOVF POSTINC1, F
|
||||
; .line 119; main.c delay100ktcy(5);
|
||||
MOVLW 0x05
|
||||
CALL _delay100ktcy
|
||||
; .line 117; main.c for(int i = 0; i < 9999; i++) {
|
||||
INFSNZ r0x00, F
|
||||
INCF r0x01, F
|
||||
BRA _00210_DS_
|
||||
_00212_DS_:
|
||||
; .line 121; main.c }
|
||||
MOVFF PREINC1, r0x03
|
||||
MOVFF PREINC1, r0x02
|
||||
MOVFF PREINC1, r0x01
|
||||
MOVFF PREINC1, r0x00
|
||||
MOVFF PREINC1, FSR2L
|
||||
RETURN
|
||||
|
||||
; ; Starting pCode block
|
||||
S_main__cleardisp code
|
||||
_cleardisp:
|
||||
; .line 109; main.c void cleardisp(void) {
|
||||
MOVFF FSR2L, POSTDEC1
|
||||
MOVFF FSR1L, FSR2L
|
||||
BANKSEL _digit
|
||||
; .line 110; main.c digit[0] = 0;
|
||||
CLRF _digit, B
|
||||
BANKSEL (_digit + 1)
|
||||
; .line 111; main.c digit[1] = 0;
|
||||
CLRF (_digit + 1), B
|
||||
BANKSEL (_digit + 2)
|
||||
; .line 112; main.c digit[2] = 0;
|
||||
CLRF (_digit + 2), B
|
||||
BANKSEL (_digit + 3)
|
||||
; .line 113; main.c digit[3] = 0;
|
||||
CLRF (_digit + 3), B
|
||||
; .line 114; main.c }
|
||||
MOVFF PREINC1, FSR2L
|
||||
RETURN
|
||||
|
||||
; ; Starting pCode block
|
||||
S_main__display code
|
||||
_display:
|
||||
; .line 100; main.c void display(uint16_t num){
|
||||
MOVFF FSR2L, POSTDEC1
|
||||
MOVFF FSR1L, FSR2L
|
||||
MOVFF r0x00, POSTDEC1
|
||||
MOVFF r0x01, POSTDEC1
|
||||
MOVFF r0x02, POSTDEC1
|
||||
MOVFF r0x03, POSTDEC1
|
||||
MOVFF r0x04, POSTDEC1
|
||||
MOVFF r0x05, POSTDEC1
|
||||
MOVFF r0x06, POSTDEC1
|
||||
MOVFF r0x07, POSTDEC1
|
||||
MOVFF r0x08, POSTDEC1
|
||||
MOVLW 0x02
|
||||
MOVFF PLUSW2, r0x00
|
||||
MOVLW 0x03
|
||||
MOVFF PLUSW2, r0x01
|
||||
; .line 102; main.c if (num > 9999) return;
|
||||
MOVF r0x00, W
|
||||
MOVWF r0x02
|
||||
MOVF r0x01, W
|
||||
MOVWF r0x03
|
||||
MOVLW 0x27
|
||||
SUBWF r0x03, W
|
||||
BNZ _00198_DS_
|
||||
MOVLW 0x10
|
||||
SUBWF r0x02, W
|
||||
_00198_DS_:
|
||||
BC _00177_DS_
|
||||
; .line 103; main.c while(num) {
|
||||
CLRF r0x02
|
||||
_00174_DS_:
|
||||
MOVF r0x01, W
|
||||
IORWF r0x00, W
|
||||
BZ _00177_DS_
|
||||
; .line 104; main.c digit[i] = num%10;
|
||||
MOVLW LOW(_digit)
|
||||
ADDWF r0x02, W
|
||||
MOVWF r0x03
|
||||
CLRF r0x04
|
||||
MOVLW HIGH(_digit)
|
||||
ADDWFC r0x04, F
|
||||
MOVF r0x00, W
|
||||
MOVWF r0x05
|
||||
MOVF r0x01, W
|
||||
MOVWF r0x06
|
||||
MOVLW 0x00
|
||||
MOVWF POSTDEC1
|
||||
MOVLW 0x0a
|
||||
MOVWF POSTDEC1
|
||||
MOVF r0x06, W
|
||||
MOVWF POSTDEC1
|
||||
MOVF r0x05, W
|
||||
MOVWF POSTDEC1
|
||||
CALL __moduint
|
||||
MOVWF r0x07
|
||||
MOVFF PRODL, r0x08
|
||||
MOVLW 0x04
|
||||
ADDWF FSR1L, F
|
||||
MOVFF r0x03, FSR0L
|
||||
MOVFF r0x04, FSR0H
|
||||
MOVFF r0x07, INDF0
|
||||
; .line 105; main.c num = num/10;
|
||||
MOVLW 0x00
|
||||
MOVWF POSTDEC1
|
||||
MOVLW 0x0a
|
||||
MOVWF POSTDEC1
|
||||
MOVF r0x06, W
|
||||
MOVWF POSTDEC1
|
||||
MOVF r0x05, W
|
||||
MOVWF POSTDEC1
|
||||
CALL __divuint
|
||||
MOVWF r0x03
|
||||
MOVFF PRODL, r0x04
|
||||
MOVLW 0x04
|
||||
ADDWF FSR1L, F
|
||||
MOVF r0x03, W
|
||||
MOVWF r0x00
|
||||
MOVF r0x04, W
|
||||
MOVWF r0x01
|
||||
; .line 106; main.c i++;
|
||||
INCF r0x02, F
|
||||
BRA _00174_DS_
|
||||
_00177_DS_:
|
||||
; .line 108; main.c }
|
||||
MOVFF PREINC1, r0x08
|
||||
MOVFF PREINC1, r0x07
|
||||
MOVFF PREINC1, r0x06
|
||||
MOVFF PREINC1, r0x05
|
||||
MOVFF PREINC1, r0x04
|
||||
MOVFF PREINC1, r0x03
|
||||
MOVFF PREINC1, r0x02
|
||||
MOVFF PREINC1, r0x01
|
||||
MOVFF PREINC1, r0x00
|
||||
MOVFF PREINC1, FSR2L
|
||||
RETURN
|
||||
|
||||
; ; Starting pCode block
|
||||
S_main__number_to_7seg code
|
||||
_number_to_7seg:
|
||||
; .line 62; main.c uint8_t number_to_7seg(uint8_t number) {
|
||||
MOVFF FSR2L, POSTDEC1
|
||||
MOVFF FSR1L, FSR2L
|
||||
MOVFF r0x00, POSTDEC1
|
||||
MOVLW 0x02
|
||||
MOVFF PLUSW2, r0x00
|
||||
; .line 63; main.c switch (number) {
|
||||
MOVLW 0x10
|
||||
SUBWF r0x00, W
|
||||
BTFSC STATUS, 0
|
||||
BRA _00156_DS_
|
||||
CLRF PCLATH
|
||||
CLRF PCLATU
|
||||
RLCF r0x00, W
|
||||
RLCF PCLATH, F
|
||||
RLCF WREG, W
|
||||
RLCF PCLATH, F
|
||||
ANDLW 0xfc
|
||||
ADDLW LOW(_00167_DS_)
|
||||
MOVWF POSTDEC1
|
||||
MOVLW HIGH(_00167_DS_)
|
||||
ADDWFC PCLATH, F
|
||||
MOVLW UPPER(_00167_DS_)
|
||||
ADDWFC PCLATU, F
|
||||
MOVF PREINC1, W
|
||||
MOVWF PCL
|
||||
_00167_DS_:
|
||||
GOTO _00140_DS_
|
||||
GOTO _00141_DS_
|
||||
GOTO _00142_DS_
|
||||
GOTO _00143_DS_
|
||||
GOTO _00144_DS_
|
||||
GOTO _00145_DS_
|
||||
GOTO _00146_DS_
|
||||
GOTO _00147_DS_
|
||||
GOTO _00148_DS_
|
||||
GOTO _00149_DS_
|
||||
GOTO _00150_DS_
|
||||
GOTO _00151_DS_
|
||||
GOTO _00152_DS_
|
||||
GOTO _00153_DS_
|
||||
GOTO _00154_DS_
|
||||
GOTO _00155_DS_
|
||||
_00140_DS_:
|
||||
; .line 65; main.c return 0x3F;
|
||||
MOVLW 0x3f
|
||||
BRA _00158_DS_
|
||||
_00141_DS_:
|
||||
; .line 67; main.c return 0x06;
|
||||
MOVLW 0x06
|
||||
BRA _00158_DS_
|
||||
_00142_DS_:
|
||||
; .line 69; main.c return 0x5B;
|
||||
MOVLW 0x5b
|
||||
BRA _00158_DS_
|
||||
_00143_DS_:
|
||||
; .line 71; main.c return 0x4F;
|
||||
MOVLW 0x4f
|
||||
BRA _00158_DS_
|
||||
_00144_DS_:
|
||||
; .line 73; main.c return 0x66;
|
||||
MOVLW 0x66
|
||||
BRA _00158_DS_
|
||||
_00145_DS_:
|
||||
; .line 75; main.c return 0x6D;
|
||||
MOVLW 0x6d
|
||||
BRA _00158_DS_
|
||||
_00146_DS_:
|
||||
; .line 77; main.c return 0x7D;
|
||||
MOVLW 0x7d
|
||||
BRA _00158_DS_
|
||||
_00147_DS_:
|
||||
; .line 79; main.c return 0x07;
|
||||
MOVLW 0x07
|
||||
BRA _00158_DS_
|
||||
_00148_DS_:
|
||||
; .line 81; main.c return 0x7F;
|
||||
MOVLW 0x7f
|
||||
BRA _00158_DS_
|
||||
_00149_DS_:
|
||||
; .line 83; main.c return 0x6F;
|
||||
MOVLW 0x6f
|
||||
BRA _00158_DS_
|
||||
_00150_DS_:
|
||||
; .line 85; main.c return 0x77;
|
||||
MOVLW 0x77
|
||||
BRA _00158_DS_
|
||||
_00151_DS_:
|
||||
; .line 87; main.c return 0x7c;
|
||||
MOVLW 0x7c
|
||||
BRA _00158_DS_
|
||||
_00152_DS_:
|
||||
; .line 89; main.c return 0x39;
|
||||
MOVLW 0x39
|
||||
BRA _00158_DS_
|
||||
_00153_DS_:
|
||||
; .line 91; main.c return 0x5e;
|
||||
MOVLW 0x5e
|
||||
BRA _00158_DS_
|
||||
_00154_DS_:
|
||||
; .line 93; main.c return 0x79;
|
||||
MOVLW 0x79
|
||||
BRA _00158_DS_
|
||||
_00155_DS_:
|
||||
; .line 95; main.c return 0x71;
|
||||
MOVLW 0x71
|
||||
BRA _00158_DS_
|
||||
_00156_DS_:
|
||||
; .line 97; main.c return 0;
|
||||
CLRF WREG
|
||||
_00158_DS_:
|
||||
; .line 99; main.c }
|
||||
MOVFF PREINC1, r0x00
|
||||
MOVFF PREINC1, FSR2L
|
||||
RETURN
|
||||
|
||||
; ; Starting pCode block
|
||||
S_main__tmr_isr code
|
||||
_tmr_isr:
|
||||
; .line 39; main.c void tmr_isr(void){
|
||||
MOVFF FSR2L, POSTDEC1
|
||||
MOVFF FSR1L, FSR2L
|
||||
MOVFF r0x00, POSTDEC1
|
||||
MOVFF r0x01, POSTDEC1
|
||||
; .line 40; main.c LATA = LATE = 0;
|
||||
CLRF _LATE
|
||||
CLRF _LATA
|
||||
; .line 41; main.c LATD = number_to_7seg(digit[dsp_en]);
|
||||
MOVLW LOW(_digit)
|
||||
BANKSEL _dsp_en
|
||||
ADDWF _dsp_en, W, B
|
||||
MOVWF r0x00
|
||||
CLRF r0x01
|
||||
MOVLW HIGH(_digit)
|
||||
ADDWFC r0x01, F
|
||||
MOVFF r0x00, FSR0L
|
||||
MOVFF r0x01, FSR0H
|
||||
MOVFF INDF0, r0x00
|
||||
MOVF r0x00, W
|
||||
MOVWF POSTDEC1
|
||||
CALL _number_to_7seg
|
||||
MOVWF _LATD
|
||||
MOVF POSTINC1, F
|
||||
; .line 42; main.c switch (dsp_en) {
|
||||
MOVLW 0x04
|
||||
BANKSEL _dsp_en
|
||||
SUBWF _dsp_en, W, B
|
||||
BC _00116_DS_
|
||||
CLRF PCLATH
|
||||
CLRF PCLATU
|
||||
BANKSEL _dsp_en
|
||||
RLCF _dsp_en, W, B
|
||||
RLCF PCLATH, F
|
||||
RLCF WREG, W
|
||||
RLCF PCLATH, F
|
||||
ANDLW 0xfc
|
||||
ADDLW LOW(_00134_DS_)
|
||||
MOVWF POSTDEC1
|
||||
MOVLW HIGH(_00134_DS_)
|
||||
ADDWFC PCLATH, F
|
||||
MOVLW UPPER(_00134_DS_)
|
||||
ADDWFC PCLATU, F
|
||||
MOVF PREINC1, W
|
||||
MOVWF PCL
|
||||
_00134_DS_:
|
||||
GOTO _00112_DS_
|
||||
GOTO _00113_DS_
|
||||
GOTO _00114_DS_
|
||||
GOTO _00115_DS_
|
||||
_00112_DS_:
|
||||
; .line 44; main.c LATA = 0;
|
||||
CLRF _LATA
|
||||
; .line 45; main.c LATE = 0x4;
|
||||
MOVLW 0x04
|
||||
MOVWF _LATE
|
||||
; .line 46; main.c break;
|
||||
BRA _00116_DS_
|
||||
_00113_DS_:
|
||||
; .line 48; main.c LATE = 0x2;
|
||||
MOVLW 0x02
|
||||
MOVWF _LATE
|
||||
; .line 49; main.c break;
|
||||
BRA _00116_DS_
|
||||
_00114_DS_:
|
||||
; .line 51; main.c LATE = 0x1;
|
||||
MOVLW 0x01
|
||||
MOVWF _LATE
|
||||
; .line 52; main.c break;
|
||||
BRA _00116_DS_
|
||||
_00115_DS_:
|
||||
; .line 54; main.c LATE = 0;
|
||||
CLRF _LATE
|
||||
; .line 55; main.c LATA = 0x10;
|
||||
MOVLW 0x10
|
||||
MOVWF _LATA
|
||||
_00116_DS_:
|
||||
BANKSEL _dsp_en
|
||||
; .line 58; main.c dsp_en++;
|
||||
INCF _dsp_en, F, B
|
||||
; .line 59; main.c if (dsp_en > 3) dsp_en = 0;
|
||||
MOVLW 0x04
|
||||
BANKSEL _dsp_en
|
||||
SUBWF _dsp_en, W, B
|
||||
BNC _00119_DS_
|
||||
BANKSEL _dsp_en
|
||||
CLRF _dsp_en, B
|
||||
_00119_DS_:
|
||||
; .line 60; main.c }
|
||||
MOVFF PREINC1, r0x01
|
||||
MOVFF PREINC1, r0x00
|
||||
MOVFF PREINC1, FSR2L
|
||||
RETURN
|
||||
|
||||
; ; Starting pCode block
|
||||
S_main__isr code
|
||||
_isr:
|
||||
; .line 31; main.c void isr(void) __interrupt (1) {
|
||||
MOVFF STATUS, POSTDEC1
|
||||
MOVFF BSR, POSTDEC1
|
||||
MOVWF POSTDEC1
|
||||
MOVFF PRODL, POSTDEC1
|
||||
MOVFF PRODH, POSTDEC1
|
||||
MOVFF FSR0L, POSTDEC1
|
||||
MOVFF FSR0H, POSTDEC1
|
||||
MOVFF PCLATH, POSTDEC1
|
||||
MOVFF PCLATU, POSTDEC1
|
||||
MOVFF FSR2L, POSTDEC1
|
||||
MOVFF FSR1L, FSR2L
|
||||
; .line 32; main.c if (INTCONbits.TMR0IF){
|
||||
BTFSS _INTCONbits, 2
|
||||
BRA _00106_DS_
|
||||
; .line 33; main.c tmr_isr();
|
||||
CALL _tmr_isr
|
||||
; .line 34; main.c TMR0 = RATE;
|
||||
MOVLW 0xe6
|
||||
MOVWF _TMR0
|
||||
_00106_DS_:
|
||||
; .line 36; main.c INTCONbits.TMR0IF = 0;
|
||||
BCF _INTCONbits, 2
|
||||
; .line 37; main.c }
|
||||
MOVFF PREINC1, FSR2L
|
||||
MOVFF PREINC1, PCLATU
|
||||
MOVFF PREINC1, PCLATH
|
||||
MOVFF PREINC1, FSR0H
|
||||
MOVFF PREINC1, FSR0L
|
||||
MOVFF PREINC1, PRODH
|
||||
MOVFF PREINC1, PRODL
|
||||
MOVF PREINC1, W
|
||||
MOVFF PREINC1, BSR
|
||||
MOVFF PREINC1, STATUS
|
||||
RETFIE
|
||||
|
||||
|
||||
|
||||
; Statistics:
|
||||
; code size: 1094 (0x0446) bytes ( 0.83%)
|
||||
; 547 (0x0223) words
|
||||
; udata size: 0 (0x0000) bytes ( 0.00%)
|
||||
; access size: 9 (0x0009) bytes
|
||||
|
||||
|
||||
end
|
||||
189
c/adc/main.c
Normal file
189
c/adc/main.c
Normal file
|
|
@ -0,0 +1,189 @@
|
|||
#include <pic18fregs.h>
|
||||
#include <delay.h>
|
||||
#include <stdint.h>
|
||||
#include <adc.h>
|
||||
|
||||
/* FUSES START */
|
||||
#pragma config XINST = OFF
|
||||
#pragma config FOSC = HS
|
||||
#pragma config WDT = OFF
|
||||
#pragma config LVP = OFF
|
||||
#pragma config MCLRE = OFF
|
||||
|
||||
#define NDIGITS 4
|
||||
#define RATE 230
|
||||
|
||||
uint8_t digit[NDIGITS] = { 0 };
|
||||
uint8_t dsp_en = 0;
|
||||
|
||||
void isr(void) __interrupt (1);
|
||||
void tmr_isr(void);
|
||||
uint8_t number_to_7seg(uint8_t);
|
||||
void display(uint16_t);
|
||||
void cleardisp(void);
|
||||
void count1k(void);
|
||||
void count1kbak(void);
|
||||
void start_adc(void);
|
||||
void setup(void);
|
||||
int main(void);
|
||||
|
||||
|
||||
void isr(void) __interrupt (1) {
|
||||
if (INTCONbits.TMR0IF){
|
||||
tmr_isr();
|
||||
TMR0 = RATE;
|
||||
}
|
||||
INTCONbits.TMR0IF = 0;
|
||||
}
|
||||
|
||||
void tmr_isr(void){
|
||||
LATA = LATE = 0;
|
||||
LATD = number_to_7seg(digit[dsp_en]);
|
||||
switch (dsp_en) {
|
||||
case 0:
|
||||
LATA = 0;
|
||||
LATE = 0x4;
|
||||
break;
|
||||
case 1:
|
||||
LATE = 0x2;
|
||||
break;
|
||||
case 2:
|
||||
LATE = 0x1;
|
||||
break;
|
||||
case 3:
|
||||
LATE = 0;
|
||||
LATA = 0x10;
|
||||
break;
|
||||
}
|
||||
dsp_en++;
|
||||
if (dsp_en > 3) dsp_en = 0;
|
||||
}
|
||||
|
||||
uint8_t number_to_7seg(uint8_t number) {
|
||||
switch (number) {
|
||||
case 0:
|
||||
return 0x3F;
|
||||
case 1:
|
||||
return 0x06;
|
||||
case 2:
|
||||
return 0x5B;
|
||||
case 3:
|
||||
return 0x4F;
|
||||
case 4:
|
||||
return 0x66;
|
||||
case 5:
|
||||
return 0x6D;
|
||||
case 6:
|
||||
return 0x7D;
|
||||
case 7:
|
||||
return 0x07;
|
||||
case 8:
|
||||
return 0x7F;
|
||||
case 9:
|
||||
return 0x6F;
|
||||
case 0xa:
|
||||
return 0x77;
|
||||
case 0xb:
|
||||
return 0x7c;
|
||||
case 0xC:
|
||||
return 0x39;
|
||||
case 0xd:
|
||||
return 0x5e;
|
||||
case 0xe:
|
||||
return 0x79;
|
||||
case 0xf:
|
||||
return 0x71;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
void display(uint16_t num){
|
||||
uint8_t i = 0;
|
||||
if (num > 9999) return;
|
||||
while(num) {
|
||||
digit[i] = num%10;
|
||||
num = num/10;
|
||||
i++;
|
||||
}
|
||||
}
|
||||
void cleardisp(void) {
|
||||
digit[0] = 0;
|
||||
digit[1] = 0;
|
||||
digit[2] = 0;
|
||||
digit[3] = 0;
|
||||
}
|
||||
|
||||
void count1k(void) {
|
||||
for(int i = 0; i < 9999; i++) {
|
||||
display(i);
|
||||
delay100ktcy(5);
|
||||
}
|
||||
}
|
||||
void count1kbak(void) {
|
||||
for(int i = 9999; i >= 0; i--) {
|
||||
display(i);
|
||||
delay100ktcy(5);
|
||||
}
|
||||
}
|
||||
void start_adc(void) {
|
||||
ADCON0bits.CHS = 0;
|
||||
ADCON1bits.PCFG = 0xE;
|
||||
ADCON2bits.ADFM = 1;
|
||||
ADCON2bits.ACQT = 0x5;
|
||||
ADCON2bits.ADCS = 0x1;
|
||||
ADCON0bits.ADON = 1;
|
||||
}
|
||||
|
||||
void setup(void){
|
||||
/* Port setup */
|
||||
LATD = 0;
|
||||
TRISD = 0;
|
||||
|
||||
TRISB = 0xff;
|
||||
LATB = 0x00;
|
||||
// ADCON1 = 0xf;
|
||||
|
||||
TRISE = 0;
|
||||
LATE = 0;
|
||||
|
||||
TRISA = 0x1;
|
||||
LATA = 0;
|
||||
|
||||
/* Interrupt setup */
|
||||
INTCONbits.GIE = 1;
|
||||
INTCONbits.PEIE = 1;
|
||||
INTCONbits.RBIE = 0;
|
||||
INTCON2bits.RBPU = 0;
|
||||
INTCON2bits.RBIP = 1;
|
||||
RCONbits.IPEN = 1;
|
||||
|
||||
/* timer interrupt setup */
|
||||
INTCONbits.TMR0IE = 1;
|
||||
INTCON2bits.TMR0IP = 1;
|
||||
|
||||
T0CONbits.T08BIT = 1;
|
||||
T0CONbits.T0CS = 0; // Source internal oscilator
|
||||
T0CONbits.PSA = 0;
|
||||
//T0CONbits.T0PS0 = 1;
|
||||
//T0CONbits.T0PS1 = 1;
|
||||
//T0CONbits.T0PS2 = 1;
|
||||
T0CONbits.T0PS = 0x7;
|
||||
T0CONbits.TMR0ON = 1;
|
||||
}
|
||||
|
||||
int main(void) {
|
||||
uint16_t cuenta = 0;
|
||||
setup();
|
||||
start_adc();
|
||||
ADCON0bits.ADON = 1;
|
||||
for (;;) {
|
||||
//count1kbak();
|
||||
ADCON0bits.GO = 1;
|
||||
delay1ktcy(100);
|
||||
while (ADCON0bits.GO);
|
||||
cuenta = adc_read();
|
||||
cleardisp();
|
||||
display(cuenta);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
118
c/adc/main.hex
Normal file
118
c/adc/main.hex
Normal file
|
|
@ -0,0 +1,118 @@
|
|||
:020000040000FA
|
||||
:040000008DEF01F08F
|
||||
:08000800D3EF02F0D9CFE5FFB0
|
||||
:10001000E1CFD9FF00C0E5FF01C0E5FF02C0E5FF69
|
||||
:1000200003C0E5FF04C0E5FF05C0E5FF06C0E5FF2E
|
||||
:1000300007C0E5FF08C0E5FF020EDBCF00F0030EAE
|
||||
:10004000DBCF01F00050026E0150036E270E035CFF
|
||||
:1000500002E1100E025C38E2026A0150001034E046
|
||||
:10006000600E0224036E046A000E04220050056E26
|
||||
:100070000150066E000EE56E0A0EE56E0650E56E46
|
||||
:100080000550E56EDBEC00F0076EF3CF08F0040ED0
|
||||
:10009000E12603C0E9FF04C0EAFF07C0EFFF000E3E
|
||||
:1000A000E56E0A0EE56E0650E56E0550E56EE2EC73
|
||||
:1000B00001F0036EF3CF04F0040EE1260350006E4E
|
||||
:1000C0000450016E022AC9D7E4CF08F0E4CF07F04C
|
||||
:1000D000E4CF06F0E4CF05F0E4CF04F0E4CF03F082
|
||||
:1000E000E4CF02F0E4CF01F0E4CF00F0E4CFD9FF99
|
||||
:1000F0001200D9CFE5FFE1CFD9FF00C0E5FF020E26
|
||||
:10010000DBCF00F0100E005CD8B04FD0FA6AFB6A6B
|
||||
:100110000034FA36E834FA36FC0B2A0FE56E010E8D
|
||||
:10012000FA22000EFB22E450F96EB5EF00F0B7EFB3
|
||||
:1001300000F0B9EF00F0BBEF00F0BDEF00F0BFEF53
|
||||
:1001400000F0C1EF00F0C3EF00F0C5EF00F0C7EF23
|
||||
:1001500000F0C9EF00F0CBEF00F0CDEF00F0CFEFF3
|
||||
:1001600000F0D1EF00F0D3EF00F03F0E1FD0060EED
|
||||
:100170001DD05B0E1BD04F0E19D0660E17D06D0E22
|
||||
:1001800015D07D0E13D0070E11D07F0E0FD06F0E3D
|
||||
:100190000DD0770E0BD07C0E09D0390E07D05E0E35
|
||||
:1001A00005D0790E03D0710E01D0E86AE4CF00F0DB
|
||||
:1001B000E4CFD9FF1200D9CFE5FFE1CFD9FF00C0CE
|
||||
:1001C000E5FF01C0E5FF02C0E5FF03C0E5FF04C095
|
||||
:1001D000E5FF05C0E5FF06C0E5FF020EDBCF00F03E
|
||||
:1001E000030EDBCF01F0040EDBCF02F0050EDBCFF8
|
||||
:1001F00003F0046A056A0350800BE844066E06505B
|
||||
:1002000011E10250022603360350015C02E1025064
|
||||
:10021000005C04E2D8900332023204D0052A05C003
|
||||
:1002200004F0E9D70350015C02E10250005C04E3F2
|
||||
:100230000250005E0350015AD8900332023204C0CB
|
||||
:1002400005F004060550EEE101C0F3FF0050E4CFD5
|
||||
:1002500006F0E4CF05F0E4CF04F0E4CF03F0E4CF00
|
||||
:1002600002F0E4CF01F0E4CF00F0E4CFD9FF1200B8
|
||||
:10027000D9CFE5FFE1CFD9FF00C0E5FF01C0E5FF21
|
||||
:100280008D6A896A600E00016425006E016A000EA5
|
||||
:10029000012200C0E9FF01C0EAFFEFCF00F00050EB
|
||||
:1002A000E56E79EC00F08C6EE652040E0001645DA0
|
||||
:1002B00025E2FA6AFB6A00016435FA36E834FA3658
|
||||
:1002C000FC0BD20FE56E020EFA22000EFB22E45068
|
||||
:1002D000F96E71EF01F075EF01F078EF01F07BEF4F
|
||||
:1002E00001F0896A040E8D6E09D0020E8D6E06D063
|
||||
:1002F000010E8D6E03D08D6A100E896E0001642B85
|
||||
:10030000040E0001645D02E30001646BE4CF01F0C0
|
||||
:10031000E4CF00F0E4CFD9FF120011EEFFF021EEA0
|
||||
:10032000FFF0F86AA68EA69C07EEFFF00068ED6A63
|
||||
:100330000050FDE1CE0EF66E060EF76E000EF86E62
|
||||
:100340000900F5CF05F00900F5CF06F034D009001B
|
||||
:10035000F5CF00F00900F5CF01F00900F5CF02F06C
|
||||
:1003600009000900F5CFE9FF0900F5CFEAFF090010
|
||||
:1003700009000900F5CF03F00900F5CF04F00900EA
|
||||
:100380000900F6CF07F0F7CF08F0F8CF09F000C06A
|
||||
:10039000F6FF01C0F7FF02C0F8FF03D00900F5CF58
|
||||
:1003A000EEFF0306FBE20406F9E207C0F6FF08C011
|
||||
:1003B000F7FF09C0F8FF0506CAE20606C8E224EC0A
|
||||
:1003C00003F0FFD7D9CFE5FFE1CFD9FF00C0E5FFAC
|
||||
:1003D00001C0E5FF02C0E5FF03C0E5FF04C0E5FF83
|
||||
:1003E00005C0E5FF06C0E5FF07C0E5FF020EDBCF55
|
||||
:1003F00000F0030EDBCF01F0040EDBCF02F0050EA0
|
||||
:10040000DBCF03F0046A056A100E066E0150800B04
|
||||
:10041000E844076E005000260136045004260536D5
|
||||
:100420000750D8A404800350055C02E10250045C2C
|
||||
:1004300005E30250045E0350055A0080060606508C
|
||||
:10044000E5E101C0F3FF0050E4CF07F0E4CF06F090
|
||||
:10045000E4CF05F0E4CF04F0E4CF03F0E4CF02F002
|
||||
:10046000E4CF01F0E4CF00F0E4CFD9FF1200E806BA
|
||||
:10047000E56E630E63EC02F0E4500BE000D0E56E35
|
||||
:10048000630E63EC02F000D000D00000E450E82ED0
|
||||
:10049000F6D71200E806E56E630E37EC02F0630E45
|
||||
:1004A00063EC02F0E4500EE000D0E56E630E37EC32
|
||||
:1004B00002F0630E63EC02F000D000D00000E450C4
|
||||
:1004C000E82EF3D71200E8060000E85007E000D05D
|
||||
:1004D00000D000D000D00000E82EFAD71200D9CF0B
|
||||
:1004E000E5FFE1CFD9FF00C0E5FF01C0E5FF02C095
|
||||
:1004F000E5FF03C0E5FF0F0E006E270E016ED880EA
|
||||
:1005000001AED89013E20050026E0150036E03500A
|
||||
:10051000E56E0250E56E06EC00F0E652E652050E7E
|
||||
:100520004AEC02F0FF0E00260122E9D7E4CF03F0E7
|
||||
:10053000E4CF02F0E4CF01F0E4CF00F0E4CFD9FF44
|
||||
:100540001200D9CFE5FFE1CFD9FF00C0E5FF01C020
|
||||
:10055000E5FF02C0E5FF03C0E5FF006A016A015044
|
||||
:10056000800F590F02E10F0E005C12E20050026E84
|
||||
:100570000150036E0350E56E0250E56E06EC00F08C
|
||||
:10058000E652E652050E4AEC02F0004A012AE7D78D
|
||||
:10059000E4CF03F0E4CF02F0E4CF01F0E4CF00F0C9
|
||||
:1005A000E4CFD9FF1200D8CFE5FFE0CFE5FFE56E3D
|
||||
:1005B000F3CFE5FFF4CFE5FFE9CFE5FFEACFE5FFB5
|
||||
:1005C000FACFE5FFFBCFE5FFD9CFE5FFE1CFD9FFBC
|
||||
:1005D000F2A404D038EC01F0E60ED66EF294E4CF2B
|
||||
:1005E000D9FFE4CFFBFFE4CFFAFFE4CFEAFFE4CF8B
|
||||
:1005F000E9FFE4CFF4FFE4CFF3FFE450E4CFE0FF02
|
||||
:10060000E4CFD8FF1000D9CFE5FFE1CFD9FF8C6A46
|
||||
:10061000956AFF0E936E8A6A966A8D6A010E926ED3
|
||||
:10062000896AF28EF28CF296F19EF180D08EF28A77
|
||||
:10063000F184D58CD59AD596D550F80B0709D56E8F
|
||||
:10064000D58EE4CFD9FF120003EC03F040EC03F0A9
|
||||
:10065000C280C282640E37EC02F0C2B2FED76EECEA
|
||||
:1006600003F0006EF3CF01F058EC03F00150E56E9B
|
||||
:100670000050E56E06EC00F0E652E652EAD71200B2
|
||||
:10068000D9CFE5FFE1CFD9FFC250C30BC26EC15035
|
||||
:10069000F00B0E09C16EC08EC050C70B2809C06E8A
|
||||
:1006A000C050F80B0109C06EC280E4CFD9FF120020
|
||||
:1006B000D9CFE5FFE1CFD9FF0001606B0001616B8D
|
||||
:1006C0000001626B0001636BE4CFD9FF12000100EF
|
||||
:1006D000E40600006000000006000000C4CFF3FF45
|
||||
:0A06E000C3501200000000000000EB
|
||||
:020000040030CA
|
||||
:010001000CF2
|
||||
:010003001EDE
|
||||
:02000500038175
|
||||
:00000001FF
|
||||
32
c/lcd/Makefile
Executable file
32
c/lcd/Makefile
Executable file
|
|
@ -0,0 +1,32 @@
|
|||
# My pic workflow makefile by Fernando R Jacobo
|
||||
# Dependencies
|
||||
# SDCC Small Device C Compiler
|
||||
# pk2cmd for pickit pic programmers
|
||||
|
||||
# C compiler variables
|
||||
SRC=*.c
|
||||
CC=sdcc
|
||||
FAMILY=pic16
|
||||
PROC=18f4550
|
||||
|
||||
# ASM and program variables
|
||||
PPROC=PIC18F4550
|
||||
ASMPROC=18F4550
|
||||
|
||||
all: $(SRC:.c=.hex)
|
||||
|
||||
comp: $(SRC)
|
||||
$(CC) --use-non-free -m$(FAMILY) -p$(PROC) $^
|
||||
|
||||
clean:
|
||||
rm -f $(SRC:.c=.asm) $(SRC:.c=.cod) $(SRC:.c=.hex) $(SRC:.c=.lst) $(SRC:.c=.o)
|
||||
|
||||
program:
|
||||
pk2cmd -M -P${PPROC} -Fmain.hex
|
||||
|
||||
asm: *.asm
|
||||
gpasm -p ${ASMPROC} -o main.hex $^
|
||||
|
||||
asmp: asm program
|
||||
|
||||
.PHONY: all clean
|
||||
737
c/lcd/main.asm
Normal file
737
c/lcd/main.asm
Normal file
|
|
@ -0,0 +1,737 @@
|
|||
;--------------------------------------------------------
|
||||
; 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 _LCD_Initialize
|
||||
global _LCDWriteNibble
|
||||
global _LCDPutChar
|
||||
global _LCDPutCmd
|
||||
global _LCDPutStr
|
||||
global _LCDGoto
|
||||
global _sram_end
|
||||
global _main
|
||||
|
||||
;--------------------------------------------------------
|
||||
; extern variables in this module
|
||||
;--------------------------------------------------------
|
||||
extern __gptrload
|
||||
extern __gptrget1
|
||||
extern _stdin
|
||||
extern _stdout
|
||||
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
|
||||
PCLATH equ 0xffa
|
||||
WREG equ 0xfe8
|
||||
TBLPTRL equ 0xff6
|
||||
TBLPTRH equ 0xff7
|
||||
FSR1L equ 0xfe1
|
||||
FSR2L equ 0xfd9
|
||||
POSTINC1 equ 0xfe6
|
||||
POSTDEC1 equ 0xfe5
|
||||
PREINC1 equ 0xfe4
|
||||
PLUSW2 equ 0xfdb
|
||||
PRODH equ 0xff4
|
||||
|
||||
|
||||
; Internal registers
|
||||
.registers udata_ovr 0x0000
|
||||
r0x00 res 1
|
||||
r0x01 res 1
|
||||
r0x02 res 1
|
||||
r0x03 res 1
|
||||
r0x04 res 1
|
||||
r0x05 res 1
|
||||
r0x06 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 72; main.c OSCCON=0x72; // Select internal oscillator with frequency = 8MHz
|
||||
MOVLW 0x72
|
||||
MOVWF _OSCCON
|
||||
; .line 73; main.c LCD_Initialize();
|
||||
CALL _LCD_Initialize
|
||||
; .line 74; main.c LCDPutStr(" Hello World!"); //Display String "Hello World"
|
||||
MOVLW UPPER(___str_0)
|
||||
MOVWF r0x02
|
||||
MOVLW HIGH(___str_0)
|
||||
MOVWF r0x01
|
||||
MOVLW LOW(___str_0)
|
||||
MOVWF r0x00
|
||||
MOVF r0x02, W
|
||||
MOVWF POSTDEC1
|
||||
MOVF r0x01, W
|
||||
MOVWF POSTDEC1
|
||||
MOVF r0x00, W
|
||||
MOVWF POSTDEC1
|
||||
CALL _LCDPutStr
|
||||
MOVLW 0x03
|
||||
ADDWF FSR1L, F
|
||||
; .line 75; main.c LCDGoto(8,1); //Go to column 8 of second line
|
||||
MOVLW 0x01
|
||||
MOVWF POSTDEC1
|
||||
MOVLW 0x08
|
||||
MOVWF POSTDEC1
|
||||
CALL _LCDGoto
|
||||
MOVF POSTINC1, F
|
||||
MOVF POSTINC1, F
|
||||
; .line 76; main.c LCDPutChar('1'); //Display character '1'
|
||||
MOVLW 0x31
|
||||
MOVWF POSTDEC1
|
||||
CALL _LCDPutChar
|
||||
MOVF POSTINC1, F
|
||||
; .line 77; main.c DisplayClr(); // Clear the display
|
||||
MOVLW 0x01
|
||||
MOVWF POSTDEC1
|
||||
CALL _LCDPutCmd
|
||||
MOVF POSTINC1, F
|
||||
; .line 79; main.c LCDPutStr(" LCD Display"); // Dispay a string "LCD Display"
|
||||
MOVLW UPPER(___str_1)
|
||||
MOVWF r0x02
|
||||
MOVLW HIGH(___str_1)
|
||||
MOVWF r0x01
|
||||
MOVLW LOW(___str_1)
|
||||
MOVWF r0x00
|
||||
MOVF r0x02, W
|
||||
MOVWF POSTDEC1
|
||||
MOVF r0x01, W
|
||||
MOVWF POSTDEC1
|
||||
MOVF r0x00, W
|
||||
MOVWF POSTDEC1
|
||||
CALL _LCDPutStr
|
||||
MOVLW 0x03
|
||||
ADDWF FSR1L, F
|
||||
; .line 80; main.c LCDGoto(0,1); //Go to second line
|
||||
MOVLW 0x01
|
||||
MOVWF POSTDEC1
|
||||
MOVLW 0x00
|
||||
MOVWF POSTDEC1
|
||||
CALL _LCDGoto
|
||||
MOVF POSTINC1, F
|
||||
MOVF POSTINC1, F
|
||||
; .line 81; main.c LCDPutStr("Micro Lab"); //Display String "Micro Lab"
|
||||
MOVLW UPPER(___str_2)
|
||||
MOVWF r0x02
|
||||
MOVLW HIGH(___str_2)
|
||||
MOVWF r0x01
|
||||
MOVLW LOW(___str_2)
|
||||
MOVWF r0x00
|
||||
MOVF r0x02, W
|
||||
MOVWF POSTDEC1
|
||||
MOVF r0x01, W
|
||||
MOVWF POSTDEC1
|
||||
MOVF r0x00, W
|
||||
MOVWF POSTDEC1
|
||||
CALL _LCDPutStr
|
||||
MOVLW 0x03
|
||||
ADDWF FSR1L, F
|
||||
_00106_DS_:
|
||||
; .line 82; main.c while (1)
|
||||
BRA _00106_DS_
|
||||
; .line 87; main.c }
|
||||
RETURN
|
||||
|
||||
; ; Starting pCode block
|
||||
S_main__LCDGoto code
|
||||
_LCDGoto:
|
||||
; .line 191; main.c void LCDGoto(char pos,char ln)
|
||||
MOVFF FSR2L, POSTDEC1
|
||||
MOVFF FSR1L, FSR2L
|
||||
MOVFF r0x00, POSTDEC1
|
||||
MOVFF r0x01, POSTDEC1
|
||||
MOVFF r0x02, POSTDEC1
|
||||
MOVLW 0x02
|
||||
MOVFF PLUSW2, r0x00
|
||||
MOVLW 0x03
|
||||
MOVFF PLUSW2, r0x01
|
||||
; .line 194; main.c if ((ln > (NB_LINES-1)) || (pos > (NB_COL-1)))
|
||||
MOVF r0x01, W
|
||||
MOVWF r0x02
|
||||
MOVF r0x02, W
|
||||
ADDLW 0x80
|
||||
ADDLW 0x7e
|
||||
BC _00141_DS_
|
||||
MOVLW 0x10
|
||||
SUBWF r0x00, W
|
||||
BNC _00142_DS_
|
||||
_00141_DS_:
|
||||
; .line 197; main.c return;
|
||||
BRA _00144_DS_
|
||||
_00142_DS_:
|
||||
; .line 201; main.c LCDPutCmd((ln == 1) ? (0xC0 | pos) : (0x80 | pos));
|
||||
MOVF r0x01, W
|
||||
XORLW 0x01
|
||||
BNZ _00146_DS_
|
||||
MOVLW 0xc0
|
||||
IORWF r0x00, W
|
||||
MOVWF r0x01
|
||||
BRA _00147_DS_
|
||||
_00146_DS_:
|
||||
MOVLW 0x80
|
||||
IORWF r0x00, W
|
||||
MOVWF r0x01
|
||||
_00147_DS_:
|
||||
MOVF r0x01, W
|
||||
MOVWF POSTDEC1
|
||||
CALL _LCDPutCmd
|
||||
MOVF POSTINC1, F
|
||||
; .line 204; main.c delay1ktcy(LCD_delay);
|
||||
MOVLW 0x05
|
||||
CALL _delay1ktcy
|
||||
_00144_DS_:
|
||||
; .line 205; main.c }
|
||||
MOVFF PREINC1, r0x02
|
||||
MOVFF PREINC1, r0x01
|
||||
MOVFF PREINC1, r0x00
|
||||
MOVFF PREINC1, FSR2L
|
||||
RETURN
|
||||
|
||||
; ; Starting pCode block
|
||||
S_main__LCDPutStr code
|
||||
_LCDPutStr:
|
||||
; .line 178; main.c void LCDPutStr(const char *str)
|
||||
MOVFF FSR2L, POSTDEC1
|
||||
MOVFF FSR1L, FSR2L
|
||||
MOVFF r0x00, POSTDEC1
|
||||
MOVFF r0x01, POSTDEC1
|
||||
MOVFF r0x02, POSTDEC1
|
||||
MOVFF r0x03, POSTDEC1
|
||||
MOVFF r0x04, POSTDEC1
|
||||
MOVFF r0x05, POSTDEC1
|
||||
MOVFF r0x06, POSTDEC1
|
||||
MOVLW 0x02
|
||||
MOVFF PLUSW2, r0x00
|
||||
MOVLW 0x03
|
||||
MOVFF PLUSW2, r0x01
|
||||
MOVLW 0x04
|
||||
MOVFF PLUSW2, r0x02
|
||||
; .line 183; main.c while (str[i])
|
||||
CLRF r0x03
|
||||
_00133_DS_:
|
||||
MOVF r0x03, W
|
||||
ADDWF r0x00, W
|
||||
MOVWF r0x04
|
||||
CLRF WREG
|
||||
ADDWFC r0x01, W
|
||||
MOVWF r0x05
|
||||
CLRF WREG
|
||||
ADDWFC r0x02, W
|
||||
MOVWF r0x06
|
||||
MOVFF r0x04, TBLPTRL
|
||||
MOVFF r0x05, TBLPTRH
|
||||
MOVFF r0x06, PCLATH
|
||||
CALL __gptrload
|
||||
CALL __gptrget1
|
||||
MOVWF r0x04
|
||||
MOVF r0x04, W
|
||||
BZ _00136_DS_
|
||||
; .line 186; main.c LCDPutChar(str[i++]);
|
||||
MOVF r0x03, W
|
||||
ADDWF r0x00, W
|
||||
MOVWF r0x04
|
||||
CLRF WREG
|
||||
ADDWFC r0x01, W
|
||||
MOVWF r0x05
|
||||
CLRF WREG
|
||||
ADDWFC r0x02, W
|
||||
MOVWF r0x06
|
||||
INCF r0x03, F
|
||||
MOVFF r0x04, TBLPTRL
|
||||
MOVFF r0x05, TBLPTRH
|
||||
MOVFF r0x06, PCLATH
|
||||
CALL __gptrload
|
||||
CALL __gptrget1
|
||||
MOVWF r0x04
|
||||
MOVF r0x04, W
|
||||
MOVWF POSTDEC1
|
||||
CALL _LCDPutChar
|
||||
MOVF POSTINC1, F
|
||||
BRA _00133_DS_
|
||||
_00136_DS_:
|
||||
; .line 189; main.c }
|
||||
MOVFF PREINC1, r0x06
|
||||
MOVFF PREINC1, r0x05
|
||||
MOVFF PREINC1, r0x04
|
||||
MOVFF PREINC1, r0x03
|
||||
MOVFF PREINC1, r0x02
|
||||
MOVFF PREINC1, r0x01
|
||||
MOVFF PREINC1, r0x00
|
||||
MOVFF PREINC1, FSR2L
|
||||
RETURN
|
||||
|
||||
; ; Starting pCode block
|
||||
S_main__LCDPutCmd code
|
||||
_LCDPutCmd:
|
||||
; .line 161; main.c void LCDPutCmd(char ch)
|
||||
MOVFF FSR2L, POSTDEC1
|
||||
MOVFF FSR1L, FSR2L
|
||||
MOVFF r0x00, POSTDEC1
|
||||
MOVFF r0x01, POSTDEC1
|
||||
MOVLW 0x02
|
||||
MOVFF PLUSW2, r0x00
|
||||
; .line 163; main.c delay1ktcy(LCD_delay);
|
||||
MOVLW 0x05
|
||||
CALL _delay1ktcy
|
||||
; .line 166; main.c LCDWriteNibble(ch,instr);
|
||||
MOVLW 0x00
|
||||
MOVWF POSTDEC1
|
||||
MOVF r0x00, W
|
||||
MOVWF POSTDEC1
|
||||
CALL _LCDWriteNibble
|
||||
MOVF POSTINC1, F
|
||||
MOVF POSTINC1, F
|
||||
; .line 169; main.c ch = (ch << 4);
|
||||
SWAPF r0x00, W
|
||||
ANDLW 0xf0
|
||||
MOVWF r0x01
|
||||
; .line 171; main.c delay1ktcy(1);
|
||||
MOVLW 0x01
|
||||
CALL _delay1ktcy
|
||||
; .line 174; main.c LCDWriteNibble(ch,instr);
|
||||
MOVLW 0x00
|
||||
MOVWF POSTDEC1
|
||||
MOVF r0x01, W
|
||||
MOVWF POSTDEC1
|
||||
CALL _LCDWriteNibble
|
||||
MOVF POSTINC1, F
|
||||
MOVF POSTINC1, F
|
||||
; .line 175; main.c }
|
||||
MOVFF PREINC1, r0x01
|
||||
MOVFF PREINC1, r0x00
|
||||
MOVFF PREINC1, FSR2L
|
||||
RETURN
|
||||
|
||||
; ; Starting pCode block
|
||||
S_main__LCDPutChar code
|
||||
_LCDPutChar:
|
||||
; .line 146; main.c void LCDPutChar(char ch)
|
||||
MOVFF FSR2L, POSTDEC1
|
||||
MOVFF FSR1L, FSR2L
|
||||
MOVFF r0x00, POSTDEC1
|
||||
MOVFF r0x01, POSTDEC1
|
||||
MOVLW 0x02
|
||||
MOVFF PLUSW2, r0x00
|
||||
; .line 148; main.c delay1ktcy(LCD_delay);
|
||||
MOVLW 0x05
|
||||
CALL _delay1ktcy
|
||||
; .line 151; main.c LCDWriteNibble(ch,data);
|
||||
MOVLW 0x01
|
||||
MOVWF POSTDEC1
|
||||
MOVF r0x00, W
|
||||
MOVWF POSTDEC1
|
||||
CALL _LCDWriteNibble
|
||||
MOVF POSTINC1, F
|
||||
MOVF POSTINC1, F
|
||||
; .line 154; main.c ch = (ch << 4);
|
||||
SWAPF r0x00, W
|
||||
ANDLW 0xf0
|
||||
MOVWF r0x01
|
||||
; .line 157; main.c LCDWriteNibble(ch,data);
|
||||
MOVLW 0x01
|
||||
MOVWF POSTDEC1
|
||||
MOVF r0x01, W
|
||||
MOVWF POSTDEC1
|
||||
CALL _LCDWriteNibble
|
||||
MOVF POSTINC1, F
|
||||
MOVF POSTINC1, F
|
||||
; .line 158; main.c }
|
||||
MOVFF PREINC1, r0x01
|
||||
MOVFF PREINC1, r0x00
|
||||
MOVFF PREINC1, FSR2L
|
||||
RETURN
|
||||
|
||||
; ; Starting pCode block
|
||||
S_main__LCDWriteNibble code
|
||||
_LCDWriteNibble:
|
||||
; .line 119; main.c void LCDWriteNibble(char ch, char rs)
|
||||
MOVFF FSR2L, POSTDEC1
|
||||
MOVFF FSR1L, FSR2L
|
||||
MOVFF r0x00, POSTDEC1
|
||||
MOVFF r0x01, POSTDEC1
|
||||
MOVFF r0x02, POSTDEC1
|
||||
MOVLW 0x02
|
||||
MOVFF PLUSW2, r0x00
|
||||
MOVLW 0x03
|
||||
MOVFF PLUSW2, r0x01
|
||||
; .line 122; main.c ch = (ch >> 4);
|
||||
SWAPF r0x00, W
|
||||
ANDLW 0x0f
|
||||
MOVWF r0x00
|
||||
; .line 125; main.c ch = (ch & 0x0F);
|
||||
MOVLW 0x0f
|
||||
ANDWF r0x00, F
|
||||
; .line 128; main.c LCD_PORT = (LCD_PORT & 0xF0);
|
||||
MOVFF _PORTD, r0x02
|
||||
MOVLW 0xf0
|
||||
ANDWF r0x02, W
|
||||
MOVWF _PORTD
|
||||
; .line 131; main.c LCD_PORT = (LCD_PORT | ch);
|
||||
MOVF r0x00, W
|
||||
IORWF _PORTD, F
|
||||
; .line 134; main.c LCD_RS = rs;
|
||||
MOVF r0x01, W
|
||||
ANDLW 0x01
|
||||
SWAPF WREG, W
|
||||
MOVWF PRODH
|
||||
MOVF _PORTDbits, W
|
||||
ANDLW 0xef
|
||||
IORWF PRODH, W
|
||||
MOVWF _PORTDbits
|
||||
; .line 137; main.c LCD_RW = 0;
|
||||
BCF _PORTDbits, 5
|
||||
; .line 140; main.c LCD_EN = 1;
|
||||
BSF _PORTDbits, 6
|
||||
; .line 143; main.c LCD_EN = 0;
|
||||
BCF _PORTDbits, 6
|
||||
; .line 144; main.c }
|
||||
MOVFF PREINC1, r0x02
|
||||
MOVFF PREINC1, r0x01
|
||||
MOVFF PREINC1, r0x00
|
||||
MOVFF PREINC1, FSR2L
|
||||
RETURN
|
||||
|
||||
; ; Starting pCode block
|
||||
S_main__LCD_Initialize code
|
||||
_LCD_Initialize:
|
||||
; .line 89; main.c void LCD_Initialize()
|
||||
MOVFF FSR2L, POSTDEC1
|
||||
MOVFF FSR1L, FSR2L
|
||||
; .line 92; main.c LCD_PORT = 0;
|
||||
CLRF _PORTD
|
||||
; .line 94; main.c TRISD = 0x00;
|
||||
CLRF _TRISD
|
||||
; .line 97; main.c LCD_PWR = 1;
|
||||
BSF _PORTDbits, 7
|
||||
; .line 100; main.c delay1ktcy(LCD_Startup);
|
||||
MOVLW 0x0f
|
||||
CALL _delay1ktcy
|
||||
; .line 103; main.c LCDPutCmd(0x32);
|
||||
MOVLW 0x32
|
||||
MOVWF POSTDEC1
|
||||
CALL _LCDPutCmd
|
||||
MOVF POSTINC1, F
|
||||
; .line 106; main.c LCDPutCmd(FUNCTION_SET);
|
||||
MOVLW 0x28
|
||||
MOVWF POSTDEC1
|
||||
CALL _LCDPutCmd
|
||||
MOVF POSTINC1, F
|
||||
; .line 109; main.c LCDPutCmd(DISPLAY_SETUP);
|
||||
MOVLW 0x0c
|
||||
MOVWF POSTDEC1
|
||||
CALL _LCDPutCmd
|
||||
MOVF POSTINC1, F
|
||||
; .line 111; main.c DisplayClr();
|
||||
MOVLW 0x01
|
||||
MOVWF POSTDEC1
|
||||
CALL _LCDPutCmd
|
||||
MOVF POSTINC1, F
|
||||
; .line 114; main.c LCDPutCmd(ENTRY_MODE);
|
||||
MOVLW 0x06
|
||||
MOVWF POSTDEC1
|
||||
CALL _LCDPutCmd
|
||||
MOVF POSTINC1, F
|
||||
; .line 116; main.c }
|
||||
MOVFF PREINC1, FSR2L
|
||||
RETURN
|
||||
|
||||
; ; Starting pCode block
|
||||
___str_0:
|
||||
DB 0x20, 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x20, 0x57, 0x6f, 0x72, 0x6c, 0x64
|
||||
DB 0x21, 0x00
|
||||
; ; Starting pCode block
|
||||
___str_1:
|
||||
DB 0x20, 0x4c, 0x43, 0x44, 0x20, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79
|
||||
DB 0x00
|
||||
; ; Starting pCode block
|
||||
___str_2:
|
||||
DB 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x20, 0x4c, 0x61, 0x62, 0x00
|
||||
|
||||
|
||||
; Statistics:
|
||||
; code size: 802 (0x0322) bytes ( 0.61%)
|
||||
; 401 (0x0191) words
|
||||
; udata size: 0 (0x0000) bytes ( 0.00%)
|
||||
; access size: 7 (0x0007) bytes
|
||||
|
||||
|
||||
end
|
||||
205
c/lcd/main.c
Normal file
205
c/lcd/main.c
Normal file
|
|
@ -0,0 +1,205 @@
|
|||
//#include <xc.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <delay.h>
|
||||
#include <pic18fregs.h>
|
||||
|
||||
#pragma config XINST = OFF
|
||||
#pragma config FOSC = HS
|
||||
#pragma config WDT = OFF
|
||||
#pragma config LVP = OFF
|
||||
#pragma config MCLRE = OFF
|
||||
//#include "newxc8_header.h"
|
||||
#define _XTAL_FREQ 8000000
|
||||
//#define delay1ktcy(x) _delay((unsigned long)((x)*(_XTAL_FREQ/4000.0)))
|
||||
// set up the timing for the LCD delays
|
||||
#define LCD_delay 5 // ~5mS
|
||||
#define LCD_Startup 15 // ~15mS
|
||||
|
||||
// Command set for Hitachi 44780U LCD display controller
|
||||
#define LCD_CLEAR 0x01
|
||||
#define LCD_HOME 0x02
|
||||
#define LCD_CURSOR_BACK 0x10
|
||||
#define LCD_CURSOR_FWD 0x14
|
||||
#define LCD_PAN_LEFT 0x18
|
||||
#define LCD_PAN_RIGHT 0x1C
|
||||
#define LCD_CURSOR_OFF 0x0C
|
||||
#define LCD_CURSOR_ON 0x0E
|
||||
#define LCD_CURSOR_BLINK 0x0F
|
||||
#define LCD_CURSOR_LINE2 0xC0
|
||||
|
||||
// display controller setup commands from page 46 of Hitachi datasheet
|
||||
#define FUNCTION_SET 0x28 // 4 bit interface, 2 lines, 5x8 font
|
||||
#define ENTRY_MODE 0x06 // increment mode
|
||||
#define DISPLAY_SETUP 0x0C // display on, cursor off, blink offd
|
||||
|
||||
#define LCDLine1() LCDPutCmd(LCD_HOME) // legacy support
|
||||
#define LCDLine2() LCDPutCmd(LCD_CURSOR_LINE2) // legacy support
|
||||
#define shift_cursor() LCDPutCmd(LCD_CURSOR_FWD) // legacy support
|
||||
#define cursor_on() LCDPutCmd(LCD_CURSOR_ON) // legacy support
|
||||
#define DisplayClr() LCDPutCmd(LCD_CLEAR) // Legacy support
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// Definitions specific to the PICDEM 2 Plus
|
||||
// These apply to the Black (2011) version.
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
// single bit for selecting command register or data register
|
||||
#define instr 0
|
||||
#define data 1
|
||||
|
||||
// These #defines create the pin connections to the LCD in case they are changed on a future demo board
|
||||
#define LCD_PORT PORTD
|
||||
#define LCD_PWR PORTDbits.RD7 // LCD power pin
|
||||
#define LCD_EN PORTDbits.RD6 // LCD enable
|
||||
#define LCD_RW PORTDbits.RD5 // LCD read/write line
|
||||
#define LCD_RS PORTDbits.RD4 // LCD register select line
|
||||
|
||||
#define NB_LINES 2 // Number of display lines
|
||||
#define NB_COL 16 // Number of characters per line
|
||||
|
||||
void LCD_Initialize(void);
|
||||
void LCDPutChar(char ch);
|
||||
void LCDPutCmd(char ch);
|
||||
void LCDPutStr(const char *);
|
||||
void LCDWriteNibble(char ch, char rs);
|
||||
void LCDGoto(char pos, char ln);
|
||||
|
||||
void main(void)
|
||||
{
|
||||
OSCCON=0x72; // Select internal oscillator with frequency = 8MHz
|
||||
LCD_Initialize();
|
||||
LCDPutStr(" Hello World!"); //Display String "Hello World"
|
||||
LCDGoto(8,1); //Go to column 8 of second line
|
||||
LCDPutChar('1'); //Display character '1'
|
||||
DisplayClr(); // Clear the display
|
||||
|
||||
LCDPutStr(" LCD Display"); // Dispay a string "LCD Display"
|
||||
LCDGoto(0,1); //Go to second line
|
||||
LCDPutStr("Micro Lab"); //Display String "Micro Lab"
|
||||
while (1)
|
||||
{
|
||||
// Add your application code
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
void LCD_Initialize()
|
||||
{
|
||||
// clear latches before enabling TRIS bits
|
||||
LCD_PORT = 0;
|
||||
|
||||
TRISD = 0x00;
|
||||
|
||||
// power up the LCD
|
||||
LCD_PWR = 1;
|
||||
|
||||
// required by display controller to allow power to stabilize
|
||||
delay1ktcy(LCD_Startup);
|
||||
|
||||
// required by display initialization
|
||||
LCDPutCmd(0x32);
|
||||
|
||||
// set interface size, # of lines and font
|
||||
LCDPutCmd(FUNCTION_SET);
|
||||
|
||||
// turn on display and sets up cursor
|
||||
LCDPutCmd(DISPLAY_SETUP);
|
||||
|
||||
DisplayClr();
|
||||
|
||||
// set cursor movement direction
|
||||
LCDPutCmd(ENTRY_MODE);
|
||||
|
||||
}
|
||||
|
||||
|
||||
void LCDWriteNibble(char ch, char rs)
|
||||
{
|
||||
// always send the upper nibble
|
||||
ch = (ch >> 4);
|
||||
|
||||
// mask off the nibble to be transmitted
|
||||
ch = (ch & 0x0F);
|
||||
|
||||
// clear the lower half of LCD_PORT
|
||||
LCD_PORT = (LCD_PORT & 0xF0);
|
||||
|
||||
// move the nibble onto LCD_PORT
|
||||
LCD_PORT = (LCD_PORT | ch);
|
||||
|
||||
// set data/instr bit to 0 = insructions; 1 = data
|
||||
LCD_RS = rs;
|
||||
|
||||
// RW - set write mode
|
||||
LCD_RW = 0;
|
||||
|
||||
// set up enable before writing nibble
|
||||
LCD_EN = 1;
|
||||
|
||||
// turn off enable after write of nibble
|
||||
LCD_EN = 0;
|
||||
}
|
||||
|
||||
void LCDPutChar(char ch)
|
||||
{
|
||||
delay1ktcy(LCD_delay);
|
||||
|
||||
//Send higher nibble first
|
||||
LCDWriteNibble(ch,data);
|
||||
|
||||
//get the lower nibble
|
||||
ch = (ch << 4);
|
||||
|
||||
// Now send the low nibble
|
||||
LCDWriteNibble(ch,data);
|
||||
}
|
||||
|
||||
|
||||
void LCDPutCmd(char ch)
|
||||
{
|
||||
delay1ktcy(LCD_delay);
|
||||
|
||||
//Send the higher nibble
|
||||
LCDWriteNibble(ch,instr);
|
||||
|
||||
//get the lower nibble
|
||||
ch = (ch << 4);
|
||||
|
||||
delay1ktcy(1);
|
||||
|
||||
//Now send the lower nibble
|
||||
LCDWriteNibble(ch,instr);
|
||||
}
|
||||
|
||||
|
||||
void LCDPutStr(const char *str)
|
||||
{
|
||||
char i=0;
|
||||
|
||||
// While string has not been fully traveresed
|
||||
while (str[i])
|
||||
{
|
||||
// Go display current char
|
||||
LCDPutChar(str[i++]);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void LCDGoto(char pos,char ln)
|
||||
{
|
||||
// if incorrect line or column
|
||||
if ((ln > (NB_LINES-1)) || (pos > (NB_COL-1)))
|
||||
{
|
||||
// Just do nothing
|
||||
return;
|
||||
}
|
||||
|
||||
// LCD_Goto command
|
||||
LCDPutCmd((ln == 1) ? (0xC0 | pos) : (0x80 | pos));
|
||||
|
||||
// Wait for the LCD to finish
|
||||
delay1ktcy(LCD_delay);
|
||||
}
|
||||
82
c/lcd/main.hex
Normal file
82
c/lcd/main.hex
Normal file
|
|
@ -0,0 +1,82 @@
|
|||
:020000040000FA
|
||||
:1000000060EF00F0D9CFE5FFE1CFD9FF00C0E5FFF9
|
||||
:1000100001C0E5FF02C0E5FF03C0E5FF04C0E5FF46
|
||||
:1000200005C0E5FF06C0E5FF020EDBCF00F0030EC2
|
||||
:10003000DBCF01F0040EDBCF02F0036A0350002493
|
||||
:10004000046EE86A0120056EE86A0220066E04C0AC
|
||||
:10005000F6FF05C0F7FF06C0FAFF2AEC02F037EC06
|
||||
:1000600002F0046E04501BE003500024046EE86AA2
|
||||
:100070000120056EE86A0220066E032A04C0F6FF1E
|
||||
:1000800005C0F7FF06C0FAFF2AEC02F037EC02F0D9
|
||||
:10009000046E0450E56ECEEC01F0E652CFD7E4CF0B
|
||||
:1000A00006F0E4CF05F0E4CF04F0E4CF03F0E4CFB2
|
||||
:1000B00002F0E4CF01F0E4CF00F0E4CFD9FF12006A
|
||||
:1000C00011EEFFF021EEFFF0F86AA68EA69C07EE77
|
||||
:1000D000FFF00068ED6A0050FDE1920EF66E040E2E
|
||||
:1000E000F76E000EF86E0900F5CF05F00900F5CFA8
|
||||
:1000F00006F034D00900F5CF00F00900F5CF01F08B
|
||||
:100100000900F5CF02F009000900F5CFE9FF090069
|
||||
:10011000F5CFEAFF090009000900F5CF03F0090057
|
||||
:10012000F5CF04F009000900F6CF07F0F7CF08F08B
|
||||
:10013000F8CF09F000C0F6FF01C0F7FF02C0F8FFDA
|
||||
:1001400003D00900F5CFEEFF0306FBE20406F9E257
|
||||
:1001500007C0F6FF08C0F7FF09C0F8FF0506CAE2AE
|
||||
:100160000606C8E2B5EC00F0FFD7720ED36E05ECC0
|
||||
:1001700001F0000E026E020E016E560E006E02506D
|
||||
:10018000E56E0150E56E0050E56E02EC00F0030EE6
|
||||
:10019000E126010EE56E080EE56E3EEC01F0E6523A
|
||||
:1001A000E652310EE56ECEEC01F0E652010EE56E40
|
||||
:1001B000A3EC01F0E652000E026E020E016E640E18
|
||||
:1001C000006E0250E56E0150E56E0050E56E02ECE7
|
||||
:1001D00000F0030EE126010EE56E000EE56E3EEC2A
|
||||
:1001E00001F0E652E652000E026E020E016E720E31
|
||||
:1001F000006E0250E56E0150E56E0050E56E02ECB7
|
||||
:1002000000F0030EE126FFD71200D9CFE5FFE1CFC2
|
||||
:10021000D9FF836A956A838E0F0EF6EC01F0320ED9
|
||||
:10022000E56EA3EC01F0E652280EE56EA3EC01F0BA
|
||||
:10023000E6520C0EE56EA3EC01F0E652010EE56EFF
|
||||
:10024000A3EC01F0E652060EE56EA3EC01F0E652D7
|
||||
:10025000E4CFD9FF12002048656C6C6F20576F7295
|
||||
:100260006C642100204C434420446973706C6179B4
|
||||
:1002700000004D6963726F204C616200D9CFE5FFC9
|
||||
:10028000E1CFD9FF00C0E5FF01C0E5FF02C0E5FFF7
|
||||
:10029000020EDBCF00F0030EDBCF01F00150026E47
|
||||
:1002A0000250800F7E0F03E2100E005C01E312D0BB
|
||||
:1002B0000150010A04E1C00E0010016E03D0800E4F
|
||||
:1002C0000010016E0150E56EA3EC01F0E652050E40
|
||||
:1002D000F6EC01F0E4CF02F0E4CF01F0E4CF00F05F
|
||||
:1002E000E4CFD9FF1200D9CFE5FFE1CFD9FF00C09D
|
||||
:1002F000E5FF01C0E5FF02C0E5FF020EDBCF00F025
|
||||
:10030000030EDBCF01F000380F0B006E0F0E00164E
|
||||
:1003100083CF02F0F00E0214836E0050831201505E
|
||||
:10032000010BE838F46E8350EF0BF410836E839A60
|
||||
:10033000838C839CE4CF02F0E4CF01F0E4CF00F0A3
|
||||
:10034000E4CFD9FF1200D9CFE5FFE1CFD9FF00C03C
|
||||
:10035000E5FF01C0E5FF020EDBCF00F0050EF6EC75
|
||||
:1003600001F0000EE56E0050E56E73EC01F0E65210
|
||||
:10037000E6520038F00B016E010EF6EC01F0000EB3
|
||||
:10038000E56E0150E56E73EC01F0E652E652E4CF03
|
||||
:1003900001F0E4CF00F0E4CFD9FF1200D9CFE5FFA0
|
||||
:1003A000E1CFD9FF00C0E5FF01C0E5FF020EDBCFC2
|
||||
:1003B00000F0050EF6EC01F0010EE56E0050E56E62
|
||||
:1003C00073EC01F0E652E6520038F00B016E010EBC
|
||||
:1003D000E56E0150E56E73EC01F0E652E652E4CFB3
|
||||
:1003E00001F0E4CF00F0E4CFD9FF1200E806E56E9B
|
||||
:1003F000630E09EC02F0E4500BE000D0E56E630EF2
|
||||
:1004000009EC02F000D000D00000E450E82EF6D74E
|
||||
:100410001200E8060000E85007E000D000D000D04D
|
||||
:1004200000D00000E82EFAD71200F2CFF6FFF29EBD
|
||||
:10043000A680A850A92AA680A8CFF3FFA92AA68043
|
||||
:10044000A8CFF4FFA92AA680A8CFF5FFA92AF6BE57
|
||||
:10045000F28E1200FAAE05D0F7CFEAFFF6CFE9FF31
|
||||
:100460001200FABC55EF02F0FACFF8FF1200FAAE14
|
||||
:1004700002D0EE501200FABC59EF02F00900F5501C
|
||||
:100480001200F2CFF6FFF29EA680A850F6BEF28EC2
|
||||
:1004900012000100B6040000660000000100000028
|
||||
:1004A000F6CFA9FFA69EA69C120050EF02F015EF12
|
||||
:0804B00002F041EF02F0000030
|
||||
:020000040030CA
|
||||
:010001000CF2
|
||||
:010003001EDE
|
||||
:02000500038175
|
||||
:00000001FF
|
||||
Loading…
Reference in New Issue
Block a user