Zilog Z8 Encore! Macro Assembler Version 2.50 (08031703) 15-Jan-09 11:01:14 page: 1 PC Object I Line Source A 1 ; Zilog Z8 Encore! ANSI C Compiler Release 3.60 A 2 ; -nolocalcse -optsize -fastcall -const=RAM -model=L A 3 ; -nooptlink -regvar -reduceopt -debug -norevaa -peephole A 4 ; -alias A 5 DEFINE timer_TEXT,SPACE=ROM A 6 FILE "..\TIMER.C" A 7 .debug "C" A 8 SEGMENT ROM_DATA A 9 A 10 A 11 ;**************************** _isr_timer0 *************************** A 12 ;Name Addr/Register Size Type A 13 ;_lt1 IMPORT 1 variable A 14 ;_t5 IMPORT 0 variable A 15 ;_t4 IMPORT 0 variable A 16 ;_t3 IMPORT 0 variable A 17 ;_t2 IMPORT 0 variable A 18 ;_t1 IMPORT 0 variable A 19 ;_subtmr IMPORT 0 variable A 20 ;_ircode IMPORT 0 variable A 21 A 22 A 23 ; Aggregate Stack Size: 0 (words) A 24 A 25 A 26 .FRAME _n_isr_timer0,?_n_isr_timer0,RDATA A 27 .FRAME _f_isr_timer0,?_f_isr_timer0,EDATA A 28 SEGMENT timer_TEXT 000000 A 29 _isr_timer0: A 30 .define "_isr_timer0" A 31 .value _isr_timer0 A 32 .class 2 A 33 .type 65 A 34 .type 0 A 35 .endef A 36 .begfunc "isr_timer0",25,"_isr_timer0" 000000 C8FFD0 A 37 PUSHX 4093 000003 D6 0000 A 38 CALL __b_iframeset00 A 39 ; 1 /************************************************* A 40 ; 2 * Copyright (C) 1999-2004 by ZiLOG, Inc. A 41 ; 3 * All Rights Reserved A 42 ; 4 *************************************************/ A 43 ; 5 A 44 ; 6 #include A 45 ; 7 #include "main.h" A 46 ; 8 #include "timer.h" A 47 ; 9 A 48 ; 10 extern char subtmr; A 49 ; 11 extern char t1; A 50 ; 12 extern char t2; A 51 ; 13 extern char t3; A 52 ; 14 extern char t4; Zilog Z8 Encore! Macro Assembler Version 2.50 (08031703) 15-Jan-09 11:01:14 page: 2 PC Object I Line Source timer.src A 53 ; 15 extern char t5; A 54 ; 16 extern int lt1; A 55 ; 17 extern unsigned char ircode; A 56 ; 18 extern unsigned char oldir; A 57 ; 19 A 58 ; 20 ////////////////////////////////////////////////////////// A 59 ; 21 //10 mS Interrupt routine A 60 ; 22 A 61 ; 23 #pragma interrupt A 62 ; 24 void isr_timer0(void) A 63 ; 25 { A 64 ; 26 ircode=PCIN; // read ir input A 65 .line 26 000006 E8FDA000 A 66 LDX _ircode,4058 A 67 ; 27 ircode &= 0xf0; // erase unused bits A 68 .line 27 00000A 59F00000 A 69 ANDX _ircode,#240 A 70 ; 28 subtmr -=1; A 71 .line 28 00000E 09FF0000 A 72 ADDX _subtmr,#-1 A 73 ; 29 if(subtmr==0) A 74 .line 29 000012 A9000000 A 75 CPX _subtmr,#-0 000016 EB 3E A 76 JR NE,_1_L_11 A 77 ; 30 { A 78 ; 31 subtmr=10; A 79 .line 31 000018 E90A0000 A 80 LDX _subtmr,#10 A 81 ; 32 if(t1>0) t1 -=1; A 82 .line 32 00001C A9000000 A 83 CPX _t1,#-0 000020 2B 04 A 84 JR LE,_1_L_2 000022 09FF0000 A 85 ADDX _t1,#-1 000026 A 86 _1_L_2: A 87 ; 33 if(t2>0) t2 -=1; A 88 .line 33 000026 A9000000 A 89 CPX _t2,#-0 00002A 2B 04 A 90 JR LE,_1_L_4 00002C 09FF0000 A 91 ADDX _t2,#-1 000030 A 92 _1_L_4: A 93 ; 34 if(t3>0) t3 -=1; A 94 .line 34 000030 A9000000 A 95 CPX _t3,#-0 000034 2B 04 A 96 JR LE,_1_L_6 000036 09FF0000 A 97 ADDX _t3,#-1 00003A A 98 _1_L_6: A 99 ; 35 if(t4>0) t4 -=1; A 100 .line 35 00003A A9000000 A 101 CPX _t4,#-0 00003E 2B 04 A 102 JR LE,_1_L_8 000040 09FF0000 A 103 ADDX _t4,#-1 000044 A 104 _1_L_8: Zilog Z8 Encore! Macro Assembler Version 2.50 (08031703) 15-Jan-09 11:01:14 page: 3 PC Object I Line Source timer.src A 105 ; 36 if(t5>0) t5 -=1; A 106 .line 36 000044 A9000000 A 107 CPX _t5,#-0 000048 2B 04 A 108 JR LE,_1_L_9 00004A 09FF0000 A 109 ADDX _t5,#-1 00004E A 110 _1_L_9: A 111 ; 37 lt1 +=1; // long sequence timer A 112 .line 37 00004E 09010001 A 113 ADDX _lt1+1,#1 000052 19000000 A 114 ADCX _lt1,#-0 A 115 ; 38 } A 116 ; 39 } 000056 A 117 _1_L_11: A 118 .line 39 000056 D6 0000 A 119 CALL __b_iframereset 000059 BF A 120 IRET A 121 .endfunc "isr_timer0",39,"_isr_timer0" A 122 SEGMENT ROM_DATA A 123 A 124 A 125 ;**************************** _init_timer0 *************************** A 126 ;Name Addr/Register Size Type A 127 ;_SET_VECTOR IMPORT ----- function A 128 A 129 A 130 ; Aggregate Stack Size: 0 (words) A 131 A 132 A 133 .FRAME _n_init_timer0,?_n_init_timer0,RDATA A 134 .FRAME _f_init_timer0,?_f_init_timer0,EDATA A 135 SEGMENT timer_TEXT 00005A A 136 _init_timer0: A 137 .define "_init_timer0" A 138 .value _init_timer0 A 139 .class 2 A 140 .type 65 A 141 .type 0 A 142 .endef A 143 .begfunc "init_timer0",44,"_init_timer0" 00005A D6 0000 A 144 CALL __b_frameset00 A 145 ; 40 A 146 ; 41 ////////////////////////////////////////////////////////// A 147 ; 42 //Intialize Timer-0 A 148 ; 43 void init_timer0(void) A 149 ; 44 { A 150 ; 45 SET_VECTOR(TIMER0, isr_timer0); A 151 ; 46 T0H = 0x6; // Timer High A 152 .line 46 00005D E9060F00 A 153 LDX 3840,#6 A 154 ; 47 T0L = 0xc0; // Timer Low A 155 .line 47 000061 E9C00F01 A 156 LDX 3841,#192 Zilog Z8 Encore! Macro Assembler Version 2.50 (08031703) 15-Jan-09 11:01:14 page: 4 PC Object I Line Source timer.src A 157 ; 48 T0RH = 0x06; // Reload Compare High A 158 .line 48 000065 E9060F02 A 159 LDX 3842,#6 A 160 ; 49 T0RL = 0xc0; // Reload Compare Low 10mS interval A 161 .line 49 000069 E9C00F03 A 162 LDX 3843,#192 A 163 ; 50 T0CTL = 0xE9; // Continous/Prescale A 164 .line 50 00006D E9E90F07 A 165 LDX 3847,#233 A 166 ; 51 IRQ0ENH |= 0x20; // Set Interrupt Priority Nominal A 167 .line 51 000071 49200FC1 A 168 ORX 4033,#32 A 169 ; 52 IRQ0ENL &= 0xDF; // Set Interrupt Priority Nominal A 170 .line 52 000075 59DF0FC2 A 171 ANDX 4034,#223 A 172 ; 53 } A 173 .line 53 000079 D6 0000 A 174 CALL __b_framereset 00007C AF A 175 RET A 176 .endfunc "init_timer0",53,"_init_timer0" A 177 SEGMENT ROM_DATA A 178 A 179 A 180 ;**************************** _wait *************************** A 181 ;Name Addr/Register Size Type A 182 ;_oldir IMPORT 0 variable A 183 ;_ircode IMPORT 0 variable A 184 ;_t1 IMPORT 0 variable A 185 ;wtime R8 1 parameter A 186 A 187 A 188 ; Aggregate Stack Size: 0 (words) A 189 A 190 A 191 .FRAME _n_wait,?_n_wait,RDATA A 192 .FRAME _f_wait,?_f_wait,EDATA A 193 SEGMENT timer_TEXT 00007D A 194 _wait: A 195 .define "_wait" A 196 .value _wait A 197 .class 2 A 198 .type 66 A 199 .type 0 A 200 .endef A 201 .begfunc "wait",57,"_wait" A 202 .define "wtime" A 203 .class 17 A 204 .reg 9 A 205 .type 3 A 206 .type 0 A 207 .endef 00007D D6 0000 A 208 CALL __b_frameset00 Zilog Z8 Encore! Macro Assembler Version 2.50 (08031703) 15-Jan-09 11:01:14 page: 5 PC Object I Line Source timer.src A 209 ; 54 A 210 ; 55 // Wait timer A 211 ; 56 char wait(int wtime) A 212 ; 57 { A 213 ; 58 t1=wtime; // start timer A 214 .line 58 000080 949000 A 215 LDX _t1,R9 A 216 ; 59 while(t1>0) 000083 A 217 _3_L_15: A 218 .line 59 000083 A9000000 A 219 CPX _t1,#-0 000087 2B 18 A 220 JR LE,_3_L_17 A 221 ; 60 { A 222 ; 61 if(ircode != oldir) // if ir input not sero A 223 .line 61 000089 A8 000000 A 224 CPX _ircode,_oldir 00008D 6B F4 A 225 JR Z,_3_L_15 A 226 ; 62 { A 227 ; 63 if(ircode >0) // and ircode is new A 228 .line 63 00008F A9000000 A 229 CPX _ircode,#-0 000093 3B EE A 230 JR ULE,_3_L_15 A 231 ; 64 { A 232 ; 65 t1=0; // abort wait A 233 .line 65 000095 E9000000 A 234 LDX _t1,#-0 A 235 ; 66 oldir=ircode; // copy new ir code to old A 236 .line 66 000099 E8 000000 A 237 LDX _oldir,_ircode A 238 ; 67 return(1); // and indicate new ircode A 239 .line 67 00009D 0C01 A 240 LD R0,#1 00009F 8B 02 A 241 JR _3_L_18 A 242 ; 68 } A 243 ; 69 } A 244 ; 70 } 0000A1 A 245 _3_L_17: A 246 .line 70 A 247 ; 71 return(0); // no new ir code A 248 .line 71 0000A1 B0E0 A 249 CLR R0 A 250 ; 72 } 0000A3 A 251 _3_L_18: A 252 .line 72 0000A3 D6 0000 A 253 CALL __b_framereset 0000A6 AF A 254 RET A 255 .endfunc "wait",72,"_wait" 00000C 0000 A 256 VECTOR TIMER0=_isr_timer0 A 257 XREF _oldir:EDATA A 258 XREF _ircode:EDATA A 259 XREF _lt1:EDATA A 260 XREF _t5:EDATA Zilog Z8 Encore! Macro Assembler Version 2.50 (08031703) 15-Jan-09 11:01:14 page: 6 PC Object I Line Source timer.src A 261 XREF _t4:EDATA A 262 XREF _t3:EDATA A 263 XREF _t2:EDATA A 264 XREF _t1:EDATA A 265 XREF _subtmr:EDATA A 266 XREF __b_framereset:ROM A 267 XREF __b_iframereset:ROM A 268 XREF __b_frameset00:ROM A 269 XREF __b_iframeset00:ROM A 270 XDEF _wait A 271 XDEF _init_timer0 A 272 XDEF _isr_timer0 A 273 END Errors: 0 Warnings: 0 Lines Assembled: 274