|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Dec 1999
Messaggi: 251
|
Assembler
Ciao,
qualcuno è pratico di assembler e micro ??
__________________
Il mio "bel volo" What goes in, must comes out (Johnny Noxville) ...e ricordati che prima o poi il po-chi gira (Il Maestro) manahmanah |
![]() |
![]() |
![]() |
#2 | |
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
![]()
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Dec 1999
Messaggi: 251
|
In particolare Motorola 68HC11, ma credo che una conoscenza generale dei micro e dell'assembler sia sufficiente :
- devo comandare un multiplexer utilizzando 3 bits di un PORT in uscita (PORTB), in particolare PB3,PB4 e PB5 (allo scopo di selezionare 1 di 8 sonar che monta un robot) - come scrivo il ciclo che fa girare da 0 a 7 la variabile rappresentata dai 3 bit senza intaccare gli altri bits del PORTB ?? ![]() ![]() PORTB sonar1 : xx000xxx sonar2 : xx001xxx .... .... sonar8 : xx111xxx
__________________
Il mio "bel volo" What goes in, must comes out (Johnny Noxville) ...e ricordati che prima o poi il po-chi gira (Il Maestro) manahmanah |
![]() |
![]() |
![]() |
#4 | |
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
![]() ![]() Io comunque farei così: userei una variabile in cui tengo i 3 bit da impostare. Inizialmente la metterei a 00000000 e poi nel loop gli sommerei ogni volta 00001000. Sulla variabile su cui non devi toccare gli altri bit farei ogni volta un AND con 11000111 in modo da azzerare i tuoi 3 bit e poi un OR con la variabile che ho detto prima. Spero di essere stato chiaro.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Dec 1999
Messaggi: 251
|
Mmm...sì abbastanza chiaro direi,
provo a buttar giù il codice e poi ti faccio sapere, in caso potresti riuscire a dirmi se è giusto o meno... Debuggare 'sti programmi è un casino !! Dove trovo una bella guida per imparare a programmare in assembler ?? Il manuale del 68HC11 è bello dettagliato, ma alcune cose non si capiscono tanto bene...
__________________
Il mio "bel volo" What goes in, must comes out (Johnny Noxville) ...e ricordati che prima o poi il po-chi gira (Il Maestro) manahmanah |
![]() |
![]() |
![]() |
#6 | ||
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
![]() Quote:
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
||
![]() |
![]() |
![]() |
#7 |
Senior Member
Iscritto dal: Dec 1999
Messaggi: 251
|
Probabilmente non sono nozioni che mi può dare il manuale,
forse dovrei andarmi a ripassare il corso di Calcolatori Elettronici ?? ![]() Posso includere file come si fa in altri linguaggi ?? Le routine possono essere richiamate da qualsiasi punto del programma o solo da punti successivi/precedenti alla loro dichiarazione/scrittura ?? RTS mi porta alla routine precedente che ha chiamato quella in cui mi trovo ?? Mi fai un esempio calzante di uso di bset e bclr tramite maschera ?? X ora credo che possa bastare ![]()
__________________
Il mio "bel volo" What goes in, must comes out (Johnny Noxville) ...e ricordati che prima o poi il po-chi gira (Il Maestro) manahmanah |
![]() |
![]() |
![]() |
#8 | ||||
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Ciao, sto facendo in questo momento un ... tuffo nel passato (back to the past
![]() Quote:
Probabilmente soltanto i cross assembler più evoluti supportano le direttive ad esempio per le macro o per le inclusioni di file. Quote:
Molti cross assembler (come il AS11) vengono definiti "2-pass assembler" proprio perché elaborano il sorgente 2 volte. Nella prima passata stabiliscono e creano la tabella dei simboli e nella seconda passata generano il codice. Questo vuol dire che quando generano il codice sanno già se il target di un salto è in avanti o all'indietro. Quote:
Quote:
In effetti BSET fa una semplice OR mentre BCLR fa una semplice AND. Le due istruzioni sono state inserite semplicemente perché le istruzioni AND/ORA hanno come limite il fatto di avere come operando di destinazione solamente i registri A e B. In pratica: BCLR VAR #$03 ; reset dei bit 1 e 0 dovrebbe essere uguale a: LDAA VAR ANDA #$FC STAA VAR Mentre: BSET VAR #$03 ; set dei bit 1 e 0 dovrebbe essere uguale a: LDAA VAR ORAA #$03 STAA VAR Spero di aver scritto giusto e spero che sia quello che chiedevi.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) Ultima modifica di andbin : 21-11-2005 alle 22:27. |
||||
![]() |
![]() |
![]() |
#9 | ||
Senior Member
Iscritto dal: Dec 1999
Messaggi: 251
|
Quote:
Quote:
![]() Anzi...a proposito di test...se io voglio capire se il mio programma funge come posso monitorare le porte ovvero sapere se i famosi PB3,PB4 e PB5 che devo settare io fanno quello che devono ?? Presumo che PCBUG11 mi fornisca qualche info...ma difficilmente interpretabile !! ![]() Non dirmi che devo attaccarmi all'oscilloscopio ![]() ![]() Intanto GRAZIE !!
__________________
Il mio "bel volo" What goes in, must comes out (Johnny Noxville) ...e ricordati che prima o poi il po-chi gira (Il Maestro) manahmanah |
||
![]() |
![]() |
![]() |
#10 | ||
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Quote:
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
||
![]() |
![]() |
![]() |
#11 |
Senior Member
Iscritto dal: Dec 1999
Messaggi: 251
|
Uhm...come creo quindi l'istruzione di confronto per verificare se il ciclo è concluso ??
Ho la variabile multisonar che uso come maschera x azzerare i bits del PORTB che mi servono, la incremento di 4 ad ogni ciclo facendo una cosa di questo tipo (suppongo) : LDA multisonar ADDA #$4 STA multisonar poi una volta che raggiunge il valore 00111000 devo riazzerarla... Come lo verifico ?? Sgalfo ?? ![]() Il comando rmb non è contenuto nel manuale del 68HC11 e lo uso x definire la variabile dopo aver visto qualche altro esempio, ma come si fa a conoscerne il significato e la sintassi esatta ?? Mi servirebbe davvero una bella guida !! ![]() ![]()
__________________
Il mio "bel volo" What goes in, must comes out (Johnny Noxville) ...e ricordati che prima o poi il po-chi gira (Il Maestro) manahmanah |
![]() |
![]() |
![]() |
#12 |
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Giusto per saperlo, quale cross assembler stai usando?
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
![]() |
![]() |
![]() |
#13 |
Senior Member
Iscritto dal: Dec 1999
Messaggi: 251
|
as11 !!
__________________
Il mio "bel volo" What goes in, must comes out (Johnny Noxville) ...e ricordati che prima o poi il po-chi gira (Il Maestro) manahmanah |
![]() |
![]() |
![]() |
#14 | |||
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Quote:
![]() Non posso dire (non lo conosco) se il PCBUG11 è una ciofeca o meno. ![]() Quote:
La Motorola ha dato la gestione dei suoi semiconduttori alla freescale (www.freescale.com). Se vai sul sito, nella sezione "Documentation", ci trovi la documentazione del 68HC11 e del PCBUG11. Inoltre forse troverai utile la pagina "An ASM11 Primer", una introduzione al AS11, dove parla anche del rmb.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|||
![]() |
![]() |
![]() |
#15 |
Senior Member
Iscritto dal: Dec 1999
Messaggi: 251
|
Uhm...
...ho trovato infatti sul manuale CMPA ed ho provato a fare una cosa del genere : Codice:
multisonar rmb 1 multiplex BSET PORTB,multisonar JSR sonarloop ; routine che legge il singolo sonar LDA multisonar ADDA #$4 STA multisonar CMPA %00111000 ; verifico condizione ultimo sonar BNE multiplex ;se non è finito BCLR PORTB,multisonar ;azzero PB3,4,5 RTS Ora dò un'occhiata al tuo link, grazie !! -------> RMB : The memory is reserved but is not initialized. Ciò significa che dopo che definisco la variabile tramite Codice:
multisonar rmb 1 Codice:
bclr multisonar, %11111111
__________________
Il mio "bel volo" What goes in, must comes out (Johnny Noxville) ...e ricordati che prima o poi il po-chi gira (Il Maestro) manahmanah Ultima modifica di rasega : 22-11-2005 alle 11:31. |
![]() |
![]() |
![]() |
#16 | |||
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Poi fai la comparazione con 00111000 e se è uguale esci dal loop. Certo, ma così nel loop non ci passerà mai con multisonar a 00111000. Cioè ti perdi "un giro" del loop. Quote:
Quote:
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|||
![]() |
![]() |
![]() |
#17 | ||
Senior Member
Iscritto dal: Dec 1999
Messaggi: 251
|
Quote:
E' vero, dovrei anche resettare a zero gli altri, conviene allora fare un BCLR di quei 3 bit e poi scriverci sopra multisonar ?? Quote:
invece di confrontare multisonar con 00111000 la confronto con 01000000 ![]() ![]()
__________________
Il mio "bel volo" What goes in, must comes out (Johnny Noxville) ...e ricordati che prima o poi il po-chi gira (Il Maestro) manahmanah |
||
![]() |
![]() |
![]() |
#18 | ||
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Quote:
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
||
![]() |
![]() |
![]() |
#19 |
Senior Member
Iscritto dal: Dec 1999
Messaggi: 251
|
Grazie !!
Comunque se hai consigli per migliorare la performance del software son ben accetti visto che il robot ha già il collo tirato ed io con l'assembler sono alle prime armi !! ![]()
__________________
Il mio "bel volo" What goes in, must comes out (Johnny Noxville) ...e ricordati che prima o poi il po-chi gira (Il Maestro) manahmanah |
![]() |
![]() |
![]() |
#20 |
Senior Member
Iscritto dal: Dec 1999
Messaggi: 251
|
Debugging !!
Torno all'attacco con dei problemi nel debugging,
potete darmi una mano please ?? Non riesco a capire che errori mi riporti l'assembler, anche perchè nel manuale non riporta il codice di questi errori : nel manuale gli errori son del tipo "error Axxxx", mentre nel file .lst che l'assemblatore crea mi ritrovo "error xxx", in particolare "error 235" e "error 250" ![]() ![]() Grazie
__________________
Il mio "bel volo" What goes in, must comes out (Johnny Noxville) ...e ricordati che prima o poi il po-chi gira (Il Maestro) manahmanah |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 05:00.