Bascom Osso chodzi??? długie



Masz problem? Zapytaj na forum elektroda.pl

Poprzedni Następny
Wiadomość
Spis treści
From: "AzaZeL" <AzaZeL_B_at_nospam_poczta.onet.pl>
Subject: Bascom Osso chodzi??? długie
Date: Thu, 20 Oct 2005 11:42:54 +0200


Witam
postanowilem sie troszke pobawic w bascomie51 ale zwykle pisze w asm i
zatrzymałem sie na poważnym problemie niestety...
jest sobie przerwanie

Przerwanie_t1:
Load Timer1 , 65534
If Licznik_klaw = 12 Then

Licznik_klaw = 0
Stop Timer0
Disable Timer1
Enable Int0
Enable Int1
Set P3.2
Set P3.3
Else
Incr Licznik_klaw
End If
Return

na słowie "Return" program stoi bardzo długo (sprawdzilem na symylatorze)
pare tysiecy cykli maszynowych

moje pytanie co robie źle?
bo czekanie w obsłudze przerwania pare tys cykli to jest niedopuszczalne i
bezsensowne

oto cały program:

$crystal = 4194000
Set Tcon.0
Set Tcon.2
On Int0 Przerwanie_int0
On Int1 Przerwanie_int1
On Timer0 Przerwanie_t0
On Timer1 Przerwanie_t1
Config Timer0 = Timer , Gate = Internal , Mode = 1
Config Timer1 = Timer , Gate = Internal , Mode = 1
Dim A As Byte
Dim Licznik_klaw As Byte
Dim Licznik_podprogramu As Byte
Declare Sub Demko0
Declare Sub Demko1
Declare Sub Demko2
Declare Sub Demko3
Declare Sub Demko4

Enable Int0
Enable Int1
Enable Interrupts

A = 255
P1 = 0
Licznik_podprogramu = 0
Licznik_klaw = 0
Do
Select Case Licznik_podprogramu
Case 0 : Call Demko0
Case 1 : Call Demko1
Case 2 : Call Demko2
Case 3 : Call Demko3
Case 4 : Call Demko4
End Select

Loop

Przerwanie_int0:
Disable Int0
Load Timer1 , 65534
Start Timer1
Disable Int1

Enable Timer1

A = A - 20

Return


Przerwanie_t1:
Load Timer1 , 65534
If Licznik_klaw = 12 Then

Licznik_klaw = 0
Stop Timer0
Disable Timer1
Enable Int0
Enable Int1
Set P3.2
Set P3.3
Else
Incr Licznik_klaw
End If
Return

Przerwanie_int1:
Disable Int1
Load Timer1 , 65534
Start Timer1

Disable Int0
Enable Timer1
Incr Licznik_podprogramu
If Licznik_podprogramu = 5 Then
Licznik_podprogramu = 0
End If

Return



Przerwanie_t0:

Return

Sub Demko0
anl p1,#00000001b
Waitms A
cpl p1.0
End Sub

Sub Demko1
anl p1,#00000010b
Waitms A
cpl p1.1
End Sub

Sub Demko2
anl p1,#00000100b
Waitms A
cpl p1.2
End Sub

Sub Demko3
anl p1,#00001000b
Waitms A
cpl p1.3
End Sub

Sub Demko4
anl p1,#00010000b
Waitms A
cpl p1.4
End Sub

End

Pozdrawiam
AzaZeL



Poprzedni Następny
Wiadomość
Spis treści
From: "Lukasz Bajger" <lbajger_at_nospam_wp.pl>
Subject: Re: Bascom Osso chodzi??? długie
Date: Thu, 20 Oct 2005 12:28:57 +0200


Bylo jakies slowo kluczowe ktore pozwalalo na 'szybkie'
obslurzenie przerywania w symulatorze. Zobacz w helpie.
Cos takiego jak $sim czy cos...

pozdr.
LB



Poprzedni Następny
Wiadomość
Spis treści
From: "AzaZeL" <AzaZeL_B_at_nospam_poczta.onet.pl>
Subject: Re: Bascom Osso chodzi??? długie
Date: Thu, 20 Oct 2005 12:32:00 +0200



Bylo jakies slowo kluczowe ktore pozwalalo na 'szybkie'
obslurzenie przerywania w symulatorze. Zobacz w helpie.
Cos takiego jak $sim czy cos...

ale tu nie chodzi o symulator tylko o układ działajacy
jeżeli w praktyce w przerwaniu siedzi tyle czasu a chyba tak jest bo mi sie
dzwine rzeczy dzieja to to jest jakas paranoja....

AzaZeL



Poprzedni Następny
Wiadomość
Spis treści
From: "Piotrek Sz." <zumek.WYTNIJ_at_nospam_gazeta.pl>
Subject: =?ISO-8859-2?Q?Re:_Bascom_Osso_chodzi=3F=3F=3F_d=B3ugie?=
Date: Thu, 20 Oct 2005 12:21:50 +0000 (UTC)


AzaZeL <AzaZeL_B_at_nospam_poczta.onet.pl> napisał(a):


Bylo jakies slowo kluczowe ktore pozwalalo na 'szybkie'
obslurzenie przerywania w symulatorze. Zobacz w helpie.
Cos takiego jak $sim czy cos...

ale tu nie chodzi o symulator tylko o układ działajacy
jeżeli w praktyce w przerwaniu siedzi tyle czasu a chyba tak jest bo mi sie
dzwine rzeczy dzieja to to jest jakas paranoja....

AzaZeL


Witaj :)
To nie jest "jakaś paranoja" tylko ... niedokładna znajomość środowiska
Bascom8051 :(
Twoje przerwanie od T1 wykonuje się w ~100 cyklach , ale ... .
Załóżmy , że w poniższym przykładzie przy wykonywaniu się funkcji WAIT, po 100
uS nastąpiło przerwanie od T1:
..
Waitms 10 'wykonuj pustą pętlę przez 10 ms
cpl P1.0
..
Symulator obsłuży przerwanie , dokończy działanie WAIT(czyli po Return w
przerwaniu T1 , jeszcze kilkadziesiąt tyś. cykli do wykonania) i zatrzyma się
na kolejnej linii czyli "cpl P1.0".ZaREMuj wszystkie WAIT-y lub użyj dyrektywy
"$sim" i dopiero sprawdź.Też się daaaaawno temu , nabrałem na "ten numer" ;-)

Pozdrawiam
Piotrek





--
Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/