Advertisement
Guest User

Untitled

a guest
Dec 2nd, 2017
138
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
ARM 9.17 KB | None | 0 0
  1. ;Dodawanie 2 liczb (A+B) 16bitowych
  2. PROG SEGMENT CODE
  3. lowA DATA 30h
  4. highA DATA 31h
  5. lowB DATA 32h
  6. highB DATA 33h
  7. lowWynik DATA 34h
  8. highWynik DATA 35h
  9. zmA EQU 0F08h
  10. zmB EQU 03FFh
  11. CSEG AT 0
  12. JMP START
  13. RSEG PROG
  14.  
  15. START:
  16.   ;Wpisuje wartości pod odpowiednie komórki (low - mniej znaczące bity, high - bardziej znaczące bity)
  17.   MOV lowA, #low(zmA)
  18.   MOV highA, #high(zmA)
  19.   MOV lowB, #low(zmB)
  20.   MOV highB, #high(zmB)
  21.  
  22.   ;Dodaję mniej znaczące bity do siebie, a następnie bardziej znaczące
  23.   MOV A, lowA
  24.   ADDC A, lowB
  25.   MOV lowWynik, A
  26.   MOV A, highA
  27.   ADDC A, highB
  28.   MOV highWynik, A
  29. END
  30.  
  31. ;Odejmowanie 2 liczb (A-B) 16bitowych
  32. PROG SEGMENT CODE
  33. lowA DATA 30h
  34. highA DATA 31h
  35. lowB DATA 32h
  36. highB DATA 33h
  37. lowWynik DATA 34h
  38. highWynik DATA 35h
  39. zmA EQU 0FF08h
  40. zmB EQU 1009h
  41. CSEG AT 0h
  42. JMP START
  43. RSEG PROG
  44.  
  45. START:
  46.   MOV lowA, #low(zmA)
  47.   MOV highA, #high(zmA)
  48.   MOV lowB, #low(zmB)
  49.   MOV highB, #high(zmB)
  50.   MOV A, lowA
  51.   SUBB A, lowB
  52.   MOV lowWynik, A
  53.   MOV A, highA
  54.   SUBB A, highB
  55.   MOV highWynik, A
  56. END
  57.  
  58. ;Kopiowanie elementow z tablicy do komorek o adresach 30h-35h
  59. ;Wskaźniki - do rejestru R0 lub R1 przenosimy wartość wskazującą na dany adres (np. #30h),
  60. ;wartość tą możemy inkrementować i pobierać dane z konkretnego adresu (MOV A, @R0)
  61. PROG SEGMENT CODE
  62. CSEG AT 0
  63. JMP START
  64. RSEG PROG
  65. START:
  66.   MOV DPTR, #TABLE
  67.   MOV R0, #30h
  68. LOOP:
  69.   MOVC A, @A+DPTR
  70.   MOV @R0, A
  71.   INC DPTR
  72.   INC R0
  73.   CLR A
  74.   CJNE R0, #35h, loop
  75.   JMP KONIEC
  76. TABLE: db 01h, 02h, 03h, 04h, 05h
  77. KONIEC:
  78. END
  79.  
  80. ;Migające diody
  81. ;ACALL - wywołanie funkcji, wymagane RET
  82. ;DELAY - for w forze
  83. PROG SEGMENT CODE
  84. CSEG AT 0
  85. JMP LOOP
  86. RSEG PROG
  87.  
  88. LOOP:
  89.   MOV P2, #10101010b
  90.   ACALL DELAY
  91.   MOV P2, #01010101b
  92.   ACALL DELAY
  93.   AJMP LOOP
  94. DELAY:
  95.   MOV R0, #255
  96.   ODL2:
  97.     MOV R1, #255
  98.   ODL1:
  99.     NOP
  100.     NOP
  101.     DJNZ R1, ODL1
  102.     DJNZ R0, ODL2
  103. RET
  104. END
  105.  
  106. ;Zapalanie diod odpowiednimi przyciskami
  107. PROG SEGMENT CODE
  108. CSEG AT 0
  109. JMP start
  110. RSEG PROG
  111.  start:
  112.  MOV A,P3
  113.  ORL A, #00h
  114.  MOV P2,A
  115.  SJMP start
  116. END
  117.  
  118. ;Zapalanie/gaszenie diody przy przepełnieniu timera 0
  119. PROG SEGMENT CODE
  120. LED BIT P2.0
  121. CSEG AT 0
  122. JMP START
  123. RSEG PROG
  124. START:
  125.   MOV TL0, #255
  126.   MOV TH0, #255
  127.   MOV TMOD, #01h
  128.   SETB TR0
  129. LOOP:
  130.   JNB TF0, $
  131.   CLR TF0
  132.   CPL LED
  133.   SJMP LOOP
  134. END
  135.  
  136. ;Rodzaje przerwań i ich konfiguracja
  137. PROG SEGMENT CODE
  138. CSEG AT 0
  139. JMP START
  140. CSEG AT 0Bh
  141. AJMP przerwanie_TIMER0   ;przepełnienie TIMERA0
  142. CSEG AT 1Bh
  143. AJMP przerwanie_TIMER1   ;przepełnienie TIMERA1
  144. CSEG AT 03h
  145. AJMP przerwanie_ZEWN0    ;przerwanie zewnętrzne INT0 - przycisk: P2.2
  146. CSEG AT 13h
  147. AJMP przerwanie_ZEWN1    ;przerwanie zewnętrzne INT1 - przycisk: P2.3
  148. RSEG PROG
  149. START:
  150.   SETB EA   ;odblokowanie globalne przerwań
  151.   SETB ET1  ;odblokowanie przerwań na timerze 1
  152.   SETB EX1  ;odblokowanie przerwań na INT1
  153.   SETB ET0  ;odblokowanie przerwań na timerze 0
  154.   SETB EX0  ;odblokowanie przerwań na INT0
  155.   ;JEDNO PRZERWANIE NA RAZ, ustawiam priorytet zewnętrznym przerwaniom - nie mogą być przerwane przez inne przerwania
  156.   SETB PX1  ;priorytet INT1
  157.   SETB PX0  ;priorytet INT0
  158.   ;PT0, PT1 - priorytety timerow, PS - priorytet przerwania szeregowego
  159.   ;TIMER1 ma wiekszy priorytet od TIMERA0, zewnętrzne przerwania mają większy priorytet od timerow, z tego powodu
  160.   ;po wywołaniu przerwania zewnętrznego przerwania timerow przestaja byc obslugiwane, przerwanie INT1 ma wiekszy
  161.   ;priorytet od INT0
  162.   ;Konfiguracja timerow:
  163.   MOV TL0, #255h
  164.   MOV TH0, #255h
  165.   MOV TL1, #128h
  166.   MOV TH1, #128h
  167.   MOV TMOD #01h
  168.   SETB TR0
  169.   SETB TR1
  170. LOOP:
  171.   CPL P2.0
  172.   ACALL DELAY
  173.   SJMP LOOP
  174. DELAY:
  175.   MOV R0, #255h
  176.   ODL1:
  177.     MOV R1, #255h
  178.     ODL2:
  179.       NOP
  180.       NOP
  181.       DJNZ R1, ODL2
  182.     DJNZ R0, ODL1
  183.   RET
  184. przerwanie_TIMER0:
  185.   CPL P2.1
  186.   CLR TF0
  187.   ACALL DELAY
  188. RETI
  189. przerwanie_TIMER1:
  190.   CPL P2.2
  191.   CLR TF1
  192.   ACALL DELAY
  193. RETI
  194. przerwanie_ZEWN0:
  195.   CPL P2.3
  196.   ACALL DELAY
  197. RETI
  198. przerwanie_ZEWN1:
  199.   CPL P2.4
  200.   ACALL DELAY
  201. RETI
  202. END
  203.  
  204. ;Przerwanie zewnętrzne wyzwalane zboczem
  205. CSEG AT 0
  206. JMP START
  207. CSEG AT 03h
  208. AJMP przerwanie_INT0
  209. CSEG AT 30h
  210. START:
  211.   SETB EA
  212.   SETB EX0
  213.   SETB IT0 ;INT0 wyzwalany zboczem (IT1 dla INT1)
  214.   ;IE0/IE1 - flaga inf. o przerwaniu zewnętrznym INT0/INT1,
  215.   ;ustawiana sprzętowo, zerowana przy przyjęciu przerwania
  216. LOOP:
  217.   CPL P2.0
  218.   ACALL DELAY
  219.   SJMP LOOP
  220. DELAY:
  221.   MOV R0, #255
  222.   ODL1:
  223.     MOV R1, #255
  224.     ODL2:
  225.       NOP
  226.       NOP
  227.       DJNZ R1, ODL2
  228.     DJNZ R0, ODL1
  229. RET
  230. przerwanie_INT0:
  231.   CPL P2.1
  232.   ACALL DELAY
  233. RETI
  234. END
  235.  
  236. ;Pobieranie znaku i wpisywanie do SBUF kolejnego znaku (INC A)
  237. CSEG AT 0
  238. AJMP START
  239. CSEG AT 30h
  240. START:
  241.   MOV SCON, #50h
  242.   MOV TMOD, #20h
  243.   MOV TH1, #0FDh
  244.   SETB TR1
  245.   CLR TI
  246. LOOP:
  247.   JNB R1, $ ;czeka na odbior znaku
  248.   MOV A, SBUF ;pobranie znaku do akumulatora
  249.   CLR RI ;czyszczenie flagi odbioru
  250.   CPL P2.0
  251.   INC A
  252.   MOV SBUF, A
  253.   JNB TI, $ ;czeka na oprożnienie bufora nadajnika
  254.   CLR TI
  255.   CPL P2.0
  256.   AJMP LOOP
  257. END
  258.  
  259. ;Koder i dekoder - UART
  260. CSEG AT 0
  261. JMP START
  262. CSEG AT 30h
  263. START:
  264.   MOV SCON, #50h
  265.   MOV TMOD, #20h
  266.   MOV TH1, #0FDh ; 9600 Bds at 11.0592MHz
  267.   SETB TR1 ; uruchomienie licznika
  268.   CLR TI ; wyzerowanie flagi wyslania
  269. LOOP:
  270.   JNB P3.7, KODER
  271.   JNB P3.6, DEKODER
  272.   SJMP LOOP
  273. KODER:
  274.   CLR P3.7
  275.   SETB P3.6
  276.   JNB RI, $
  277.   MOV A, SBUF
  278.   INC A
  279.   CLR RI
  280.   SJMP LOOP
  281. DEKODER:
  282.   CLR P3.6
  283.   SETB P3.7
  284.   MOV SBUF, A
  285.   JNB TI, $
  286.   CLR TI
  287.   SJMP LOOP
  288. END
  289.  
  290. ;Pobranie 5 znakow z UARTA do adresow 30h-34h
  291. PROG SEGMENT CODE
  292. CSEG AT 0h
  293. JMP START
  294. RSEG PROG
  295. START:
  296.   MOV R0, #30h
  297.   MOV SCON, #50h
  298.   MOV TMOD, #20h
  299.   MOV TH1, #0FDh
  300.   SETB TR1
  301. LOOP:
  302.   JNB RI, $
  303.   MOV A, SBUF
  304.   MOV @R0, A
  305.   INC R0
  306.   CLR RI
  307.   CJNE R0, #35h, LOOP
  308. END
  309.  
  310. ;Szukanie największej liczby spośrod tablicy liczb
  311. PROG SEGMENT CODE
  312. CSEG AT 0
  313. JMP START
  314. RSEG PROG
  315. START:
  316.   MOV DPTR, #table
  317.   MOVC A, @A+DPTR
  318.   MOV R0, A
  319.   INC DPTR
  320.   INC R1
  321. LOOP:
  322.   CLR A
  323.   MOVC A, @A+DPTR
  324.   MOV B, R0
  325.   INC DPTR
  326.   INC R1
  327.   CJNE A, B, IF1
  328. CHECK:
  329.   CJNE R1, #05, LOOP
  330.   AJMP KONIEC
  331. IF1: ;A>B
  332.   JC IF2
  333.   MOV R0, A
  334.   SJMP CHECK
  335. IF2:  ;A>B
  336.   SJMP CHECK
  337. table: db 01, 07, 03, 09, 05
  338. KONIEC:
  339. END
  340.  
  341. ;Szukanie najmniejszej liczby sposrod adresow 30-34
  342. PROG SEGMENT CODE
  343. CSEG AT 0
  344. JMP START
  345. RSEG PROG
  346. START:
  347.   MOV R0, #30h
  348.   MOV R1, 30h
  349.   INC R0
  350. LOOP:
  351.   MOV A, R1
  352.   MOV B, @R0
  353.   INC R0
  354.   CJNE A, B, IF1
  355. CHECK:
  356.   CJNE R0, #35h, LOOP
  357.   SJMP KONIEC
  358. IF1: ;A>B
  359.   JC IF2
  360.   MOV R1, B
  361.   SJMP CHECK
  362. IF2: ;A<B
  363.   SJMP CHECK
  364. KONIEC:
  365.   END
  366.  
  367. ;Szukanie największej liczby z UARTA, wczytywanie 5 liczb
  368. PROG SEGMENT CODE
  369. CSEG AT 0
  370. JMP START
  371. RSEG PROG
  372. START:
  373.   MOV SCON, #50h
  374.   MOV TMOD, #20h
  375.   MOV TH1, #0FDh
  376.   SETB TR1
  377.   JNB RI, $
  378.   CLR RI
  379.   MOV R0, SBUF
  380.   INC R1
  381. LOOP:
  382.   MOV A, R0
  383.   JNB RI, $
  384.   MOV B, SBUF
  385.   CLR RI
  386.   INC R1
  387.   CJNE A, B, IF1
  388. CHECK:
  389.   CJNE R1, #05, LOOP
  390.   SJMP KONIEC
  391. IF1: ;A>B
  392.   JC IF2
  393.   SJMP CHECK
  394. IF2: ;A<B
  395.   MOV A, B
  396.   MOV R0, A
  397.   SJMP CHECK
  398. KONIEC:
  399.   END
  400.  
  401. ;W komorkach pamięci o adresach 50h-80h znajdują się
  402. ;jakieś wartości. Dodaj je do siebie, wynik wpisz do rejestru R3
  403. PROG SEGMENT CODE
  404. CSEG AT 0
  405. JMP start
  406. RSEG PROG
  407. START:
  408.   MOV R0, #50h
  409. LOOP:
  410.   ADD A, @R0
  411.   INC R0
  412.   CJNE R0, #81h, LOOP
  413.   MOV R3, A
  414. END
  415.  
  416. ;Porownanie R3 I R4, odjęcie mniejszej od większej, roznica do R2
  417. PROG SEGMENT CODE
  418. CSEG AT 0
  419. JMP START
  420. RSEG PROG
  421. START:
  422.   MOV R3, #15h
  423.   MOV R4, #25h
  424.   MOV A, R3
  425.   MOV B, R4
  426.   CJNE A, B, IF1
  427.   MOV R2, #00h
  428.   SJMP KONIEC
  429. IF1: ;A>B(R4)
  430.   JC IF2 ;A<B
  431.   SUBB A, B ;(R3-R4)
  432.   MOV R2, A
  433.   SJMP KONIEC
  434. IF2: ;A<B (R3<R4)
  435.   CLR C
  436.   MOV A, B ;(A = R4)
  437.   SUBB A, R3 ;(R4-R3)
  438.   MOV R2, A
  439.   SJMP KONIEC
  440. KONIEC:
  441.   END
  442.  
  443. ;W R3 i R4 są jakieś wartości. Jeśli są sobie rowne, wpisz pod adres 20h 1.
  444. ;W przeciwnym razie mniejszą odejmij od większej, a rożnicę zapisz pod
  445. ;adresem 21h
  446. PROG SEGMENT CODE
  447. CSEG AT 0
  448. JMP START
  449. RSEG PROG
  450. START:
  451.   MOV R3, #15h
  452.   MOV R4, #25h
  453.   MOV A, R3
  454.   MOV B, R4
  455.   CJNE A, B, IF1
  456.   MOV 20h, #01
  457.   SJMP KONIEC
  458. IF1: ;A>B
  459.   JC IF2
  460.   SUBB A, B
  461.   MOV 21h, A
  462.   SJMP KONIEC
  463. IF2:
  464.   CLR C
  465.   MOV A, B
  466.   SUBB A, R3
  467.   MOV 21h, A
  468.   SJMP KONIEC
  469. KONIEC:
  470.   END
  471.  
  472. ;Zaświecaj po kolei diody (od 0 do 7)
  473. PROG SEGMENT CODE
  474. CSEG AT 0
  475. JMP START
  476. RSEG PROG
  477. START:
  478.   MOV A, #0FFh
  479. LOOP:
  480.   RLC A
  481.   MOV P2, A
  482.   INC R0
  483.   CJNE R0, #08, LOOP
  484. END
  485.  
  486. ;Jeśli użytkownik wciśnie 10x przycisk P3.2 zapala się kolejna dioda. D0=10x, D1=20x, D3=30x itd.
  487. PROG SEGMENT CODE
  488. CSEG AT 0
  489. JMP START
  490. RSEG PROG
  491. START:
  492.   MOV A, #0FFh
  493.   MOV R7, #08
  494. NEXT:
  495.   MOV R6, #10
  496.   LOOP:
  497.     JB P3.2, $
  498.     JNB P3.2, $
  499.     DJNZ R6, LOOP
  500.   RLC A
  501.   MOV P2, A
  502.   DJNZ R7, NEXT
  503. END
  504.  
  505. ;W komorkach pamięci od adresow 30h-40h są jakieś wartości. Wyświetlaj każdą z nich binarnie na diodach
  506. ;od pierwszej komorki. Odbywa się to przez wciśniecie przycisku P3.2
  507. PROG SEGMENT CODE
  508. SWITCH BIT P3.2
  509. CSEG AT 0
  510. JMP START
  511. RSEG PROG
  512. START:
  513.   MOV R0, #30h
  514. LOOP:
  515.   JNB SWITCH, $
  516.   JB SWITCH, $
  517.   MOV A, @R0
  518.   INC R0
  519.   MOV P2, A
  520.   CJNE R0, #41h, LOOP
  521. END
  522.  
  523. ;Wartość spod adresu 20h umieść pod adresem na ktory wskazuje wartość znajdująca się w rejestrze R3
  524. PROG SEGMENT CODE
  525. CSEG AT 0
  526. JMP START
  527. RSEG PROG
  528. START:
  529.   MOV 20h, #30h
  530.   MOV R3, #31h
  531.   MOV A, R3
  532.   MOV R0, A
  533.   MOV @R0, 20h
  534. END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement