Vai al contenuto
PLC Forum


Zilog Z80


Messaggi consigliati

Inserita:

Scusatemi, ma non dipende da me.

Altervista fa i capricci con i link.

Copiate ed incollate il link in una nuova finestra del browser per visualizzarlo.

Grazie.


Inserita:

Grazie Livio,

infatti avevo pensato di usarne una per i dati ed una per i comandi dell'LCD.

Vorrei utilizzare la libreria per LCD allegata al mio precedente messaggio, come posso modificarla per usarla con lo schema dello Z80 da me proposto?

Grazie.

Inserita:

Vi linko lo schema con la modifica delle due porte per l'utilizzo dell'LCD e con la mappa completa degli indirizzi delle porte I/O.

La porta si chiama LCD-PORT1

Z80-board2

Inserita:

Secondo voi può adare bene scritta in questo modo per poi essere richiamata nel file di gestione dell'LCD?

/*

* Header file for the Z80

* Microprocessor

* build with Z80-board

* made by Luigi Erroi

*/

/* LCD PORT addresses */

sfr at 0x00 LCDDATA;

sfr at 0x01 LCDCTRL;

/* LCD CTRL-PORT bits */

sfr at (LCDCTRL & 0b10000000) RS;

sfr at (LCDCTRL & 0b01000000) RW;

/* LCD DATA-PORT bits */

sfr at (LCDDATA & 0b10000000) LP0;

sfr at (LCDDATA & 0b01000000) LP1;

sfr at (LCDDATA & 0b00100000) LP2;

sfr at (LCDDATA & 0b00010000) LP3;

sfr at (LCDDATA & 0b00001000) LP4;

sfr at (LCDDATA & 0b00000100) LP5;

sfr at (LCDDATA & 0b00000010) LP6;

sfr at (LCDDATA & 0b00000001) LP7;

Inserita:

Non penso sia corretto.

Per darti un'idea io farei così:

/* LCD PORT addresses */
sfr at 0x00 LCDDATA;
sfr at 0x01 LCDCTRL;

//Variabile globale che memorizza
//lo stato dei bit di controllo
unsigned char LCD_Ctrl = 0x03; // RS(bit 0) e EE(bit 1) alti

void LCD_Res_RS() // Azzera RS
{
	LCD_Ctrl &= 0xfe;	// RS = 0
	LCDCTRL = LCD_Ctrl; // Scrive sull'uscita
}

void LCD_Set_RS() // Setta RS
{
	LCD_Ctrl |= 0x01;	// RS = 1
	LCDCTRL = LCD_Ctrl; // Scrive sull'uscita
}

void LCD_Res_EN() // Azzera EN
{
	LCD_Ctrl &= 0xfd;	// EN = 0
	LCDCTRL = LCD_Ctrl; // Scrive sull'uscita
}

void LCD_Set_EN() // Setta EN
{
	LCD_Ctrl |= 0x02;	// EN = 1
	LCDCTRL = LCD_Ctrl; // Scrive sull'uscita
}

// Per scrivere sempre in modalità a 4 bit
// si potrebbe fare così

/****************************************/
/* Write a byte to the LCD (4 bit mode) */
/****************************************/
void LCD_WRITE (unsigned char c)
{
	LCDDATA = c;
	LCD_STROBE();
	LCDDATA = c << 4;
	LCD_STROBE();
	DelayUs(50);
}

Forse esiste un altro modo ma intanto puoi provare così.

Ciao

Inserita:

Grazie Giacomo,

in settimana ultimerò la realizzazione delle schede del progetto e poi ti farò sapere.

Volevo solo chiederti, in modo da capire, perchè non andava bene.

Grazie.

Inserita:

Hai ragione scusa mi sono dimenticato di scriverlo.

sfr at (LCDDATA & 0b10000000) LP0; non va perchè tra parentesi ci deve essere l'indirizzo della porta che è lo stesso per tutti i bit d'uscita. Puoi indirizzare la porta d'uscita non i singoli bit.

Ciao.

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...