Holtek C-Compiler

Elektronik-Labor  Projekte   Holtek



Nun soll der C-Compiler ausprobiert werden. Wieder habe ich ein vorhandenes Programm als Ausgangspunkt genommen. Es realisiert eine Verkehrsampel. Auch hier gab es bei der Umstellung auf den andern Controller zunächst kleinere Probleme. Diesmal war die Ursache, dass der ursprünglich eingesetzte Controller mehr Ports hatte als der HT46F47E, Port C musste herausgenommen werden. Hier das angepasste Programm:

#include "HT46F47E.h"

//Traffic Light
//Body: HT48C10-1
//Mask option
//All the mask options use the default value.

const unsigned char table[16]={
0x14, 0x4, 0x14, 0x4, 0x14, 0x4, 0x14, 0x24,
0x41, 0x40, 0x41, 0x40,0x41, 0x40, 0x41, 0x42 };

#pragma vector isr_4 @ 0x4
#pragma vector isr_8 @ 0x8
#pragma vector isr_c @ 0xc

//ISR for safequard
void isr_4(){} // external ISR
void isr_8(){} // timer/event 0
void isr_c(){} // timer/event 1

//initialize registers for safeguard
void safeguard_init(){
_intc = 0;
_tmrc = 0;
_tmr = 0;
_pac = 0xff; //input mode
_pbc = 0xff;

}

//a long time delay
void mydelay(unsigned int times){
while(times--) _delay(65000);
}

void main(){
unsigned char i, j, idx;

safeguard_init();

_pac = 0; //set port A to output port
_pa = 0; //zero port A (all light on)
while(1) {
idx = 0;
for(i=0; i!=2; i++) {
_pa = table[idx];
idx++;
mydelay(8);
for(j=0; j!=6; j++) {
_pa = table[idx];
idx++;
mydelay(1);
}
_pa = table[idx];
idx++;
mydelay(4);
}
}
}
 
So klappt es! Wieder ein Blick auf die Speicherbelegung: Diesmal werden 124 Bytes verbraucht, anscheinend mehr als in Assembler. Aber ein C-Compiler braucht ja am Start etwas mehr, bei wachsenden Programmen aber nicht unbedingt mehr als ein Assembler.


ROM Usage Statistics
Size Used Percentage
0800h 007ch 6%

RAM Usage Statistics
Bank Size Used Percentage
00h 0040h 000ah 15%
01h 0001h 0000h 0%
Total 0041h 000ah 15%
Auch sehr interessant: Der Compiler erzeugt ein Zwischenergebnis in Form eines Assembler-Files. Da kann man bestimmt noch einiges lernen...
#pragma debug scope 1 1
#line 8 "C:\Dokumente und Einstellungen\Burkhard Kainka\Eigene Dateien\HTK_Project\c_test1\c_test1.c"
rombank 0 _table
_table .SECTION INPAGE'CODE'
l_table:
MOV [06h],A
_table:
RET A,20
RET A,4
RET A,20
RET A,4
RET A,20
RET A,4
RET A,20
RET A,36
RET A,65
RET A,64
RET A,65
RET A,64
RET A,65
RET A,64
RET A,65
RET A,66
#line 17 "C:\Dokumente und Einstellungen\Burkhard Kainka\Eigene Dateien\HTK_Project\c_test1\c_test1.c"
__acsr EQU [027H]
__adcr EQU [026H]
__adrh EQU [025H]
__adrl EQU [024H]
__pwm EQU [01aH]
__pdc EQU [019H]
__pd EQU [018H]
__pbc EQU [015H]
__pb EQU [014H]
__pac EQU [013H]
__pa EQU [012H]
__tmrc EQU [0eH]
__tmr EQU [0dH]
__intc EQU [0bH]
__status EQU [0aH]
__tblh EQU [08H]
__tblp EQU [07H]
__pcl EQU [06H]
__acc EQU [05H]
__bp EQU [04H]
__mp1 EQU [03H]
__iar1 EQU [02H]
__mp0 EQU [01H]
__iar0 EQU [00H]
@@isr_4 .SECTION AT 04H 'CODE'
JMP _isr_4
@isr_4 .SECTION 'CODE'
_isr_4 PROC
MOV VA,A
MOV A,[0AH]
MOV VS,A
L1:
#pragma debug scope 2 1 ; 17 "C:\Dokumente und Einstellungen\Burkhard Kainka\Eigene Dateien\HTK_Project\c_test1\c_test1.c"
MOV A,VS
MOV [0AH],A
MOV A,VA
RETI
_isr_4 ENDP
RAMBANK 0 @isr_4
@isr_4 .SECTION 'DATA'
#line 18 "C:\Dokumente und Einstellungen\Burkhard Kainka\Eigene Dateien\HTK_Project\c_test1\c_test1.c"
@@isr_8 .SECTION AT 08H 'CODE'
JMP _isr_8
@isr_8 .SECTION 'CODE'
_isr_8 PROC
MOV VA,A
MOV A,[0AH]
MOV VS,A
L2:
#pragma debug scope 3 1 ; 18 "C:\Dokumente und Einstellungen\Burkhard Kainka\Eigene Dateien\HTK_Project\c_test1\c_test1.c"
MOV A,VS
MOV [0AH],A
MOV A,VA
RETI
_isr_8 ENDP
RAMBANK 0 @isr_8
@isr_8 .SECTION 'DATA'
#line 19 "C:\Dokumente und Einstellungen\Burkhard Kainka\Eigene Dateien\HTK_Project\c_test1\c_test1.c"
@@isr_c .SECTION AT 0cH 'CODE'
JMP _isr_c
@isr_c .SECTION 'CODE'
_isr_c PROC
MOV VA,A
MOV A,[0AH]
MOV VS,A
L3:
#pragma debug scope 4 1 ; 19 "C:\Dokumente und Einstellungen\Burkhard Kainka\Eigene Dateien\HTK_Project\c_test1\c_test1.c"
MOV A,VS
MOV [0AH],A
MOV A,VA
RETI
_isr_c ENDP
RAMBANK 0 @isr_c
@isr_c .SECTION 'DATA'
#line 22 "C:\Dokumente und Einstellungen\Burkhard Kainka\Eigene Dateien\HTK_Project\c_test1\c_test1.c"
@safeguard_init .SECTION 'CODE'
PUBLIC _safeguard_init
_safeguard_init PROC
#pragma debug scope 5 1 ; 23 "C:\Dokumente und Einstellungen\Burkhard Kainka\Eigene Dateien\HTK_Project\c_test1\c_test1.c"
#line 23 "C:\Dokumente und Einstellungen\Burkhard Kainka\Eigene Dateien\HTK_Project\c_test1\c_test1.c"
CLR __intc
#line 24 "C:\Dokumente und Einstellungen\Burkhard Kainka\Eigene Dateien\HTK_Project\c_test1\c_test1.c"
CLR __tmrc
#line 25 "C:\Dokumente und Einstellungen\Burkhard Kainka\Eigene Dateien\HTK_Project\c_test1\c_test1.c"
CLR __tmr
#line 26 "C:\Dokumente und Einstellungen\Burkhard Kainka\Eigene Dateien\HTK_Project\c_test1\c_test1.c"
SET __pac
#line 27 "C:\Dokumente und Einstellungen\Burkhard Kainka\Eigene Dateien\HTK_Project\c_test1\c_test1.c"
SET __pbc
L4:
RET
_safeguard_init ENDP
#line 32 "C:\Dokumente und Einstellungen\Burkhard Kainka\Eigene Dateien\HTK_Project\c_test1\c_test1.c"
@mydelay .SECTION 'CODE'
PUBLIC _mydelay
_mydelay PROC
#pragma debug scope 6 1
#line 32 "C:\Dokumente und Einstellungen\Burkhard Kainka\Eigene Dateien\HTK_Project\c_test1\c_test1.c"
PUBLIC mydelay0
LOCAL mydelay0 DB ? ; times
#pragma debug variable 8 6 mydelay0 times
#pragma debug scope 6 1 ; 32 "C:\Dokumente und Einstellungen\Burkhard Kainka\Eigene Dateien\HTK_Project\c_test1\c_test1.c"
#line 32 "C:\Dokumente und Einstellungen\Burkhard Kainka\Eigene Dateien\HTK_Project\c_test1\c_test1.c"
JMP L7
L6:
#line 33 "C:\Dokumente und Einstellungen\Burkhard Kainka\Eigene Dateien\HTK_Project\c_test1\c_test1.c"
MOV A,03fH
MOV RH,A
MOV A,059H
CALL __DELAYY1
L7:
#line 33 "C:\Dokumente und Einstellungen\Burkhard Kainka\Eigene Dateien\HTK_Project\c_test1\c_test1.c"
MOV A,mydelay0
MOV b0_5,A
DEC mydelay0
SZ b0_5
JMP L6
L5:
RET
LOCAL b0_5 DB ?
_mydelay ENDP
#line 36 "C:\Dokumente und Einstellungen\Burkhard Kainka\Eigene Dateien\HTK_Project\c_test1\c_test1.c"
@MAIN .SECTION 'CODE'
_main PROC
begin:
#pragma debug scope 7 1 ; 39 "C:\Dokumente und Einstellungen\Burkhard Kainka\Eigene Dateien\HTK_Project\c_test1\c_test1.c"
#line 39 "C:\Dokumente und Einstellungen\Burkhard Kainka\Eigene Dateien\HTK_Project\c_test1\c_test1.c"
CALL _safeguard_init
#line 41 "C:\Dokumente und Einstellungen\Burkhard Kainka\Eigene Dateien\HTK_Project\c_test1\c_test1.c"
CLR __pac
#line 42 "C:\Dokumente und Einstellungen\Burkhard Kainka\Eigene Dateien\HTK_Project\c_test1\c_test1.c"
CLR __pa
#line 42 "C:\Dokumente und Einstellungen\Burkhard Kainka\Eigene Dateien\HTK_Project\c_test1\c_test1.c"
JMP L11
L10:
#pragma debug scope 8 7 ; 44 "C:\Dokumente und Einstellungen\Burkhard Kainka\Eigene Dateien\HTK_Project\c_test1\c_test1.c"
#line 44 "C:\Dokumente und Einstellungen\Burkhard Kainka\Eigene Dateien\HTK_Project\c_test1\c_test1.c"
CLR CR2
#line 45 "C:\Dokumente und Einstellungen\Burkhard Kainka\Eigene Dateien\HTK_Project\c_test1\c_test1.c"
CLR CR4
#line 45 "C:\Dokumente und Einstellungen\Burkhard Kainka\Eigene Dateien\HTK_Project\c_test1\c_test1.c"
JMP L16
L13:
#pragma debug scope 9 8 ; 46 "C:\Dokumente und Einstellungen\Burkhard Kainka\Eigene Dateien\HTK_Project\c_test1\c_test1.c"
#line 46 "C:\Dokumente und Einstellungen\Burkhard Kainka\Eigene Dateien\HTK_Project\c_test1\c_test1.c"
MOV A,1
ADD A,CR2
ADD A,OFFSET l_table
CALL l_table
MOV __pa,A
#line 47 "C:\Dokumente und Einstellungen\Burkhard Kainka\Eigene Dateien\HTK_Project\c_test1\c_test1.c"
INC CR2
#line 48 "C:\Dokumente und Einstellungen\Burkhard Kainka\Eigene Dateien\HTK_Project\c_test1\c_test1.c"
MOV A,08h
MOV mydelay0,A
CALL _mydelay
#line 49 "C:\Dokumente und Einstellungen\Burkhard Kainka\Eigene Dateien\HTK_Project\c_test1\c_test1.c"
CLR CR3
#line 49 "C:\Dokumente und Einstellungen\Burkhard Kainka\Eigene Dateien\HTK_Project\c_test1\c_test1.c"
JMP L20
L17:
#pragma debug scope 10 9 ; 50 "C:\Dokumente und Einstellungen\Burkhard Kainka\Eigene Dateien\HTK_Project\c_test1\c_test1.c"
#line 50 "C:\Dokumente und Einstellungen\Burkhard Kainka\Eigene Dateien\HTK_Project\c_test1\c_test1.c"
MOV A,1
ADD A,CR2
ADD A,OFFSET l_table
CALL l_table
MOV __pa,A
#line 51 "C:\Dokumente und Einstellungen\Burkhard Kainka\Eigene Dateien\HTK_Project\c_test1\c_test1.c"
INC CR2
#line 52 "C:\Dokumente und Einstellungen\Burkhard Kainka\Eigene Dateien\HTK_Project\c_test1\c_test1.c"
MOV A,01h
MOV mydelay0,A
CALL _mydelay
L18:
#line 49 "C:\Dokumente und Einstellungen\Burkhard Kainka\Eigene Dateien\HTK_Project\c_test1\c_test1.c"
#pragma debug scope 9 8 ; 49 "C:\Dokumente und Einstellungen\Burkhard Kainka\Eigene Dateien\HTK_Project\c_test1\c_test1.c"
INC CR3
L20:
#line 49 "C:\Dokumente und Einstellungen\Burkhard Kainka\Eigene Dateien\HTK_Project\c_test1\c_test1.c"
MOV A,CR3
XOR A,06h
SNZ [0ah].2
JMP L17
#line 54 "C:\Dokumente und Einstellungen\Burkhard Kainka\Eigene Dateien\HTK_Project\c_test1\c_test1.c"
MOV A,1
ADD A,CR2
ADD A,OFFSET l_table
CALL l_table
MOV __pa,A
#line 55 "C:\Dokumente und Einstellungen\Burkhard Kainka\Eigene Dateien\HTK_Project\c_test1\c_test1.c"
INC CR2
#line 56 "C:\Dokumente und Einstellungen\Burkhard Kainka\Eigene Dateien\HTK_Project\c_test1\c_test1.c"
MOV A,04h
MOV mydelay0,A
CALL _mydelay
L14:
#line 45 "C:\Dokumente und Einstellungen\Burkhard Kainka\Eigene Dateien\HTK_Project\c_test1\c_test1.c"
#pragma debug scope 8 7 ; 45 "C:\Dokumente und Einstellungen\Burkhard Kainka\Eigene Dateien\HTK_Project\c_test1\c_test1.c"
INC CR4
L16:
#line 45 "C:\Dokumente und Einstellungen\Burkhard Kainka\Eigene Dateien\HTK_Project\c_test1\c_test1.c"
MOV A,CR4
XOR A,02h
SNZ [0ah].2
JMP L13
L11:
#line 43 "C:\Dokumente und Einstellungen\Burkhard Kainka\Eigene Dateien\HTK_Project\c_test1\c_test1.c"
#pragma debug scope 7 1 ; 43 "C:\Dokumente und Einstellungen\Burkhard Kainka\Eigene Dateien\HTK_Project\c_test1\c_test1.c"
JMP L10
L9:
#line 59 "C:\Dokumente und Einstellungen\Burkhard Kainka\Eigene Dateien\HTK_Project\c_test1\c_test1.c"
JMP $
LOCAL b0_6 DB 2 DUP(?)
#line 37 "C:\Dokumente und Einstellungen\Burkhard Kainka\Eigene Dateien\HTK_Project\c_test1\c_test1.c"
LOCAL CR2 DB ? ; idx
#pragma debug variable 8 7 CR2 idx
#line 37 "C:\Dokumente und Einstellungen\Burkhard Kainka\Eigene Dateien\HTK_Project\c_test1\c_test1.c"
LOCAL CR3 DB ? ; j
#pragma debug variable 8 7 CR3 j
#line 37 "C:\Dokumente und Einstellungen\Burkhard Kainka\Eigene Dateien\HTK_Project\c_test1\c_test1.c"
LOCAL CR4 DB ? ; i
#pragma debug variable 8 7 CR4 i
_main ENDP
#line 36 "C:\Dokumente und Einstellungen\Burkhard Kainka\Eigene Dateien\HTK_Project\c_test1\c_test1.c"
STARTSEC .SECTION 'CODE'
STARTUP:
RET
EXTERN RH:BYTE
EXTERN VA:BYTE
EXTERN VS:BYTE
EXTERN __DELAYY0:NEAR
EXTERN __DELAYY1:NEAR
EXTERN __DELAYY2:NEAR
EXTERN __DELAYY3:NEAR
EXTERN __DELAYY4:NEAR
EXTERN __DELAYY5:NEAR
#line 36 "C:\Dokumente und Einstellungen\Burkhard Kainka\Eigene Dateien\HTK_Project\c_test1\c_test1.c"
@CODE .SECTION AT 0 'CODE'
JMP begin
@DUMMY PROC
CALL _main
@DUMMY ENDP
ROMBANK 0 @DUMMYNOP
@DUMMYNOP .SECTION AT 07ffh 'CODE'
nop
Download: Projektverzeichnis C_test: C_test1.zip


Elektronik-Labor  Projekte   Holtek