czytanie stanu pinu w Bascom AVR

Oct 23, 2005 10 Replies

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


Piotr snipped-for-privacy@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 ..

Piotr ;)

U¿ytkownik "Piotrek Sz." snipped-for-privacy@gazeta.SKASUJ-TO.pl> napisa³ w wiadomo¶ci news:djfic2$5s9$ snipped-for-privacy@inews.gazeta.pl...

W³asnie tak mam i zastanawia mnie czemu nie dzia³a :(

Piotr

Piotr napisał(a):

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.

U¿ytkownik "zuras" snipped-for-privacy@tlen.pl napisa³ w wiadomo¶ci news:djfs8j$mui$ snipped-for-privacy@atlantis.news.tpi.pl...

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

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?).

U¿ytkownik "Zbych" snipped-for-privacy@onet.pl napisa³ w wiadomo¶ci news:djfvuh$2ur8$ snipped-for-privacy@news.mm.pl...

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

Piotr snipped-for-privacy@poczta.onet.pl> napisał(a):

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 ;)

U¿ytkownik "Piotrek Sz." snipped-for-privacy@gazeta.SKASUJ-TO.pl> napisa³ w wiadomo¶ci news:djg42h$o8l$ snipped-for-privacy@inews.gazeta.pl...

A sk±d go masz? to mo¿e byæ pouczaj±ce.

:) 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

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

Piotr snipped-for-privacy@poczta.onet.pl> napisał(a):

Na taki luksus , pozwala AvrStudio.Już dawno zarzuciłem bascomowy symulator.

Ani słówkiem nie wspomniałeś , że tylko "symulujesz" ;)

To jest bez znaczenia.Dowolna zmienna , przed zapisem do niej wartości bitowej , jest zerowana.

..

Piotrek

U¿ytkownik "Piotrek Sz." snipped-for-privacy@gazeta.SKASUJ-TO.pl> napisa³ w wiadomo¶ci news:djgln9$a2m$ snipped-for-privacy@inews.gazeta.pl...

Dziêki za info, bêdê musia³ siê z tym zaprzyja¼niæ.

Nie wspomnia³em bo to nie by³a symulacja tylko rzeczywisty uk³ad :), programowanie wprost z poziomu Bascoma AVR

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

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required