Holtek-Assembler

Elektronik-Labor  Projekte   Holtek


Und nun ein Blick auf die Entwicklungsumgebung HT-IDE-3000 mit Assembler und C-Compiler, die man kostenlos herunterladen kann. So eine neue Software braucht immer erst etwas Eingewöhnung. Also habe ich mir die vorhandenen Beispiele angesehen. Da gibt es z.B. ein Assembler-Beispiel HA0009.ASM für ein Lauflicht, allerdings für einen etwas anderen Controller.
;maskoption
;WDT: disabled
;pullhigh: all
;OSC: crystal
;SYSVOLT: 5.000v
;SYSFREQ: 4000KHz
#include ht48r30a-1.inc
;-------------------------------------------------
data .section 'data' ;
count1 db ? ; the buffer of delay
count2 db ? ; the buffer of delay
lamp db ? ;
;--------------------------------------------------------------
code .section at 0 'code'
org 00h
jmp start
start:
mov a,0
mov pac,a ; pa is output port
cpl acc
mov pa,a
mov a,1
mov lamp,a
llamp:
mov a,lamp
cpl acc
mov pa,a
call delay
clr c
rlc lamp
sz lamp
jmp llamp
rrc lamp
rlamp:
mov a,lamp
cpl acc
mov pa,a
call delay
clr c
rrc lamp
sz lamp
jmp rlamp
rlc lamp
jmp llamp
delay proc ;delay subroutine
mov a,8fh
mov count1,a
mov count2,a
d1:
sdz count2
jmp d1
sdz count1
jmp d1
ret
delay endp
end

Die erste Aufgabe sollte es werden, es an den HT46F47E anzupassen. Also wie geht es los? Ein neues Projekt öffnen, dazu gibt es wie in anderen Umgebungen einen kleinen Helfer. Zuerst wählt man einen Namen, den gewünschten Controller und den Programmtyp C oder Assembler.

 




Unter anderem werden die Configuration Options eingestellt, das ist so etwas wie die Fuses beim AVR, also Dinge wie Watchdog, Spannungsüberwachung und besondere Port-Verwendung. Man kann zuerst mal alles in der Grundeinstellung lassen.

 

..
 

Am Ende hat man ein vollständiges Projekt mit einem leeren Quelltext. Darin ist die Include-Datei für den Zielprozessor angegeben und eine data- sowie eine code-section vorbereitet. In den leeren Quelltext wird nun der vorhandene Quelltext eingefügt, dabei aber die Definitionsdatei für den neuen Controller gelassen. Wenn man schon mal mit dem 8051 und mit AVR in Assembler gearbeitet hat, sieht das alles irgendwie bekannt aus.  Im Datenblatt zum Controller findet man die Auflistung der Assemblerbefehle. Es sieht aus, als könnte man damit klarkommen.


 
Der erste Versuch, das Programm zu kompilieren (Build), bringt allerdings eine Menge Fehlermeldungen. Es geht irgendwie um das Label „start:“. Erst nach längerer Suche kam ich darauf, dass der neue Controller über ein Steuerbit mit dem Namen Start im Zusammenhang mit dem AD-Wandler verfügt. Da gibt es also eine Kollision. Ein neuer Name (starten)  für das Label löst das Problem. Das selbe passierrt mit dem Label d1, das in ziel1 umbenannt werden muss.  Das Programm sieht nun so aus:

include HT46F47E.inc
;maskoption
;WDT: disabled
;pullhigh: all
;OSC: crystal
;SYSVOLT: 5.000v
;SYSFREQ: 4000KHz
;-------------------------------------------------
data .section 'data' ;
count1 db ? ; the buffer of delay
count2 db ? ; the buffer of delay
lamp db ? ;
;--------------------------------------------------------------
code .section at 0 'code'
org 00h
jmp starten
starten:
mov a,0
mov pac,a ; pa is output port
cpl acc
mov pa,a
mov a,1
mov lamp,a
llamp:
mov a,lamp
cpl acc
mov pa,a
call delay
clr c
rlc lamp
sz lamp
jmp llamp
rrc lamp
rlamp:
mov a,lamp
cpl acc
mov pa,a
call delay
clr c
rrc lamp
sz lamp
jmp rlamp
rlc lamp
jmp llamp
delay proc ;delay subroutine
mov a,8fh
mov count1,a
mov count2,a
ziel1:
sdz count2
jmp ziel1
sdz count1
jmp ziel1
ret
delay endp
end
So funktioniert es nun. Am Ende gibt es trotzdem eine Fehlermelduing, aber nur, weil die Hardware für den Emulator nicht angeschlossen ist. Interessant ist die die entstandene Speicherbelegung, die man bei Bedarf in der MAP-Datei nachsehen kann, wenn man diese in den Projekt-Settings ankreuzt. 


Holtek (R) Cross Linker Version 8.3
Copyright (C) HOLTEK Semiconductor Inc. 2002-2003. All rights reserved.

...

ROM Usage Statistics
Size Used Percentage
0800h 0022h 1%

RAM Usage Statistics
Bank Size Used Percentage
00h 0040h 0003h 4%
01h 0001h 0000h 0%
Total 0041h 0003h 4%

...
Total 0 error(s), Total 0 Warning(s)
 
Also nur 34 Bytes! So weit, so gut. Bisher allerdings nur theoretisch, denn den Chip habe ich noch nicht. Ob es wirklich funktioniert, wird sich bald zeigen.

Download: Projektverzeichnis asmtest1: Asmtest1.zip


Elektronik-Labor  Projekte   Holtek