Aktyw Forum

Zarejestruj się na forum.ep.com.pl i zgłoś swój akces do Aktywu Forum. Jeśli jesteś już zarejestrowany wystarczy, że się zalogujesz.

Sprawdź punkty Zarejestruj się

Pomocy: Timer w Bascom 8051

Al555
-
-
Posty:37
Rejestracja:1 paź 2004, o 10:58
Lokalizacja:Tarnów
Pomocy: Timer w Bascom 8051

Postautor: Al555 » 21 paź 2004, o 06:28

Nie wiem dlaczego ale nie potrafie poprawnie uruchomic Timer w Bascomie.
W efekcie mojej konfiguracji Timer uruchamia sie z jakąś losową ( wg mnie ) częstotliowścią i nie potrafie go zmienić na np 1HZ

Kwarc 3.6864 MHz

Czy ktoś mógłby podesłać lub umieścić gotowy plik bascoma 8051 z uruchomionym timerem ( obojętnie którym ) w trybie autoreload który będzie zmieniał stan jednego pinu równo co np. 1 sekunde! - moze byc w "czystym"Bascomie

To wysztko proste a ( mi ) nie dziala!


Prosze o pomoc

ponizej fragment kodu - jest wyciety z wiekszego programu ( moze cos sie gryzie w programie ?? )
------------------------
$regfile = "8052.dat"
$crystal = 3686400


Dim Timer0_200ms As Word , B_200ms As Bit ' dot. uaktualniania co 200ms
Const Timer0_200ms_max = 400

Dim Timer0_1s As Word , B_1s As Bit ' dot. uaktualniania co 1s
Const Timer0_1s_max = 5

Dim Licznik As Word 'pomocniczy licznik do zminy stanu lini w glownej petli programu
Const Licznik_max = 1100

Config Timer0 = Timer , Gate = Internal , Mode = 0

Pinwy1 Alias P2.3
Pinwy2 Alias P2.1

Licznik = Licznik_max
Timer0_200ms = Timer0_200ms_max
Timer0_1s = Timer0_1s_max
Reset B_200ms
Reset B_1s

On Timer0 Timer0_int Nosave
Load Timer0 , 154 ' wywolywanie Timer0_int co 0.5ms
Enable Interrupts
Enable Timer0
Start Timer0


Do ' tutaj sobie mrugam inna linia zeby wiedziec ze uklad "zyje" - to dziala !
Decr Licznik
If Licznik = 0 Then
Licznik = Licznik_max
cpl Pinwy2
End If
Loop

end


Timer0_int:
$asm
push acc
push psw
dec {Timer0_200ms} 'Decr Timer0_lcd
mov a,{Timer0_200ms}
jnz timer_loop3 'If Timer0_lcd = 0 Then
mov {Timer0_200ms} , {timer0_200ms_max} 'Timer0_lcd = Timer0_lcd_max
setb {b_200ms}
cpl {Pinwy1} '*1 tutaj powinno mrugac 5x na sekunde a mruga co ok.3s ?????

dec {Timer0_1s}
mov a,{Timer0_1s}
jnz timer_loop3
mov {Timer0_1s} , {timer0_1s_max}
setb {b_1s}
'cpl {Pinwy1} '*2 tu powinno mrugac co ok sekunde a nie mruga w ogóle
Timer_loop3:
pop psw
pop acc
$end Asm
Return

Awatar użytkownika
Maybe
-
-
Posty:63
Rejestracja:19 wrz 2004, o 19:58
Lokalizacja:Dziebieszyce
Kontaktowanie:

Postautor: Maybe » 22 paź 2004, o 00:00

Nie sprawdzałem ale pewnie będzie działać :wink: , choć spać mi się już nieco chce i nie wiem, czy coś nie naknociłem. Ale to parę linijek, co szkodzi spróbować?

$regfile = "8052.dat"
$crystal = 3686400

'deklaracje
Dim licznik as byte
Const Timer0_225Hz = 49152 '(timer liczy w górę, więc 0xFFFF-16384)
Config Timer0 = Timer , Gate = Internal , Mode = 1
Pinwy1 Alias P2.3

'nastawy
On Timer0 Timer0_int
Tl0 = Low(Timer0_225Hz)
Th0 = High(Timer0_225Hz)
licznik = 225
'pętla główna
Enable Interrupts
Enable Timer0
Start Timer0
Do
Loop

Timer0_int:
licznik = licznik - 1
if licznik = 0 then
$asm
cpl {Pinwy1}
$end asm
licznik = 225
Tl0 = Low(Timer0_225Hz)
Th0 = High(Timer0_225Hz)
End if
Return


Maybe

Wróć do „Projektowanie PCB, programy EDA, CAD, narzędziowe”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 69 gości