Bascom 8051 i at89s8252

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
GrzesiekG
Użytkownik
Posty: 160
Rejestracja: 11 sie 2006, 8:06
Lokalizacja: Annopol
Kontakt:

Bascom 8051 i at89s8252

Post autor: GrzesiekG » 27 gru 2006, 13:35

Witam!
Mam problem:
czy składnia bascoma 8051 jest aż tak odmienna od bascoma avr, że nie mogę poprawnie zrobić:
a) jak powiedzieć kompilatorowi że chodzi mi o µP zawarty w tytule ($include nie działa)?
b) jak zdefiniować porty (czy to wejscia, czy wyjscia, jaki stan)?
ps. mam bascoma 8051 DEMO!!

ZbeeGin

Post autor: ZbeeGin » 27 gru 2006, 17:27

GrzesiekG pisze:a) jak powiedzieć kompilatorowi że chodzi mi o µP zawarty w tytule ($include nie działa)?
Nie dodaje się dyrektywy $INCLUDE tylko dyrektywę $REGFILE. Na przykład:

$regfile = "89s8252.dat"
GrzesiekG pisze:b) jak zdefiniować porty (czy to wejscia, czy wyjscia, jaki stan)?
8051 i jego wersje nie mają rejestrów odpowiedzialnych za definiowanie czy port powinien pracować jako wejście, lub jako wyjście. Istnieje jednak pewna zależność. Jeśli port ma pracować jako wejście to do takiego portu wpisuje się jedynkę logiczną, by zewnętrzny sygnał mógł "ściągnąć" linię portu do stanu niskiego.
Przykładowo jedna końcówka jako wejście:

P1.0 = 1

lub cały port:

P3 = 255

Jedynkę logiczną powinieneś także wpisać do tych końcówek portów gdzie występują funkcje alternatywne np. WR, RD, TXD, RXD i chcesz z nich skorzystać.
Po wyzerowaniu wszystkie porty mają wpisane jedynki, więc są wejściami lub pełnią funkcje alternatywne.

Awatar użytkownika
GrzesiekG
Użytkownik
Posty: 160
Rejestracja: 11 sie 2006, 8:06
Lokalizacja: Annopol
Kontakt:

Post autor: GrzesiekG » 27 gru 2006, 20:03

Więc jak chce by np. P3 było wyjsciem to muszę napisać

P3 = 0

a jeśli ma być wejściem to

P3 = 255

czy może żle zrozumiałem?

ZbeeGin

Post autor: ZbeeGin » 27 gru 2006, 20:07

Można to tak zrozumieć. Lecz wyjściem to port jest zawsze, możesz ustawić stan niski jak i wysoki. Jedynie przy pracy jako wejście jest ten jeden warunek.

Awatar użytkownika
GrzesiekG
Użytkownik
Posty: 160
Rejestracja: 11 sie 2006, 8:06
Lokalizacja: Annopol
Kontakt:

Post autor: GrzesiekG » 30 gru 2006, 13:57

załóżmy taką sytuację:
mam µP i do portu np. P1 podpinam µswitche jako taka mała klawiaturka.
jak mam ustawić port by odczytywał stan µswitchów. może tu tzreba działać odwrotnie?
PS Najlepiej gdyby ktoś mógł podać możliwości konfiguracji portu w bascomie i asm
THX

ZbeeGin

Post autor: ZbeeGin » 30 gru 2006, 14:05

Prosta w zasadzie sprawa. Przyjmuje założenie, że będziesz miał 8 (lub mniej) mikro przełączników, każdy z nich korzysta tylko z jednej linii portu - zatem nie jest to matryca. Mikroswitch-e mają zwierać końcówki portu do masy.
Uwaga! Do portu P1 najlepiej podłączyć zewnętrzne rezystory podciągające do Vcc.

BASCOM:
P1 = 255

If P1 <> 255 Then
' coś sie zmieniło więc testuj stan kolejnych pinów
'(...)

End If

ASM:

Kod: Zaznacz cały

    MOV P1,#255

    MOV A, P1
    CPL A
    JZ _POMIN
    CPL A
    ; tutaj procedurka czytająca stan kolejnych klawiszy
    ; (..)
_POMIN:
    ; tutaj dalszy ciąg programu nic nie nacisnięto

ODPOWIEDZ