home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / magazine / drdobbs / 1991 / 08 / vansick / listing5.asc < prev   
INI File  |  1991-04-05  |  13KB  |  260 lines

  1. [LISTING FIVE]
  2.                                   #include "hc05c8.h"
  3. 0000                              #pragma portrw PORTA @ 0x00;
  4. 0003                              #pragma portrw PORTB @ 0x03;
  5. 0002                              #pragma portrw PORTC @ 0x02;
  6. 0003                              #pragma portr  PORTD @ 0x03;
  7. 0004                              #pragma portrw DDRA  @ 0x04;
  8. 0005                              #pragma portrw DDRB  @ 0x05;
  9. 0006                              #pragma portrw DDRC  @ 0x06;
  10. 000A                              #pragma portrw SPCR  @ 0x0a;
  11. 000B                              #pragma portrw SPSR  @ 0x0b;
  12. 000C                              #pragma portrw SPDR  @ 0x0c;
  13. 000D                              #pragma portrw BAUD  @ 0x0d;
  14. 000E                              #pragma portrw SCCR1 @ 0x0e;
  15. 000F                              #pragma portrw SCCR2 @ 0x0f;
  16. 0010                              #pragma portrw SCSR  @ 0x10;
  17. 0011                              #pragma portrw SCDAT @ 0x11;
  18. 0012                              #pragma portrw TCR   @ 0x12;
  19. 0013                              #pragma portrw TSR   @ 0x13;
  20. 0014                              #pragma portrw ICHI  @ 0x14;
  21. 0015                              #pragma portrw ICLO  @ 0x15;
  22. 0016                              #pragma portrw OCHI  @ 0x16;
  23. 0017                              #pragma portrw OCLO  @ 0x17;
  24. 0018                              #pragma portrw TCHI  @ 0x18;
  25. 0019                              #pragma portrw TCLO  @ 0x19;
  26. 001A                              #pragma portrw ACHI  @ 0x1a;
  27. 001B                              #pragma portrw ACLO  @ 0x1b;
  28. 001C                              #pragma portrw PROG @ 0x1c;
  29. 001D                              #pragma portrw COPRST @ 0x1d;
  30. 001E                              #pragma portrw COPCR @ 0x1e;
  31. 1FDF                              #pragma portrw OPTION @ 0x1fdf;
  32.                                   
  33. 1FF4                              #pragma vector __SPI @ 0x01ff4;
  34. 1FF6                              #pragma vector __SCI @ 0x01ff6 ;
  35. 1FF8                              #pragma vector __TIMER @ 0x01ff8;
  36. 1FFA                              #pragma vector __IRQ @ 0x01ffa;
  37. 1FFC                              #pragma vector __SWI @ 0x01ffc ;
  38. 1FFE                              #pragma vector __RESET @ 0x01ffe;
  39.                                   
  40.                                   #pragma has STOP ;
  41.                                   #pragma has WAIT ;
  42.                                   #pragma has MUL ;
  43.                                   
  44. 0020 0030                         #pragma memory ROMPAGE0 [48] @ 0x020;
  45. 0100 2000                         #pragma memory ROMPROG [8192] @ 0x100;
  46. 0050 00B0                         #pragma memory RAMPAGE0 [176] @ 0x50;
  47.                                   
  48. 0001                              #define COPF 4 COPCR bits
  49. 0003                              #define CME 3
  50. 0002                              #define COPE 2
  51. 0001                              #define CM1 1
  52. 0000                              #define CM0 0
  53.                                   
  54. 0002                              #define ICIE 7 TCR bits
  55. 0006                              #define OCIE 6
  56. 0005                              #define TDIE 5
  57. 0001                              #define IEDG 1
  58. 0000                              #define OLVL 0
  59.                                   
  60. 0003                              #define ICF 7 TSR bits
  61. 0006                              #define OCF 6
  62. 0005                              #define TOF 5
  63.                                   
  64. 0004                              #define R8 7 SCCR1 bits
  65. 0006                              #define T8 6
  66. 0004                              #define M  4
  67. 0003                              #define WAKE 3
  68.                                   
  69. 0005                              #define TIE SCCR2 bits
  70. 0006                              #define TCIE 6
  71. 0005                              #define RIE 5
  72. 0004                              #define ILIE 4
  73. 0003                              #define TE 3
  74. 0002                              #define RE 2
  75. 0001                              #define RWU 1
  76. 0000                              #define SBK 0
  77.                                   
  78. 0006                              #define TRDE 7 SCSR bits
  79. 0006                              #define TC 6
  80. 0005                              #define RDRF 5
  81. 0004                              #define IDLE 4
  82. 0003                              #define OR 3
  83. 0002                              #define NF 2
  84. 0001                              #define FE 1
  85.                                   
  86. 0007                              #define SPIE 7 SPCR bits
  87. 0006                              #define SPE 6
  88. 0004                              #define MSTR 4
  89. 0003                              #define CPOL 3
  90. 0002                              #define CPHA 2
  91. 0001                              #define SPR1 1
  92. 0000                              #define SPR0 0
  93.                                   
  94. 0008                              #define SPIF 7 SPSR bits
  95. 0006                              #define WCOL 6
  96. 0004                              #define MODF 4
  97.                                   
  98. 0009                              #define RAM0 7 OPTION bits
  99. 0006                              #define RAM1 6
  100. 0003                              #define SECU 3
  101. 0001                              #define IRP 1
  102.                                   
  103. 000A                              #define LAT PROG bits
  104. 0000                              #define PGM 0
  105.                                   #include "general.h"
  106.                                   
  107. 0001                              #define TRUE        1
  108. 0000                              #define FALSE       0
  109. 000B                              #define FOREVER     while(TRUE)
  110. 000C                              #define max(a,b)    (a) > (b) ? (a) : (b)
  111. 000D                              #define min(a,b)    (a) < (b) ? (a) : (b)
  112. 000E                              #define abs(a)      (a) >= 0 ? (a) : -(a)
  113.                                   
  114. 0050 0051 0052                    int hrs, mts, sec;       /* global variables   */
  115. 0053 03E8                         long count=1000;
  116.                                   
  117.                                   struct bothbytes         /* 16 bit int structure  */
  118.                                   {
  119.                                         int hi;
  120.                                         int lo;
  121.                                   };
  122.                                   
  123.                                   union isboth              /* and union  */
  124.                                   {
  125.                                         long  l;
  126.                                         struct bothbytes b;
  127.                                   };
  128.                                   
  129. 0057 0002                         union isboth time_comp_count;
  130. 0000                              registera ac;
  131.                                   void main(void)
  132.                                   {
  133. 0059                                  int key;
  134.                                   
  135. 0100 1C 12     BSET  6,$12            TCR.OCIE = 1; /* enable output compare interrupt */
  136. 0102 9A        CLI                    CLI();   /* enable all interrupts  */
  137.                                       FOREVER
  138.                                       {
  139. 0103 B6 52     LDA    $52                 if(sec==60)  /* do clock things each minute  */
  140. 0105 A1 3C     CMP    #$3C        
  141. 0107 26 18     BNE    $0121       
  142.                                           {
  143. 0109 3F 52     CLR    $52                     sec=0;
  144. 010B 3C 51     INC    $51                     if(++mts==60)
  145. 010D B6 51     LDA    $51         
  146. 010F A1 3C     CMP    #$3C        
  147. 0111 26 0E     BNE    $0121       
  148.                                               {
  149. 0113 3F 51     CLR    $51                         mts=0;
  150. 0115 3C 50     INC    $50                         if(++hrs==13)
  151. 0117 B6 50     LDA    $50         
  152. 0119 A1 0D     CMP    #$0D        
  153. 011B 26 04     BNE    $0121       
  154. 011D A6 01     LDA    #$01                            hrs=1;
  155. 011F B7 50     STA    $50         
  156.                                               }
  157.                                           }
  158. 0121 8F        WAIT                     WAIT();  /* wait here to save the energy  */
  159. 0122 20 DF     BRA    $0103           }
  160. 0124 81        RTS                }
  161.                                   void __TIMER(void)   /* time interrupt service routine  */
  162. 1FF8 01 25                        {
  163.                                        /* the program gets here every millisecond  */
  164. 0125 B6 18     LDA    $18              time_comp_count.b.hi = TCHI;
  165. 0127 B7 57     STA    $57         
  166. 0129 B6 13     LDA    $13              ac =TSR;           /* Clear the tof bit  */
  167. 012B B6 19     LDA    $19              time_comp_count.b.lo = TCLO;
  168. 012D B7 58     STA    $58         
  169. 012F AB F4     ADD    #$F4             time_comp_count.l += 500;  /* 500 counts per millisecond */
  170. 0131 B7 58     STA    $58         
  171. 0133 B6 57     LDA    $57         
  172. 0135 A9 01     ADC    #$01        
  173. 0137 B7 57     STA    $57         
  174. 0139 B7 16     STA    $16              OCHI = time_comp_count.b.hi;
  175. 013B B6 13     LDA    $13              ac = TSR;           /* Clear ocf bit    */
  176. 013D B6 58     LDA    $58              OCLO = time_comp_count.b.lo;
  177. 013F B7 17     STA    $17         
  178.                                   
  179. 0141 B6 54     LDA    $54              if(--count)
  180. 0143 A0 01     SUB    #$01        
  181. 0145 B7 54     STA    $54         
  182. 0147 24 02     BCC    $014B       
  183. 0149 3A 53     DEC    $53         
  184. 014B B6 53     LDA    $53         
  185. 014D BA 54     ORA    $54         
  186. 014F 27 01     BEQ    $0152       
  187. 0151 80        RTI                         return ;
  188.                                       else
  189.                                       {
  190. 0152 3C 52     INC    $52                  sec++;    /* here every second  */
  191. 0154 A6 03     LDA    #$03                 count=1000;/* reset count to 1 second */
  192. 0156 B7 53     STA    $53         
  193. 0158 A6 E8     LDA    #$E8        
  194. 015A B7 54     STA    $54         
  195.                                       }
  196. 015C 80        RTI                }
  197.                                   
  198. 1FFE 01 5D                        
  199.                                   
  200. 015D AE 50     LDX    #$50        
  201. 015F 7F        CLR    ,X         
  202. 0160 5C        INCX               
  203. 0161 A3 FF     CPX    #$FF        
  204. 0163 26 FA     BNE    $015F       
  205. 0165 A6 03     LDA    #$03        
  206. 0167 B7 53     STA    $53         
  207. 0169 A6 E8     LDA    #$E8        
  208. 016B B7 54     STA    $54         
  209. 016D CC 01 00  JMP    $0100       
  210.  
  211. SYMBOL TABLE
  212.  
  213. LABEL        VALUE  LABEL        VALUE  LABEL        VALUE  LABEL        VALUE  
  214.  
  215. ACHI         001A | ACLO         001B | BAUD         000D | CM0          0000 
  216. CM1          0001 | CME          0003 | COPCR        001E | COPE         0002 
  217. COPRST       001D | CPHA         0002 | CPOL         0003 | DDRA         0004 
  218. DDRB         0005 | DDRC         0006 | FALSE        0000 | FE           0001 
  219. ICHI         0014 | ICLO         0015 | IDLE         0004 | IEDG         0001 
  220. ILIE         0004 | IRP          0001 | M            0004 | MODF         0004 
  221. MSTR         0004 | NF           0002 | OCF          0006 | OCHI         0016 
  222. OCIE         0006 | OCLO         0017 | OLVL         0000 | OPTION       1FDF 
  223. OR           0003 | PGM          0000 | PORTA        0000 | PORTB        0003 
  224. PORTC        0002 | PORTD        0003 | PROG         001C | RAM1         0006 
  225. RDRF         0005 | RE           0002 | RIE          0005 | RWU          0001 
  226. SBK          0000 | SCCR1        000E | SCCR2        000F | SCDAT        0011 
  227. SCSR         0010 | SECU         0003 | SPCR         000A | SPDR         000C 
  228. SPE          0006 | SPR0         0000 | SPR1         0001 | SPSR         000B 
  229. T8           0006 | TC           0006 | TCHI         0018 | TCIE         0006 
  230. TCLO         0019 | TCR          0012 | TDIE         0005 | TE           0003 
  231. TOF          0005 | TRUE         0001 | TSR          0013 | WAKE         0003 
  232. WCOL         0006 | __IRQ        1FFA | __RESET      1FFE | __SCI        1FF6 
  233. __SPI        1FF4 | __STARTUP    0000 | __SWI        1FFC | __TIMER      0125 
  234. __longAC     0055 | b            0000 | bothbytes    0002 | count        0053 
  235. hi           0000 | hrs          0050 | isboth       0002 | key          0059 
  236. l            0000 | lo           0001 | main         0100 | mts          0051 
  237. sec          0052 | time_comp_co 0057 | 
  238.  
  239.  
  240. MEMORY USAGE MAP ('X' = Used, '-' = Unused)
  241.  
  242. 0100 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX
  243. 0140 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX ----------------
  244. 0180 : ---------------- ---------------- ---------------- ----------------
  245. 01C0 : ---------------- ---------------- ---------------- ----------------
  246.  
  247. 1F00 : ---------------- ---------------- ---------------- ----------------
  248. 1F40 : ---------------- ---------------- ---------------- ----------------
  249. 1F80 : ---------------- ---------------- ---------------- ----------------
  250. 1FC0 : ---------------- ---------------- ---------------- --------XX----XX
  251.  
  252. All other memory blocks unused.
  253.  
  254.  
  255.  
  256. Errors             :    0
  257. Warnings           :    0
  258.  
  259.  
  260.