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
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
Moderatorzy:Jacek Bogusz, robertw, k.pawliczak, Moderatorzy
Nie sprawdzałem ale pewnie będzie działać , 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
$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
Kto jest online
Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 69 gości