miyago icon

ACKboard

miyago | PRO | 02/19/18 11:11:15 AM UTC | 0 ⭐ | 10563 👁️ | 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
;----Quick DELAY------------------
IDONCE  equ 0x7F
 
QDELAY  CLRF    IDONCE
QLOOP   DECFSZ  IDONCE
        GOTO    QLOOP
        RETURN
;----END OF QUICK DELAY------------------
        
;*********SYMBO
    ;*****************************************************
    ;**************8x8 display 7-segment INIT*************
    IC8COL  equ 0x07F
    ;*****************************************************
    EC8INIT     BCF     TRISA,1
                BCF     TRISA,2
                BCF     TRISA,3
                BCF     TRISA,5
                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
                CALL    EC8FREE
                RETURN
 
    EC8COLQ     MOVF    IC8COL,W
                RETURN
              
    EC8NXTQ     INCF    IC8COL,W
                BTFSC   WREG,3      ; Om 0000 0100 = 4
                CLRF    WREG        ; Börja om om från 0 ( vi har bara 0-3 )
                RETURN
                
    EC8FREE     BCF     PORTA,1
                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
            
    ;**************END OF*********************************
    ;**************8x8 display 7-segment INIT*************
    ;*****************************************************
 
    ;*****************************************************
    ;**************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*************
;*****************************************************
            
S88DISP equ     0x020
 
 ;*Ä***
    E88INIT     CLRF    TRISD
                LFSR    0,S88DISP
                CLRF    S88DISP+0
                CLRF    S88DISP+1
                CLRF    S88DISP+2
                CLRF    S88DISP+3
                CLRF    S88DISP+4
                CLRF    S88DISP+5
                CLRF    S88DISP+6
                CLRF    S88DISP+7
                RETURN
            
    E88VIEW     MOVFF   PLUSW0,PORTD
                RETURN
;******************************************************
 
;********************************************************
;********************************************************
 
        MAIN    CALL    EC8INIT
                CALL    EKINIT
                CALL    E88INIT
                LFSR    1,S88DISP
                
                             
        MLOOP   CALL    EC8NXTQ
                CALL    E88VIEW
                        
                CALL    EC8NEXT         ; Kollar nästa rad..
                CALL    EKDOWNQ            ; ..om en knapp är tryckt
                BTFSS   WREG,7          ; Är en tryckt?
                MOVWF   POSTINC1
                BTFSC   FSR1L,3
                LFSR    1,S88DISP 
                CALL    QDELAY          ; Lys
                CALL    EC8FREE         ; Släck
                
                GOTO    MLOOP           ; en gång till!
            end

Comments

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

    0 B

    |

    👍

    /

    👎