zegar na AT89C2051

To forum jest dla wszystkich pasjonatów wiecznie młodych mikrokontrolerów '51. Wymiana doświadczeń i pomoc dla początkujących w pisaniu programów zarówno w C, Asemblerze jak i BASCOM. Zapraszam znawców tematu, aby pomogli wszystkim początkującym!
ODPOWIEDZ
Awatar użytkownika
krzywobrody
-
Posty: 3
Rejestracja: 07 lut 2008, 16:34
Lokalizacja: rzeszów

zegar na AT89C2051

Post autor: krzywobrody » 07 lut 2008, 16:49

witam napisałem program na zegarek do AT89C2051, tylko mam taki problem ze nie mogę go uruchomić na Bascomie :(
gdzieś są błędy ale gdzie??? to już nie wiem :)

oto ten program:

Kod: Zaznacz cały

Dim K As Bit
Dim Pw As Bit
Dim Pn As Bit
Dim G As Byte
Dim M As Byte
Dim S As Byte
Dim Lp As Byte
Dim Ng As Byte
Dim Nm As Byte
Config Lcd = 16 * 1
Config Timer0 = Timer Gate = Internal , Mode = 1
Enable Interrupts
Enable Timer0
Declare Sub Wyswietlczas
Declare Sub Nastawzegar
On Timer0 Przerwaniet0

Sub Wyswietlczas
 Cls
 Pw = 1
  If Pw = 1 Then
   Pw = 0
   Home
   Lcd "czas:"
   If G < 10 Then Lcd "0"
   Lcd G ; ":"
   If M < 10 Then Lcd "0"
   Lcd M ; ":"
   If S < 10 Then Lcd "0"
   Lcd S
  End If
  Set P3.2
  If P3.2 <> 0 Then Call Nastawzegar
End Sub

Sub Nastawzegar
 Cls
 Pn = 1
 Ng = G
 Nm = M
 Waitms 255
 Do
 If Pn = 1 Then
  Pn = 0
  Home
  Lcd "Ustaw czas:"
  If Ng < 10 Then Lcd "0"
  Lcd Nm
 End If
 Waitms 255
 Set P3.1
 If P3.1 = 0 Then
  Incr Ng
  Pn = 1
  If Ng = 24 Then Ng = 0
 End If
 Set P3.0
 If P3.0 = 0 Then
 Incr Nm
  Pn = 1
  If Nm = 60 Then Nm = 0
 End If
 Set P3.2
 K = 0
 If P3.2 = 0 Then
  G = Ng
  M = Nm
  S = 0
  K = 1
 End If
 Loop Until K = 1
End Sub

Przerwaniet0:
 Load Timer0 , 4150
 Start Timer0
 Incr Lp
 If Lp = 15 Then
  Lp = 0
  Incr S
  If S = 60 Then
   S = 0
   Incr M
   If M = 60 Then
    M = 0
    Incr G
   End If
  End If
  Call Wyswietlczas
 End If
Return
dziękuje za pomoc


---------
Przeczytaj: https://forum.elportal.pl/viewtopic.php?t=5198 ZbeeGin
Ostatnio zmieniony 07 lut 2008, 17:53 przez krzywobrody, łącznie zmieniany 1 raz.

ZbeeGin

Post autor: ZbeeGin » 07 lut 2008, 17:51

krzywobrody pisze:gdzieś są błędy ale gdzie??? to już nie wiem
Kompilator wskazuje błędy składniowe. Trzeba skorygować to co wskazał.

Co do błędów logicznych:
___1.___
Config Timer0 = Timer , Gate = Internal , Mode = 1

___2.___
On Timer0 Przerwaniet0

'brak tu pętli głownej

Sub Wyswietlczas

___3.___
Load Timer0 , 4150
To niestety tak nie działa. Poczytaj helpa. W polskiej wersji to wytłumaczyłem.

___4.___
Call Wyswietlczas
Nigdy więcej wywoływania procedur z przerwania!

Awatar użytkownika
krzywobrody
-
Posty: 3
Rejestracja: 07 lut 2008, 16:34
Lokalizacja: rzeszów

Post autor: krzywobrody » 07 lut 2008, 20:32

czyli jak te błędy poprawie to będzie działało???

ZbeeGin

Post autor: ZbeeGin » 07 lut 2008, 20:37

czyli jak te błędy poprawie to będzie działało???
Tego nie powiedziałem. Niestety niechlujstwo z brakiem komentarzy nie pozwala na przeanalizowanie zamierzeń programisty i ich realizacji.

Awatar użytkownika
krzywobrody
-
Posty: 3
Rejestracja: 07 lut 2008, 16:34
Lokalizacja: rzeszów

Post autor: krzywobrody » 07 lut 2008, 20:40

moim założeniem było to żeby na wyświetlaczu LCD wyświetlał sie czas i tyle:)

ZbeeGin

Post autor: ZbeeGin » 07 lut 2008, 20:46

moim założeniem było to żeby na wyświetlaczu LCD wyświetlał sie czas i tyle:)
Niestety taki komentarz do programu to zbyt mało. Nie daje on informacji, jakim tokiem myślenia posługiwałeś się przy tworzeniu kolejnych etapów tego kodu.

ODPOWIEDZ