Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "p18F4520.inc"
- CONFIG OSC = HS
- CONFIG PWRT = OFF
- CONFIG WDT = OFF
- CONFIG PBADEN = OFF
- CONFIG LVP = OFF
- ORG 0x000000
- PORST GOTO MAIN
- ORG 0x000020
- ;*** DELAY ROUTINE *************************************************************
- IDSHORT equ 0x07E
- IDLONG equ 0x07F
- ED80MS CLRF IDSHORT
- CLRF IDLONG
- BRA LDLOOP
- ED10MS CLRF IDSHORT ; 1
- MOVLW 0X20 ; 1
- MOVWF IDLONG ; 1
- LDLOOP DECFSZ IDSHORT ; 1
- GOTO LDLOOP ; 2
- DECFSZ IDLONG ; 1
- GOTO LDLOOP ; 2
- RETURN
- ;*** END OF DELAY ROUTINE*[1+1+1+((256x3)x32)+32*x3]****************************
- ;*******COL toolbox 1.1 AC******
- IC8COL equ 0x3
- EC8INIT BCF TRISA,1 ; A1 Out for Col 1
- BCF TRISA,2 ; A2 Out for Col 2
- BCF TRISA,3 ; A3 Out for Col 3
- BCF TRISA,5 ; A5 Out for Col 4
- BCF TRISE,0 ; E0 Out for Col 5
- BCF TRISE,1 ; E1 Out for Col 6
- BCF TRISE,2 ; E2 Out for Col 7
- BCF TRISC,0 ; C0 Out for Col 8
- CLRF IC8COL ; Börja på Col1
- CALL EC8FREE ; Turn off Col 1-8
- RETURN
- EC8COLQ MOVF IC8COL,W ; Returns current Col
- RETURN
- EC8NXTQ INCF IC8COL,W ; Return next Col
- BTFSC WREG, 3 ; Kolla om vi nått Col8
- CLRF WREG ; Börja om om vi var på Col8
- RETURN
- EC8FREE BCF PORTA,1 ; Stänger av alla portar
- BCF PORTA,2
- BCF PORTA,3
- BCF PORTA,5
- BCF PORTE,0
- BCF PORTE,1
- BCF PORTE,2
- BCF PORTC,0
- RETURN
- EC8NEXT CALL EC8NXTQ ; Gå till nästa column
- MOVWF IC8COL
- RLNCF WREG
- RLNCF WREG
- ADDWF PCL
- BSF PORTA,1
- RETURN
- BSF PORTA,2
- RETURN
- BSF PORTA,3
- RETURN
- BSF PORTA,5
- RETURN
- BSF PORTE,0
- RETURN
- BSF PORTE,1
- RETURN
- BSF PORTE,2
- RETURN
- BSF PORTC,0
- RETURN
- ;*******NO MORE TOOLBOX********
- ;****************************************************
- ;***LCD toolbox**************************************
- ;******Credit to A.C*********************************
- ;****************************************************
- ELINIT CLRF TRISD ; LCD DATA D0-D7 Output
- BCF TRISB,1 ; LCD enable B1
- BCF TRISB,3 ; LCD RS B3
- BCF PORTB,1 ; Enable low
- RETURN
- ELWRCMD BCF PORTB,3 ; Control write
- MOVWF PORTD ; What to write
- BSF PORTB,1 ; Write!
- BCF PORTB,1 ; Done!
- RETURN
- ELWRCHR BSF PORTB,3 ; Data write
- MOVWF PORTD ; data incoming
- BSF PORTB,1 ; Write it!
- BCF PORTB,1 ; done!
- RETURN
- ;****************************************************
- ;***** LCD toolbox***********************************
- ;****************************************************
- ILDCNT equ 0x0F0
- ELKINIT SETF ILDCNT
- ELWRMSG INCFSZ ILDCNT
- RETURN
- SETF ILDCNT
- TBLRD*+
- MOVF TABLAT,W
- BTFSS STATUS,N
- GOTO ELWRCHR ; Write the char!
- INFSNZ WREG
- GOTO LLNULL ; Null char
- INFSNZ WREG
- GOTO LLESCCH ; Escape char
- LOADMSG TBLRD*+
- MOVFF TABLAT,FSR1L
- CLRF FSR1H
- MOVF INDF1,W
- ADDLW '0'
- GOTO ELWRCHR
- LLESCCH TBLRD*+
- MOVLW 0x80
- MOVWF ILDCNT
- MOVF TABLAT,W
- GOTO ELWRCMD
- LLNULL DECF TBLPTRL
- RETURN
- ;**********END OF LCD TOOLBOX***********************
- ELTINIT MOVLW upper(LCDMSG)
- MOVWF TBLPTRU
- MOVLW high(LCDMSG)
- MOVWF TBLPTRH
- MOVLW low(LCDMSG)
- MOVWF TBLPTRL
- RETURN
- ETCKN MOVLW upper(LCDCHR)
- MOVWF TBLPTRU
- MOVLW high(LCDCHR)
- MOVWF TBLPTRH
- MOVLW low(LCDCHR)
- MOVWF TBLPTRL
- RETURN
- ;*****************************************************
- ;**************KEYBOARD*******************************
- ;******************************************************************************
- IKTEMP equ 0x003
- IKPREV equ 0x004
- IKTIME equ 0x005
- EKINIT BSF TRISB,0
- BSF TRISB,2
- BSF TRISB,4
- BSF TRISB,5
- SETF IKPREV
- CLRF IKTIME
- RETURN
- EKDOWNQ CALL EC8COLQ
- DECFSZ WREG
- GOTO LKDOWNQ
- DCFSNZ IKTIME
- INCF IKTIME
- LKDOWNQ SETF WREG ;Anta att ingen knappt är tryckt
- BTFSS PORTB,0 ;Är en knapp på kolumn 0 tryckt?
- CLRF WREG ; Spara 0 i WREG
- BTFSS PORTB,2 ;Är en knapp på kolumn 1 tryckt?
- MOVLW 0x01 ; Spara 1 i WREG
- BTFSS PORTB,4 ;Är en knapp på kolumn 2 tryckt?
- MOVLW 0x02 ; Spara 2 i WREG
- BTFSS PORTB,5 ;Är en knapp på kolumn 3 tryckt?
- MOVLW 0x03 ; Spara 3 i WREG
- BTFSC WREG,7 ;
- RETURN
- MOVWF IKTEMP ; Spara kolumnen för knappen tryckt 0000 0001
- CALL EC8COLQ ; Kolla raden den var i 0000 0001
- RLNCF WREG
- RLNCF WREG ; 0000 0100
- IORWF IKTEMP ; Spara den! 0000 0101
- MOVF IKPREV,W
- XORWF IKTEMP,W ; Är det samma knapp igen?
- BNZ LKNEW ; Ny knapp = branch!
- MOVF IKTEMP,W ; Om det är samma knapp så spara den här
- DECFSZ IKTIME
- SETF WREG
- RETURN
- LKNEW MOVF IKTEMP,W ; Ny knapp är tryckt!
- MOVWF IKPREV ; Spara det!
- CLRF IKTIME ; Återställä räknare
- RETURN
- ;*************END KEY TOOLBOX*********************************
- ;************************************************************
- SYMBOL equ 0x0003
- DOIT MOVFF PLUSW0, SYMBOL
- CALL ED80MS
- CALL ETCKN
- RETURN
- ;******************************************************
- ;***********Loading FST with 7 segment chars***********
- ;******************0-9, A-F****************************
- ELDFSR LFSR 0, 0x020
- MOVLW 0x00 ;Siffran 0
- MOVWF POSTINC0
- MOVLW 0x01 ;Siffran 1
- MOVWF POSTINC0
- MOVLW 0x02 ;Siffran 2
- MOVWF POSTINC0
- MOVLW 0x03 ;Siffran 3
- MOVWF POSTINC0
- MOVLW 0x04 ;Siffran 4
- MOVWF POSTINC0
- MOVLW 0x05 ;Siffran 5
- MOVWF POSTINC0
- MOVLW 0x06 ;Siffran 6
- MOVWF POSTINC0
- MOVLW 0x07 ;Siffran 7
- MOVWF POSTINC0
- MOVLW 0x08 ;Siffran 8
- MOVWF POSTINC0
- MOVLW 0x09 ;Siffran 9
- MOVWF POSTINC0
- MOVLW 0x10 ;Bokstaven A
- MOVWF POSTINC0
- MOVLW A'B' ;Bokstaven b
- MOVWF POSTINC0
- MOVLW A'C' ;Bokstaven c
- MOVWF POSTINC0
- MOVLW A'D' ;Bokstaven d
- MOVWF POSTINC0
- MOVLW A'E' ;Bokstaven E
- MOVWF POSTINC0
- MOVLW A'F' ;Bokstaven F
- MOVWF POSTINC0
- RETURN
- ;***********MAIN PROGRAM***************************
- MAIN CALL ELTINIT
- CALL ELINIT
- CALL EC8INIT
- CALL EKINIT
- CALL ELDFSR
- LFSR 0,0x020
- CLRF TRISD
- CLRF SYMBOL
- MLOOP CLRF PORTD
- CALL ELWRMSG
- CALL EC8NEXT
- CALL EKDOWNQ
- BTFSS WREG,7
- CALL DOIT
- CALL ED10MS
- CALL EC8FREE
- GOTO MLOOP
- ;***************************************************
- ;**************Användning***LCD*********************
- ;***************************************************
- org 0x000500
- LCDMSG DB 0xFE,0x38 ; Wake up!
- DB 0xFE,0x38 ; Wake up!
- DB 0xFE,0x38 ; 8-bit I/F, 2 rader
- DB 0xFE,0x0E ; Display on, cursor on
- DB 0xFE,0x06 ; Auto inc mode
- DB 0xFE,0x01 ; Clear display go home
- DB 0xFF
- org 0x000550
- LCDCHR DB,0xFD,SYMBOL
- DB,0xFF
- END
Advertisement