Wejściówka nr3.
Napisz program realizujący opóźnienie T=15ms dla systemu taktowanego z częstotliwością fxtal=12MHz. Załóżmy ze z pewnych względów można użyc tylko rozkazów typu CJNE.
Odp:
T=15ms
fxtal=12MHz
czyli t=1us
N=15ms/1us=15000 cykli maszynowych
MOV R0,#10
DEL1: MOV R1,#100
DEL2:
inc R1
CJNE R1,#200,DEL2
inc R0
CJNE R0,#29,DEL1
Czyli:
2+(2+(1+4)*100+1+4)*29=14705 cykli
Guetta mówił że przybliżenie do 5% wystarczy, tu jest z dokładnością do ok. 1%
Generalnie CJNE jest trudniejsze i trzeba patrzeć na różnice
np wpisuje na R1,#100 potem w CJNE R1,#200 to sie odejmuje 200-100=100
A kod poklei
MOV = 2
MOV = 2
INC = 1
CJNE = 4
INC = 1
CJNE = 4
dla DJNZ
MOV R0,#49
DEL1: MOV R1,#100
DEL2:
DJNZ R1,DEL2
DJNZ R0,DEL1
Czyli już prościej:
2+(2+3*R1+3)R0 = 15000
2*(5+3*100)*49 = 14947 Cykli czyli jeszcze dokładniej się udało dopasować
djnz ma 3 a cjne 4 ta jedyna różnica i oprócz tego nie trzeba dawać inc bo djnz przyrównuje do 0
Wejściówka4. Przykład1.
Timer T0 pracuje w trybie 01 bez bramkowania. Przy standardowym ustawieniu dzielnika pętli PLL oraz T=10ms oblicz wartość początkową rejestrów licznika WP tak, aby odmierzyć potrzebny czas T pomiędzy kolejnymi przerwaniami od timera AduC845
Odp:
standardowo PLL czyli dla ADuC845 t=0,63us
T=10ms
N=T/t = 15873
dla trybu 01 bierzemy 2^16=65535
WP=65535-15873=49662
Wejściówka4. Przykład2.
Timer T0 pracuje w trybie 01 bez bramkowania. Mamy dane fxtal=6MHz oraz T=60ms. Oblicz wartość początkową rejestrów licznika WP aby odmierzyć potrzebny czas T pomiędzy kolejnymi przerwami od timera dla uC8051.
Odp:
fxtal=6mHz
t=12/fxtal=2us
T=60ms
N=30000
WP=65535-30000=35535