home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Power-Programmierung
/
CD1.mdf
/
magazine
/
drdobbs
/
1991
/
08
/
vansick
/
listing5.asc
< prev
Wrap
INI File
|
1991-04-05
|
13KB
|
260 lines
[LISTING FIVE]
#include "hc05c8.h"
0000 #pragma portrw PORTA @ 0x00;
0003 #pragma portrw PORTB @ 0x03;
0002 #pragma portrw PORTC @ 0x02;
0003 #pragma portr PORTD @ 0x03;
0004 #pragma portrw DDRA @ 0x04;
0005 #pragma portrw DDRB @ 0x05;
0006 #pragma portrw DDRC @ 0x06;
000A #pragma portrw SPCR @ 0x0a;
000B #pragma portrw SPSR @ 0x0b;
000C #pragma portrw SPDR @ 0x0c;
000D #pragma portrw BAUD @ 0x0d;
000E #pragma portrw SCCR1 @ 0x0e;
000F #pragma portrw SCCR2 @ 0x0f;
0010 #pragma portrw SCSR @ 0x10;
0011 #pragma portrw SCDAT @ 0x11;
0012 #pragma portrw TCR @ 0x12;
0013 #pragma portrw TSR @ 0x13;
0014 #pragma portrw ICHI @ 0x14;
0015 #pragma portrw ICLO @ 0x15;
0016 #pragma portrw OCHI @ 0x16;
0017 #pragma portrw OCLO @ 0x17;
0018 #pragma portrw TCHI @ 0x18;
0019 #pragma portrw TCLO @ 0x19;
001A #pragma portrw ACHI @ 0x1a;
001B #pragma portrw ACLO @ 0x1b;
001C #pragma portrw PROG @ 0x1c;
001D #pragma portrw COPRST @ 0x1d;
001E #pragma portrw COPCR @ 0x1e;
1FDF #pragma portrw OPTION @ 0x1fdf;
1FF4 #pragma vector __SPI @ 0x01ff4;
1FF6 #pragma vector __SCI @ 0x01ff6 ;
1FF8 #pragma vector __TIMER @ 0x01ff8;
1FFA #pragma vector __IRQ @ 0x01ffa;
1FFC #pragma vector __SWI @ 0x01ffc ;
1FFE #pragma vector __RESET @ 0x01ffe;
#pragma has STOP ;
#pragma has WAIT ;
#pragma has MUL ;
0020 0030 #pragma memory ROMPAGE0 [48] @ 0x020;
0100 2000 #pragma memory ROMPROG [8192] @ 0x100;
0050 00B0 #pragma memory RAMPAGE0 [176] @ 0x50;
0001 #define COPF 4 COPCR bits
0003 #define CME 3
0002 #define COPE 2
0001 #define CM1 1
0000 #define CM0 0
0002 #define ICIE 7 TCR bits
0006 #define OCIE 6
0005 #define TDIE 5
0001 #define IEDG 1
0000 #define OLVL 0
0003 #define ICF 7 TSR bits
0006 #define OCF 6
0005 #define TOF 5
0004 #define R8 7 SCCR1 bits
0006 #define T8 6
0004 #define M 4
0003 #define WAKE 3
0005 #define TIE SCCR2 bits
0006 #define TCIE 6
0005 #define RIE 5
0004 #define ILIE 4
0003 #define TE 3
0002 #define RE 2
0001 #define RWU 1
0000 #define SBK 0
0006 #define TRDE 7 SCSR bits
0006 #define TC 6
0005 #define RDRF 5
0004 #define IDLE 4
0003 #define OR 3
0002 #define NF 2
0001 #define FE 1
0007 #define SPIE 7 SPCR bits
0006 #define SPE 6
0004 #define MSTR 4
0003 #define CPOL 3
0002 #define CPHA 2
0001 #define SPR1 1
0000 #define SPR0 0
0008 #define SPIF 7 SPSR bits
0006 #define WCOL 6
0004 #define MODF 4
0009 #define RAM0 7 OPTION bits
0006 #define RAM1 6
0003 #define SECU 3
0001 #define IRP 1
000A #define LAT PROG bits
0000 #define PGM 0
#include "general.h"
0001 #define TRUE 1
0000 #define FALSE 0
000B #define FOREVER while(TRUE)
000C #define max(a,b) (a) > (b) ? (a) : (b)
000D #define min(a,b) (a) < (b) ? (a) : (b)
000E #define abs(a) (a) >= 0 ? (a) : -(a)
0050 0051 0052 int hrs, mts, sec; /* global variables */
0053 03E8 long count=1000;
struct bothbytes /* 16 bit int structure */
{
int hi;
int lo;
};
union isboth /* and union */
{
long l;
struct bothbytes b;
};
0057 0002 union isboth time_comp_count;
0000 registera ac;
void main(void)
{
0059 int key;
0100 1C 12 BSET 6,$12 TCR.OCIE = 1; /* enable output compare interrupt */
0102 9A CLI CLI(); /* enable all interrupts */
FOREVER
{
0103 B6 52 LDA $52 if(sec==60) /* do clock things each minute */
0105 A1 3C CMP #$3C
0107 26 18 BNE $0121
{
0109 3F 52 CLR $52 sec=0;
010B 3C 51 INC $51 if(++mts==60)
010D B6 51 LDA $51
010F A1 3C CMP #$3C
0111 26 0E BNE $0121
{
0113 3F 51 CLR $51 mts=0;
0115 3C 50 INC $50 if(++hrs==13)
0117 B6 50 LDA $50
0119 A1 0D CMP #$0D
011B 26 04 BNE $0121
011D A6 01 LDA #$01 hrs=1;
011F B7 50 STA $50
}
}
0121 8F WAIT WAIT(); /* wait here to save the energy */
0122 20 DF BRA $0103 }
0124 81 RTS }
void __TIMER(void) /* time interrupt service routine */
1FF8 01 25 {
/* the program gets here every millisecond */
0125 B6 18 LDA $18 time_comp_count.b.hi = TCHI;
0127 B7 57 STA $57
0129 B6 13 LDA $13 ac =TSR; /* Clear the tof bit */
012B B6 19 LDA $19 time_comp_count.b.lo = TCLO;
012D B7 58 STA $58
012F AB F4 ADD #$F4 time_comp_count.l += 500; /* 500 counts per millisecond */
0131 B7 58 STA $58
0133 B6 57 LDA $57
0135 A9 01 ADC #$01
0137 B7 57 STA $57
0139 B7 16 STA $16 OCHI = time_comp_count.b.hi;
013B B6 13 LDA $13 ac = TSR; /* Clear ocf bit */
013D B6 58 LDA $58 OCLO = time_comp_count.b.lo;
013F B7 17 STA $17
0141 B6 54 LDA $54 if(--count)
0143 A0 01 SUB #$01
0145 B7 54 STA $54
0147 24 02 BCC $014B
0149 3A 53 DEC $53
014B B6 53 LDA $53
014D BA 54 ORA $54
014F 27 01 BEQ $0152
0151 80 RTI return ;
else
{
0152 3C 52 INC $52 sec++; /* here every second */
0154 A6 03 LDA #$03 count=1000;/* reset count to 1 second */
0156 B7 53 STA $53
0158 A6 E8 LDA #$E8
015A B7 54 STA $54
}
015C 80 RTI }
1FFE 01 5D
015D AE 50 LDX #$50
015F 7F CLR ,X
0160 5C INCX
0161 A3 FF CPX #$FF
0163 26 FA BNE $015F
0165 A6 03 LDA #$03
0167 B7 53 STA $53
0169 A6 E8 LDA #$E8
016B B7 54 STA $54
016D CC 01 00 JMP $0100
SYMBOL TABLE
LABEL VALUE LABEL VALUE LABEL VALUE LABEL VALUE
ACHI 001A | ACLO 001B | BAUD 000D | CM0 0000
CM1 0001 | CME 0003 | COPCR 001E | COPE 0002
COPRST 001D | CPHA 0002 | CPOL 0003 | DDRA 0004
DDRB 0005 | DDRC 0006 | FALSE 0000 | FE 0001
ICHI 0014 | ICLO 0015 | IDLE 0004 | IEDG 0001
ILIE 0004 | IRP 0001 | M 0004 | MODF 0004
MSTR 0004 | NF 0002 | OCF 0006 | OCHI 0016
OCIE 0006 | OCLO 0017 | OLVL 0000 | OPTION 1FDF
OR 0003 | PGM 0000 | PORTA 0000 | PORTB 0003
PORTC 0002 | PORTD 0003 | PROG 001C | RAM1 0006
RDRF 0005 | RE 0002 | RIE 0005 | RWU 0001
SBK 0000 | SCCR1 000E | SCCR2 000F | SCDAT 0011
SCSR 0010 | SECU 0003 | SPCR 000A | SPDR 000C
SPE 0006 | SPR0 0000 | SPR1 0001 | SPSR 000B
T8 0006 | TC 0006 | TCHI 0018 | TCIE 0006
TCLO 0019 | TCR 0012 | TDIE 0005 | TE 0003
TOF 0005 | TRUE 0001 | TSR 0013 | WAKE 0003
WCOL 0006 | __IRQ 1FFA | __RESET 1FFE | __SCI 1FF6
__SPI 1FF4 | __STARTUP 0000 | __SWI 1FFC | __TIMER 0125
__longAC 0055 | b 0000 | bothbytes 0002 | count 0053
hi 0000 | hrs 0050 | isboth 0002 | key 0059
l 0000 | lo 0001 | main 0100 | mts 0051
sec 0052 | time_comp_co 0057 |
MEMORY USAGE MAP ('X' = Used, '-' = Unused)
0100 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX
0140 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX ----------------
0180 : ---------------- ---------------- ---------------- ----------------
01C0 : ---------------- ---------------- ---------------- ----------------
1F00 : ---------------- ---------------- ---------------- ----------------
1F40 : ---------------- ---------------- ---------------- ----------------
1F80 : ---------------- ---------------- ---------------- ----------------
1FC0 : ---------------- ---------------- ---------------- --------XX----XX
All other memory blocks unused.
Errors : 0
Warnings : 0