[BASCOM] Problem z poleceniem ROTATE ATTiny2313

To forum jest dla wszystkich pasjonatów mikrokontrolerów AVR Atmela. 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
baribari
-
Posty: 3
Rejestracja: 31 sty 2011, 18:40
Lokalizacja: Kielce

[BASCOM] Problem z poleceniem ROTATE ATTiny2313

Post autor: baribari » 31 sty 2011, 19:37

Używam BAscom Avr 1.11.8.5.
Początkuje w programowaniu i do tej pory wszystko szło ok (według jakiegoś kursu). Przyszło do napisania programu sterującego 7 segmentowym Led-em (wspólna anoda). Sterowanie za pomocą polecenia ROTATE i coś mi nie gra.
Załączam program:

Kod: Zaznacz cały

'$regfile "attiny2313.dat"
$crystal = 4000000     'kwarc zew. 4Mhz

Config Portb = Input
Config Portd = Output
Portd = &B1111110
Portb = &B11111111 

Do


Rotate Portd , Left , 1
Waitms 100


Loop

End

Segmenty Leda zapalają się po kolei lecz nie gasną. Polecenie działa tak jak instrukcja SHIFT. W symulatorze program działa ok i zero rzeczywiście przechodzi przez cały rejestr tak jak powinno natomiast w rzeczywistości jest inaczej.
Czy ktoś się z tym spotkał i pokonał problem.
Nie chodzi mi o inne rozwiązania problemu (zapalania i gaszenia Led-a) lecz o samo polecenie rotate - czy ono działa dla tego procesora??
Ostatnio zmieniony 09 lut 2011, 12:37 przez baribari, łącznie zmieniany 1 raz.

Awatar użytkownika
c4v2
Użytkownik
Posty: 426
Rejestracja: 22 lis 2005, 15:14
Lokalizacja: z przed monitora

Post autor: c4v2 » 31 sty 2011, 20:43

Nie weryfikowałem Pańskiego kodu w praktyce ale po żucie oka na wyprowadzenia mikroprocesora wydaje mi się że, w tym typie mikroprocesora nie będzie możliwe przesuwanie bitów w PorcieD instrukcją Rotate. Natomiast przesuwanie bitów w PorcieB tym poleceniem powinno się udać. PortD w tym mikroprocesorze ma bitów siedem, a PortB ma ich osiem.

[ Dodano: 2011-01-31, 20:51 ]
Przepraszam (Pana lub Pani) kodu.

baribari
-
Posty: 3
Rejestracja: 31 sty 2011, 18:40
Lokalizacja: Kielce

Post autor: baribari » 31 sty 2011, 20:54

Dzięki za szybką odpowiedź, już działa! czym to jest spowodowane, że nie można użyć Rotate dla Portd? W karcie (bity rejestru Portd) jest siedem bitów r/w (read/write) i ósmy jako r(read) - więc to jest powód??
Jeszcze raz dzięki i pozdrawiam!

Awatar użytkownika
Pikczu
Użytkownik
Posty: 754
Rejestracja: 18 lip 2005, 18:33
Lokalizacja: Dublin
Kontakt:

Post autor: Pikczu » 31 sty 2011, 20:56

:mrgreen: łał c4v2, powinieneś dostać order za kulturę :mrgreen: :mrgreen:

baribari
-
Posty: 3
Rejestracja: 31 sty 2011, 18:40
Lokalizacja: Kielce

Post autor: baribari » 31 sty 2011, 21:11

hehe dokładnie
PS. Pan :o

Awatar użytkownika
c4v2
Użytkownik
Posty: 426
Rejestracja: 22 lis 2005, 15:14
Lokalizacja: z przed monitora

Post autor: c4v2 » 01 lut 2011, 3:00

Raczej nie działam w kulturze, więc nie wiem za co ten order. :smile: Ale dziękuję. :smile:

Dawid 95
-
Posty: 98
Rejestracja: 03 paź 2010, 14:48
Lokalizacja: Polska

Post autor: Dawid 95 » 03 lut 2011, 8:27

Witam !
Miałem ten sam problem na płytce ZL2AVR ( atmega8) . A że bardzo lubie PortD , to nie wpadłem na ten pomysł , że przyczyną jest liczba wyjść.

Awatar użytkownika
c4v2
Użytkownik
Posty: 426
Rejestracja: 22 lis 2005, 15:14
Lokalizacja: z przed monitora

Post autor: c4v2 » 03 lut 2011, 20:20

Miałem ten sam problem na płytce ZL2AVR ( atmega8) . A że bardzo lubie PortD , to nie wpadłem na ten pomysł , że przyczyną jest liczba wyjść.
W mikroprocesorze Mega8 PortD ma osiem bitów więc instrukcja Rotate powinna działać (i działa) poprawnie.
Problem może być gdzie indziej. Czy nie były wykorzystywane alternatywne funkcje pinów portD? Przykładowo czy nie było tak, że była w testowanym programie dyrektywa "$Baud=Vartość"? Jeżeli tak to dwa pierwsze bity portu były przyporządkowane do sprzętowego UART i instrukcja Rotate mogła nie działać poprawnie.

ODPOWIEDZ