Guest User

Untitled

a guest
Apr 14th, 2018
155
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pic 16 9.74 KB | None | 0 0
  1. ;----------------------------------------------------------------------
  2. ;Laboratorna Uloha SYS (c.3)
  3. ;Vypracoval: Schmiedt / Zeidler (D-6)
  4. ;Zadanie: C_18
  5. ;
  6. ;NASTAVENIE CASOVACOV--------------------------------------------------
  7. ;FOSC = 10MHz, IPEN = 1
  8. ;casovac T0 naplnit po 160
  9. ;casovac T2 naplnit po 97
  10. ;----------------------------------------------------------------------
  11. ;
  12. ;----------------------------------------------------------------------
  13. ;DEKLARACIE
  14. ;----------------------------------------------------------------------
  15.  
  16. LIST p=18F87J11
  17. #include <P18F87J11.INC>
  18.  
  19. ;----------------------------------------------------------------------
  20. ;KONFIGURACNE BITY
  21. ;----------------------------------------------------------------------
  22.  
  23. CONFIG      FOSC=HS
  24. CONFIG      WDTEN=OFF
  25. CONFIG      XINST=OFF
  26.  
  27. ;----------------------------------------------------------------------
  28. ;DEFINICIA PREMENNYCH
  29. ;----------------------------------------------------------------------
  30.  
  31. BTN1        equ     0x020       ;tlacitko na porte B0
  32. BTN2        equ     0x021       ;tlacitko na porte A5
  33. PRIZB       equ     0x030       ;prinzak RB0
  34. PRIZA       equ     0x039       ;priznak RA5
  35. MASK        equ     0x031       ;MASKA
  36. MASKF       equ     0x022       ;MASKA FINAL
  37. BTN         equ     0x03B       ;Stav tlacitok
  38. STAV_LED    equ     0x032       ;stav LED diod
  39. SMER        equ     0x037       ;urcuje smer pocitania 0(dole) default
  40. STOP        equ     0x038       ;urciuje ci sa ma pocitanie zastavit 0(run) default
  41.  
  42. TMR1S       equ     0x033       ;pocitadlo 1 sekundy pre timer 0 = 160
  43. TM1S        equ     0x034       ;pomocna premenna pre pocitadlo 1s Timer 0
  44. TM2S        equ     0x035       ;pomocna premenna pre Timer 2
  45. TMR2S       equ     0x036       ;pocitadlo 10ms pre timer 2 = 97
  46.  
  47. CBLOCK      0x000
  48. WREG_TMP1
  49. STATUS_TMP1
  50. BSR_TMP1
  51. WREG_TMP2
  52. STATUS_TMP2
  53. BSR_TMP2
  54. ENDC
  55.  
  56. ;----------------------------------------------------------------------
  57. ;ZACIATOK
  58. ;----------------------------------------------------------------------
  59.  
  60.     org     0x0000              ;start programu po restarte
  61.     goto    Main
  62.  
  63.     org     0x0008              ;start obsluhy prerusenia s vyssou prioritou
  64.     goto    High_int
  65.  
  66.     org     0x0018              ;start obsluhy prerusenia s nizsiou prioritou
  67.     goto    Low_int
  68.  
  69. ;----------------------------------------------------------------------
  70. ;MAIN
  71. ;----------------------------------------------------------------------
  72.  
  73. Main
  74.     movlw   0x00                ;WREG = 0
  75.     movwf   TRISD               ;PORT D = vystup
  76.     movwf   TRISA               ;PORT A = vystup
  77.     movwf   TRISB               ;PORT B = vystup
  78.     movwf   PORTD               ;vynuluje PORT D
  79.    
  80.  
  81.     movwf   SMER                ;vynuluje smer pocitania 0 = dole
  82.     movwf   STOP                ;vynuluje zastavenie pocitania 0 = run
  83.  
  84.     movlw   0x0F                ;naplni WREG = F
  85.     movwf   STAV_LED            ;nastavi stan_led na F
  86.    
  87.     bsf TRISB,RB0,0             ;0 bit PORT B = vstup
  88.     bsf TRISA,RA5,0             ;5 bit PORT A = vstup
  89.     bsf WDTCON,ADSHR,0
  90.     bsf ANCON0,PCFG4,0
  91.     bcf WDTCON,ADSHR,0
  92.    
  93.     movlw   0x00                ;WREG = 0
  94.     movwf   BTN1                ;tlacitko na porte B0 = 0
  95.     movwf   BTN2                ;tlacitko na porte A5 = 0
  96.     movwf   BTN                 ;vynuluje
  97.     movwf   PRIZA               ;prinzak tlacitok = 0
  98.     movwf   PRIZB               ;priznak tlacitok = 0
  99.    
  100.     movlw   0xFF                ;WREG = FF
  101.     movwf   MASKF               ;MASKF = 11111111b
  102.    
  103.     ;Cyklovac pre Timer0
  104.     movlw   0x25                ;dec = 160 0xA0, doladili sme na 0x25
  105.     movwf   TM1S                ;napln pomocnu premennu
  106.     movff   TM1S,TMR1S          ;napln pocitadlo, 1 sekunda na casovaci
  107.  
  108.     ;Cyklovac pre Timer 2
  109.     movlw   0x30                ;dec = 97 0x61, doladili sme na 0x30
  110.     movwf   TM2S                ;napln pomocnu premennu
  111.     movff   TM2S,TMR2S          ;napln pocitadlo, 10ms na casovaci
  112.  
  113.     ;TIMER 0 nastavenie
  114.     movlw   0x08                ;b'00001000'
  115.     movwf   T0CON               ;16-bit, vnutorne hodiny 10MHz, prescaler 1:256, 1 sekunda
  116.  
  117.     movlw   0xE0                ;b'11100000'
  118.     movwf   INTCON              ;Timer high-priority interupts, owerflow interupt enable
  119.    
  120.     bsf RCON,IPEN               ;IPEN = ON 
  121.    
  122.     movlw   0x04                ;b'00000100'
  123.     movwf   INTCON2             ;Timer 0 nastaveny ako High Priority
  124.  
  125.  
  126.     ;TIMER 2 nastavenie
  127.     bsf PIE1,TMR2IE             ;nastavenie owerflow casovaca 2
  128.  
  129.     bsf T2CON,T2CKPS0           ;set Timer 2 8-bit, prescale 1:4, 10ms
  130.  
  131.     bcf IPR1,TMR2IP             ;low priority Timer 2
  132.  
  133.     ;TIMERS ON !!!!!!!!!!!!!!!!!!
  134.     bsf T0CON,TMR0ON            ;zapni Timer 0
  135.     bsf T2CON,TMR2ON            ;zapni Timer 2
  136.    
  137.  
  138. ;----------------------------------------------------------------------
  139. ;LOOP
  140. ;----------------------------------------------------------------------
  141.    
  142. Loop
  143.     goto Loop
  144.  
  145. ;----------------------------------------------------------------------
  146. ;HIGH_INT - prerusenie s nizsou prioritou, snimanie tlacitok
  147. ;Timer 0 treba plnit 160 krat = 1 sekunda
  148. ;----------------------------------------------------------------------
  149.  
  150. High_int
  151.     movff   STATUS,STATUS_TMP1
  152.     movff   WREG,WREG_TMP1
  153.     movff   BSR,BSR_TMP1
  154.  
  155.     bcf INTCON,TMR0IF           ;reset flag Timeru 0
  156.     decf    TMR1S               ;dekrement TMR1S
  157.     tstfsz  TMR1S               ;skip if zero
  158.     goto Rets
  159.     ;OBSLUHA PROGRAMU PO 1 SEKUNDE
  160.     movff   TM1S,TMR1S          ;1 sekunda na casovaci
  161.     goto Do                     ;goto Do-------------------------------
  162.  
  163. Rets                            ;RETURN
  164.     movff   STATUS_TMP1,STATUS
  165.     movff   WREG_TMP1,WREG
  166.     movff   BSR_TMP1,BSR
  167.     retfie
  168.  
  169. ;----------------------------------------------------------------------
  170. ;LOW_INT - prerusenie s nizsou prioritou, vypis LED diod
  171. ;Timer 2 treba plnit na 97 krat = 10 milisekund
  172. ;----------------------------------------------------------------------
  173.  
  174. Low_int
  175.     movff   STATUS,STATUS_TMP2
  176.     movff   WREG,WREG_TMP2
  177.     movff   BSR,BSR_TMP2
  178.  
  179.     bcf PIR1,TMR2IF             ;reset flag Timeru 2
  180.     decf    TMR2S               ;dekrement TMR2S
  181.     tstfsz  TMR2S               ;skip if zero
  182.     goto Rets2
  183.     ;OBSLUHA PROGRAMU PO 10 MILISEKUNDACH
  184.     movff   TM2S,TMR2S          ;10 ms na casovaci
  185.     goto Obsluha_Tlac           ;goto Obsluha_Tlacitiek----------------
  186.  
  187. Rets2                           ;RETURN 2
  188.     movff   STATUS_TMP2,STATUS
  189.     movff   WREG_TMP2,WREG
  190.     movff   BSR_TMP2,BSR
  191.     retfie
  192.  
  193. ;----------------------------------------------------------------------
  194. ;OBLUHA TLACITIEK
  195. ;RB0 - zastavi cyklus
  196. ;RA5 - zmeni smer cyklu
  197. ;----------------------------------------------------------------------
  198.  
  199. Obsluha_Tlac
  200.     movlw 0x00              ;WREG = 00000000b
  201.    
  202.     ;TLACITKO B0
  203.    
  204.     btfsc PORTB,0,0         ;je B0 stlacene ?
  205.     movwf BTN1              ;vynuluj masku B0
  206.    
  207.     btfss PORTB,0,0         ;je B0 stlacene ?
  208.     goto B0_Stisk           ;goto B0_Stisk
  209.    
  210.    
  211.     movlw 0x00              ;WREG = 0
  212.  
  213.     ;TLACITKO A5
  214.    
  215.     btfsc PORTA,5,0         ;je A5 stlacene ?
  216.     movwf BTN2              ;vynuluj masku A5
  217.    
  218.     btfss PORTA,5,0         ;je A5 stlacene ?
  219.     goto A5_Stisk           ;goto A5_Stick
  220.    
  221.     ;reset BTN
  222.     ;btfsc PORTB,0,0            ;je B0 stlacene ?  
  223.     ;goto Reset_BTN
  224.    
  225.     goto Rets2              ; pre istotu
  226.  
  227.  
  228. Reset_BTN
  229.     btfsc PORTA,5,0         ;je A5 stlacene ?
  230.     clrf BTN                ;clear BTN
  231.     goto Rets2
  232.  
  233. ;TLACITKO B-------------------------------------------------------------
  234. B0_Stisk
  235.     btfss PORTB,0,0         ;je B0 stlacene ?
  236.     bsf BTN1,0,0            ;nastav prvy bit na 1
  237.     rlncf BTN1,1,0          ;rotuj dolava o 1 bit
  238.  
  239.     clrf BTN                ;clear BTN
  240.     bsf BTN,7               ;nastavi jednotku na 7 bit
  241.    
  242.     ;test
  243.     movlw 0x0E              ;WREG = 00001110b
  244.     cpfseq BTN1             ;porovna masku
  245.     goto Not_B0             ;goto NOT B0
  246.  
  247.     goto Naozaj_B0          ;goto naozaj B0
  248.  
  249. Naozaj_B0
  250.     movlw 0x01              ;WREG = 1
  251.     xorwf STOP              ;Zmeni STOP -----------------------------------
  252.    
  253.     ;goto Vypis             ;goto Vypis
  254.     goto Rets2
  255.  
  256. Not_B0
  257.     ;movlw 0x00             ;WREG = 0
  258.     ;movwf BTN              ;BTN = 00000000b
  259.     ;goto Vypis             ;goto Vypis
  260.     goto Rets2
  261.  
  262. ;TLACITKO A----------------------------------------------------------------
  263. A5_Stisk
  264.     btfss PORTA,5,0         ;je A5 stlacene ?
  265.     bsf BTN2,0,0            ;nastav prvy bit na 1
  266.     rlncf BTN2,1,0          ;rotuj dolava o 1
  267.    
  268.     clrf BTN                ;clear BTN
  269.     bsf BTN,6               ;nastavi jednotku na 6 bit
  270.  
  271.     ;test
  272.     movlw 0x0E              ;WREG = 00001110b
  273.     cpfseq BTN2             ;porovna masku
  274.     goto Not_A5
  275.    
  276.     goto Naozaj_A5
  277.  
  278. Naozaj_A5
  279.     movlw 0x01              ;WREG = 1
  280.     xorwf SMER              ;zmeni SMER---------------------------------
  281.    
  282.     ;goto Vypis
  283.     goto Rets2
  284.  
  285. Not_A5
  286.     ;movlw 0x00             ;WREG = 0
  287.     ;movwf BTN              ;BTN = 00000000b
  288.     ;goto Vypis             ;goto Vypis
  289.     goto Rets2
  290.  
  291. ;----------------------------------------------------------------------
  292. ;VYPIS
  293. ;----------------------------------------------------------------------
  294.  
  295. Vypis
  296.     movlw 0xFF              ;WREG = FF
  297.     andwf BTN,1             ;maskuje, dufam ze uspesne :)
  298.    
  299.     movlw 0x00              ;WREG = 0
  300.     addwf BTN,0             ;urobi masku a vysledok ulozi do WREG
  301.     addwf STAV_LED,0        ;urobi masku a vysledok ulozi do WREG
  302.    
  303.     movwf PORTD             ;vypise na LED
  304.    
  305.     clrf BTN                ;clear BTN
  306.  
  307.     ;goto Rets2
  308.     goto Rets
  309.  
  310. ;----------------------------------------------------------------------
  311. ;DO - byhodnoti ci ma odpocitavat ci pripocitavat
  312. ;----------------------------------------------------------------------
  313.  
  314. Do
  315.     tstfsz  STOP                ;if STOP = 0 (run) skip next
  316.     goto Rets                   ;ked STOP = 1(stop) tak skoc na Rets
  317.     tstfsz  SMER                ;if SMER = 0 (dole a default) skip next
  318.     goto Pripoc                 ;pripocitaj jednu
  319.     goto Odpoc                  ;odpocitaj jednu
  320.  
  321. ;----------------------------------------------------------------------
  322. ;ODPOCITAVANIE
  323. ;----------------------------------------------------------------------
  324.  
  325. Odpoc
  326.     tstfsz  STAV_LED            ;if STAV_LED = 0 skip next
  327.     goto Dekrement              ;goto Dekrement
  328.     goto Dekrement_Set          ;goto Dekrement_Set
  329.  
  330. Dekrement                       ;OBYCAJNY DEKREMENT
  331.     decf STAV_LED               ;dekrement STAV_LED
  332.     ;goto Rets
  333.     goto Vypis
  334.  
  335. Dekrement_Set                   ;IF STAV_LED = 0 TAK NASTAVI STAV_LED = F
  336.     movlw   0x0F                ;nastavi WREG = F
  337.     movwf   STAV_LED            ;napli STAV_LED = F
  338.     ;goto Rets
  339.     goto Vypis
  340.  
  341. ;----------------------------------------------------------------------
  342. ;PRIPOCITAVANIE
  343. ;----------------------------------------------------------------------
  344.  
  345. Pripoc
  346.     movlw   0x0F                ;WREG = F
  347.     cpfseq  STAV_LED            ;if STAV_LED = F skip next
  348.     goto Inkrement              ;goto inkrement
  349.     goto Inkrement_Set          ;goto Inkrement_Set
  350.  
  351. Inkrement                       ;OBYCAJNY INKREMENT
  352.     incf STAV_LED               ;inkrement STAV_LED
  353.     ;goto Rets
  354.     goto Vypis
  355.  
  356. Inkrement_Set                   ;IF STAV_LED = F TAK NASTAVI STAV_LED = 0
  357.     movlw   0x00                ;nastavi WREG = 0
  358.     movwf   STAV_LED            ;napli STAV_LED = 0
  359.     ;goto Rets
  360.     goto Vypis
  361.  
  362. ;----------------------------------------------------------------------
  363. ;END
  364. ;----------------------------------------------------------------------
  365.  
  366. END
Add Comment
Please, Sign In to add comment