Sida 1 av 1
BasicStamp-kod till PIC-kod?
Postat: 11 maj 2004, 22:14:31
av mickeliten
Om jag vill använda den här koden till en PIC istället för en Basic Stamp,
och jag vill använda I/O RA0-RB6 (12 I/O), vad behöver ändras då?
Räcker det att ändra FOR x=0 TO 15 till FOR x=RA0 TO RB6?
Hur ska jag göra?
x VAR Byte
tid VAR Byte
tid = 40
'-------------------
Left
FOR x=0 TO 15
HIGH x
PAUSE tid
LOW x
NEXT
'Här byter den håll
FOR x=15 TO 0
HIGH x
PAUSE tid
LOW x
NEXT
GOTO left
Vore bussigt om någon ville reda ut saken!

Postat: 12 maj 2004, 17:01:37
av $tiff
Hmm, man kan inte göra riktigt så enkelt, om jag förstått dig rätt.
Berätta gärna lite mer ingående vad det är du vill åstadkomma så hjälper jag dig knåpa ihop lite kod!
Postat: 12 maj 2004, 19:25:01
av mickeliten
Tjena.
Jo det är såhär... tyck inte att jag är fjaantig nu snälla.

Jag vill ha lysdioder att rinna, som en knightrider.
Det är det koden gör. Den sätter en utgång och släcker den, sätter nästa och släcker, osv osv... det gör den tills den har gått från I/O 0-15.
Sedan vänder den håll, stegar från 15-0.
Men med en pic så vill jag att den ska göra lika, fast då bara 12 I/O.
Vet att 16F84 har 13 I/O, men jag vill bara använda 12st.
Hoppas det inte var för luddigt.

Du är snäll som vill hjälpa till!
mvh Micke
Postat: 12 maj 2004, 19:51:15
av $tiff
Nejdå. Någonstans måste man börja...
Kod: Markera allt
x VAR BYTE
y VAR WORD
tid VAR BYTE
TRISB = %00000000 'PortB = output
TRISA = %00001111 'PortA = output
tid = 40
y = %0000000000000001 'Starta med detta värde
loop:
For x = 1 TO 11 'Elva gånger framlånges
y = y << 1 'Flytta alla bits ett till vänster
PORTB = y.byte0 'Kopiera in i port-register
PORTA = y.byte1 'Kopiera in i port-register
Pause tid
Next x 'Repetera
For x = 11 TO 1 STEP -1 'Elva gånger baklänges
y = y >> 1 'Flytta alla bits ett steg till höger
PORTB = y.byte0 'Kopiera in i port-register
PORTA = y.byte1 'Kopiera in i port-register
Pause tid
Next x 'Repetera
GoTo loop 'För alltid
Den här koden är tänkt att gå från portb.0 t.o.m. porta.3 och sen tillbaks igen, om och om igen. Hoppas det funkar...

Postat: 12 maj 2004, 21:59:34
av mullemeck
läste lite i picbasic manualen och såg att man faktiskt kan referera till pinnarna genom att använda siffra 0-11 så då skulle koden kunna bli..
Kod: Markera allt
loop:
x var byte
t var byte
t = 40
for x = 0 to 11
high x
pause t
low x
pause t
next x
for x = 11 to 0
high x
pause t
low x
pause t
next x
goto loop
koden är nästan snarlik den för basicstamp.. men jag tror att det borde funka, har dock inte testat...
Edit: läste lite nu om att man kan includa en fil som heter "bs2defs.bas" som gör att vissa pin-namn från basicstamp2 fungerar att använda rakt av..
Postat: 12 maj 2004, 23:07:32
av mickeliten
Tack så hemskt mycket $tiff och mulle!!!
mvh Micke.
Postat: 13 maj 2004, 01:15:22
av EagleSpirit
det där är ju fusk, att använda PICbasic. Mycket roligare med assembler
Kod: Markera allt
main:
movlw d'11'
movwf count
bsf PORTA,0
loop:
bcf STATUS,C
rrf PORTA,f
btfsc STATUS,C
bsf PORTB,f
bcf STATUS,C
rrf PORTB,f
call wait
decfsz count,f
goto loop
movlw d'11'
movwf count
loop2:
bcf STATUS,C
rlf PORTA,f
btfsc STATUS,C
bsf PORTB,f
bcf STATUS,C
rlf PORTB,f
call wait
decfsz count,f
goto loop2
goto main
wait: ;En wait på ca 110 000 instr vilket = 100ms
movlw 0x14 ;vid 4Mhz
movwf wait1
w_loop1:
movlw 0xFF
movwf wait2
w_loop2:
nop
decfsz wait2,f
goto w_loop2
decfsz wait1,f
goto w_loop1
return
är absolut inte säker på om detta funkar men det är ungefär vad koden mullemeck skrev gör. Iofs skiftar min kod runt en 1a i registrerna och tänder och släcker inte som mullemecks kod gör. Kan vara lite bit fel där PORTA går över till PORTB.