BasicStamp-kod till PIC-kod?

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
mickeliten
Inlägg: 311
Blev medlem: 12 november 2003, 14:41:48

BasicStamp-kod till PIC-kod?

Inlägg 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! :)
Användarvisningsbild
$tiff
Inlägg: 4941
Blev medlem: 31 maj 2003, 19:47:52
Ort: Göteborg
Kontakt:

Inlägg 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!
Användarvisningsbild
mickeliten
Inlägg: 311
Blev medlem: 12 november 2003, 14:41:48

Inlägg 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! :bravo:

mvh Micke
Användarvisningsbild
$tiff
Inlägg: 4941
Blev medlem: 31 maj 2003, 19:47:52
Ort: Göteborg
Kontakt:

Inlägg 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... :wink:
mullemeck
Inlägg: 1306
Blev medlem: 27 maj 2003, 23:52:06
Ort: Lund
Kontakt:

Inlägg 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..
Användarvisningsbild
mickeliten
Inlägg: 311
Blev medlem: 12 november 2003, 14:41:48

Inlägg av mickeliten »

Tack så hemskt mycket $tiff och mulle!!! :D :bravo:

mvh Micke.
Användarvisningsbild
EagleSpirit
Inlägg: 1288
Blev medlem: 27 maj 2003, 23:15:48
Ort: Västerås
Kontakt:

Inlägg av EagleSpirit »

det där är ju fusk, att använda PICbasic. Mycket roligare med assembler :D

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.
Skriv svar