miyago

lab6

Feb 26th, 2018
1,092
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.     ORG 0x000000
  9. PORST   GOTO MAIN
  10.     ORG 0x000020
  11.    
  12.     ;*** DELAY ROUTINE *************************************************************
  13.  
  14. IDSHORT equ 0x07E
  15. IDLONG  equ 0x07F
  16.  
  17. ED80MS  CLRF    IDSHORT
  18.         CLRF    IDLONG
  19.         BRA     LDLOOP
  20. ED10MS  CLRF    IDSHORT     ; 1
  21.         MOVLW   0X20        ; 1
  22.         MOVWF   IDLONG      ; 1
  23. LDLOOP  DECFSZ  IDSHORT     ; 1
  24.         GOTO    LDLOOP      ; 2
  25.         DECFSZ  IDLONG      ; 1
  26.         GOTO    LDLOOP      ; 2
  27.         RETURN
  28. ;*** END OF DELAY ROUTINE*[1+1+1+((256x3)x32)+32*x3]****************************
  29.     ;*******COL toolbox 1.1 AC******
  30.    
  31. IC8COL      equ     0x3
  32.      
  33. EC8INIT     BCF     TRISA,1     ; A1 Out for Col 1
  34.             BCF     TRISA,2     ; A2 Out for Col 2
  35.             BCF     TRISA,3     ; A3 Out for Col 3
  36.             BCF     TRISA,5     ; A5 Out for Col 4
  37.             BCF     TRISE,0     ; E0 Out for Col 5
  38.             BCF     TRISE,1     ; E1 Out for Col 6
  39.             BCF     TRISE,2     ; E2 Out for Col 7
  40.             BCF     TRISC,0     ; C0 Out for Col 8
  41.             CLRF    IC8COL      ; Börja på Col1
  42.             CALL    EC8FREE     ; Turn off Col 1-8
  43.             RETURN
  44.            
  45. EC8COLQ     MOVF    IC8COL,W    ; Returns current Col
  46.             RETURN
  47.            
  48. EC8NXTQ     INCF    IC8COL,W    ; Return next Col
  49.             BTFSC   WREG, 3     ; Kolla om vi nått Col8
  50.             CLRF    WREG        ; Börja om om vi var på Col8
  51.             RETURN
  52.            
  53. EC8FREE     BCF     PORTA,1     ; Stänger av alla portar
  54.             BCF     PORTA,2
  55.             BCF     PORTA,3
  56.             BCF     PORTA,5
  57.             BCF     PORTE,0
  58.             BCF     PORTE,1
  59.             BCF     PORTE,2
  60.             BCF     PORTC,0
  61.             RETURN
  62.            
  63. EC8NEXT     CALL    EC8NXTQ     ; Gå till nästa column
  64.             MOVWF   IC8COL
  65.            
  66.             RLNCF   WREG
  67.             RLNCF   WREG
  68.             ADDWF   PCL
  69.             BSF     PORTA,1
  70.             RETURN
  71.             BSF     PORTA,2
  72.             RETURN
  73.             BSF     PORTA,3
  74.             RETURN
  75.             BSF     PORTA,5
  76.             RETURN            
  77.             BSF     PORTE,0
  78.             RETURN
  79.             BSF     PORTE,1
  80.             RETURN
  81.             BSF     PORTE,2
  82.             RETURN
  83.             BSF     PORTC,0
  84.             RETURN
  85.                        
  86. ;*******NO MORE TOOLBOX********
  87. ;****************************************************
  88. ;***LCD toolbox**************************************
  89. ;******Credit to A.C*********************************
  90. ;****************************************************
  91.  
  92. ELINIT      CLRF    TRISD       ; LCD DATA D0-D7 Output
  93.             BCF     TRISB,1     ; LCD enable B1
  94.             BCF     TRISB,3     ; LCD RS B3
  95.             BCF     PORTB,1     ; Enable low
  96.             RETURN
  97.            
  98. ELWRCMD     BCF     PORTB,3     ; Control write
  99.             MOVWF   PORTD       ; What to write
  100.             BSF     PORTB,1     ; Write!
  101.             BCF     PORTB,1     ; Done!
  102.             RETURN
  103.            
  104. ELWRCHR     BSF     PORTB,3     ; Data write
  105.             MOVWF   PORTD       ; data incoming
  106.             BSF     PORTB,1     ; Write it!
  107.             BCF     PORTB,1     ; done!
  108.             RETURN
  109. ;****************************************************          
  110. ;***** LCD toolbox***********************************
  111. ;****************************************************
  112. ILDCNT  equ     0x0F0
  113.  
  114. ELKINIT     SETF    ILDCNT
  115. ELWRMSG     INCFSZ  ILDCNT
  116.             RETURN
  117.             SETF    ILDCNT
  118.             TBLRD*+
  119.             MOVF    TABLAT,W
  120.             BTFSS   STATUS,N
  121.             GOTO    ELWRCHR     ; Write the char!
  122.             INFSNZ  WREG
  123.             GOTO    LLNULL      ; Null char
  124.             INFSNZ  WREG
  125.             GOTO    LLESCCH     ; Escape char
  126.        
  127. LOADMSG     TBLRD*+
  128.             MOVFF   TABLAT,FSR1L
  129.             CLRF    FSR1H
  130.             MOVF    INDF1,W
  131.             ADDLW   '0'
  132.             GOTO    ELWRCHR
  133.        
  134. LLESCCH     TBLRD*+
  135.             MOVLW   0x80
  136.             MOVWF   ILDCNT
  137.             MOVF    TABLAT,W
  138.             GOTO    ELWRCMD
  139.        
  140. LLNULL      DECF    TBLPTRL
  141.             RETURN
  142.        
  143. ;**********END OF LCD TOOLBOX***********************
  144.    
  145. ELTINIT     MOVLW   upper(LCDMSG)
  146.             MOVWF   TBLPTRU
  147.             MOVLW   high(LCDMSG)
  148.             MOVWF   TBLPTRH
  149.             MOVLW   low(LCDMSG)
  150.             MOVWF   TBLPTRL
  151.             RETURN
  152. ETCKN       MOVLW   upper(LCDCHR)
  153.             MOVWF   TBLPTRU
  154.             MOVLW   high(LCDCHR)
  155.             MOVWF   TBLPTRH
  156.             MOVLW   low(LCDCHR)
  157.             MOVWF   TBLPTRL
  158.             RETURN
  159.            
  160. ;*****************************************************
  161. ;**************KEYBOARD*******************************
  162. ;******************************************************************************
  163. IKTEMP  equ 0x003
  164. IKPREV  equ 0x004
  165. IKTIME  equ 0x005
  166.  
  167. EKINIT      BSF     TRISB,0
  168.             BSF     TRISB,2
  169.             BSF     TRISB,4
  170.             BSF     TRISB,5
  171.             SETF    IKPREV
  172.             CLRF    IKTIME
  173.             RETURN
  174.                
  175. EKDOWNQ     CALL    EC8COLQ
  176.             DECFSZ  WREG
  177.             GOTO    LKDOWNQ
  178.             DCFSNZ  IKTIME
  179.             INCF    IKTIME
  180. LKDOWNQ     SETF    WREG            ;Anta att ingen knappt är tryckt
  181.             BTFSS   PORTB,0         ;Är en knapp på kolumn 0 tryckt?
  182.             CLRF    WREG            ; Spara 0 i WREG
  183.             BTFSS   PORTB,2         ;Är en knapp på kolumn 1 tryckt?
  184.             MOVLW   0x01            ; Spara 1 i WREG
  185.             BTFSS   PORTB,4         ;Är en knapp på kolumn 2 tryckt?
  186.             MOVLW   0x02            ; Spara 2 i WREG
  187.             BTFSS   PORTB,5         ;Är en knapp på kolumn 3 tryckt?
  188.             MOVLW   0x03            ; Spara 3 i WREG
  189.             BTFSC   WREG,7          ;
  190.             RETURN
  191.             MOVWF   IKTEMP          ; Spara kolumnen för knappen tryckt 0000 0001
  192.             CALL    EC8COLQ          ; Kolla raden den var i             0000 0001
  193.             RLNCF   WREG
  194.             RLNCF   WREG            ; 0000 0100
  195.             IORWF   IKTEMP          ; Spara den!                0000 0101
  196.             MOVF    IKPREV,W
  197.             XORWF   IKTEMP,W        ; Är det samma knapp igen?
  198.             BNZ     LKNEW           ; Ny knapp = branch!
  199.            
  200.             MOVF    IKTEMP,W        ; Om det är samma knapp så spara den här
  201.             DECFSZ  IKTIME
  202.             SETF    WREG
  203.             RETURN
  204.            
  205. LKNEW       MOVF    IKTEMP,W        ; Ny knapp är tryckt!
  206.             MOVWF   IKPREV          ; Spara det!
  207.             CLRF    IKTIME          ; Återställä räknare
  208.             RETURN
  209. ;*************END KEY TOOLBOX*********************************
  210. ;************************************************************
  211.  SYMBOL     equ     0x0003
  212.      
  213.  DOIT       MOVFF   PLUSW0, SYMBOL
  214.             CALL    ED80MS
  215.             CALL    ETCKN
  216.             RETURN
  217.            
  218.             ;******************************************************
  219. ;***********Loading FST with 7 segment chars***********
  220. ;******************0-9, A-F****************************    
  221.         ELDFSR  LFSR    0, 0x020
  222.                
  223.                 MOVLW   0x00            ;Siffran 0 
  224.                 MOVWF   POSTINC0
  225.                 MOVLW   0x01            ;Siffran 1
  226.                 MOVWF   POSTINC0
  227.                 MOVLW   0x02            ;Siffran 2
  228.                 MOVWF   POSTINC0
  229.                 MOVLW   0x03            ;Siffran 3
  230.                 MOVWF   POSTINC0
  231.                 MOVLW   0x04            ;Siffran 4
  232.                 MOVWF   POSTINC0
  233.                 MOVLW   0x05            ;Siffran 5
  234.                 MOVWF   POSTINC0
  235.                 MOVLW   0x06            ;Siffran 6
  236.                 MOVWF   POSTINC0
  237.                 MOVLW   0x07            ;Siffran 7
  238.                 MOVWF   POSTINC0
  239.                 MOVLW   0x08            ;Siffran 8
  240.                 MOVWF   POSTINC0
  241.                 MOVLW   0x09            ;Siffran 9
  242.                 MOVWF   POSTINC0
  243.                 MOVLW   0x10            ;Bokstaven A
  244.                 MOVWF   POSTINC0
  245.                 MOVLW   A'B'            ;Bokstaven b
  246.                 MOVWF   POSTINC0
  247.                 MOVLW   A'C'            ;Bokstaven c
  248.                 MOVWF   POSTINC0
  249.                 MOVLW   A'D'            ;Bokstaven d
  250.                 MOVWF   POSTINC0
  251.                 MOVLW   A'E'            ;Bokstaven E
  252.                 MOVWF   POSTINC0
  253.                 MOVLW   A'F'            ;Bokstaven F
  254.                 MOVWF   POSTINC0
  255.                 RETURN
  256. ;***********MAIN PROGRAM***************************
  257.     MAIN    CALL    ELTINIT
  258.             CALL    ELINIT
  259.             CALL    EC8INIT
  260.             CALL    EKINIT
  261.             CALL    ELDFSR
  262.             LFSR    0,0x020
  263.            
  264.             CLRF    TRISD
  265.             CLRF    SYMBOL
  266.            
  267.     MLOOP   CLRF    PORTD
  268.             CALL    ELWRMSG
  269.             CALL    EC8NEXT
  270.             CALL    EKDOWNQ
  271.             BTFSS   WREG,7
  272.             CALL    DOIT
  273.             CALL    ED10MS
  274.             CALL    EC8FREE
  275.             GOTO    MLOOP
  276.            
  277.            
  278.    
  279. ;***************************************************
  280. ;**************Användning***LCD*********************
  281. ;***************************************************
  282.         org 0x000500
  283. LCDMSG      DB 0xFE,0x38        ; Wake up!
  284.             DB 0xFE,0x38        ; Wake up!
  285.             DB 0xFE,0x38        ; 8-bit I/F, 2 rader
  286.             DB 0xFE,0x0E        ; Display on, cursor on
  287.             DB 0xFE,0x06        ; Auto inc mode
  288.             DB 0xFE,0x01        ; Clear display go home
  289.             DB 0xFF
  290.         org 0x000550
  291. LCDCHR      DB,0xFD,SYMBOL
  292.             DB,0xFF
  293. END
Advertisement