.Welcome to Artek

SX
FAQ e Supporto

.

 


Home


Prodotti

Accqu-Data
E.E. Tools
ETC
Jobmatch
MP3 Player
Parallax Inc
Radio Lab
Si-Prog
StampInClass
SX-Tech
TiePie

Tutti a Stock


Condizioni di vendita

Garanzia
Pagamenti

carte_di_credito.gif (2435 byte)


Miscellanea

News
Press
Email

Servizi Free

Auto Link
Mailing List
Forum
Super Map
Trova


 

800*600
64K colori

. .
 

SXTech_minibanner.jpg (2611 byte)

 

 

l supporto tecnico a SX-Key della Parallax è fornito mediante email a sxtech@parallaxinc.com. A domanda riceverete risposta  e sarà messa a disposizione di altri utenti di SX-Key. Prima di inviare una email consultate attentamente  la presente pagina.

Domanda #1: Che collegamenti sono necessari per programmare e mettere a punto il mio codice nel chip SX?

Domanda #2: Come si può far funzionare il Clock a bordo della SX-Key?

Domanda #3: Che differenza esiste fra la SX-Key e la SX-Blitz?

Domanda #4: Posso fare funzionare  un codice esistente 5X nel circuito integrato di SX?

Domanda #5: Il mio programma contiene una tabella di salto (tabella di look-up). E' usato per funzionare bene ma ora che è finito non funziona per quasi tutto il tempo. Che cosa è errato?

Domanda #6: Una delle caratteristiche del programma sxdemo per la scheda demo di SX è la conversione ANALOGICO-DIGITALE per mezzo di un singolo pin I/O e 3 elementi passivi (ci sono 2 canali A/D). Potete fornire teoria e codice di base?

Domanda #7: Stò ormai cominciando a programmare ed utilizzare l'SX-Key, ho cominciato dalla documentazione e mi è sembrato che debba in pratica imparare quasi tutto l'assembler specifico Parallax rispetto ai codici Microchip citati nei datasheet della Scenix. Per mancanza di tempo ho dovuto ripiegare a programmare dei PIC utilizzando l'assembler microchip e sono un pò riluttante nell'incamminarmi sulla curva di apprendimento del "nuovo "set di istruzioni.  Corretto? Devo usare i mnemonici di Parallax?

Domanda #8: Che cosa accade quando state elaborando un' interrupt e accade un' altro interrupt? Dalla lettura della documentazione, sembra che il gestore degli interrupt, che  pensa ad occuparsi delle sorgenti multiple di interrupt, si suppone debba controllare tutti i possibili interrupt prima di togliere il controllo al gestore. Il fatto è, che il circuito integrato SX sia abbastanza capace " di perdere " un interrupt anche sotto il controllo del gestore. Nel mio sistema del servocomando vi è una necessità per l'SX di generare impulsi estremamente esatti mentre simultaneamente deve rispondere ad un controller esterno che trasmette gruppi di dati per posizionare ciascun servo 24 - 30 volte al secondo.


Domanda #9: Mi sono reso conto che ci sono modi difficili e modi migliori per creare la struttura dei programmi. Mentre il manuale del sistema di sviluppo di SX-Key mi dice molte cose, noto che data la mia poca esperienza e la scarsa strutturazione dei miei programmi entro in difficoltà. Non sono un debuttante in fatto di programmazione, ma potrei avere bisogno di qualche consiglio. Per esempio, quando provo ad usare le procedure " di CHIAMATA ", ho bisogno spesso di qualcosa tipo una funzione Push / Pop e ristabilire i registri di W, di FSR e di STATUS che funzionano da qualsiasi pagina di istruzione. Ho provato alcune volte per farne uno, ma ho delle difficoltà poiché ho soltanto una coppia di registri globali.

Domanda #10: Da non molto ho comprato 25 SX18AC/DP dalla vostra azienda ed uso la rev. E di SX-key per programmarli. Ogni circuito integrato può essere programmato, ma su nessuno riesco a fare il debug. Perchè?

Domanda # 11: Riguardo alla domanda # 6, descrivete un metodo per
immettere su un ingresso, un segnale analogico compreso fra 0-5 volt con risoluzione di 8  bit. Può l' accumulatore utilizzato in questo esempio tenere 4095 campioni, fornendo un risultato ANALOGICO-DIGITALE a 12 bit ?

Domanda   #12: Nell'assembler SX key esiste un trucco (una macro o altro...) per fare in modo che l'assembler aggiunga l'istruzione PAGE solo quando necessario nei riferimenti forward ? Amo SX-KEY e l'IDE   ma stò scoprendo che le istruzioni/macro CJXX non sono facili se mettono l'istruzione PAGE tra lo skip ed il jmp quando si utilizzano riferimenti @address per la sicurezza di programmi più grandi di una pagina,per esempio ecco il listato seguente.


RISPOSTE:

 

Domanda # 1: Che collegamenti sono necessari per programmare e mettere a punto il mio codice nel chip SX?

I collegamenti Vdd, Vss, OSC1 e OSC2 devono essere fatti fra la SX-Key ed il chip SX. I 5 VCC devono essere collegati a Vdd per alimentare il circuito integrato di SX e la SX-Key. Inoltre, la GND del gruppo di alimentazione deve essere collegata al Vss di SX e della SX-Key. Il segnale del clock può essere fornito dalla SX-Key

 


Domanda # 2: Come si può far funzionare il Clock  a bordo della SX-Key?

In primo luogo selezionare la frequenza; potete o specificarli nel vostro codice sorgente usando la direttiva "freq" o potete cliccare sopra Run>Clock nel software di SX-Key ed usare semplicemente la slide-bar per selezionare la frequenza voluta.

 


Domanda # 3: Che differenza c'è fra lo SX-Key e lo SX-Blitz?

La SX-Key è il nostro kit completo, programmatore ed emulatore per i chip SX. Presenta a bordo un Clock per far funzionare il chip SX a qualsiasi frequenza fra 400KHz e 110MHz. Lo SX-Blitz è il nostro programmatore a basso costo per i circuiti integrati SX. Anche se usa lo stesso software dello SX-Key, non può emulare, né può generare un segnale di Clock per fare funzionare l'SX.

 


Domanda # 4: Posso fare funzionare un codice esistente '5X nel chip SX?

Sì. Quando nel software di SX-Key si clicca sopra Run>Device. Una volta nel menu device, cliccare sopra il bottone "Load Hex" e specificare il file .hex o .obj che desiderate caricare. Verificare che il settaggio del fusibile sia giusto quindi cliccare sopra "Program".

 



Domanda # 5: Il mio programma contiene una tabella di salto (tabella di look-up). E' usato per funzionare bene ma ora che è finito non funziona per quasi tutto il tempo. Che cosa è errato?

Questo problema può accadere per un limite architettonico dello SX. L' istruzione 'JMP PC+W ' è realmente una istruzione 'add PCL,w'. Considerate che sia 'W ' che 'PCL ' sono entrambi registri a 8-bit. Il funzionamento è simile a questo:

Main:


inc Index
csb Index,#5
clr Index
call Table
mov RB,w
goto Main
;piccolo programma che indirizza attraverso
;tabelle
Table:
mov w,Index
jmp PC+W
retw 0C5h
retw 1Ch
retw 128
retw 0FFh
;subroutine tabella 'chiamata' dal main

Considerare il suddetto codice; un sottoprogramma chiamato dal codice principale. Supponete ora che il valore corrente dell' indice sia 3 (che è caricato in W) ed il valore corrente del contatore di programma (PC) all' istruzione PC+W sia 0F0h. Così appena viene eseguita l' istruzione jmp PC+W ecco che cosa accade:

PC = PC + W + 1 'Equazione
PC = F0 + 3 + 1 'Equazione con dati

PC = F4 'Equazione risolta

Così il valore 0F4h è caricato nel PC e 0FFh è copiato nel registro W e
l' istruzione retw è eseguita nel ritorna al main. Ciò è come funziona una piccola tabella. Conoscendo questo, è facile capire quando si sviluppa il formato di una  tabella, perchè a volte non funzionano.

Considerate lo stesso esempio sopra salvo che ci sono 64 byte nella tabella. Supponete che il valore corrente dell' indice sia 20h e che il valore corrente del contatore di programma (PC) nell' istruzione jmp PC+W sia 0F0h. Così, quando
l' istruzione jmp PC+W viene eseguita, ecco che cosa accade:


PC = PC + W + 1 'Equazione
PC = F0 + 20 + 1 'Equazione con i dati (esadecimali)
PC = 110  'Equazione risolta

 

Tuttavia, il registro PC è soltanto di otto bit e non può tenere 110h così il valore risultante nel PC è 10h. Quindi i salti nel vostro programma saranno bizzarri. La morale della storia è che dovreste creare tabelle di salto con contorni esadecimali uniformi quali 200h, 400h, 600h. Ciò è fatto facilmente premendo i tasti Ctrl-L all'interno dell' ambiente di software di SX-Key. Ctrl-L induce l' assemblatore incorporato a generare un list-file. Il file-list mostra tutto ciò che riguarda il vostro codice sorgente, il codice hex generato e le posizioni in cui il codice hex risiede all'interno del chip.

 

Per correggere il suddetto esempio, aggiungere semplicemente un' istruzione 'org' per individuare la tabella di salto ad un contorno della pagina come indicato sotto. Ed assicurarsi che usate il comando 'Page' se siete tra una pagina e l'altra.

Main:









Table:

inc Index
csb Index, #5
clr Index
page 200h
call Table
mov RB,w
page $
goto Main
org 200h

mov w,Index
jmp PC+W
retw 0C5h
retw 1Ch
retw 128
retw 0FFh
....
;piccolo programma che indicizza attraverso tabella


;setup per long-call


;cleanup per long-call



;subroutine tabella chiamata dal main

 



Domanda #6: Una delle caratteristiche del programma sxdemo per la scheda demo di SX è la conversione ANALOGICO-DIGITALE per mezzo di un singolo pin I/O e 3 elementi passivi (ci sono 2 canali A/D). Potete fornire teoria e codice di base?

Per spiegare questo guarda lo schema dell' ingresso/uscita analogici ed i relativi frammenti di codice usando l' illustrazione indicata sotto.



Dati: qualsiasi tensione (0-5VDC) può essere presente sull' entrata analogica, la soglia di un pin di I/O di SX configurato come input è di 2,5 VCC, RC.1 (il pin di sense) è configurato come input, RC.0 (il pin di risposta) è configurato come uscita.

Qui ci sono i frammenti pertinenti di codice:

mov
not
and
or
mov

sb
inc
mov
inc
snz
mov
snz
clr
w,>>rc
w
w,#%01010000
port_buff,w
rc,port_buff

port_buff.4
adc0_acc
w,adc0_acc
adc0_count

adc0,w

adc0_acc
;adc0/adc1
;
;complemento ingressi uscite
;
;aggiornamento dei pins

;adc0
;se è alto, inc acc
;pone acc in w
;fatto?
;se si, aggiorna adc0
;
;se si, resetta acc
;

Ecco come funziona:

Il pin di sense è letto (sarà o 0 o 1) ed il complemento del segnale è messo sul pin di risposta. Ciò viene eseguito 255 volte per un campione inducendo la tensione media sul pin di sense ad essere di 2,5 volt. Un accumulatore viene incrementato ogni volta che il pin di sense viene letto come un 1. Dopo 255 campioni,
l' accumulatore contiene un numero che è il risultato ANALOGICO-DIGITALE 8-bit!

Avete bisogno di ulteriori spiegazioni? Immaginate che 5 VCC siano presenti
sull' entrata analogica. Qesto indurrebbe il pin di sense ad essere letto come 1. Il software ritornerebbe il complemento di questo (0) sul pin di risposta e
l' accumulatore verrebbe incrementato.
Il condensatore, C1, comincia a scaricarsi un poco. Le iterazioni successive avrebbero lo stesso comportamento fino a che tutte e 255 iterazioni sono eseguite, la carica media del condensatore settata a 2,5 VCC e 255 (1s) viene accumulata. Voila! La rappresentazione per 5VDC è 255!

 

Ancora di più? Immagina che 0 VCC sono presenti sull' entrata analogica. Questo indurrebbe il pin di sense a essere letto come 0. Il software produrrebbe il complemento di questo (1) sul pin di risposta e l' accumulatore non verrebbe incrementato. Il condensatore, C1, comincia a caricarsi un poco. Le iterazioni successive avrebbero lo stesso comportamento fino a che tutte e 255 le ripetizioni non accadono, la carica media del condensatore diventa 2,5 VCC e 0 (1s) è stato accumulato. Voila! La rappresentazione per 0VDC è 0!

Tenendosi al corrente di come deve lavorare per effettuare una carica media su C1 di 2,5 VCC, l' SX può determinare la grandezza della tensione (0-5) sul pin di ingresso analogico.

Qual'è il tempo di esecuzione ?
La velocità di esecuzione dipende dalla periodicità di interruzione. Poiché il programma SX demo interrompe ogni 163 cicli di Clock e funziona a 50 Mhz, lo useremo come esempio. Ogni istruzione prende 1 ciclo di clock, coscicchè semplicemente prendiamo il reciproco di 50 megahertz e scopriamo il tempo necessario per eseguire un' istruzione:

1/50.000.000 = 20 di nanosecondi (nS)

allora moltiplicano il tempo di istruzione per il numero di istruzioni fra le interruzioni per trovare la periodicità dell' interruzione di RTCC.

163 cicli di Clock * 20 nSecs = 3,26 microsecondi (uS)

Per concludere, moltiplicando la periodicità di interruzione per il numero di interruzioni richieste, troveremo il tempo di conversione per una conversione completa.

3,26 uSecs * 256 interruzioni = 834,56 uSecs

 

 



Domanda #7: Stò ormai cominciando a programmare ed utilizzare l'SX-Key, ho cominciato dalla documentazione e mi è sembrato che debba in pratica imparare quasi tutto l'assembler specifico Parallax rispetto ai codici Microchip citati nei datasheet della Scenix. Per mancanza di tempo ho dovuto ripiegare a programmare dei PIC utilizzando l'assembler microchip e sono un pò riluttante nell'incamminarmi sulla curva di apprendimento del "nuovo" set di istruzioni.   Corretto? Devo usare i mnemonics di Parallax?

 

Per rispondere alla vostra domanda: per usare lo SX-Key, SX-Blitz; Credo così. Considerate che i mnemonici di Parallax possono essere divisi in due gruppi:

1) comandi a istruzione singola

2) comandi a istruzione multipla

Tutti i comandi a istruzione multipla possono essere effettuati con i singoli comandi di istruzione. Esempio:

mov

mov
mov FSR,w
mov FSR,#$0C

w,#$0C
; metodo a istruzioni multiple

; metodo a istruzione Singola

Così, incollando comandi a istruzione singola può rendere l'apprendimento un poco più facile. In più, mentre ci sono parecchie istruzioni 'mov' con il linguaggio Microchip, ce ne è soltanto uno da imparare con Parallax:

mov Destinazione, sorgente

Per molti , i mnemonici di Parallax rendono il vostro codice molto più facile da leggere e le ramificazioni dovute usando i mnemonici a istruzioni multiple si trasformano rapidamente nella seconda natura. Anche la Microchip ha adottato vari dei nostri mneominci nel corso degli ultimi anni. Dopo tutto piuttosto digitereste:


btfsc

or

snc
3,0




;passa al prossimo cmd se carry è vuoto



;passa se not carry

Inoltre, alcuni dei comandi multipli di istruzioni sono molto convenienti. Prendete, per esempio, l' istruzione 'CJA'. Avreste bisogno di quattro comandi discreti per effettuare questo comando. Questo significa che avete quattro volte la possibilità di includere errori di logica e di tipo.

movf
subwf
btfss
goto

or

cja
fr1,0
fr2,0
3,0
Address



fr1,fr2,Address
;
Compara per sottrazione
; se il flag di carry non è settato
; salta all'indirizzo



;Compara, salta se fr1>fr2

I mnemonici dell' assemblatore sono stati ideati sin dal 1990 e sono stati certamente provati.


Domanda #8: Che cosa accade quando state elaborando un' interrupt e accade un' altro interrupt? Dalla lettura della documentazione, sembra che il gestore degli interrupt, che  pensa ad occuparsi delle sorgenti multiple di interrupt, si suppone debba controllare tutti i possibili interrupt prima di togliere il controllo al gestore. Il fatto è, che il circuito integrato SX sia abbastanza capace " di perdere " un interrupt anche sotto il controllo del gestore. Nel mio sistema del servocomando vi è una necessità per l'SX di generare impulsi estremamente esatti mentre simultaneamente deve rispondere ad un controller esterno che trasmette gruppi di dati per posizionare ciascun servo 24 - 30 volte al secondo.

Per ulteriori informazioni, date un'occhiata al sistema di sviluppo di SX-Key alla sezione manuale intitolata "disabilita interrupt automatici". Gli Interrupt che "arrivano" mentre l' SX sta già elaborando un'altro interrupt sono ignorati. Nel migliore dei casi, il programmatore dovrebbe provare a strutturare il codice in maniera che non sia possibile per gli interrupt di coincidere. Realisticamente, questo non è sempre possible


Per esempio, considerate due sorgenti di interrupt: RTCC e RB0 ed ISR che attualmente sta assistendo il roll-over di RTCC. Se disabilitate gli interrupt regolando il bit di RTI in cima alla procedura di servizio di interrupt, l' interruzione seguente su RB0 sarà accodata. Dovete abilitare gli interrupt annullando il bit di RTI appena prima la conclusione della vostra procedura di servizio di interrupt. Se l' interrupt RB0 arriva prima che gli interrupt siano disabilitati in cima alla procedura di servizio di interrupt, quell' interrupt sarà ignorato. In questa applicazione particolare, può essere conveniente controllare semplicemente il registro in attesa prima del ritorno dalla sezione sistematica di servizio di interrupt che maneggia l' interrupt di roll-over di RTCC.

Per quanto fatto, forse il metodo migliore dovrebbe essere di avere un' interrupt (RTCC) ad un alto tasso ed integrare le procedure seriali di comunicazione e le procedure per gli impulsi ai servo. In questo modo, i vostri servi riceverebbero quasi sempre impulsi precisi e l' errore possibile delle procedure seriali di comunicazione potrebbe essere misurato e gestito facilmente. Questa tecnica descrive come abbiamo effettuato la comunicazione seriale e le procedure del temporizzatore nel programma di SXDemo.src (disponibile da http://www.parallaxinc.com). Tenete presente: più alto è il tasso di interrupt, più basso l' errore possibile.




Domanda #9: Mi sono reso conto che ci sono modi difficili e modi migliori per creare la struttura dei programmi. Mentre il manuale del sistema di sviluppo di SX-Key mi dice molte cose, noto che data la mia poca esperienza e la scarsa strutturazione dei miei programmi entro in difficoltà. Non sono un debuttante in fatto di programmazione, ma potrei avere bisogno di qualche consiglio. Per esempio, quando provo ad usare le procedure " di CHIAMATA ", ho bisogno spesso di qualcosa tipo una funzione Push / Pop e ristabilire i registri di W, di FSR e di STATUS che funzionano da qualsiasi pagina di istruzione. Ho provato alcune volte per farne uno, ma ho delle difficoltà poiché ho soltanto una coppia di registri globali.

  

Se il vostro programma è molto piccolo, potete scriverli senza considerazione della  architettura. L' assemblatore non darà problemi nell'assemblaggio, eccetto gli errori logici, probabilmente funzionerà. Comunque durante lo sviluppo del programma, potete espandere nella metà superiore d'una pagina per ricevere gli errori delle routine che risiedono nella metà superiore della pagina. Allora pensate di organizzare il vostro codice per individuare i sottoprogrammi nella metà inferiore ed il codice principale nella metà superiore, voila! Funziona ancora. Ma, soltanto fino a chè il vostro codice si sviluppa ancora un poco e, senza avvertimenti
dall' assemblatore, un cambiamento secondario può causare il crash del programma! Questo ciclo continua fino a che il programmatore non rileva il successo o il guasto. Il primo programma grande può essere un viaggio arduo nel migliore dei casi.

 

Un modo migliore è quello di cominciare con una struttura in mente prima che la codificazione cominci. La struttura assicura che l' assemblatore non dia problemi forzandovi a considerare l' architettura dello SX prima che i problemi si evolvano. La struttura forza l' assemblatore a generare i messaggi di errore quando il codice si sviluppa oltre la portata o la gamma progettata, quindi avvisando in anticipo il programmatore ed evitando il cane che si morde la coda.

 

Questa è una lista di situazioni che il programmatore puo' considerare quando scrive un programma per lo SX.:

1. Quattro pagine separate - non attraversabili facilmente. L' incrocio della pagina non è automatico e deve essere ottenuto esplicitamente.

2. Due metà per pagina - dovrebbero essere usate differentemente. Poiché i sottoprogrammi devono essere situati nella metà inferiore di tutta la pagina, ha il significato che il codice principale dovrebbe essere nella metà superiore.

3. 1 + 2. Poiché essenzialmente abbiamo quattro zone per il codice principale e quattro zone per i sottoprogrammi, il programmatore dovrebbe pensare al suo programma in questi termini.

Questi sono alcuni concetti vaghi, che lasciano intravedere la struttura. I commenti richiamano il programmatore dove disporre il codice.

		device	SX28L
		reset	Initialize	'allo start, va alla routine di Initialize
		freq	4_000_000
		org	8	'Start dello spazio RAM
Temp1	ds	1
Temp2	ds	1
;***************************************************************************
ISR		org	000h	'Start dello spazio codice
		inc	Temp1	'prima la routine di gestione Interrupt
		reti
;***************************************************************************
AddEmUp	add	Temp1,Temp2 	;inserire qui le subroutines usate dal 
		ret		;codice main di Page0 
;***************************************************************************
Initialize	clr	Temp1		;inserire il codice di boot qui.
		clr	Temp2
;***************************************************************************
Page0				;inserire qui il codice main per page0
		call	@SubTwo	;chiamata Far
		call	AddEmUp	;subroutine locale
		page	200h
		jmp	Page1
;***************************************************************************
SubTwo	org	200h		;inserire subroutines usate dal codice main di page1.
		dec	Temp1	
		dec	Temp2	
		retp		;istruzione retp - ora è facile il richiamo altre pagine.
;***************************************************************************
Page1				;inserire qui il codice main per page1
		call	@AddEmUp ;chiamata(usando ret)
		page	200h		;
		call	SubTwo	;chiamata locale
		page	400h
		jmp	Page2
;***************************************************************************
AddTwo	org	400h		;inserire qui le subroutines usate dal
		inc	Temp1	;codice main di page2.
		inc	Temp2
		retp
;***************************************************************************
Page2				;inserire qui il codice main per la page1
		call	AddTwo
		page	600h
		jmp	Page3
;***************************************************************************
DivTwo	org	600h		;inserire qui le subroutines usate dal
		clc		;codice main di Page3 .
		rr	Temp2
		ret
;***************************************************************************
Page3				;inserire qui il codice main per la page3
		call	DivTwo
		page	000h
		jmp	Page0
;***************************************************************************

 

Seguite il codice dall' etichetta di inizializzazione affinchè l' SX cominci l'esecuzione dopo l'accensione. La subroutine 'do nothing' mostra le loro posizioni relative, il modo adeguato di chiamarle ed il modo adeguato di cancellare dopo la chiamata, se necessario. Notare le differenze nel modo in cui i sottoprogrammi sono maneggiati quando usano un' istruzione 'retp ' (come in 'AddTwo') in contrasto alla istruzione 'ret' in tutti gli altri sottoprogrammi.

Oltre a queste informazioni, bisogna prendere precauzioni quando si usano le tabelle di salto, esse sono richieste tipicamente per essere organizzate unformemente entro i limiti. In questo caso un altro metodo può essere   usato chiamto 'jump Table' o tabella di salto.

La 'tabella di salto ' è utile quando ottenete il messaggio di errore, "destination address must be in lower half of page", "l'indirizzo di destinazione deve essere nella metà inferiore della pagina" e non c'è più spazio nella metà inferiore della pagina. Per questo dovete soltanto ricordare che le chiamate hanno soltanto questi limiti e non salti. Conoscendo questo, la chiamata ai sottoprogrammi può essere riscritta cosi':

		org	000h
_AddEmUp	jmp	AddEmUp
_DivTwo	jmp	DivTwo
_AddTwo	jmp	AddTwo
_SubTow	jmp	SubTwo
		org	100h	;Subroutines nella meta' sup. della pagina
;***************************************************************************
AddEmUp	add	Temp1,Temp2
		ret
;***************************************************************************
DivTwo	clc
		rr	Temp2
		ret
;***************************************************************************
AddTwo	inc	Temp1
		inc	Temp2
		retp
;***************************************************************************
SubTwo	dec	Temp1
		dec	Temp2
		retp
;***************************************************************************


Spesso W ed FSR sono usati per passare argomenti a e dal sottoprogramma ed il codice principale. La maggior parte della gente non utilizza il registro di STATUS per questo poiché  tante istruzioni alterano il contenuto. Considerate una tecnica in cui chiamereste alcuni registri globali come Temp1, Temp2, ecc. Usate questi per passare variabili a e dai sottoprogrammi, per tenere i valori di interim e i contatori di ciclo.

Usando questa tecnica puoi conservare RAM poichè (Temp) può essere riutilizzato

 




Domanda #10: Da poco ho comprato 25 SX18AC/DP dalla vostra azienda ed uso la rev. E di SX-key per programmarli. Ogni circuito integrato può essere programmato, ma su nessuno riesco a fare il debug. Perchè?

Alcuni vecchi SX non supportano il debug. I vecchi datecodes sono numeri a quattro cifre. I chip SX con i datecodes prima dei 9810 non supportano il debug.
I nuovi datecodes sono in formato AAXXXXAB e occrre usare SXKey28L.exe.

I nuovi chip hanno una disposizione differente del fusibile e devono essere programmati con il nuovo software. Gli stessi SX-Key lavorano sia con i vecchi che i nuovi stili ma dovete usare il software corretto per il chip SX che state usando. Il datecode vecchio stile è nel formato XXXX e dovete usare SXKey.exe. Il nuovo datecode è nel formato AAXXXXAB e dovete usare SXKey28L.exe.

 


Domanda #11: Riguardo alla domanda # 6, descrivete un metodo per
immettere su un ingresso, un segnale analogico compreso fra 0-5 volt con risoluzione di 8  bit. Può l' accumulatore utilizzato in questo esempio tenere 4095 campioni, fornendo un risultato ANALOGICO-DIGITALE a 12 bit ?

Esso  può essere fatto. Avrete bisogno di ' creare ' registri a 12-bit concatenando due registri a otto bit insieme. Esempio:

adc_accum ds 2

inc adc_accum snz inc adc_accum+1

Dovete controllare se c'è ' un roll-over ' esaminando il dodicesimo bit (che è il quarto bit di adc_accum+1). Una volta che un roll_over accade, dovete cancellare entrambi i registri poiché non sarebbe più fatto inerentemente.

 


Domanda #12:Nell'assembler SX key esiste un trucco (una macro o altro...) per fare in modo che l'assembler aggiunga l'istruzione PAGE solo quando necessario nei riferimenti forward ? Amo SX-KEY e l'IDE  ma stò scoprendo che le istruzioni/macro CJXX non sono facili se mettono l'istruzione PAGE tra lo skip ed il jmp quando si utilizzano riferimenti @address per la sicurezza di programmi più grandi di una pagina,per esempio ecco il listato seguente:

 

CJA reg1, reg2, @label1 generates

CJAreg1, reg2, @label1 generates

MOV W, reg1
MOV W, reg2-W
SC
PAGE @label1
JMP @label1

Il quale allora salta in entrambi  i casi e può saltare alla pagina errata piuttosto che:

MOV W, reg1
MOV W, reg2-W
PAGE @label1
SC
JMP @label1

questo è quello che dovrebbe essere generato. Attualmente l'istruzione PAGE dovrebbe essere automaticamente aggiunta solo quando il sorgente ed il target sono su differenti pagine. Ho fatto i seguenti cicli for repeat until ma l'if then appare impossibile senza fare l'Hardcoding, l'istruzione PAGE come qualsiasi riferimento a label di forward genera un errore: undefined symbol. Ho provato l'SXKey 52 v1.12 con la rev. E/F, l'SXKey 28L v1.07 con la revi E, l'SXKey 28 v1.07 con la rev E con gli stessi risultati.....

 

eq equ0
lt equ1
ne equ2
gt equ3

repeat MACRO
RepeatLabel= $
ENDM

until MACRO 3
expand
stc
movw,\1
movw,\3-w
targetPg = (RepeatLabel)/$200
basePg = ($+2)/$200
noexpand
IF (RepeatLabel)/$200 <> ($+2)/$200
expand
page RepeatLabel
noexpand
ENDIF
IF \2 = eq
expand
sz
noexpand
ENDIF
IF \2 = ne
Expand
snz
noexpand
ENDIF
IF \2 = lt
expand
snc
noexpand
ENDIF
IF \2 = gt
expand
sc
noexpand
ENDIF
expand
jmp RepeatLabel
noexpand
ENDM

ifthenMACRO 4
expand
stc
movw,\1
movw,\3-w
page \4
noexpand
IF \2 = eq
expand
sz
noexpand
ENDIF
IF \2 = ne
Expand
snz
noexpand
ENDIF
IF \2 = lt
expand
snc
noexpand
ENDIF
IF \2 = gt
expand
sc
noexpand
ENDIF
expand
jmp \4
noexpand
ENDM

la seguente risposta è un piacere da parte di Erisc Smith. Attualmente ogni volta che l'SX prova a bypassare un'istruzione PAGE o BANK egli bypassa anche l'istruzione successiva. Questo non è documentatao negli ultimi datasheet; Loren Blaney ha scoperto ciò per caso. Comunque è tutto riportato nel manuale SX corrente.

 

[Home] [Programma Universitario] [Tools di sviluppo] [SX Chips e Risuonatori] [Supporto] [Tutorial] [Download] [Ordini] [Links]

 

 

.


Artek Electronic Solutions S.n.c.
Via E. Malatesta, 16 - 40026 - Imola (BO) ITALY
Tel. +39 0542 / 643192 - Fax:+39 0542 / 688405
Copyright © 1999 Artek Electronic Solutions S.n.c. - www.artek.it - Tutti i diritti riservati.
Ultimo aggiornamento il 10-11-99.

Tutti i marchi registrati e i nomi dei prodotti menzionati appartengono ai rispettivi proprietari.
Windows è un marchio registrato della Microsoft Corporation.