czytanie stanu pinu w Bascom AVR
Masz problem? Zapytaj na forum elektroda.pl
From: "Piotr" <piotrpitucha_at_nospam_poczta.onet.pl>
Subject: czytanie stanu pinu w Bascom AVR
Date: Sun, 23 Oct 2005 10:14:00 +0200
Witam
Nie chciał mi ruszyć kawałek programu który przenosiłem z 51' na Atemgę8.
Już myślałem ża jakies przerwy w druku bo nie mogłem zbadać stanu klawisza,
co z pozoru mi się wydawało banalne.
w 51':
if P1.1=0 then ....... i to
działało
w AVR: if Pind.4=0 then........ to nie działa
a coś takiego: A=Pind.4
if A=0 then ........
działa
Czy da się jakoś zbadać stan pinu bezpośrednio? nie chcę mnożyć zmiennych i
nie chce mi się pisać tego po kilkanaście razy.
Piotr
From: "Piotrek Sz." <zumek_at_nospam_gazeta.SKASUJ-TO.pl>
Subject: Re: czytanie stanu pinu w Bascom AVR
Date: Sun, 23 Oct 2005 08:41:38 +0000 (UTC)
Piotr <piotrpitucha_at_nospam_poczta.onet.pl> napisał(a):
Witam
Nie chciał mi ruszyć kawałek programu który przenosiłem z 51' na Atemgę8.
Już myślałem ża jakies przerwy w druku bo nie mogłem zbadać stanu klawisza,
co z pozoru mi się wydawało banalne.
w 51':
if P1.1=0 then ....... i to
działało
w AVR: if Pind.4=0 then........ to nie działa
a coś takiego: A=Pind.4
if A=0 then ........
działa
Czy da się jakoś zbadać stan pinu bezpośrednio? nie chcę mnożyć zmiennych i
nie chce mi się pisać tego po kilkanaście razy.
Piotr
Spróbuj tak:
..
Config Pind.4 = Input 'Ustaw jako wejście
Portd.4 = 1 'Włącz Pull-up
If Pind.4=0 Then
..
Piotr ;)
--
Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/
From: "Piotr" <piotrpitucha_at_nospam_poczta.onet.pl>
Subject: Re: czytanie stanu pinu w Bascom AVR
Date: Sun, 23 Oct 2005 12:49:09 +0200
Użytkownik "Piotrek Sz." <zumek_at_nospam_gazeta.SKASUJ-TO.pl> napisał w wiadomości
news:djfic2$5s9$1_at_nospam_inews.gazeta.pl...
Piotr <piotrpitucha_at_nospam_poczta.onet.pl> napisał(a):
Spróbuj tak:
..
Config Pind.4 = Input 'Ustaw jako wejście
Portd.4 = 1 'Włącz Pull-up
If Pind.4=0 Then
..
Własnie tak mam i zastanawia mnie czemu nie działa :(
Piotr
From: zuras <zuras1981_at_nospam_tlen.pl>
Subject: Re: czytanie stanu pinu w Bascom AVR
Date: Sun, 23 Oct 2005 13:30:13 +0200
Piotr napisał(a):
Witam
Nie chciał mi ruszyć kawałek programu który przenosiłem z 51' na Atemgę8.
Już myślałem ża jakies przerwy w druku bo nie mogłem zbadać stanu klawisza,
co z pozoru mi się wydawało banalne.
w 51':
if P1.1=0 then ....... i to
działało
w AVR: if Pind.4=0 then........ to nie działa
a coś takiego: A=Pind.4
if A=0 then ........
działa
Czy da się jakoś zbadać stan pinu bezpośrednio? nie chcę mnożyć zmiennych i
nie chce mi się pisać tego po kilkanaście razy.
Piotr
W rejestrze portX można odczytać wartośc którą się wpisało do portu ale
do odczytu stanu wejść widzianych z zewnątrz mikrokontrolera trzeba użyć
rejestru pinX.X lub odczytu całego portu pinX.
From: "Piotr" <piotrpitucha_at_nospam_poczta.onet.pl>
Subject: Re: czytanie stanu pinu w Bascom AVR
Date: Sun, 23 Oct 2005 13:41:04 +0200
Użytkownik "zuras" <zuras1981_at_nospam_tlen.pl> napisał w wiadomości
news:djfs8j$mui$1_at_nospam_atlantis.news.tpi.pl...
W rejestrze portX można odczytać wartośc którą się wpisało do portu ale
do odczytu stanu wejść widzianych z zewnątrz mikrokontrolera trzeba użyć
rejestru pinX.X lub odczytu całego portu pinX
Poczytaj co piszę, właśnie używam Pinx.x, tylko problem w tym że aby go użyć
w IF muszę go wcześniej przypisać do jakieś zmiennej inaczej IF daje taki
efekt jakby na pinie była cały czas jedynka.
Piotr
From: Zbych <abuse_at_nospam_onet.pl>
Subject: Re: czytanie stanu pinu w Bascom AVR
Date: Sun, 23 Oct 2005 14:33:29 +0200
Piotr wrote:
Poczytaj co piszę, właśnie używam Pinx.x, tylko problem w tym że aby go użyć
w IF muszę go wcześniej przypisać do jakieś zmiennej inaczej IF daje taki
efekt jakby na pinie była cały czas jedynka.
Zamiast czekać na odsiecz wróżki, która zgadnie czemu to nie działa,
mógłbyś o wiele szybciej porównać kody wynikowe obydwu przypadków
(bascom produkuje jakiś listing assemblerowy?).
From: "Piotr" <piotrpitucha_at_nospam_poczta.onet.pl>
Subject: Re: czytanie stanu pinu w Bascom AVR
Date: Sun, 23 Oct 2005 14:59:15 +0200
Użytkownik "Zbych" <abuse_at_nospam_onet.pl> napisał w wiadomości
news:djfvuh$2ur8$1_at_nospam_news.mm.pl...
Zamiast czekać na odsiecz wróżki, która zgadnie czemu to nie działa,
mógłbyś o wiele szybciej porównać kody wynikowe obydwu przypadków
(bascom produkuje jakiś listing assemblerowy?).
Chyba poczekam na wróżkę, nie widzę aby coś takiego generował, chyba że
gdzieś w opcjach można to wymusić, ponadto nie znam assemblera :)
Piotr
From: "Piotrek Sz." <zumek_at_nospam_gazeta.SKASUJ-TO.pl>
Subject: Re: czytanie stanu pinu w Bascom AVR
Date: Sun, 23 Oct 2005 13:43:46 +0000 (UTC)
Piotr <piotrpitucha_at_nospam_poczta.onet.pl> napisał(a):
Użytkownik "Zbych" <abuse_at_nospam_onet.pl> napisał w wiadomości
news:djfvuh$2ur8$1_at_nospam_news.mm.pl...
Zamiast czekać na odsiecz wróżki, która zgadnie czemu to nie działa,
mógłbyś o wiele szybciej porównać kody wynikowe obydwu przypadków
(bascom produkuje jakiś listing assemblerowy?).
Chyba poczekam na wróżkę, nie widzę aby coś takiego generował, chyba że
gdzieś w opcjach można to wymusić, ponadto nie znam assemblera :)
Piotr
Postanowiłem częściowo zastąpić wróżkę ;-)
Kod jaki wygenerował Bascom:
..
3: Config Pind.4 = Input
+00000026: 988C CBI 0x11,4 Clear bit in I/O register
4: Set Portd.4
+00000027: 9A94 SBI 0x12,4 Set bit in I/O register
;---------------------------------------------------------------------
6: A = Pind.4
+00000028: 27BB CLR R27 Clear Register
+00000029: E3A0 LDI R26,0x30 Load immediate
6: A = Pind.4
+0000002A: 918C LD R24,X Load indirect
+0000002B: FB84 BST R24,4 Bit store from register to T
6: A = Pind.4
+0000002C: E6A0 LDI R26,0x60 Load immediate
+0000002D: E0B0 LDI R27,0x00 Load immediate
6: A = Pind.4
+0000002E: 2788 CLR R24 Clear Register
+0000002F: F980 BLD R24,0 Bit load from T to register
6: A = Pind.4
+00000030: 938C ST X,R24 Store indirect
;----------------------------------------------------------------------
7: If Pind.4 = 0 Then
+00000031: 2700 CLR R16 Clear Register
+00000032: 27BB CLR R27 Clear Register
7: If Pind.4 = 0 Then
+00000033: E3A0 LDI R26,0x30 Load immediate
+00000034: 918C LD R24,X Load indirect
7: If Pind.4 = 0 Then
+00000035: FB84 BST R24,4 Bit store from register to T
+00000036: F40E BRTC PC+0x02 Branch if T flag cleared
7: If Pind.4 = 0 Then
+00000037: E001 LDI R16,0x01 Load immediate
+00000038: E040 LDI R20,0x00 Load immediate
7: If Pind.4 = 0 Then
+00000039: 1704 CP R16,R20 Compare
+0000003A: F009 BREQ PC+0x02 Branch if equal
7: If Pind.4 = 0 Then
+0000003B: C001 RJMP PC+0x0002 Relative jump
8: nop
+0000003C: 0000 NOP No operation
10: Loop
+0000003D: CFEA RJMP PC-0x0015 Relative jump
+0000003E: 9731 SBIW R30,0x01 Subtract immediate from word
10: Loop
+0000003F: F7F1 BRNE PC-0x01 Branch if not equal
+00000040: 9508 RET Subroutine return
10: Loop
+00000041: 9468 SET Set T in SREG
+00000042: F862 BLD R6,2 Bit load from T to register
10: Loop
+00000043: 9508 RET Subroutine return
+00000044: 94E8 CLT Clear T in SREG
10: Loop
+00000045: F862 BLD R6,2 Bit load from T to register
+00000046: 9508 RET Subroutine return
..
dla poniższego źródła:
$regfile = "m8def.dat"
Dim A As Byte
Config Pind.4 = Input
Set Portd.4
Do
A = Pind.4
If Pind.4 = 0 Then
nop
End If
Loop
Jak dla mnie OK , mimo że zrobione jakby okrężną drogą :)
Piotr
PS
Pokaż całe źródło , jeśli chcesz ;)
--
Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/
From: "Piotr" <piotrpitucha_at_nospam_poczta.onet.pl>
Subject: Re: czytanie stanu pinu w Bascom AVR
Date: Sun, 23 Oct 2005 18:20:47 +0200
Użytkownik "Piotrek Sz." <zumek_at_nospam_gazeta.SKASUJ-TO.pl> napisał w wiadomości
news:djg42h$o8l$1_at_nospam_inews.gazeta.pl...
Postanowiłem częściowo zastąpić wróżkę ;-)
Kod jaki wygenerował Bascom:
A skąd go masz? to może być pouczające.
$regfile = "m8def.dat"
Dim A As Byte
Config Pind.4 = Input
Set Portd.4
Do
A = Pind.4
If Pind.4 = 0 Then
nop
End If
Loop
Jak dla mnie OK , mimo że zrobione jakby okrężną drogą :)
) pomógł reset komputera, dłuższa praca na Bascomie ARV skutkuje u mnie
topnieniem zasobów :(, w pewnej chwili przestał się pokazywać programator
więć uruchomiłem jeszcze raz system.
W Twoim przykładzie chyba powinien być Dim A as bit choć byte też pewnie
zadziała
Pokaż całe źródło , jeśli chcesz ;)
To było prawie całe źródło, w przerwaniu od INT0 ma sobie zliczać zegar, a
przejście do innych funkcji jest robiome klawiszami, klawisz MENU miałem
właśnie sprawdzać w każdym przerwaniu i napisałem sobie tylko tyle:
$regfile = "m8def.dat"
Config Pind.4 = Input
Set Portd.4
Do
If Pind.4 = 0 Then
LCD "klawisz wcisniety"
End If
Loop
Była jeszcze deklaracja pinów do LCD i to tyle, teraz działa, aby nie
wypisywać portów porobiłem sobie aliasy, niby robi to samo ale przyjemniej
).
Piotr
From: "Piotrek Sz." <zumek_at_nospam_gazeta.SKASUJ-TO.pl>
Subject: Re: czytanie stanu pinu w Bascom AVR
Date: Sun, 23 Oct 2005 18:44:57 +0000 (UTC)
Piotr <piotrpitucha_at_nospam_poczta.onet.pl> napisał(a):
Kod jaki wygenerował Bascom:
A skąd go masz? to może być pouczające.
Na taki luksus , pozwala AvrStudio.Już dawno zarzuciłem bascomowy symulator.
) pomógł reset komputera, dłuższa praca na Bascomie ARV skutkuje u mnie
topnieniem zasobów :(, w pewnej chwili przestał się pokazywać programator
więć uruchomiłem jeszcze raz system.
Ani słówkiem nie wspomniałeś , że tylko "symulujesz" ;)
W Twoim przykładzie chyba powinien być Dim A as bit choć byte też pewnie
zadziała
To jest bez znaczenia.Dowolna zmienna , przed zapisem do niej wartości bitowej
, jest zerowana.
..
Piotr
Piotrek
--
Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/
From: "Piotr Pitucha" <piotrpitucha_at_nospam_poczta.onet.pl>
Subject: Re: czytanie stanu pinu w Bascom AVR
Date: Mon, 24 Oct 2005 07:28:23 +0200
Użytkownik "Piotrek Sz." <zumek_at_nospam_gazeta.SKASUJ-TO.pl> napisał w wiadomości
news:djgln9$a2m$1_at_nospam_inews.gazeta.pl...
Na taki luksus , pozwala AvrStudio.Już dawno zarzuciłem bascomowy
symulator.
Dzięki za info, będę musiał się z tym zaprzyjaźnić.
Ani słówkiem nie wspomniałeś , że tylko "symulujesz" ;)
Nie wspomniałem bo to nie była symulacja tylko rzeczywisty układ :),
programowanie wprost z poziomu Bascoma AVR
To jest bez znaczenia.Dowolna zmienna , przed zapisem do niej wartości
bitowej
, jest zerowana.
Też mam takie przekonanie :) tylko przy małych procesorkach chyba
oszczędniej jeśli zmienna jest bitowa, przewróciłem się kiedyś na tym na
2051 jak mi brakło miejsca na zmienne.
A ogólnie to muszę liznąć assemblera, czasami przydałyby się jakieś wstawki
w programie.
Pozdrawiam Piotr