lab11 | |
---|---|
189884 4rep 28-11-2024 09:24 |
;*******************************************************************************
;* Digitális technika (VIMIAA03) 11. gyakorlat és laboratórium *
;* Knight Rider futófény szoftveres és hardveres idõzítéssel. *
;*******************************************************************************
DEF LD 0x80 ; LED adatregiszter (írható/olvasható)
DEF TR 0x82 ; Timer kezdõállapot regiszter (csak írható)
DEF TM 0x82 ; Timer számláló regiszter (csak olvasható)
DEF TC 0x83 ; Timer parancs regiszter (csak írható)
DEF TS 0x83 ; Timer státusz regiszter (csak olvasható)
;*******************************************************************************
;* A program kezdete. A programmemória 0x00 és a 0x01 címe a reset, illetve *
;* a megszakítás vektor. Ide ugró utasításokat kell elhelyezni, amelyek a *
;* megfelelõ programrészre ugranak. Ha nem használunk megszakítást, akkor a *
;* program kezdõdhet a 0x00 címen is. *
;*******************************************************************************
start:
mov r1, #0xe0
shr_loop: ;Ciklus a jobbra léptetéshez.
mov LD,r1
jsr sw_wait
sr0 r1
cmp r1,#0x07
jnz shr_loop
shl_loop: ;Ciklus a balra léptetéshez.
mov LD,r1
jsr sw_wait
sl0 r1
cmp r1, #0xe0
jnz shl_loop
jmp shr_loop
;*******************************************************************************
;* Szoftveres idõzítési szubrutin. 24 bites ciklusváltozót kell használnunk, *
;* melyet nulláról indítva és egyesével növelve kb. 12,58 másodpercig fog *
;* futni a szubrutin. Tehát a kívánt 0,25 másodperces várakozáshoz a ciklus- *
;* változót 50-nel kell növelni. *
;*******************************************************************************
sw_wait:
mov r8,#0
mov r9,#0
mov r10,#0
sw_wait_loop:
add r8,#255 ;Érték
adc r9,#0
adc r10,#0
jnc sw_wait_loop
rts ;Visszatérés a hívóhoz.
;*******************************************************************************
;* A timer perifériát inicializáló szubrutin. Ismétlõdéses mûködési módot kell *
;* beállítani. Ha elõosztásnak 65536-ot választunk, akkor az idõzítõ számláló *
;* kezdõértéke 60 kell, hogy legyen a 0,25 másodperces idõzítési periódushoz. *
;* (60 + 1) * 65536 * 62,5 ns ~ 0,25 s *
;*******************************************************************************
tmr_init:
rts ;Visszatérés a hívóhoz.
;*******************************************************************************
;* Hardveres idõzítési szubrutin. A timer periféria státusz regiszterében a *
;* TOUT bit (bit 2) jelzi az idõzítési periódus végét, erre kell várakoznunk. *
;* A státusz regiszter olvasása automatikusan törli a TOUT bitet. *
;*******************************************************************************
tmr_wait:
rts ;Visszatéts a hívóhoz.
+1-1Remove |
You must be signed in to reply. You can also sign up for an account. |
Forums
Go back to main page Guidelines