Timery w 51



Masz problem? Zapytaj na forum elektroda.pl z bramk± pl.misc.elektronika!

Poprzedni Następny
Wiadomość
spis tre¶ci
From: "Andrzej" <ANDO_at_nospam_technik.swiebodzin.pl>
Subject: Timery w 51
Date: Fri, 17 Apr 1998 20:08:09 +0200


Prosze o podpowiedz w jaki sposob piszac w C na 51 uruchamia sie timery
.Prubuje zliczac impulsy zewnetrzne lecz na razie skonczylo sie na probach
bez jakiegokolwiek efektu. Nawet kawalek kodu z ustawieniami timera byl by
wystarczajacy.




Poprzedni Następny
Wiadomość
spis tre¶ci
From: "Juliusz" <juliusz_at_nospam_wyscigi.multi-ip.com.pl>
Subject: Re: Timery w 51
Date: Sat, 18 Apr 1998 03:39:24 +0200


Czesc

To nie takie proste wyjasnic ci w kilku slowach jak liczyc impulsy piszac
program w C. W C mozesz napisac szkielet programu ewentualnie ale takie
rzeczy jak timery, przerwania to radze pisac w asemblerze.

Za wejscia INT_0 i INT_1 sa odpowiedzialne rejestry SFR w ktorych ustawiasz:

1. Typ licznika
2. Co ma liczyc - czy wlasne cykle czy impulsy zewnetrzne
3. wyzwolic przerwanie lub nie przy dojsciu do przekrecenia sie licznika
4. nadac priorytet przerwaniu
5. Wystartowac i zatrzymac licznik

Zalezy co tam chcesz liczyc czy tylko ilosc czy np. zrobic pomiar
czestotliwosci do przetwornika U/F?
Jak napiszesz wiecej to moze ktos podpowie ci cos wiecej. Ale zdecydowanie
odradzam C. Jak nie zrozumiesz jak dziala licznik to i tak niczego w C nie
napiszesz.

Zobacz tutaj sa opisy rejestrow:

IE_SetUp equ 00011010B
; | ||||^ zablokowanie przerwania z INT0
; | |||^ zablokowanie przerwania z T0
; | ||^ odblokowanie przerwania od INT1
; | |^ zablokowanie przerwania od T1
; | ^ zablokowanie przerwania z SIO
; |
; ^ zablokowanie wszystkich przerwan

mov IE,#IE_SetUp

IP_SetUp equ 00000010B
; ||||^ 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 00100001B
; |||||||^ tryb T0 0,1,2,3
; ||||||^ tryb T0
; |||||^ 0-czasomierz 1-licznik
; ||||^ 1-bramkowanie /INT0
; |||^ tryb T1 0,1,2,3
; ||^ tryb T1
; |^ 0-czasomierz 1-licznik
; ^ 1-bramkowanie /INT1

mov TMOD,#TMOD_SetUp
mov TH1,#(256-n_load_m) ; podzielnik T1

TCON_SetUp equ 01010000B
; |||||||^
; ||||||^
; |||||^
; ||||^
; |||^ 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
orl PCON,#10000000B


; ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
; ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
;
Andrzej napisał(a) w wiadomo¶ci: <6h866p$3sk$1_at_nospam_info.nask.pl>...
Prosze o podpowiedz w jaki sposob piszac w C na 51 uruchamia sie timery
.Prubuje zliczac impulsy zewnetrzne lecz na razie skonczylo sie na probach
bez jakiegokolwiek efektu. Nawet kawalek kodu z ustawieniami timera byl by
wystarczajacy.






Poprzedni Następny
Wiadomość
spis tre¶ci
From: cichy_at_nospam_amart.JUNKMAILPROTECTION.com.pl (Jaroslaw Cichorski Jr.)
Subject: Re: Timery w 51
Date: Sat, 18 Apr 1998 18:26:38 GMT


"Juliusz" <juliusz_at_nospam_wyscigi.multi-ip.com.pl> wrote:

Za wejscia INT_0 i INT_1 sa odpowiedzialne rejestry SFR w ktorych ustawiasz:

Mozna oczywiscie zliczac impulsy za pomoca INT0 lub INT1 ale przy
kazdym pojawieniu sie impulsu bedzie generowane przerwanie.
Taka metoda nadaje sie tylko do niewielkich czestotliowosci - inaczej
zablokujesz prace procesora.
Do zliczania lepiej nadaja sie wejscia T0 i T1. Wtedy przerwanie moze
byc np. generowane przy przepelnieniu timera (w zasadzie countera).
Stosujac autoreload mozna zrobic prescaler.
Mozna liczyc szybsze przebiegi, ale tez nie za szybkie, bo zeby impuls
zostal wykryty przez wejscie T1 lub T0 (przez INT zreszta tez) to musi
odpowiednio dlugo trwac (conajmniej jeden cykl rozkazowy poziom wysoki
i conajmniej jeden cykl poziom niski). Rozpoznanie zmiany stanu na
wejsciu T0 i T1 trwa wiec 24 cykle zegarowe - max. zliczana
czestotliwosc wynosi 1/24 czestotliowsci kwarcu.


1. Typ licznika
2. Co ma liczyc - czy wlasne cykle czy impulsy zewnetrzne
3. wyzwolic przerwanie lub nie przy dojsciu do przekrecenia sie licznika
4. nadac priorytet przerwaniu
5. Wystartowac i zatrzymac licznik

To wszystko odnosi sie do timerow/counterow, a nie przerwan
zewnetrzynych int0 i int1.

<snip>

Jak napiszesz wiecej to moze ktos podpowie ci cos wiecej. Ale zdecydowanie
odradzam C.

Znowu jakis zdecydowany przeciwnik.
To, ze sobie nie radzisz z C na '51 nie znaczy, ze jest on do d..y.
Odpowiedz brzmi: zalezy co chcesz liczyc - ile i jak szybkie impulsy.
W zaleznosci od tego mozna stosowac do obslugi T0 lub T1:
lub gdy wszystko za wolne

Jak nie zrozumiesz jak dziala licznik to i tak niczego w C nie
napiszesz.

To rzeczywiscie bardziej zwiazane z architektura '51 niz z jezykiem C.

Pozdrawiam

--------
Jaroslaw Cichorski Jr.
E-mail cichy_at_nospam_amart.JUNKMAILPROTECTION.com.pl
WWW http://www.amart.com.pl
UWAGA Adres email niewazny!
Prosze usunac JUNK MAIL PROTECTION. zeby otrzymac prawidlowy adres.
Kto to jest General Failure i dlaczego czyta z mojego dysku twardego ?


Poprzedni Następny
Wiadomość
spis tre¶ci
From: "Andrzej" <ANDO_at_nospam_technik.swiebodzin.pl>
Subject: Re: Timery w 51
Date: Sat, 18 Apr 1998 10:08:25 +0200



Mam jeszcze jedno pytanie .Czy mozna robic wstawki asemblerowe w programie
napisanym w C . Jesli tak to jaka instrukcja ja zaczyna , a jaka konczy.
Na razie i dzieki za podpowiedz .




Poprzedni Następny
Wiadomość
spis tre¶ci
From: Maciej Czapla <caltek_at_nospam_wroclaw.top.pl>
Subject: Re: Timery w 51
Date: Sun, 19 Apr 1998 14:39:45 +0200


Andrzej wrote:

Mam jeszcze jedno pytanie .Czy mozna robic wstawki asemblerowe w programie
napisanym w C . Jesli tak to jaka instrukcja ja zaczyna , a jaka konczy.
Na razie i dzieki za podpowiedz .

To zależy jakiego producenta jest C. W IAR nie możesz - musisz
zadeklarować funkcję zewnętrzn± i napisać j± w ASM. W Tasking możesz,
używasz do tego konstrukcji:

<kod C>
#pragma asm
<kod ASM>
#pragma endasm
<kod C>

W KEIL możesz (ale nie wiem jak się to robi bo nie używam)
A to jeszcze nie wszystkie kompilatory.

MC

Poprzedni Następny
Wiadomość
spis tre¶ci
From: "Krzysztof Koziarek" <koziar_at_nospam_polbox.com>
Subject: Re: Timery w 51 (Keil C)
Date: Tue, 21 Apr 1998 12:50:52 +0200



Andrzej napisał(a) w wiadomo¶ci: <6h9n4s$8ut$1_at_nospam_info.nask.pl>...

Mam jeszcze jedno pytanie .Czy mozna robic wstawki asemblerowe w programie
napisanym w C . Jesli tak to jaka instrukcja ja zaczyna , a jaka konczy.
Na razie i dzieki za podpowiedz .



W Keilu, do dolaczania programu assemblerowego słuza pragmy:
asm i endasm. Uzycie ich wyglada mniej wiecej tak:

...
...(program w C)
...
#pragma asm
...
...(program assemblerowy)
...
#pragma endasm
...
...

Wszystko to jest piekne, ale nie do konca. Powyzsze pragmy dzialaja tylko
wtedy, gdy kompilujesz nie do objecta, ale do kodu zroldowego (parametr
SRC), np:

C51 PROGRAM.C SRC
(ewentualnie C51 PROGRAM.C51 SRC(nazwa))

Otrzymujesz plik PROGRAM.SRC z programem w assemblerze.
Dopiero po jego assemblacji masz object do linkowania.

_________________________________________
Pozdrawiam,

Krzysztof Koziarek
koziar_at_nospam_polbox.com