Programowanie mikroprocesora 80535: jak stworzyć pętlę opóźniającą 3 min?
80535 pomoc w programowaniu
From: "matte" <oxider_at_nospam_friko7.onet.pl>
Subject: 80535 pomoc w programowaniu
Date: Sat, 17 Apr 1999 16:22:00 +0200
Czesc
Prosze o pomoc w napisaniu programu dla uC 80535.
Ma to byc petla opozniajaca z ustalonym czasem opoznienia np 3 min.
Po tym czasie ma nastapic wykonywanie kolejnej funkcji np.ustawianie 1 na
p3.4 . ( kwarc 12 Mhz)
Mateusz
oxider_at_nospam_friko7.onet.pl
From: "Tadeusz" <tadek_at_nospam_kki.net.pl>
Subject: Re: 80535 pomoc w programowaniu
Date: Sat, 17 Apr 1999 17:01:31 +0200
matte napisał(a) w wiadomości: ...
Czesc
Prosze o pomoc w napisaniu programu dla uC 80535.
Ma to byc petla opozniajaca z ustalonym czasem opoznienia np 3 min.
Czy mogą do tego być użyte przerwania np. od timera 1? (lub 0)
Tadeusz
From: "Juliusz" <juliusz_at_nospam_multi-ip.com.pl>
Subject: Re: 80535 pomoc w programowaniu
Date: Sat, 17 Apr 1999 18:44:40 +0200
Tadeusz napisał(a) w wiadomości: ...
matte napisał(a) w wiadomości: ...
Czesc
Prosze o pomoc w napisaniu programu dla uC 80535.
Ma to byc petla opozniajaca z ustalonym czasem opoznienia np 3 min.
Czy mogą do tego być użyte przerwania np. od timera 1? (lub 0)
Tadeusz
Wiesz wszystko zalezy co masz jeszcze w programie do roboty innego. Ale
petelka opozniajaca na przerwaniujest jednym z rozwiazan. Jesli pisales o
zegarze 12MHz to po ustawieniu timera w tryb 16-bitowy z przerwaniem od
przepelnienia to dla 12MHz oblecenie dookola 65536 cykli maszynowych zajmie
okolo 0,065536 sekundy czyli procedura przerwania musi jeszcze dodatkowo
zawierac licznik programowy.
I tak jednobajtowy programowy licznik, w procedurce podprzerwaniowej,
pozwoli ci uzyskac dynamike zmian od 0,065536 do 16,777216 sekundy.
mozesz sobie to robic rozkazem DJNZ albo CJNE w celu porownania (odliczenia)
tego dodatkowego opoznienia.
Oczywiscie glowna petla programu musi jeszcze sprawdzac to co sie policzy i
reagowac, wlaczac i wylaczac przerwania lub cokolwiek innego co korzysta z
tego licznika.
Dalej musisz sobie sam odpowiedziec na reszte pytan, bo nie siedze w twoim
programie.
Juliusz
From: "Tadeusz" <tadek_at_nospam_kki.net.pl>
Subject: Re: 80535 pomoc w programowaniu
Date: Mon, 19 Apr 1999 23:20:09 +0200
Masz tę procedurę.
Nie wiem czy masz dobrego zwrotnego pri-va.
Jeżeli coś nie pójdzie to napisz (bo pisałem to na kolanie - nie było czasu)
Cześć wszystkim - Ted
From: "Tadeusz" <tadek_at_nospam_kki.net.pl>
Subject: Re: 80535 pomoc w programowaniu
Date: Tue, 20 Apr 1999 09:06:36 +0200
Masz tę procedurę.
; *********************************************
; Zegar co 3 minuty
; *********************************************
; * flagi bitowe
timout equ 127 ; ostatni bit z przestrzeni bitowej
;
;
;
;
;
; * wykorzystywane komorki RAM (bajtowe)
timer equ 127 ;zegar
kpom1 equ timer-1 ;komorki pomocnicze
kpom2 equ kpom1-1 ;dla dzielnika przerwan
;
; powyzsze adresy moga byc dowolne
; (oczywiscie w istniejacych przestrzeniach)
; *********************************************
; Start programu
;
org 0
ajmp start ;do poczatku programu
;
;
;
org 11 ;wektor czasomierza
push psw
push acc
ajmp time0
;
;
; *****************************
; procedury startowe przerwan
time0: acall dziel ;przerwanie co 1/4000 sec. przy 12 Mhz
pop acc
pop psw
reti
; *****************************
start:
;
; tutaj twoje procedury inicjalizujace
;
mov tmod,#00000010b ;timer0 w trybie 2
mov th0,#256-250 ;250 do przepelnienia
mov ie,#10000010b ;et0
mov kpom1,#1 ;zerujesz komorki pomocnicze
mov kpom2,#1
;
; tutaj twoj program
;
;
;
;
;
;
;
; ******* Zalozmy ze teraz uruchamiasz 3 min.
mov timer,#180 ;180 sec. tu mozesz podac inny czas
clr timout ;dokladnosc 1 sec. jezeli potrzebna wieksza
; to kasuj kpom1 i kpom2 lub napisz
;
;
;
;teraz mozesz kontrolowac flage tim out
; np w petli
; ...
; ...
petla: jnb timout,petla
;
; minelo 3 min.
;
;lub co jakis czas wykonujac inne procedury
;
; ...
; ...
jnb timout,skok
setb p3.4 ;np.
; ... ; tu procedura po odliczeniu 3 min.
;
skok: ... ;tu dalej program
;
;
;
;
;
;
; *** zegary
dziel: djnz kpom1,kon
mov kpom1,#40 ;/40
djnz kpom2,kon
mov kpom2,#100 ;/100 (40*100 = 4000) te miejsce
; wykonywane jest co 1 sec.
mov a,timer ; czy timer=0
jz kon
djnz timer,kon ; jezeli nie 0 to zmiejsz o 1 i sprawdz czy 0
setb timout ; jezeli 0 to ustaw flage
;
; tu mozesz tez wrzucic wykonanie odpowiedniego sterowania
; jezeli np. chcesz by program (petla glowna) sie tym wiecej nie zajmowal
; wowczas nie musisz go kontrolowac w petli glownej programu
;
; np.:
setb p3.4
;
kon: ret
; **********************************************
autor: db 'Autor: Tadeusz Zawadowski (C) 1999'
; ******** KONIEC PROGRAMU ******
end
;
;
; Lubie sie czasem mylic.
; Jak by ci nie chodzilo to, to napisz.
; Ted
;
From: "Jerzy Szczesiul" <Jerzy.Szczesiul_at_nospam_ep.com.pl>
Subject: Re: 80535 pomoc w programowaniu
Date: Sat, 17 Apr 1999 18:14:19 +0300
Hey
matte napisał(a) w wiadomości: ...
Czesc
Prosze o pomoc w napisaniu programu dla uC 80535.
Ma to byc petla opozniajaca z ustalonym czasem opoznienia np 3 min.
Po tym czasie ma nastapic wykonywanie kolejnej funkcji np.ustawianie 1 na
p3.4 . ( kwarc 12 Mhz)
Zrob np. tak :
1. na ogol licznik T0 sluzy do obslugi zegarow i timerow
systemowych - w obsludze przerwania T0 dodaj sobie jakis
uniwersalny timer np. 1s ktory ustawi flage SecFlag
2. w glownej petli programu umiesc procedure, ktora
korzystajac z tej flagi bedzie odliczac zadane opoznienie
i po osiagnieciu wykona potrzebna funkcje
if (SecFlag)
{
SecFlag=0;
if(++SecCounter == MyTimeout)
{
SecCounter=0;
DoMyFunc(); // moja czynnosc
}
}
( mozesz wykonac w samej obsludze przerwania ale
generalnie najkorzystniej jest maksymalnie ja skracac,
poza tym jesli robisz zmiany a przerwania masz
w oddzielnym module to juz nie musisz w nim grzebac )
3. w zadnym razie nie tworz 3 minutowej petli opozniajacej !
- praktycznie zatrzymasz procesor.
Pozdrowienia
Jurek Szczesiul
Jerzy.Szczesiul_at_nospam_ep.com.pl