Kolbaba71 Profesionál


Založen: 28.10.2011 Příspěvky: 260 Bydliště: Praha
|
Zaslal: 11 prosinec 2011, 9:45 Předmět: BASCOM: Přerušení přetečením Timer0 začne fungovat při Int0 |
|
|
Zkusil jsem udělat jednoduchý program v bascomu, jenž využívá přerušení. Problém je v tom, že první část (kontrolní zablikání ledkami) proběhne, ale vlastní přerušení nefunguje. Díky přerušení by měl program vyskočit každých 3,5sekundy z hlavní smyčky a 3x bliknout červenou led na portu B.2. Přitom by neustále měla téměř neustále blikat zelená led dioda na portu B1. To se však neděje.
Napadají mě tyto příčiny:
a) Špatné definování a spuštění časovače
b) Špatný dělící poměr v podmínce v podprogramu
Podprogram musí být navštíven 27500x aby se vykompenzovalo přerušení, jenž je 7812,5x za sekundu
Sám si myslím, že by to takto mělo fugovat, avšak evidentně to tak není, jelikož to takto nedělá.
kód: |
' Preuseni
$regfile = "m48def.dat"
$crystal = 8000000
Dim A As Byte
Dim B As Integer
Config Portb = Output
Config Timer0 = Timer , Prescale = 1024
On Ovf0 Prerus
Enable Timer0
Enable Interrupts
Start Timer0
B = 0
Portb.1 = 1 ' Zelena led
Portb.2 = 1 ' Cervena led
For A = 1 To 5 ' Zablikej Ledkami
Portb.1 = 0
Portb.2 = 1
Waitms 300
Portb.1 = 1
Portb.2 = 0
Waitms 300
Next
Portb.1 = 1
Portb.2 = 1
Do ' Hlavni cyklus
Portb.1 = 0 ' Blikni zelenu led
Waitms 150
Portb.1 = 0
Waitms 300 ' Konec hlavniho cyklu
Loop
' Podprogram
Prerus: ' Podprogram vzkonavany pri preruseni
' Zvys B o jednu
Incr B ' Pokud uplynuko cca 3.5 sek blikni cervenou led
' 8000000/1024 = 7812.5Hz
' Kmitocet zakladni / preddelicka
' = vysledny pocet preruseni za sekundu
' 27500 / 7812.5 = 3.52 sek
If B > 27500 Then
For A = 1 To 3
Portb.2 = 0
Waitms 100
Portb.2 = 1
Waitms 300
Next
Else
B = 0
End If
Return
|
P.S. Doufám, že tento kód na přímé zveřejnění není ještě příliš dlouhý.
administrator: přejmenováno z "Přerušení nějak funguje, ač to mám špatně napsané" _________________ Google ví skoro vše. Ale někdy je problém co tam napsat, aby to našlo to, co hledám.
Pokud se to nepovede, vypadne tuna nepoužitelných odkazů a nebo taky nic.
Naposledy upravil Kolbaba71 dne 11 prosinec 2011, 15:27, celkově upraveno 5 krát. |
|