Gela nel Mondo Indice del Forum Galleria Foto e Immagini di Gela Gela nel Mondo




Apri un nuovo argomento Rispondi all’argomento  [ 8 messaggi ] 
Programmazione di pic in assembler 
Autore Messaggio
Normal user
Normal user

Data iscrizione: lunedì 30 marzo 2009, ore 23:38
Messaggi: 22
Karma: 0 punti  
Messaggio Programmazione di pic in assembler
Cari ragazzi ... devo portare come tesi un programma ke gestisce un motore passo passo di una cnc fatta in casa
... uso la pic16f876 ...per fare i vari spostamenti utilizzo un programma scritto in c++ ke gira sul mio pc....questo invia un byte (un char) tramite seriale alla skeda pic ...il microcontrollore deve fare il confronto tra un numero e quello appena ricevuto ...qualcuno sa se c'è un metodo per fare questo confronto?

Ps. vi faccio un esempio per spiegarmi meglio....se io invio via seriale "00110000" (binario) 48 in decimale....una volta ke la pic lo riceve lo inserisci in RCREG.. (il registro di ricezione) ... quindi io vorrei confrontare quello ke c'è nel registro kn 5 numeri x esempio ..... 13 ,38 , 45, 48 ,60 .... come faccio a vedere se il numero nel RCREG è uguale a 48 o ad un'altro numero ?.... purtroppo in assembler non ci sono gli if ^^ Se riuscite a trovarmi una soluzione VI do 1 baCIO! XD :D


venerdì 3 aprile 2009, ore 20:29
Torna a inizio pagina
Profilo
City Keys Owner!
City Keys Owner!
Avatar utente

Data iscrizione: sabato 5 gennaio 2008, ore 18:52
Messaggi: 1256
Karma: 10 punti  
Messaggio Re: Programmazione di pic in assembler
cekki90 ha scritto:
Cari ragazzi ... devo portare come tesi un programma ke gestisce un motore passo passo di una cnc fatta in casa
... uso la pic16f876 ...per fare i vari spostamenti utilizzo un programma scritto in c++ ke gira sul mio pc....questo invia un byte (un char) tramite seriale alla skeda pic ...il microcontrollore deve fare il confronto tra un numero e quello appena ricevuto ...qualcuno sa se c'è un metodo per fare questo confronto?

Ps. vi faccio un esempio per spiegarmi meglio....se io invio via seriale "00110000" (binario) 48 in decimale....una volta ke la pic lo riceve lo inserisci in RCREG.. (il registro di ricezione) ... quindi io vorrei confrontare quello ke c'è nel registro kn 5 numeri x esempio ..... 13 ,38 , 45, 48 ,60 .... come faccio a vedere se il numero nel RCREG è uguale a 48 o ad un'altro numero ?.... purtroppo in assembler non ci sono gli if ^^ Se riuscite a trovarmi una soluzione VI do 1 baCIO! XD :D


Io una mano te la do e mi accontento di un grazie ;)

Hai mai programmato in assembler?

I comandi snei,beqz,slti,addi ti dicono qualcosa? Per il tuo problemino devi fare solo un confronto fra due registri.

_________________
Nulla si crea, nulla si distrugge, tutto si trasforma

http://www.nucciodipaola.it/
http://www.homatron.it/
http://www.fipavcaltanissetta.com/
http://www.srisc.com/


venerdì 3 aprile 2009, ore 22:17
Torna a inizio pagina
Profilo WWW
Normal user
Normal user

Data iscrizione: lunedì 30 marzo 2009, ore 23:38
Messaggi: 22
Karma: 0 punti  
Messaggio Re: Programmazione di pic in assembler
ingnuccio ha scritto:
cekki90 ha scritto:
Cari ragazzi ... devo portare come tesi un programma ke gestisce un motore passo passo di una cnc fatta in casa
... uso la pic16f876 ...per fare i vari spostamenti utilizzo un programma scritto in c++ ke gira sul mio pc....questo invia un byte (un char) tramite seriale alla skeda pic ...il microcontrollore deve fare il confronto tra un numero e quello appena ricevuto ...qualcuno sa se c'è un metodo per fare questo confronto?

Ps. vi faccio un esempio per spiegarmi meglio....se io invio via seriale "00110000" (binario) 48 in decimale....una volta ke la pic lo riceve lo inserisci in RCREG.. (il registro di ricezione) ... quindi io vorrei confrontare quello ke c'è nel registro kn 5 numeri x esempio ..... 13 ,38 , 45, 48 ,60 .... come faccio a vedere se il numero nel RCREG è uguale a 48 o ad un'altro numero ?.... purtroppo in assembler non ci sono gli if ^^ Se riuscite a trovarmi una soluzione VI do 1 baCIO! XD :D


Io una mano te la do e mi accontento di un grazie ;)

Hai mai programmato in assembler?

I comandi snei,beqz,slti,addi ti dicono qualcosa? Per il tuo problemino devi fare solo un confronto fra due registri.

è tipo da 2 anni ke programmo in assembler.. pero a livello scolastico ^^ ... diciamo ke conosco i comandi prioncipali... tipo comunicazioni tra schede... le cose principali... funzioni ecc ecc..


venerdì 3 aprile 2009, ore 22:22
Torna a inizio pagina
Profilo
City Keys Owner!
City Keys Owner!
Avatar utente

Data iscrizione: sabato 5 gennaio 2008, ore 18:52
Messaggi: 1256
Karma: 10 punti  
Messaggio Re: Programmazione di pic in assembler
cekki90 ha scritto:
ingnuccio ha scritto:
cekki90 ha scritto:
Cari ragazzi ... devo portare come tesi un programma ke gestisce un motore passo passo di una cnc fatta in casa
... uso la pic16f876 ...per fare i vari spostamenti utilizzo un programma scritto in c++ ke gira sul mio pc....questo invia un byte (un char) tramite seriale alla skeda pic ...il microcontrollore deve fare il confronto tra un numero e quello appena ricevuto ...qualcuno sa se c'è un metodo per fare questo confronto?

Ps. vi faccio un esempio per spiegarmi meglio....se io invio via seriale "00110000" (binario) 48 in decimale....una volta ke la pic lo riceve lo inserisci in RCREG.. (il registro di ricezione) ... quindi io vorrei confrontare quello ke c'è nel registro kn 5 numeri x esempio ..... 13 ,38 , 45, 48 ,60 .... come faccio a vedere se il numero nel RCREG è uguale a 48 o ad un'altro numero ?.... purtroppo in assembler non ci sono gli if ^^ Se riuscite a trovarmi una soluzione VI do 1 baCIO! XD :D


Io una mano te la do e mi accontento di un grazie ;)

Hai mai programmato in assembler?

I comandi snei,beqz,slti,addi ti dicono qualcosa? Per il tuo problemino devi fare solo un confronto fra due registri.

è tipo da 2 anni ke programmo in assembler.. pero a livello scolastico ^^ ... diciamo ke conosco i comandi prioncipali... tipo comunicazioni tra schede... le cose principali... funzioni ecc ecc..


Capito, allora mi sa che la colpa è del tuo prof!!

Allora facciamo cosi cerco di farti capire con un esempio, e tu provi ad adattarlo al tuo problema

Di seguito ti riporto un esempio che puoi provarlo e capire come funziona programmare veramente in assembler ;)
E' una versione ottimizzata, vedi se riesci a capirla cosi fai bella figura col tuo prof ;)

C'è pure l'interazione a video cosi puoi capire meglio il funzionamento
Codice:
; RICERCA - versione ottimizzata con sentinella

; legge tre numeri e visualizza un messaggio se almeno uno di essi e'
; uguale a 7
; Versione DLX di ricerca2.c

.data
vett:      .space   16
msg_lett:   .asciiz   "\n Inserisci un numero : "
msg_trovato:   .asciiz   "\n ho trovato il 7 !"
.align   2
msg_trovato_addr:   .word   msg_trovato

.text
.global main

main:       addi r2,r0,0      
      addi r3,r0,3
   
loop_lett:   addi r1, r0, msg_lett
      jal InputUnsigned
      sw vett(r2), r1   
      addi r2,r2,4
      subi r3,r3,1
      bnez r3, loop_lett   

inizio_ricerca:   
      ; imposta sentinella a 7
      addi r2,r0,12
      addi r3,r0,7
      sw vett(r2),r3
      ; inizializza indice e spiazzamento
      addi r2,r0,0
      addi r4,r0,0      

loop_ricerca:   lw r3,vett(r2)      
      snei r6,r3,7      
      beqz r6,fine_loop   
      addi r4,r4,1      
      addi r2,r2,4      
      j loop_ricerca

fine_loop:   slti r5,r4,3
      beqz r5,fine_programma

      addi r14,r0,msg_trovato_addr
      trap 5         

fine_programma: trap 0

_________________
Nulla si crea, nulla si distrugge, tutto si trasforma

http://www.nucciodipaola.it/
http://www.homatron.it/
http://www.fipavcaltanissetta.com/
http://www.srisc.com/


venerdì 3 aprile 2009, ore 22:29
Torna a inizio pagina
Profilo WWW
Normal user
Normal user

Data iscrizione: lunedì 30 marzo 2009, ore 23:38
Messaggi: 22
Karma: 0 punti  
Messaggio Re: Programmazione di pic in assembler
ingnuccio ha scritto:
cekki90 ha scritto:
ingnuccio ha scritto:

Io una mano te la do e mi accontento di un grazie ;)

Hai mai programmato in assembler?

I comandi snei,beqz,slti,addi ti dicono qualcosa? Per il tuo problemino devi fare solo un confronto fra due registri.

è tipo da 2 anni ke programmo in assembler.. pero a livello scolastico ^^ ... diciamo ke conosco i comandi prioncipali... tipo comunicazioni tra schede... le cose principali... funzioni ecc ecc..


Capito, allora mi sa che la colpa è del tuo prof!!

Allora facciamo cosi cerco di farti capire con un esempio, e tu provi ad adattarlo al tuo problema

Di seguito ti riporto un esempio che puoi provarlo e capire come funziona programmare veramente in assembler ;)
E' una versione ottimizzata, vedi se riesci a capirla cosi fai bella figura col tuo prof ;)

C'è pure l'interazione a video cosi puoi capire meglio il funzionamento
Codice:
; RICERCA - versione ottimizzata con sentinella

; legge tre numeri e visualizza un messaggio se almeno uno di essi e'
; uguale a 7
; Versione DLX di ricerca2.c

.data
vett:      .space   16
msg_lett:   .asciiz   "\n Inserisci un numero : "
msg_trovato:   .asciiz   "\n ho trovato il 7 !"
.align   2
msg_trovato_addr:   .word   msg_trovato

.text
.global main

main:       addi r2,r0,0      
      addi r3,r0,3
   
loop_lett:   addi r1, r0, msg_lett
      jal InputUnsigned
      sw vett(r2), r1   
      addi r2,r2,4
      subi r3,r3,1
      bnez r3, loop_lett   

inizio_ricerca:   
      ; imposta sentinella a 7
      addi r2,r0,12
      addi r3,r0,7
      sw vett(r2),r3
      ; inizializza indice e spiazzamento
      addi r2,r0,0
      addi r4,r0,0      

loop_ricerca:   lw r3,vett(r2)      
      snei r6,r3,7      
      beqz r6,fine_loop   
      addi r4,r4,1      
      addi r2,r2,4      
      j loop_ricerca

fine_loop:   slti r5,r4,3
      beqz r5,fine_programma

      addi r14,r0,msg_trovato_addr
      trap 5         

fine_programma: trap 0

MMM... penso proprio ke nn sia questo quello ke sto cercando... l'assembler ke uso io non ha possibilita di mostrare qualcosa a video... io cerco un programma da poter inserire in un microcontrollore pic 16f876....addi,trap,loop ecc ecc.. sono cose ke nn ho mai usato.. cioè forse lo uso ankora di + a basso livello... #-o


venerdì 3 aprile 2009, ore 22:52
Torna a inizio pagina
Profilo
Normal user
Normal user

Data iscrizione: lunedì 30 marzo 2009, ore 23:38
Messaggi: 22
Karma: 0 punti  
Messaggio Re: Programmazione di pic in assembler
questo è quello ke + o meno so usare =) Ti dicono qualcosa ?

ISTRUZIONI PIC

BYTE-ORIENTED FILE REGISTER OPERATIONS
Istruzione Descrizione N° cicli Flags
ADDWF f, d Add W and f 1 C,DC,Z
ANDWF f, d AND W with f 1 Z
CLRF f Clear f 1 Z
CLRW - Clear W 1 Z
COMF f, d Complement f 1 Z
DECF f, d Decrement f 1 Z
DECFSZ f, d Decrement f, Skip if 0 1(2)
INCF f, d Increment f 1 Z
INCFSZ f, d Increment f, Skip if 0 1(2)
IORWF f, d Inclusive OR W with f 1 Z
MOVF f, d Move f 1 Z
MOVWF f Move W to f 1
NOP - No Operation 1
RLF f, d Rotate Left f through Carry 1 C
RRF f, d Rotate Right f through Carry 1 C
SUBWF f, d Subtract W from f 1 C,DC,Z
SWAPF f, d Swap nibbles in f 1

XORWF f, d Exclusive OR W with f 1 Z

BIT-ORIENTED FILE REGISTER OPERATIONS
Istruzione Descrizione N° cicli Flags
BCF f, b Bit Clear f 1
BSF f, b Bit Set f 1
BTFSC f, b Bit Test f, Skip if Clear 1 (2)
BTFSS f, b Bit Test f, Skip if Set 1 (2)

LITERAL AND CONTROL OPERATIONS
Istruzione Descrizione N° cicli Flags
ADDLW k Add literal and W 1 C,DC,Z
ANDLW k AND literal with W 1 Z
CALL k Call subroutine 2
CLRWDT - Clear Watchdog Timer 1 TO,PD
GOTO k Go to address 2
IORLW k Inclusive OR literal with W 1 Z
MOVLW k Move literal to W 1
RETFIE - Return from interrupt 2
RETLW k Return with literal in W 2
RETURN - Return from Subroutine 2
SLEEP - Go into Standby mode 1 TO,PD
SUBLW k Subtract W from literal 1 C,DC,Z
XORLW k Exclusive OR literal with W 1 Z


venerdì 3 aprile 2009, ore 23:02
Torna a inizio pagina
Profilo
City Keys Owner!
City Keys Owner!
Avatar utente

Data iscrizione: sabato 5 gennaio 2008, ore 18:52
Messaggi: 1256
Karma: 10 punti  
Messaggio Re: Programmazione di pic in assembler
quelli che ti ho postato sopra sono le istruzioni del DLX che è un microprocessore. Alla fine la logica è sempre quella cambia solo l'instruction set ;)

In più devi sapere che anche programmando in assembler si può stampare a video ;)


Cmq vedendo un pò l'instruction set del tuo pic, quello che vuoi fare tu è questo:

Codice:
movf   registro, W
   xorlw   B'00110000'
   btfsc   STATUS, Z
   goto   uguali
diversi:
   bsf   PORTB, 2
   goto   fine
uguali:
   bsf   PORTB, 1
fine:
   .......


Ti ho fatto l'esempio con 48

Ti do pure l'interpretazione del codice:

1° Copio nel W il valore contenuto nel mio registro
2° faccio XOR con il valore che mi aspetto di trovare
(bit ugali danno zero, bit diversi danno 1)
3° In questo caso risultato uguale a zero (binario identico) che vuol dire status,Z a 1
da qui vado a uguali, se status,Z era zero andavo a diversi

_________________
Nulla si crea, nulla si distrugge, tutto si trasforma

http://www.nucciodipaola.it/
http://www.homatron.it/
http://www.fipavcaltanissetta.com/
http://www.srisc.com/


sabato 4 aprile 2009, ore 0:59
Torna a inizio pagina
Profilo WWW
Normal user
Normal user

Data iscrizione: lunedì 30 marzo 2009, ore 23:38
Messaggi: 22
Karma: 0 punti  
Messaggio Re: Programmazione di pic in assembler
ingnuccio ha scritto:
quelli che ti ho postato sopra sono le istruzioni del DLX che è un microprocessore. Alla fine la logica è sempre quella cambia solo l'instruction set ;)

In più devi sapere che anche programmando in assembler si può stampare a video ;)


Cmq vedendo un pò l'instruction set del tuo pic, quello che vuoi fare tu è questo:

Codice:
movf   registro, W
   xorlw   B'00110000'
   btfsc   STATUS, Z
   goto   uguali
diversi:
   bsf   PORTB, 2
   goto   fine
uguali:
   bsf   PORTB, 1
fine:
   .......


Ti ho fatto l'esempio con 48

Ti do pure l'interpretazione del codice:

1° Copio nel W il valore contenuto nel mio registro
2° faccio XOR con il valore che mi aspetto di trovare
(bit ugali danno zero, bit diversi danno 1)
3° In questo caso risultato uguale a zero (binario identico) che vuol dire status,Z a 1
da qui vado a uguali, se status,Z era zero andavo a diversi

*-* Grazie millee !!.. funziona benissimo.. certo ho dovuto cambiare delle cose perche la pic non supporta questo tipo di scrittura... xò l'idea è buonissima.. grazie Davvero !! 10+ =D>


domenica 5 aprile 2009, ore 0:23
Torna a inizio pagina
Profilo
Visualizza ultimi messaggi:  Ordina per      
Apri un nuovo argomento Rispondi all’argomento  [ 8 messaggi ] 


Chi c’è in linea

Visitano il forum: Nessuno e 0 ospiti


Non puoi aprire nuovi argomenti
Non puoi rispondere negli argomenti
Non puoi modificare i tuoi messaggi
Non puoi cancellare i tuoi messaggi
Non puoi inviare allegati

Cerca per:
Vai a:  
cron