?? mine.src
字號:
RSEG ?PR?_sEOS_init?MINE
_sEOS_init:
USING 0
; SOURCE LINE # 94
MOV TICK?443,R7
; {
; SOURCE LINE # 95
; //setup timer2
; tlong Inc;
; tword Reload_16;
; tbyte Reload_08H, Reload_08L;
;
; Add_one=0;
; SOURCE LINE # 101
MOV Add_one+03H,#00H
MOV Add_one+02H,#00H
MOV Add_one+01H,#00H
MOV Add_one,#00H
; time_G=0;
; SOURCE LINE # 102
MOV time_G,#00H
; time_temp_G=0;
; SOURCE LINE # 103
MOV time_temp_G,#00H
;
; // Timer 2 is configured as a 16-bit timer,
; // which is automatically reloaded when it overflows
; T2CON = 0x04; // Load Timer 2 control register
; SOURCE LINE # 107
MOV T2CON,#04H
;
; // Number of timer increments required (max 65536)
; Inc = ((tlong)TICK*(OSC_FREQ/1000))/OSC_PER_INST;
; SOURCE LINE # 110
MOV R7,TICK?443
CLR A
MOV R4,A
MOV R5,A
MOV R6,A
MOV R3,#0E0H
MOV R2,#02EH
MOV R1,#00H
MOV R0,#00H
LCALL ?C?LMUL
MOV R3,#0CH
MOV R2,#00H
MOV R1,#00H
MOV R0,#00H
LCALL ?C?ULDIV
MOV Inc?444+03H,R7
MOV Inc?444+02H,R6
MOV Inc?444+01H,R5
MOV Inc?444,R4
;
; // 16-bit reload value
; Reload_16 = (tword) (65536UL - Inc);
; SOURCE LINE # 113
MOV R6,Inc?444+02H
MOV R7,Inc?444+03H
CLR C
CLR A
SUBB A,R7
MOV Reload_16?445+01H,A
CLR A
SUBB A,R6
MOV Reload_16?445,A
;
; // 8-bit reload values (High & Low)
; Reload_08H = (tbyte)(Reload_16 / 256);
; SOURCE LINE # 116
MOV A,Reload_16?445
MOV R7,A
MOV R6,#00H
MOV Reload_08H?446,R7
; Reload_08L = (tbyte)(Reload_16 % 256);
; SOURCE LINE # 117
MOV R6,#00H
MOV R7,Reload_16?445+01H
MOV Reload_08L?447,R7
;
; // Used for manually checking timing (in simulator)
; //P2 = Reload_08H;
; //P3 = Reload_08L;
;
; TH2 = Reload_08H; // Load T2 high byte
; SOURCE LINE # 123
MOV TH2,Reload_08H?446
; RCAP2H = Reload_08H; // Load T2 reload capt. reg. high byte
; SOURCE LINE # 124
MOV RCAP2H,Reload_08H?446
; TL2 = Reload_08L; // Load T2 low byte
; SOURCE LINE # 125
MOV TL2,Reload_08L?447
; RCAP2L = Reload_08L; // Load T2 reload capt. reg. low byte
; SOURCE LINE # 126
MOV RCAP2L,Reload_08L?447
;
; // Timer 2 interrupt is enabled, and ISR will be called
; // whenever the timer overflows.
; ET2 = 1;
; SOURCE LINE # 130
SETB ET2
; //setup int0
; IT0 = 1;
; SOURCE LINE # 132
SETB IT0
; EX0 = 1;
; SOURCE LINE # 133
SETB EX0
; //setup int1
; IT1 = 1;
; SOURCE LINE # 135
SETB IT1
; EX1 = 1;
; SOURCE LINE # 136
SETB EX1
; //setup time0
; TMOD= 0x01;
; SOURCE LINE # 138
MOV TMOD,#01H
; TH0 = 0xB1;
; SOURCE LINE # 139
MOV TH0,#0B1H
; TL0 = 0xE0;
; SOURCE LINE # 140
MOV TL0,#0E0H
; // Start Timer 2 running
; TR2 = 1;
; SOURCE LINE # 142
SETB TR2
;
; EA = 1; // Globally enable interrupts
; SOURCE LINE # 144
SETB EA
; }
; SOURCE LINE # 145
RET
; END OF _sEOS_init
;
; //************************************
; //中斷0,計算路程和根據時間計算速度
;
; void intp0(void) interrupt INT_0
RSEG ?PR?intp0?MINE
USING 0
intp0:
PUSH ACC
PUSH B
PUSH DPH
PUSH DPL
PUSH PSW
MOV PSW,#00H
PUSH AR0
PUSH AR1
PUSH AR2
PUSH AR3
PUSH AR4
PUSH AR5
PUSH AR6
PUSH AR7
USING 0
; SOURCE LINE # 150
; {
; Add_one++;
; SOURCE LINE # 152
MOV R7,Add_one+03H
MOV R6,Add_one+02H
MOV R5,Add_one+01H
MOV R4,Add_one
MOV R3,#01H
MOV R2,#00H
MOV R1,#00H
MOV R0,#00H
MOV A,R7
ADD A,R3
MOV Add_one+03H,A
MOV A,R6
ADDC A,R2
MOV Add_one+02H,A
MOV A,R5
ADDC A,R1
MOV Add_one+01H,A
MOV A,R4
ADDC A,R0
MOV Add_one,A
;
; if(time_G<time_temp_G)
; SOURCE LINE # 154
MOV A,time_G
CLR C
SUBB A,time_temp_G
JNC ?C0010
; speed=DIS*10/(time_G+100-time_temp_G);
; SOURCE LINE # 155
MOV A,time_G
ADD A,#064H
MOV R7,A
CLR C
MOV A,R7
SUBB A,time_temp_G
MOV R7,A
MOV A,#0DCH
MOV B,R7
DIV AB
MOV speed,A
?C0010:
; speed=DIS*10/(time_G-time_temp_G);
; SOURCE LINE # 156
CLR C
MOV A,time_G
SUBB A,time_temp_G
MOV R7,A
MOV A,#0DCH
MOV B,R7
DIV AB
MOV speed,A
;
; dis=Add_one*DIS;
; SOURCE LINE # 158
MOV R7,#016H
MOV R6,#00H
MOV R5,#00H
MOV R4,#00H
MOV R3,Add_one+03H
MOV R2,Add_one+02H
MOV R1,Add_one+01H
MOV R0,Add_one
LCALL ?C?LMUL
MOV dis,R6
MOV dis+01H,R7
; time_temp_G=time_G;
; SOURCE LINE # 159
MOV time_temp_G,time_G
; }
; SOURCE LINE # 160
POP AR7
POP AR6
POP AR5
POP AR4
POP AR3
POP AR2
POP AR1
POP AR0
POP PSW
POP DPL
POP DPH
POP B
POP ACC
RETI
; END OF intp0
;
; //************************************
; //系統時鐘,計算時間
;
; void timer2(void) interrupt TIMER_2
RSEG ?PR?timer2?MINE
USING 0
timer2:
PUSH ACC
PUSH PSW
MOV PSW,#00H
PUSH AR7
USING 0
; SOURCE LINE # 165
; {
; if(++time_G==100)
; SOURCE LINE # 167
INC time_G
MOV R7,time_G
MOV A,R7
CJNE A,#064H,?C0014
; {
; SOURCE LINE # 168
; time_G=0;
; SOURCE LINE # 169
MOV time_G,#00H
; if(++sec==60)
; SOURCE LINE # 170
INC sec
MOV R7,sec
MOV A,R7
CJNE A,#03CH,?C0014
; {
; SOURCE LINE # 171
; sec=0;
; SOURCE LINE # 172
MOV sec,#00H
; ++min;
; SOURCE LINE # 173
INC min
; }
; SOURCE LINE # 174
; }
; SOURCE LINE # 175
; }
; SOURCE LINE # 176
?C0014:
POP AR7
POP PSW
POP ACC
RETI
; END OF timer2
;
; //*************************************
; //中斷1,系統暫停
; void intp1(void) interrupt INT_1
RSEG ?PR?intp1?MINE
USING 0
intp1:
PUSH ACC
; SOURCE LINE # 180
; {
; flash_t=50;
; SOURCE LINE # 182
MOV flash_t,#032H
;
; if(Sys_flag==WORK)
; SOURCE LINE # 184
MOV A,Sys_flag
JNZ ?C0015
; {
; SOURCE LINE # 185
; Sys_flag=TIMEOUT;
; SOURCE LINE # 186
MOV Sys_flag,#01H
; TR2 =0; //禁止系統時鐘&計數中斷
; SOURCE LINE # 187
CLR TR2
; EX0 =0;
; SOURCE LINE # 188
CLR EX0
; TR0 =1; //開放暫停時鐘計時
; SOURCE LINE # 189
SETB TR0
; ET0 =1;
; SOURCE LINE # 190
SETB ET0
; }
; SOURCE LINE # 191
SJMP ?C0017
?C0015:
; else
; {
; SOURCE LINE # 193
; Sys_flag=WORK;
; SOURCE LINE # 194
MOV Sys_flag,#00H
; TR2 =1;
; SOURCE LINE # 195
SETB TR2
; EX0 =1;
; SOURCE LINE # 196
SETB EX0
; TR0 =0;
; SOURCE LINE # 197
CLR TR0
; ET0 =0;
; SOURCE LINE # 198
CLR ET0
; Flash=0;
; SOURCE LINE # 199
CLR Flash
; }
; SOURCE LINE # 200
; }
; SOURCE LINE # 201
?C0017:
POP ACC
RETI
; END OF intp1
;
;
; //*************************************
; //時鐘中斷0,計算LED閃爍時間
;
; void timer0(void) interrupt TIMER_0
RSEG ?PR?timer0?MINE
USING 0
timer0:
PUSH ACC
PUSH PSW
MOV PSW,#00H
PUSH AR7
USING 0
; SOURCE LINE # 207
?C0018:
; {
; while(--flash_t==0)
; SOURCE LINE # 209
DEC flash_t
MOV R7,flash_t
MOV A,R7
JNZ ?C0020
; {
; SOURCE LINE # 210
; #pragma asm
; CPL Flash
CPL Flash
; #pragma endasm
; }
; SOURCE LINE # 214
SJMP ?C0018
;
; }
; SOURCE LINE # 216
?C0020:
POP AR7
POP PSW
POP ACC
RETI
; END OF timer0
END
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -