Vai al contenuto
PLC Forum


Zilog Z80


baltimora

Messaggi consigliati

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.

Link al commento
Condividi su altri siti


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.

Link al commento
Condividi su altri siti

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;

Link al commento
Condividi su altri siti

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

Link al commento
Condividi su altri siti

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.

Link al commento
Condividi su altri siti

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.

Link al commento
Condividi su altri siti

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...