miyago icon

lab6

miyago | PRO | 02/26/18 06:29:54 PM UTC | 0 ⭐ | 12818 👁️ | Never ⏰ | []
ASM (NASM) |

0 B

|

None

|

0 👍

/

0 👎

#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

Comments

  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎

    
        
  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎