Rozwiązania zadań z asemblera (źródło forum starszego rocznika)
ad1.
start0: mov tmod,#00010000b mov th1,#217 mov tl1,#0 setb tr1 start: jnb tf1,start clr tf1 cpl P2.0 mov th1,#217 ajmp start end
wpisuje tu 217 bo 10ms to 10000 a więc około 39*256, 256-39=217, 256-256=0, wiec 217 wpisuje do th1, a 0 do tl1. Troszkę to takie okrężne i może ktoś Ci to lepiej wytlumaczy Dr. Mysińskiemu mój tok rozumowania chyba się nie do końca podobał ale zaliczył.
ad1 by Wojtek:
Idealnie odmierzone 10ms (ustawialne przez odejmowanie od 65536 zadanego okresu czasu i zapisanie tego do zmiennej max - 10000 impulsow to 10ms)
max equ 65536-10000 start: mov tmod, #00010000b mov tl1,#low(max) mov th1,#high(max) setb tr1 test: jnb tf1, test cpl p2.0 orl tl1,#low(max) mov th1,#high(max) clr tf1 sjmp test end
ad2.
start0: mov tmod, #00010000b mov th1, #217 mov tl1, #0 setb et1 setb ea setb tr1 start: ajmp start org 1bh cpl P2.0 mov th1, #217 ; tu już tl1 nie ustawiam bo i tak po przepełnieniu jest 0 reti end
ad 2. by andrewgrgn
LJMP START ORG 0001BH MOV TH1,#217 ;wpisanie wartości 217 CPL P2.0 ;zmiana stanu P2.0 ORG 100H START: MOV TMOD,#0001000b ;Timer 1 tryb 1 MOV TH1,#217 MOV TL1,#0 SETB TR1 ;start Timera 0 SETB EA SETB ET1 SJMP $ ;koniec pracy programu głównego
ad 2 by Wojtek
Podobnie jak w zad1, tylko z obsługą przerwania.
licznik equ 65536-10000 org 00h ljmp start org 1bh ;przerwanie licznika 1 ljmp neguj start: mov tmod, #00010000b mov th1, #high(licznik) mov tl1, #low(licznik) setb et1 setb ea setb tr1 petla: sjmp petla neguj: cpl p2.0 orl tl1, #low(licznik) mov th1, #high(licznik) reti end
ad3.
start0: setb P2.0 start: mov C,P1.0 orl C,P1.1 jc start0 clr P2.0 ajmp start end
ad4. by andrewgrgn
LJMP START ORG 100H START: MOV 50H,30H MOV 51H,31H MOV 52H,32H MOV 53H,33H MOV 54H,34H MOV 55H,35H MOV 56H,36H MOV 57H,37H MOV 58H,38H MOV 59H,39H MOV 5AH,3AH MOV 5BH,3BH MOV 5CH,3CH MOV 5DH,3DH MOV 5EH,3EH MOV 5FH,3FH AJMP START
ad5.
start: mov A,R1 add A,R3 mov R1,A mov A,R0 addc A,R2 mov R0,A
ad6.
LJMP START ORG 100H START: MOV A,P1 ADD A,P2 ADD A,P3 ADD A,P4 MOV 31H,A ;przykładowa komórka pamięci RAM AJMP START
ad7. by andrewgrgn
LJMP START ORG 100H START: MOV A,40H SUBB A,30H MOV 31H,A AJMP START
ad8.
start0: clr P2.0 start: mov C,P1.0 anl C,P1.1 jnc start0 setb P3.0 ajmp start end
ad. 9
start: mov TH1, 0FAh ;ustawienie predkosci na 9600 bodow lcall inrs ;pobierz bajt z portu cjne A, #10, not10 ;jesli A!=10 to skocz do not10 setb P1.0 jmp koniec not10: clr P1.0 koniec: end