Advertisement
Guest User

Untitled

a guest
Jun 17th, 2018
123
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ;STOPER
  2. A:
  3. FLAGA EQU 20H
  4. CZAS EQU 21H
  5. JEDNOSCI EQU 22H
  6. DZIESIETNE_SEKUDNY EQU 23H
  7. DZIESIATKI EQU 24H
  8. SETNE_SEKUDNY EQU 25H
  9. TYSIECZNE_SEKUDNY EQU 26H
  10.  
  11.         LJMP START
  12.         ORG 03H         ;EXT0 obsługa external 0
  13.         RETI            ; zabezpieczenie przed śmieciami
  14.         ORG 0BH         ; timer0
  15.         LJMP STOPER
  16.         ORG 13H         ; ext1
  17.         RETI
  18.         ORG 1BH         ; timer1
  19.         RETI
  20.         ORG 23H         ; serial
  21.         RETI
  22.         ORG 100H
  23. START:
  24.                 LCALL LCD_INIT  ; WSYZSTKIE PRZERWANIA PRZY OKAZJI SIE ZERUJA
  25.         MOV FLAGA, #0
  26.         MOV CZAS, #0
  27.         MOV JEDNOSCI, #0
  28.         MOV DZIESIATKI, #0
  29.         MOV DZIESIETNE_SEKUDNY, #0
  30.        
  31.         LCALL WYPISANIE
  32.        
  33.         MOV TMOD, #21H      ; ustawienie dla obu liczników trybu pracy 1
  34.         MOV TH0, #256-136   ; 10 ms
  35.         MOV TL0, #0         ; Pomiedzy TH0-TL0 (220) impulsami jest około 10 ms
  36.         MOV TH1, #256-192   ; 300Bd
  37.         MOV TL1, #256-192   ;
  38.         SETB TR0
  39.         SETB ET0
  40.         SETB EA
  41. OBROT: 
  42.         LCALL WAIT_KEY      ; zwraca numer klawisza przekonfertowany na od 0-15
  43.         CJNE A, #14, KLAW_1  ; DOPUKI NIE NACISNE ENTER TO SKACZ DO OBROT
  44.         XRL FLAGA, #1       ; lub CPL FLAGA.0
  45.         SJMP OBROT
  46.        
  47. KLAW_1:
  48.         LCALL WAIT_KEY
  49.         CJNE A, #15, KONIEC
  50.         LCALL ZEROJ_WSZYSTKO
  51.         SJMP KONIEC
  52.        
  53. KONIEC:
  54.         SJMP OBROT
  55.        
  56. STOPER:                     ; OBSLUGA PRZERWANIA
  57.         MOV TH0, #256-36    ; CZESCI DOLNEJ (TL0) NIE RUSZAMY !
  58.         PUSH PSW            ; PRZERWANIE NIE MOZE NICZEGO ZNISZCZYC
  59.         PUSH ACC            ; -||- INNE PUSHE
  60.         PUSH 0              ; PUSH AKTYWNEGO BANKU (TU R0), BEDZIE NA EGZAMINIE
  61.         MOV A, FLAGA
  62.         JZ POSTOJ
  63.        
  64.         ;MOV A, CZAS
  65.         ;ADD A, #1          ; NIE INC (inc NIE ustawia flag w tym przeniesienia polowkowego)
  66.         ;DA A               ; KOREKTA BCD, ZAMIENIA LICZENIE Z HEX NA DZIESIETNY, CZYLI PO 09 BEDZIE 10 A NIE 0A
  67.         ;MOV CZAS,A
  68.         ;LCALL WRITE_HEX
  69.         LCALL WYPISANIE
  70.         INC TYSIECZNE_SEKUDNY
  71.        
  72.         MOV A, #10
  73.         CLR C
  74.         SUBB A, TYSIECZNE_SEKUDNY
  75.         ;JZ ZWIEKSZ_JEDNOSCI
  76.         JZ ZWIEKSZ_SETNE
  77.  
  78. ZWIEKSZ_SETNE:
  79.         MOV TYSIECZNE_SEKUDNY, #0
  80.         INC SETNE_SEKUDNY
  81.         MOV A, #10
  82.         CLR C
  83.         SUBB A, SETNE_SEKUDNY
  84.         JZ ZWIEKSZ_DZIESIETNE
  85.        
  86.        
  87. POSTOJ5:
  88.         POP 0               ; I INNE POP
  89.         POP ACC
  90.         POP PSW
  91.         RETI           
  92.  
  93. ZWIEKSZ_DZIESIETNE:
  94.         MOV SETNE_SEKUDNY, #0
  95.         INC DZIESIETNE_SEKUDNY
  96.         MOV A, #10
  97.         CLR C
  98.         SUBB A, DZIESIETNE_SEKUDNY
  99.         JZ ZWIEKSZ_JEDNOSCI
  100.        
  101.        
  102. POSTOJ:
  103.         POP 0               ; I INNE POP
  104.         POP ACC
  105.         POP PSW
  106.         RETI       
  107.        
  108. ZWIEKSZ_JEDNOSCI:
  109.         MOV DZIESIETNE_SEKUDNY, #0
  110.         INC JEDNOSCI
  111.         MOV A, #10
  112.         CLR C
  113.         SUBB A, JEDNOSCI
  114.         JZ ZWIEKSZ_DZIESIATKI
  115.        
  116.        
  117. POSTOJ3:
  118.         POP 0               ; I INNE POP
  119.         POP ACC
  120.         POP PSW
  121.         RETI
  122.        
  123. ZWIEKSZ_DZIESIATKI:
  124.         MOV JEDNOSCI, #0
  125.         INC DZIESIATKI
  126.         MOV A, #10
  127.         CLR C
  128.         SUBB A, DZIESIATKI
  129.         JZ ZEROJ_WSZYSTKO
  130.            
  131.  
  132. POSTOJ1:
  133.         POP 0               ; I INNE POP
  134.         POP ACC
  135.         POP PSW
  136.         RETI
  137.        
  138. ZEROJ_WSZYSTKO:
  139.         MOV DZIESIATKI, #0
  140.         MOV JEDNOSCI, #0
  141.         MOV DZIESIETNE_SEKUDNY, #0
  142.  
  143. POSTOJ2:
  144.         POP 0               ; I INNE POP
  145.         POP ACC
  146.         POP PSW
  147.         RETI
  148.        
  149. WYPISANIE:
  150.         LCALL LCD_CLR
  151.         MOV A, #0                   ; USTAW_KURSOR NA 2 MIEJSCE OD LEWEJ
  152.         LCALL USTAW_KURSOR 
  153.        
  154.         MOV DPTR, #LICZBY           ; PODAJ LICZBY DO DPTR
  155.         MOV A, DZIESIATKI
  156.         MOVC A, @A+DPTR
  157.         LCALL PISZ_ZNAK             ; WYPISZ 0
  158.        
  159.         MOV A, JEDNOSCI
  160.         MOVC A, @A+DPTR
  161.         LCALL PISZ_ZNAK
  162.        
  163.         MOV A, #1
  164.         MOV DPTR, #KROPKA           ; PODAJ LICZBY DO DPTR
  165.         LCALL PISZ_TEKST
  166.        
  167.         MOV DPTR, #LICZBY           ; PODAJ LICZBY DO DPTR
  168.         MOV A, DZIESIETNE_SEKUDNY
  169.         MOVC A, @A+DPTR
  170.         LCALL PISZ_ZNAK             ; WYPISZ 0
  171.         RETI
  172.  
  173.        
  174.  
  175.  
  176.  
  177.  
  178.        
  179.        
  180.        
  181.        
  182.        
  183.        
  184.        
  185.        
  186.        
  187.        
  188.        
  189. LCD_GOTOWY:
  190.             PUSH PSW
  191.             PUSH ACC
  192.             PUSH DPL
  193.             PUSH DPH
  194.             MOV DPTR,#LCDRC+0FF00H
  195. ODCZEKAJ:
  196.             MOVX A,@DPTR
  197.             JB ACC.7, ODCZEKAJ; Jezeli bit ACC.7 == 1, gotowy
  198.             POP DPH
  199.             POP DPL
  200.             POP ACC
  201.             POP PSW
  202.             RET
  203.  
  204. ;PISZ ROZKAZ DO LCD (WE:A)
  205. PISZ_ROZKAZ:
  206.             LCALL LCD_GOTOWY
  207.             PUSH PSW
  208.             PUSH ACC
  209.             PUSH DPL
  210.             PUSH DPH
  211.             MOV DPTR, #LCDWC + 0FF00H ; wpis rozkazów
  212.             MOVX @DPTR, A;kopiuj dane do pamieci zewnetrznej  
  213.             POP DPH
  214.             POP DPL
  215.             POP ACC
  216.             POP PSW
  217.             RET
  218.            
  219. ;PISZ ZNAK (WE:A ASCII)
  220. PISZ_ZNAK:
  221.             LCALL LCD_GOTOWY
  222.             PUSH PSW
  223.             PUSH ACC
  224.             PUSH DPL
  225.             PUSH DPH
  226.             MOV DPTR, #LCDWD+0FF00H
  227.             MOVX @DPTR, A
  228.             POP DPH
  229.             POP DPL
  230.             POP ACC
  231.             POP PSW
  232.             RET
  233.            
  234. ;czytaj znak (wy:a)
  235. CZYT_ZNAK:
  236.             LCALL LCD_GOTOWY
  237.             PUSH PSW
  238.             PUSH DPL
  239.             PUSH DPH
  240.             MOV DPTR, #LCDRD + 0FF00H
  241.             MOVX A,@DPTR
  242.             POP DPH
  243.             POP DPL
  244.             POP PSW
  245.             RET
  246.            
  247. ;ustaw kursor (we:A)
  248. USTAW_KURSOR:
  249.             LCALL LCD_GOTOWY
  250.             PUSH PSW
  251.             PUSH ACC
  252.             PUSH DPL
  253.             PUSH DPH
  254.             ORL A,#80H
  255.             MOV DPTR, #LCDWC + 0FF00H
  256.             MOVX @DPTR, A
  257.             POP DPH
  258.             POP DPL
  259.             POP ACC
  260.             POP PSW
  261.             RET
  262.            
  263. ;znajdz kursor (wy:A)
  264. ZNAJDZ_KURSOR:
  265.             LCALL LCD_GOTOWY
  266.             PUSH PSW
  267.             PUSH DPL
  268.             PUSH DPH
  269.             MOV DPTR, #LCDRC+0FF00H
  270.             MOVX A,@DPTR
  271.             POP DPH
  272.             POP DPL
  273.             POP PSW
  274.             RET
  275.            
  276. ;pisz tekst
  277. ;we: DPTR (tekst w ROM), A - ile znakow
  278. ;wy:A - ile faktycznie znakow
  279. PISZ_TEKST:
  280.             JZ WYKONANE; skok gdy A=0
  281.             PUSH PSW
  282.             PUSH B
  283.             MOV B, A
  284.             CLR A   ; zeruj akumulator
  285.             PUSH ACC; a potem go zapamietej ? mamy pamiętać pusty ?
  286.            
  287. POWTARZAJ:
  288.             POP ACC; czyli mamy tu pusty
  289.             PUSH ACC
  290.             MOVC A, @A+DPTR
  291.             JZ TERMINATOR
  292.             LCALL PISZ_ZNAK
  293.             POP ACC
  294.             INC A
  295.             PUSH ACC
  296.             DJNZ B, POWTARZAJ; skok gdy B!=0, skoro B jest nie używane to po co to ?
  297.            
  298. TERMINATOR:
  299.             POP ACC
  300.             POP B
  301.             POP PSW
  302.            
  303. WYKONANE:
  304.             RET
  305.            
  306. GAZETA:
  307.             DB 'To jest wiadomosc'
  308.             DB 'Nowe dane'
  309.            
  310. ;czytanie klawiatury
  311. ;wy A - statust klawiszy 0-7, B -status klawiszy 8-F
  312. CZYT_KLAWISZ:
  313.             PUSH PSW
  314.             MOV A,R0
  315.             PUSH ACC
  316.             MOV A, R1
  317.             PUSH ACC
  318.  
  319. ;A - BAJT
  320. PISZ_BIN:
  321.             PUSH PSW
  322.             PUSH ACC
  323.             PUSH B
  324.             PUSH ACC
  325.             MOV B,#8
  326. DALSZE:
  327.             POP ACC
  328.             RL A
  329.             PUSH ACC
  330.             ANL A,#1
  331.             ADD A,#30H
  332.             LCALL PISZ_ZNAK
  333.             DJNZ B, DALSZE
  334.             POP ACC
  335.             POP B
  336.             POP ACC
  337.             POP PSW
  338.             RET
  339. ;A - BAJT
  340. PISZ_HEX:
  341.             PUSH PSW
  342.             PUSH ACC
  343.             PUSH B
  344.             MOV B,A
  345.             SWAP A; ZAMIANA TETRAD
  346.             ANL A,0FH
  347.             ADD A,#30H
  348.             CJNE A, #39H + 1, ZAKR_1
  349. ZAKR_1:    
  350.             JC PISZ_1
  351.             ADD A,#41H -30H -10
  352. PISZ_1:    
  353.             LCALL PISZ_ZNAK
  354.             MOV A, B
  355.             ANL A, #0FH
  356.             ADD A, #30H
  357.             CJNE A, #39H + 1, ZAKR_2
  358. ZAKR_2:    
  359.             JC PISZ_2
  360.             ADD A, #41H - 30H -10
  361. PISZ_2:    
  362.             LCALL PISZ_ZNAK
  363.             POP B
  364.             POP ACC
  365.             POP PSW
  366.             RET
  367.  
  368. ;A - BAJT
  369. PUSH_DEC:
  370.             PUSH PSW
  371.             PUSH ACC
  372.             PUSH B
  373.             MOV B, #10
  374.             DIV AB
  375.             PUSH B
  376.             MOV B, #10
  377.             DIV AB
  378.             PUSH B
  379.             MOV B, #10
  380.             DIV AB
  381.             PUSH B
  382.             POP ACC
  383.             ADD A, #30H
  384.             LCALL PISZ_ZNAK
  385.             POP ACC
  386.             ADD A, #30H
  387.             LCALL PISZ_ZNAK
  388.             POP ACC
  389.             ADD A, #30H
  390.             LCALL PISZ_ZNAK
  391.             POP B
  392.             POP ACC
  393.             POP PSW
  394.             RET
  395.            
  396.        
  397.        
  398. KROPKA:
  399.             DB '.',0
  400. LICZBY:
  401.             DB '0123456789',0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement