Microcontrollerbesturingen.

© Harry Broeders.

Deze pagina is bestemd voor studenten van de THRijswijk.

Liquid Cristal Display.

De 68HC11 EVM kasten van de THRijswijk zijn uitgerust met een LCD display. Dit display bevat 4 regels van elk 20 karakters. Dit display wordt ook gesimuleerd door THRSim11 (menu View, THRSim11 IO box).

LCD registers.

Dit LCD display kan in de THRSim11 simulator beschreven worden door middel van twee 8 bits registers. Deze registers zijn memory mapped in de geheugenruimte van de 68HC11.

LCD Register Adres
LCD Data register $3000
LCD Control register $2000

Je kunt het display rechtstreeks via deze geheugenlokaties aansturen. Als je een printbaar ASCII karakter naar het LCD data register schrijft dan wordt dit karakter op het display geschreven. Bijvoorbeeld:

	LDAA	#$41
	STAA	$3000
	STAA	$3000

Geeft het volgende resultaat:

De volgende niet printbare karakters hebben in de THRSim11 simulator een speciale betekenis als je ze naar het LCD data register schrijft:

Karakter Betekenis
$00 Maak het display schoon.
$0D Ga naar de eerste positie van de volgende regel.
$05 Vraag de cursorpositie op. De positie kun je inlezen uit het LCD control register. De posities op het display zijn genummerd van linksboven (0) naar rechtsonder (79).
$06 Zet de cursor op een bepaalde positie. De positie moet je opgeven in het LCD control register. De posities op het display zijn genummerd van linksboven (0) naar rechtsonder (79).

Alle andere niet printbare karakters worden in de THRSim11 simulator afgedrukt als een . (punt) behalve $04 en $FF die compleet genegeerd worden.

lcd.inc en lcdsim.inc

In plaats van de LCD registers kun je ook de include files lcd.inc en/of simlcd.inc gebruiken om naar het display te schrijven. Deze include file bevat kant en klare routines waarmee je het display kunt beschrijven. De file lcd.inc moet je gebruiken als je het programma op de EVM kast draait en de file simlcd.inc moet je gebruiken als je het programma met THRSim11 simuleert.

De verschillende routines kun je aanroepen via een subroutine genaamd LCD. Welke routine wordt uitgevoerd wordt bepaald door de inhoud van register B. Zie onderstaande tabel. De labels LCD_INIT, LCD_STRING en LCD_ASK_POS zijn met een EQU in de include file gedefinieerd.

register_B Routine
LCD_INIT_($00) Maak het display schoon.
LCD_STRING_($FF) Schrijf de ASCII string die wordt aangewezen door het X register naar het display. De string moet worden afgesloten door het EOT karakter ($04).
$0x Zet de cursor op een bepaalde positie. Register B bevat het gewenste regelnummer ($01 t/m $04) en het gewenste kolomnummer moet worden opgegeven in register A ($01 t/m $14).
LCD_ASK_POS_($05) Cursorpositie opvragen. Na afloop bevat register B het regelnummer ($01 t/m $04) en bevat register A het kolomnummer ($01 t/m $14).
overige Schrijf dit ASCII karakter naar het display.

Bijvoorbeeld:

	LDAB	#LCD_INIT	; LCD eenmalig initialiseren 
	JSR	LCD
	LDAB	#LCD_STRING	; een regel naar het display
	LDX	#STR		; het start-adres van de tekst-regel
	JSR	LCD		; deze regel afsluiten met het ASCII
	     			; "end of text"-karakter
	JMP	*		; stop

STR	FCC	'Technische'
	FCB	$0D		; $0D Carriage Return=CR=cursor naar 
				; naar het begin van de regel
	FCC	'Hogeschool Rijswijk'
	FCB	EOT

$INCLUDE	'SIMLCD.INC'	; include-file voor de THR simulator
*$INCLUDE	'LCD.INC'	; include-file voor de EVM-kast

Geeft het volgende resultaat:

De file lcd-vb.asm bevat een iets uitgebreider voorbeeldprogramma.