Messaggi senza risposta | Argomenti attivi
|
Pagina 1 di 1
|
[ 8 messaggi ] |
|
Programmazione di pic in assembler
Autore |
Messaggio |
cekki90
Normal user
Data iscrizione: lunedì 30 marzo 2009, ore 23:38 Messaggi: 22
Karma: 0 punti
|
![Messaggio Messaggio](./styles/hestia_blue/imageset/icon_topic_latest.gif) 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 ![risata :D](./images/smilies/a264.gif)
|
venerdì 3 aprile 2009, ore 20:29 |
|
![](./styles/hestia_blue/theme/images/spacer.gif) |
ingnuccio
City Keys Owner!
Data iscrizione: sabato 5 gennaio 2008, ore 18:52 Messaggi: 1256
Karma: 10 punti
|
![Messaggio Messaggio](./styles/hestia_blue/imageset/icon_topic_latest.gif) Re: Programmazione di pic in assembler
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 |
|
![](./styles/hestia_blue/theme/images/spacer.gif) |
cekki90
Normal user
Data iscrizione: lunedì 30 marzo 2009, ore 23:38 Messaggi: 22
Karma: 0 punti
|
![Messaggio Messaggio](./styles/hestia_blue/imageset/icon_topic_latest.gif) Re: Programmazione di pic in assembler
è 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 |
|
![](./styles/hestia_blue/theme/images/spacer.gif) |
ingnuccio
City Keys Owner!
Data iscrizione: sabato 5 gennaio 2008, ore 18:52 Messaggi: 1256
Karma: 10 punti
|
![Messaggio Messaggio](./styles/hestia_blue/imageset/icon_topic_latest.gif) Re: Programmazione di pic in assembler
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 ![](images/spacer.gif) | ![](images/spacer.gif) | ![](images/spacer.gif) | ![](images/spacer.gif) | 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 | ![](images/spacer.gif) | ![](images/spacer.gif) | ![](images/spacer.gif) | ![](images/spacer.gif) |
_________________ 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 |
|
![](./styles/hestia_blue/theme/images/spacer.gif) |
cekki90
Normal user
Data iscrizione: lunedì 30 marzo 2009, ore 23:38 Messaggi: 22
Karma: 0 punti
|
![Messaggio Messaggio](./styles/hestia_blue/imageset/icon_topic_latest.gif) Re: Programmazione di pic in assembler
![](images/spacer.gif) | ![](images/spacer.gif) | ![](images/spacer.gif) | ![](images/spacer.gif) | ingnuccio ha scritto: 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 ![](images/spacer.gif) | ![](images/spacer.gif) | ![](images/spacer.gif) | ![](images/spacer.gif) | 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 | ![](images/spacer.gif) | ![](images/spacer.gif) | ![](images/spacer.gif) | ![](images/spacer.gif) |
| ![](images/spacer.gif) | ![](images/spacer.gif) | ![](images/spacer.gif) | ![](images/spacer.gif) |
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... ![d'oh! #-o](./images/smilies/eusa_doh.gif)
|
venerdì 3 aprile 2009, ore 22:52 |
|
![](./styles/hestia_blue/theme/images/spacer.gif) |
cekki90
Normal user
Data iscrizione: lunedì 30 marzo 2009, ore 23:38 Messaggi: 22
Karma: 0 punti
|
![Messaggio Messaggio](./styles/hestia_blue/imageset/icon_topic_latest.gif) 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 |
|
![](./styles/hestia_blue/theme/images/spacer.gif) |
ingnuccio
City Keys Owner!
Data iscrizione: sabato 5 gennaio 2008, ore 18:52 Messaggi: 1256
Karma: 10 punti
|
![Messaggio Messaggio](./styles/hestia_blue/imageset/icon_topic_latest.gif) 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: 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 |
|
![](./styles/hestia_blue/theme/images/spacer.gif) |
cekki90
Normal user
Data iscrizione: lunedì 30 marzo 2009, ore 23:38 Messaggi: 22
Karma: 0 punti
|
![Messaggio Messaggio](./styles/hestia_blue/imageset/icon_topic_latest.gif) Re: Programmazione di pic in assembler
![](images/spacer.gif) | ![](images/spacer.gif) | ![](images/spacer.gif) | ![](images/spacer.gif) | 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: 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 | ![](images/spacer.gif) | ![](images/spacer.gif) | ![](images/spacer.gif) | ![](images/spacer.gif) |
*-* 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+ ![Applause =D>](./images/smilies/eusa_clap.gif)
|
domenica 5 aprile 2009, ore 0:23 |
|
|
|
Pagina 1 di 1
|
[ 8 messaggi ] |
|
Chi c’è in linea |
Visitano il forum: Nessuno e 2 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
|
|