Re: Przerwania czasowe w AT89C51
Masz problem? Zapytaj na forum elektroda.pl z bramką pl.misc.elektronika!
From: "Paweł Kowalski" <pk_at_nospam_tcs.uni.wroc.pl>
Subject: Re: Przerwania czasowe w AT89C51
Date: Thu, 22 Jul 1999 00:16:25 +0200
Juliusz <juliusz_at_nospam_multi-ip.com.pl> wrote in message
news:cTnl3.42$D4.581_at_nospam_news.tpnet.pl...
To jest bardzo proste. Ale bez znajomosci assemblera nie zrobisz tego jak
nie wiesz co sie dzieje w sprzecie. Timer zlicza do max. 0xFFFF i moze
wystapic przerwanie od przekrecenia sie licznika. naliczenie o 1 nastepuje
co cykl maszynowy czyli kwarc/12. Jak ci malo to zrobisz sobie programowe
liczniki, zliczajace ilesc przerwan i co iles tam tych przerwan wykonujesz
co tam chcesz. To jest razem 20-30 rozkazow. Bardzo proste.
Z assemblerem jest u mnie akurat całkiem nieźle (przynajmniej jeśli chodzi o
procedury na pc). Chodziło mi raczej o opis krok po kroku jak uaktywnić
takie przerwanie. Jak powiedzieć mu, żeby liczył do np. 0x0F00?
Dzięki za pomoc...
Kowal
From: "Juliusz" <juliusz_at_nospam_multi-ip.com.pl>
Subject: Re: Przerwania czasowe w AT89C51
Date: Thu, 22 Jul 1999 13:00:56 GMT
Paweł Kowalski napisał(a) w wiadomości: <3797021a_at_nospam_news.vogel.pl>...
Juliusz <juliusz_at_nospam_multi-ip.com.pl> wrote in message
news:cTnl3.42$D4.581_at_nospam_news.tpnet.pl...
To jest bardzo proste. Ale bez znajomosci assemblera nie zrobisz tego jak
nie wiesz co sie dzieje w sprzecie. Timer zlicza do max. 0xFFFF i moze
wystapic przerwanie od przekrecenia sie licznika. naliczenie o 1
nastepuje
co cykl maszynowy czyli kwarc/12. Jak ci malo to zrobisz sobie programowe
liczniki, zliczajace ilesc przerwan i co iles tam tych przerwan
wykonujesz
co tam chcesz. To jest razem 20-30 rozkazow. Bardzo proste.
Z assemblerem jest u mnie akurat całkiem nieźle (przynajmniej jeśli chodzi
o
procedury na pc). Chodziło mi raczej o opis krok po kroku jak uaktywnić
takie przerwanie. Jak powiedzieć mu, żeby liczył do np. 0x0F00?
Dzięki za pomoc...
Tu masz caly setup poczatkowy. Poprzesuwaj sobie te kreski, bo windows je
jakos zle formatuje.
Tutaj T0 jest 16-bitowy
ORG 00H ;START
AJMP START
ORG 0BH ;SRV T0
ajmp SRV_T0 ; <----- to jest labelek poczatku procedury przerwania.
START: clr EA
IE_SetUp equ 00000000B ; 1=on
; | ||||^ przerwania z INT0
; | |||^ przerwania z T0
; | ||^ przerwania od INT1
; | |^ przerwania od T1
; | ^ przerwania z SIO
; |
; ^ wszystkie przerwania
mov IE,#IE_SetUp
IP_SetUp equ 00000000B
; ||||^ priorytet przerwania z INT0
; |||^ priorytet przerwania z T0
; ||^ priorytet przerwania od INT1
; |^ priorytet przerwania od T1
; ^ priorytet przerwania z SIO
;
mov IP,#IP_SetUp
TMOD_SetUp equ 00010001B
; |||||||^ tryb T0 0,1,2,3
; ||||||^ tryb T0
; |||||^ 0-czasomierz 1-licznik
; ||||^ 1-bramkowanie /INT0
; |||^ tryb T1 0,1,2,3
; ||^ tryb T1
; |^ 0-liczenie wlasnych cykli masz., 1-impulsy zewnetrzne
; ^ 1-bramkowanie /INT1
mov TMOD,#TMOD_SetUp
TCON_SetUp equ 00000000B
; |||||||^ 0-od LOW 1-od HIGH na INT0
; ||||||^
; |||||^
; ||||^
; |||^ 0-stop 1-praca licznika T0
; ||^
; |^ 0-stop 1-praca licznika T1
; ^
mov TCON,#TCON_SetUp
;SCON_SetUp equ 11110000B
; |||||||^ - znacznik odebrania znaku RI
; ||||||^ - znacznik zakonczenia wysylania znaku TI
; |||||^ - dziewiaty znak odbierany RB8
; ||||^ - dziewiaty znak wysylany TB8
; |||^ - uaktywnienie odbiornika REN
; ||^ - multiproces
; |^ - tryb 3 seriala
; ^ - tryb 3 seriala
; mov SCON,#SCON_SetUp
dakej start T0
mov TCON,#00010000B ;start T0
mov IE,#10000010B ;wlaczam przerwania T0 + wszystkie
i juz tnie glowna petelke.
Juliusz