Advertisement
miyago

LABB51

Feb 20th, 2018
1,059
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include "p18F4520.inc"
  2.    
  3.     CONFIG OSC = HS
  4.     CONFIG PWRT = OFF
  5.     CONFIG WDT = OFF
  6.     CONFIG PBADEN = OFF
  7.     CONFIG LVP = OFF
  8.    
  9.     org 0x000000
  10.    
  11. PORST   GOTO    MAIN
  12.    
  13.     org 0x000020
  14. ;*************************************************************
  15. ;*****MASTER LOOPER*****ADJUST COUNT1,2,3 for delay***********
  16. ;*************[7+(3xCOUNT3)x(3xCOUNT2)x(3xCOUNT3)*************
  17. ;*******************NotBranch ignored*************************
  18. R1  EQU 0x1
  19. R2  EQU 0x2
  20. R3  EQU 0x3
  21. COUNT1  EQU D'10'
  22. COUNT2  EQU D'1'
  23. COUNT3  EQU D'10'
  24.    
  25. QDELAY  MOVLW   0x55        ; 1
  26.         MOVLW   COUNT3      ; 1
  27.         MOVWF   R3          ; 1
  28. LOP3    MOVLW   COUNT2      ; 1
  29.         MOVWF   R2          ; 1
  30. LOP2    MOVLW   COUNT1      ; 1
  31.         MOVWF   R1          ; 1
  32. LOP1    DECF    R1,F        ; 1
  33.         BNZ     LOP1        ; 2
  34.         DECF    R2,F        ; 1
  35.         BNZ     LOP2        ; 2
  36.         DECF    R3,F        ; 1
  37.         BNZ     LOP3        ; 2
  38.         RETURN        
  39. ;*************************************************************
  40. ;*****MASTER LOOPER*****END***********************************
  41. ;*************************************************************
  42.        
  43.        
  44. ;*****************************************************
  45. ;**************8x8 display 7-segment INIT*************
  46.     IC8COL  equ 0x07F
  47. ;*****************************************************
  48.     EC8INIT     BCF     TRISA,1
  49.                 BCF     TRISA,2
  50.                 BCF     TRISA,3
  51.                 BCF     TRISA,5
  52.                 BCF     TRISE,0     ; E0 Out for Col 5
  53.                 BCF     TRISE,1     ; E1 Out for Col 6
  54.                 BCF     TRISE,2     ; E2 Out for Col 7
  55.                 BCF     TRISC,0     ; C0 Out for Col 8
  56.                 CLRF    IC8COL
  57.                 CALL    EC8FREE
  58.                 RETURN
  59.  
  60.     EC8COLQ     MOVF    IC8COL,W
  61.                 RETURN
  62.              
  63.     EC8NXTQ     INCF    IC8COL,W
  64.                 BTFSC   WREG,2      ; VARNING orginal toolbox ändrad här 2 istället för 3
  65.                 CLRF    WREG        ; Börja om om från 0
  66.                 RETURN
  67.                
  68.     EC8FREE     BCF     PORTA,1
  69.                 BCF     PORTA,2
  70.                 BCF     PORTA,3
  71.                 BCF     PORTA,5
  72.                 BCF     PORTE,0
  73.                 BCF     PORTE,1
  74.                 BCF     PORTE,2
  75.                 BCF     PORTC,0
  76.                 RETURN
  77.                
  78.     EC8NEXT     CALL    EC8NXTQ     ; Gå till nästa column
  79.                 MOVWF   IC8COL
  80.  
  81.                 RLNCF   WREG
  82.                 RLNCF   WREG
  83.                 ADDWF   PCL
  84.                 BSF     PORTA,1
  85.                 RETURN
  86.                 BSF     PORTA,2
  87.                 RETURN
  88.                 BSF     PORTA,3
  89.                 RETURN
  90.                 BSF     PORTA,5
  91.                 RETURN        
  92.                 BSF     PORTE,0
  93.                 RETURN
  94.                 BSF     PORTE,1
  95.                 RETURN
  96.                 BSF     PORTE,2
  97.                 RETURN
  98.                 BSF     PORTC,0
  99.                 RETURN
  100.            
  101. ;**************END OF*********************************
  102. ;**************8x8 display 7-segment INIT*************
  103. ;*****************************************************
  104.  
  105. ;*****************************************************
  106. ;**************KEYBOARD*******************************
  107. ;******************************************************************************
  108. IKTEMP  equ 0x003
  109. IKPREV  equ 0x004
  110. IKTIME  equ 0x005
  111.  
  112. EKINIT      BSF         TRISB,RB0
  113.             BSF         TRISB,RB2
  114.             BSF         TRISB,RB4
  115.             BSF         TRISB,RB5
  116.             SETF        IKPREV
  117.             CLRF        IKTIME
  118.             RETURN
  119.                
  120. EKDOWNQ     CALL        EC8COLQ
  121.             DECFSZ      WREG
  122.             GOTO        LKDOWNQ
  123.             DCFSNZ      IKTIME
  124.             INCF        IKTIME
  125. LKDOWNQ     SETF        WREG            ;Anta att ingen knappt är tryckt
  126.             BTFSS       PORTB,RB0         ;Är en knapp på kolumn 0 tryckt?
  127.             CLRF        WREG            ; Spara 0 i WREG
  128.             BTFSS       PORTB,RB2         ;Är en knapp på kolumn 1 tryckt?
  129.             MOVLW       0x01            ; Spara 1 i WREG
  130.             BTFSS       PORTB,RB4         ;Är en knapp på kolumn 2 tryckt?
  131.             MOVLW       0x02            ; Spara 2 i WREG
  132.             BTFSS       PORTB,RB5         ;Är en knapp på kolumn 3 tryckt?
  133.             MOVLW       0x03            ; Spara 3 i WREG
  134.             BTFSC       WREG,7          ;
  135.             RETURN
  136.             MOVWF       IKTEMP          ; Spara kolumnen för knappen tryckt
  137.             CALL        EC8COLQ          ; Kolla raden den var i  
  138.             RLNCF       WREG
  139.             RLNCF       WREG            ; 0000 0100
  140.             IORWF       IKTEMP          ; Spara den!  
  141.             MOVF        IKPREV,W
  142.             XORWF       IKTEMP,W        ; Är det samma knapp igen?
  143.             BNZ         LKNEW           ; Ny knapp = branch!
  144.            
  145.             MOVF        IKTEMP,W        ; Om det är samma knapp så spara den här
  146.             DECFSZ      IKTIME
  147.             SETF        WREG
  148.             RETURN
  149.            
  150. LKNEW       MOVF        IKTEMP,W        ; Ny knapp är tryckt!
  151.             MOVWF       IKPREV          ; Spara det!
  152.             CLRF        IKTIME          ; Återställä räknare
  153.             RETURN
  154. ;*************END KEY TOOLBOX*************
  155. ;*****************************************************
  156.     CURSYM  equ     0x071        
  157. ;******************0-9, A-F****************************    
  158.     ELDFSR      LFSR    0, 0x020
  159.                
  160.                 MOVLW   0x3F            ;Siffran 0 
  161.                 MOVWF   POSTINC0
  162.                 MOVLW   0x06            ;Siffran 1
  163.                 MOVWF   POSTINC0
  164.                 MOVLW   0x5B            ;Siffran 2
  165.                 MOVWF   POSTINC0
  166.                 MOVLW   0x4F            ;Siffran 3
  167.                 MOVWF   POSTINC0
  168.                 MOVLW   0x66            ;Siffran 4
  169.                 MOVWF   POSTINC0
  170.                 MOVLW   0x6D            ;Siffran 5
  171.                 MOVWF   POSTINC0
  172.                 MOVLW   0x7D            ;Siffran 6
  173.                 MOVWF   POSTINC0
  174.                 MOVLW   0x07            ;Siffran 7
  175.                 MOVWF   POSTINC0
  176.                 MOVLW   0x7F            ;Siffran 8
  177.                 MOVWF   POSTINC0
  178.                 MOVLW   0x6F            ;Siffran 9
  179.                 MOVWF   POSTINC0
  180.                 MOVLW   0x77            ;Bokstaven A
  181.                 MOVWF   POSTINC0
  182.                 MOVLW   0x7C            ;Bokstaven b
  183.                 MOVWF   POSTINC0
  184.                 MOVLW   0x39            ;Bokstaven c
  185.                 MOVWF   POSTINC0
  186.                 MOVLW   0x5E            ;Bokstaven d
  187.                 MOVWF   POSTINC0
  188.                 MOVLW   0x79            ;Bokstaven E
  189.                 MOVWF   POSTINC0
  190.                 MOVLW   0x71            ;Bokstaven F  
  191.                 MOVWF   INDF0           ; Adress 0x02F
  192.                
  193.                 RETURN
  194.        
  195.         EGETNR  MOVFF   PLUSW0, CURSYM
  196.                 RETURN
  197. ;********************************************************
  198. ;******************************************************
  199.  
  200. ;******************MAIN PROGRAM**************************
  201. ;********************************************************
  202.  
  203.         MAIN    CALL    EC8INIT
  204.                 CALL    EKINIT
  205.                 CLRF    CURSYM
  206.                 CALL    ELDFSR
  207.                 LFSR    0, 0x020
  208.                 CLRF    TRISD           ; PortD ska vara UT idag
  209.                                      
  210.         MLOOP   CLRF    PORTD           ; Rensa PORTD inför kolumncheck
  211.                 CALL    EC8NEXT         ; Tänd nästa kolumn
  212.                 CALL    EKDOWNQ         ; Kolla vilken knapp som är tryckt
  213.                 BTFSS   WREG,7          ; Var en knapp tryckt?
  214.                 CALL    EGETNR          ; Ja då hämtar vi rätt bokstav
  215.                 MOVFF   CURSYM,PORTD    ; Lägger den i portD
  216.                 BSF     PORTA,1         ; Tänder CS8, 7seg
  217.                 CALL    QDELAY          ; Lyser lite
  218.                 CALL    EC8FREE         ; Släcker allt
  219.                 GOTO    MLOOP           ; en gång till!
  220.  
  221.             end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement