miyago icon

LABB51

miyago | PRO | 02/20/18 06:23:37 PM UTC | 0 ⭐ | 11453 👁️ | 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
;*************************************************************
;*****MASTER LOOPER*****ADJUST COUNT1,2,3 for delay***********
;*************[7+(3xCOUNT3)x(3xCOUNT2)x(3xCOUNT3)*************
;*******************NotBranch ignored*************************
R1  EQU 0x1
R2  EQU 0x2
R3  EQU 0x3
COUNT1  EQU D'10'
COUNT2  EQU D'1'
COUNT3  EQU D'10'
    
QDELAY  MOVLW   0x55        ; 1
        MOVLW   COUNT3      ; 1
        MOVWF   R3          ; 1
LOP3    MOVLW   COUNT2      ; 1
        MOVWF   R2          ; 1
LOP2    MOVLW   COUNT1      ; 1
        MOVWF   R1          ; 1
LOP1    DECF    R1,F        ; 1
        BNZ     LOP1        ; 2
        DECF    R2,F        ; 1
        BNZ     LOP2        ; 2
        DECF    R3,F        ; 1
        BNZ     LOP3        ; 2
        RETURN        
;*************************************************************
;*****MASTER LOOPER*****END***********************************
;*************************************************************
        
        
;*****************************************************
;**************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,2      ; VARNING orginal toolbox ändrad här 2 istället för 3
                CLRF    WREG        ; Börja om om från 0
                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,RB0
            BSF         TRISB,RB2
            BSF         TRISB,RB4
            BSF         TRISB,RB5
            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,RB0         ;Är en knapp på kolumn 0 tryckt?
            CLRF        WREG            ; Spara 0 i WREG
            BTFSS       PORTB,RB2         ;Är en knapp på kolumn 1 tryckt?
            MOVLW       0x01            ; Spara 1 i WREG
            BTFSS       PORTB,RB4         ;Är en knapp på kolumn 2 tryckt?
            MOVLW       0x02            ; Spara 2 i WREG
            BTFSS       PORTB,RB5         ;Ä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 
            CALL        EC8COLQ          ; Kolla raden den var i   
            RLNCF       WREG
            RLNCF       WREG            ; 0000 0100
            IORWF       IKTEMP          ; Spara den!  
            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*************
;*****************************************************
    CURSYM  equ     0x071        
;******************0-9, A-F****************************     
    ELDFSR      LFSR    0, 0x020
                
                MOVLW   0x3F            ;Siffran 0  
                MOVWF   POSTINC0
                MOVLW   0x06            ;Siffran 1
                MOVWF   POSTINC0
                MOVLW   0x5B            ;Siffran 2
                MOVWF   POSTINC0
                MOVLW   0x4F            ;Siffran 3
                MOVWF   POSTINC0
                MOVLW   0x66            ;Siffran 4
                MOVWF   POSTINC0
                MOVLW   0x6D            ;Siffran 5
                MOVWF   POSTINC0
                MOVLW   0x7D            ;Siffran 6
                MOVWF   POSTINC0
                MOVLW   0x07            ;Siffran 7
                MOVWF   POSTINC0
                MOVLW   0x7F            ;Siffran 8
                MOVWF   POSTINC0
                MOVLW   0x6F            ;Siffran 9
                MOVWF   POSTINC0
                MOVLW   0x77            ;Bokstaven A
                MOVWF   POSTINC0
                MOVLW   0x7C            ;Bokstaven b
                MOVWF   POSTINC0
                MOVLW   0x39            ;Bokstaven c
                MOVWF   POSTINC0
                MOVLW   0x5E            ;Bokstaven d
                MOVWF   POSTINC0
                MOVLW   0x79            ;Bokstaven E
                MOVWF   POSTINC0
                MOVLW   0x71            ;Bokstaven F  
                MOVWF   INDF0           ; Adress 0x02F
                
                RETURN
        
        EGETNR  MOVFF   PLUSW0, CURSYM
                RETURN
;********************************************************
;******************************************************
 
;******************MAIN PROGRAM**************************
;********************************************************
 
        MAIN    CALL    EC8INIT
                CALL    EKINIT
                CLRF    CURSYM
                CALL    ELDFSR
                LFSR    0, 0x020
                CLRF    TRISD           ; PortD ska vara UT idag
                                     
        MLOOP   CLRF    PORTD           ; Rensa PORTD inför kolumncheck
                CALL    EC8NEXT         ; Tänd nästa kolumn
                CALL    EKDOWNQ         ; Kolla vilken knapp som är tryckt
                BTFSS   WREG,7          ; Var en knapp tryckt?
                CALL    EGETNR          ; Ja då hämtar vi rätt bokstav
                MOVFF   CURSYM,PORTD    ; Lägger den i portD
                BSF     PORTA,1         ; Tänder CS8, 7seg
                CALL    QDELAY          ; Lyser lite
                CALL    EC8FREE         ; Släcker allt
                GOTO    MLOOP           ; en gång till!
 
            end

Comments

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

    0 B

    |

    👍

    /

    👎