Facebook
From byq, 5 Years ago, written in Plain Text.
Embed
Download Paste or View Raw
Hits: 211
  1. $NOMOD51
  2. #include <C8051F060.INC>
  3. ;-------------------------------------------------------------------------------------------------------
  4. ;                       DEFINICJE SYMBOLI
  5. ;-------------------------------------------------------------------------------------------------------
  6.         aktywacja_backLight     equ     P5.3    ; obsluga podswietlenia LCD
  7.         LEDs                    equ     P2.5    ; aktywacja diod LED
  8.        
  9.         TOS                     equ     30H     ; wierzcholek stosu
  10.         zapal_wszystko          equ     0FFH    ; zapalenie wszystkich diod
  11.         Ready                   bit     0
  12.         Ready2                  bit     1
  13.         T0_TMOD                 equ     1H
  14.         T0_Reload               equ     65536 - 100
  15.         Del                     equ     7FH
  16.         Del2                    equ     7FH
  17.         DelReload               equ     1
  18.         DelReload2              equ     1
  19.         T1_TMOD                 equ     10H
  20.         T1_Reload               equ     65536 - 10
  21.         flaga1                  bit     2
  22.         flaga2                  bit     3
  23.         flaga3                  bit     4
  24.         decode                  bit     5
  25.  
  26.         Button_Code             equ     70h
  27.         Position_Pointer        equ     50h
  28.         Sign_Pointer            equ     51h
  29.         Sign_Symbol             equ     52h
  30.         Sign_Code               equ     53h
  31.  
  32.         DIGIT0                  equ     P2.0
  33.         DIGIT1                  equ     P2.1
  34.         DIGIT2                  equ     P2.2
  35.         DIGIT3                  equ     P2.3
  36.         DIGIT4                  equ     P2.4
  37.         CK_D                    equ     P5.6    ; obsluga bufora sterujacego diodami LED
  38.         SW1                     equ     P5.4
  39.         SW2                     equ     P5.5
  40. ;-------------------------------------------------------------------------------------------------------
  41. ;       Umieszczenie poczatku programu pod adresem 0000H
  42.         cseg    AT 0000h
  43.         jmp     Poczatek
  44.        
  45.         org     000BH
  46.         jmp     Timer0_Int
  47.  
  48.         org     001BH
  49.         jmp     Timer1_Int
  50.        
  51.        
  52. ;-------------------------------------------------------------------------------------------------------
  53. ;       Konfiguracja mikrokontrolera
  54. ;-------------------------------------------------------------------------------------------------------
  55. Poczatek:
  56.        
  57.         mov     WDTCN,     #0DEh        ; wylaczenie watchdoga
  58.         mov     WDTCN,     #0ADh        ; wylaczenie watchdoga
  59.         mov     SFRPAGE,   #CONFIG_PAGE ; wlaczenie odpowiedniej konfiguracji SFR-ow
  60.         mov     XBR2,      #040h        ; wlaczenie krosownicy
  61.  
  62.                
  63.         mov 0x45, #11111110b
  64.         mov 0x46, #11111101b
  65.         mov 0x47, #11111011b
  66.         mov 0x48, #11110111b
  67.         mov 0x49, #11101111b
  68.  
  69.  
  70.         mov 0x4A, #0x06
  71.         mov 0x4B, #0x5B
  72.         mov 0x4C, #0x06
  73.         mov 0x4D, #0x5B
  74.         mov 0x4E, #0x06
  75.  
  76.         mov 0x54, #0x07 ;7
  77.         mov 0x55, #0x7F ;8
  78.         mov 0x56, #0x6F ;9
  79.         mov 0x57, #0x71 ;F
  80.         mov 0x58, #0x66 ;4
  81.         mov 0x59, #0x6D ;5
  82.         mov 0x5A, #0x7D ;6
  83.         mov 0x5B, #0x79 ;E
  84.         mov 0x5C, #0x06 ;1
  85.         mov 0x5D, #0x5B ;2
  86.         mov 0x5E, #0x4F ;3
  87.         mov 0x5F, #0x5E ;D
  88.         mov 0x60, #0x3F ;0
  89.         mov 0x61, #0x77 ;A
  90.         mov 0x62, #0x40 ;B
  91.         mov 0x63, #0x39 ;C
  92.  
  93.         mov Position_Pointer, #0x45
  94.         mov Sign_Pointer, #0x4A
  95.  
  96.  
  97.         mov 0x70, #11111111b
  98.  
  99.         clr flaga1
  100.         clr flaga2
  101.         clr Ready
  102.         clr Ready2
  103.         clr decode
  104.  
  105.        
  106.        
  107. ;-------------------------------------------------------------------------------------------------------
  108. ;                       PROGRAM GLOWNY
  109. ;-------------------------------------------------------------------------------------------------------
  110. ;       inicjalizacja
  111.         mov     SP, #TOS                ; inicjalizacja stosu
  112.         clr     aktywacja_backLight     ; wylaczenie podswietlania LCD
  113.         mov     Del, #DelReload
  114.         mov     Del2, #DelReload2
  115.         clr     Ready
  116.         clr     Ready2
  117.         call    Timer0_Init
  118.         call    Timer1_Init
  119.  
  120.         mov     R1, #0x54
  121.         mov     R0, #0x45
  122.         mov     R4, #0x00
  123.         mov     R5, #05h
  124.         mov     R6, #0x52
  125.         mov     R3, #0x4A
  126.         mov     R7, #0xFE
  127.        
  128.  
  129.         setb EA
  130.         setb ET0
  131.         setb ET1       
  132. ;-------------------------------------------------------------------------------------------------------
  133. ;       glowna petla programu
  134. ;-------------------------------------------------------------------------------------------------------
  135.  
  136.        
  137.         clr DIGIT0     
  138.         clr A
  139.        
  140.         mov P7, #0x00
  141.         call zapisz
  142.         mov DPTR, #kody_klawiszy
  143. ;       mov Sign_Symbol, #symbole
  144. ;       mov Sign_Code, #kody_klawiszy
  145.  
  146.        
  147.  
  148.  
  149. loop1: 
  150.         jnb     decode, loop1
  151.         call    zdekoduj_wcisniety
  152.         jmp     loop1
  153.  
  154.  
  155. zdekoduj_wcisniety:
  156.  
  157. loop:
  158.         clr A
  159.  
  160.         movc A, @A+DPTR
  161.         cjne A, #01110111b, nie
  162.         mov DPTR, #kody_klawiszy
  163.         mov R1, #0x54
  164.         nie:
  165.  
  166.         cjne A,Button_Code,skok
  167.        
  168.         mov A, @R1
  169.        
  170.         mov 0x4A, A
  171.         clr decode
  172.         jmp koniec
  173.  
  174.  
  175. skok:
  176. inc DPTR
  177. inc R1
  178. jmp loop
  179. koniec:
  180. ret
  181.  
  182.  
  183.  
  184.  
  185.  
  186.  
  187.  
  188. ;-----------------------------------------------------------------------------------------------
  189. ;               PROCEDURY
  190. ;-----------------------------------------------------------------------------------------------
  191.  
  192. ;               ZNAKI
  193. ;-----------------------------------------------------------------------------------------------
  194.  
  195.  
  196.  
  197.  
  198. ;-----------------------------------------------------------------------------------------------
  199. ;-------------------------------------------------------------------------------------------------
  200.  
  201.  
  202. poczekaj_hw:
  203.         jnb     Ready, $
  204.         clr     Ready
  205. ret
  206.  
  207.  
  208.  
  209. zapisz:
  210.         nop
  211.         nop
  212.         clr CK_D
  213.         nop
  214.         nop
  215.         setb CK_D
  216. ret
  217.  
  218.  
  219. ;-------------------------------------------------------------------------------------------------
  220. ;                               INICJZALICJA TIMERA
  221. ;-------------------------------------------------------------------------------------------------
  222. Timer0_Init:
  223.  
  224.         mov     SFRPAGE, #TIMER01_PAGE
  225.         anl     TMOD, #0F0H
  226.         orl     TMOD, #T0_TMOD
  227.        
  228.         call    Timer0_Reload
  229.  
  230.         setb    TR0
  231.        
  232.         mov     SFRPAGE, #CONFIG_PAGE
  233.         ret    
  234.  
  235.  
  236. Timer1_Init:
  237.  
  238.         mov     SFRPAGE, #TIMER01_PAGE
  239.         anl     TMOD, #0FH
  240.         orl     TMOD, #T1_TMOD
  241.        
  242.         call    Timer1_Reload
  243.  
  244.         setb    TR1
  245.        
  246.         mov     SFRPAGE, #CONFIG_PAGE
  247.         ret    
  248.  
  249. ;-------------------------------------------------------------------------------------------------
  250.  
  251. ;-------------------------------------------------------------------------------------------------
  252. ;                                       RELOAD
  253. ;-------------------------------------------------------------------------------------------------
  254.  
  255. Timer0_Reload:
  256.        
  257.         mov     TH0, #High(T0_Reload)
  258.        
  259.         mov     TL0, #Low(T0_Reload)
  260.        
  261.         ret
  262.  
  263. ;-------------------------------------------------------------------------------------------------
  264. ;                               PRZERWANIE PROC
  265. ;-------------------------------------------------------------------------------------------------
  266.  
  267. Timer0_Int:
  268.  
  269.         push    ACC
  270.  
  271.         mov     SFRPAGE, #TIMER01_PAGE
  272.        
  273.         call    Timer0_Reload
  274.        
  275.         mov     SFRPAGE, #CONFIG_PAGE
  276.  
  277.         jb      decode, Timer0_Int_Exit
  278.  
  279. skanuj:
  280.  
  281.         mov     P3, R7
  282.  
  283.         mov     Button_Code, P3
  284.  
  285.         mov     A, Button_Code
  286.  
  287.         anl     A, #0F0h
  288.  
  289.         cjne    A, #0F0h, wcisniety
  290.         jmp     skanuj_dalej   
  291.  
  292.         wcisniety:
  293.         setb    decode
  294.         mov     A, R7
  295.         anl     A, #00Fh
  296.         anl     Button_Code, #0F0h
  297.         add     A, Button_Code
  298.         mov     Button_Code, A
  299.         jmp     Timer0_Int_Exit
  300.  
  301.         skanuj_dalej:
  302.         mov     A, R7
  303.  
  304.         rl      A
  305.  
  306.         mov     R7, A
  307.        
  308.         cjne    A, #0EFh, not_reload_R7
  309.         mov     R7, #0FEh
  310.         jmp     Timer0_Int_Exit
  311.     ;jmp skanuj ?
  312. not_reload_R7: 
  313.         jmp     skanuj
  314.  
  315. Timer0_Int_Exit:
  316.  
  317.         pop     ACC
  318.  
  319.         reti
  320.  
  321.  
  322.  
  323. Timer1_Reload:
  324.        
  325.         mov     TH1, #High(T1_Reload)
  326.        
  327.         mov     TL1, #Low(T1_Reload)
  328.        
  329.         ret
  330.  
  331.  
  332. Timer1_Int:
  333.  
  334.         push    ACC
  335.  
  336.         mov     SFRPAGE, #TIMER01_PAGE
  337.        
  338.         call    Timer1_Reload
  339.        
  340.         mov     SFRPAGE, #CONFIG_PAGE
  341.        
  342.         mov P2, #0ffh
  343.         mov P7, #00h
  344.         call zapisz
  345.  
  346.         mov R0, Position_Pointer
  347.         mov P2, @R0  
  348.  
  349.         mov R0, Sign_Pointer
  350.         mov P7, @R0
  351.         call zapisz
  352.  
  353.         inc Sign_Pointer
  354.         inc Position_Pointer
  355.        
  356.         djnz R5, Timer1_Int_Exit
  357.  
  358.         mov Sign_Pointer,     #0x4A
  359.         mov Position_Pointer, #0x45
  360.         mov R5, #05h
  361.  
  362. Timer1_Int_Exit:
  363.  
  364.         pop     ACC
  365.  
  366.         reti
  367. ;------------------------------------------------------------------------------------------------
  368. kody_klawiszy:
  369. db      11101110b ;7
  370. db      11101101b ;8
  371. db      11101011b ;9
  372. db      11100111b ;F
  373. db      11011110b ;4
  374. db      11011101b ;5
  375. db      11011011b ;6
  376. db      11010111b ;E
  377. db      10111110b ;1
  378. db      10111101b ;2
  379. db      10111011b ;3
  380. db      10110111b ;D
  381. db      01111110b ;0
  382. db      01111101b ;A
  383. db      01111011b ;B
  384. db      01110111b ;C
  385.  
  386. symbole:
  387. db      0x07 ;7
  388. db      0x7F ;8
  389. db      0x6F ;9
  390. db      0x71 ;F
  391. db      0x66 ;4
  392. db      0x6D ;5
  393. db      0x7D ;6
  394. db      0x79 ;E
  395. db      0x06 ;1
  396. db      0x5B ;2
  397. db      0x4F ;3
  398. db      0x5E ;D
  399. db      0x3F ;0
  400. db      0x77 ;A
  401. db      0x40 ;B
  402. db      0x39 ;C
  403.        
  404. end                     ; informacja dla asemblera, ze skonczyl sie plik zrodlowy
  405.  
  406.  
  407.  
  408.