📄 main.src
字号:
; SOURCE LINE # 309
CLR LEDG
SETB LEDR
?C0041:
; delayms(100);
; SOURCE LINE # 310
MOV R7,#064H
MOV R6,#00H
LCALL _delayms
; BELL_OFF;
; SOURCE LINE # 311
CLR BELL
; if(RG==RED) {LEDR_OFF;}
; SOURCE LINE # 312
MOV DPTR,#RG?243
MOVX A,@DPTR
CJNE A,#01H,?C0042
SETB LEDR
SJMP ?C0043
?C0042:
; else
; {LEDG_OFF;}
; SOURCE LINE # 314
SETB LEDG
?C0043:
; delayms(200); //多次蜂鸣需要间隔延时
; SOURCE LINE # 315
MOV R7,#0C8H
MOV R6,#00H
LCALL _delayms
; }
; SOURCE LINE # 316
MOV DPTR,#i?244
MOVX A,@DPTR
INC A
MOVX @DPTR,A
SJMP ?C0037
; }
; SOURCE LINE # 317
; }
; SOURCE LINE # 318
?C0044:
RET
; END OF _Beef
;
; void BeefL(UCHAR be,UCHAR RG)
RSEG ?PR?_BeefL?MAIN
_BeefL:
USING 0
; SOURCE LINE # 320
MOV DPTR,#RG?346
MOV A,R5
MOVX @DPTR,A
MOV DPTR,#be?345
MOV A,R7
MOVX @DPTR,A
; {
; SOURCE LINE # 321
; UCHAR i;
;
; if(be==1)
; SOURCE LINE # 324
XRL A,#01H
JNZ ?C0045
; {
; SOURCE LINE # 325
; BELL_ON;
; SOURCE LINE # 326
SETB BELL
; if(RG==RED) {LEDR_ON;}
; SOURCE LINE # 327
INC DPTR
MOVX A,@DPTR
CJNE A,#01H,?C0046
CLR LEDR
SETB LEDG
SJMP ?C0047
?C0046:
; else
; {LEDG_ON;}
; SOURCE LINE # 329
CLR LEDG
SETB LEDR
?C0047:
; delayms(500);
; SOURCE LINE # 330
MOV R7,#0F4H
MOV R6,#01H
LCALL _delayms
; BELL_OFF; //单次蜂鸣
; SOURCE LINE # 331
CLR BELL
; if(RG==RED) {LEDR_OFF;}
; SOURCE LINE # 332
MOV DPTR,#RG?346
MOVX A,@DPTR
CJNE A,#01H,?C0048
SETB LEDR
RET
?C0048:
; else
; {LEDG_OFF;}
; SOURCE LINE # 334
SETB LEDG
; }
; SOURCE LINE # 335
RET
?C0045:
;
; else
; {
; SOURCE LINE # 338
; for(i=0;i<be;i++)
; SOURCE LINE # 339
CLR A
MOV DPTR,#i?347
MOVX @DPTR,A
?C0051:
MOV DPTR,#be?345
MOVX A,@DPTR
MOV R7,A
MOV DPTR,#i?347
MOVX A,@DPTR
CLR C
SUBB A,R7
JNC ?C0058
; {
; SOURCE LINE # 340
; BELL_ON;
; SOURCE LINE # 341
SETB BELL
; if(RG==RED) {LEDR_ON;}
; SOURCE LINE # 342
MOV DPTR,#RG?346
MOVX A,@DPTR
CJNE A,#01H,?C0054
CLR LEDR
SETB LEDG
SJMP ?C0055
?C0054:
; else
; {LEDG_ON;}
; SOURCE LINE # 344
CLR LEDG
SETB LEDR
?C0055:
; delayms(300);
; SOURCE LINE # 345
MOV R7,#02CH
MOV R6,#01H
LCALL _delayms
; BELL_OFF;
; SOURCE LINE # 346
CLR BELL
; if(RG==RED) {LEDR_OFF;}
; SOURCE LINE # 347
MOV DPTR,#RG?346
MOVX A,@DPTR
CJNE A,#01H,?C0056
SETB LEDR
SJMP ?C0057
?C0056:
; else
; {LEDG_OFF;}
; SOURCE LINE # 349
SETB LEDG
?C0057:
; delayms(200); //多次蜂鸣需要间隔延时
; SOURCE LINE # 350
MOV R7,#0C8H
MOV R6,#00H
LCALL _delayms
; }
; SOURCE LINE # 351
MOV DPTR,#i?347
MOVX A,@DPTR
INC A
MOVX @DPTR,A
SJMP ?C0051
; }
; SOURCE LINE # 352
; }
; SOURCE LINE # 353
?C0058:
RET
; END OF _BeefL
;
;
; /******************************************************************************
; ** 函数: SYSCLK_Init ()
; ** 入参:
; ** 返回:
; ** 说明:
; ** SYSCLK_Init
; ** This routine initializes the system clock to use the internal oscillator
; ** at its maximum frequency.
; ** Also enables the Missing Clock Detector.
; ******************************************************************************/
;
; void SYSCLK_Init (void)
RSEG ?PR?SYSCLK_Init?MAIN
SYSCLK_Init:
; SOURCE LINE # 367
; {
; SOURCE LINE # 368
; OSCICN |= 0x03; // Configure internal oscillator for
; SOURCE LINE # 369
ORL OSCICN,#03H
; // its maximum frequency
; RSTSRC = 0x04; // Enable missing clock detector
; SOURCE LINE # 371
MOV RSTSRC,#04H
;
; }
; SOURCE LINE # 373
RET
; END OF SYSCLK_Init
;
; /******************************************************************************
; ** 函数: delay()
; ** 入参: unsigned int m
; ** 返回:
; ** 说明:
; ******************************************************************************/
;
; void delay(unsigned int m)
RSEG ?PR?_delay?MAIN
_delay:
USING 0
; SOURCE LINE # 382
;---- Variable 'm?548' assigned to Register 'R6/R7' ----
; {
; SOURCE LINE # 383
; unsigned int n;
; n=0;
; SOURCE LINE # 385
;---- Variable 'n?549' assigned to Register 'R4/R5' ----
CLR A
MOV R5,A
MOV R4,A
?C0060:
; while(n<m)
; SOURCE LINE # 386
CLR C
MOV A,R5
SUBB A,R7
MOV A,R4
SUBB A,R6
JNC ?C0062
; {n++;}
; SOURCE LINE # 387
INC R5
CJNE R5,#00H,?C0078
INC R4
?C0078:
SJMP ?C0060
; return;
; }
; SOURCE LINE # 389
?C0062:
RET
; END OF _delay
;
;
; /******************************************************************************
; ** 函数: PCA_Init
; ** 入参: 无
; ** 返回: 误
; ** 说明: 脉冲捕获初始化
; ******************************************************************************/
;
; void PCA_Init (void)
RSEG ?PR?PCA_Init?MAIN
PCA_Init:
; SOURCE LINE # 399
; {
; SOURCE LINE # 400
; EIE1 = 0x10; //允许PCA0中断请求
; SOURCE LINE # 401
MOV EIE1,#010H
;
; PCA0L = 0x00;
; SOURCE LINE # 403
CLR A
MOV PCA0L,A
; PCA0H = 0x00;
; SOURCE LINE # 404
MOV PCA0H,A
;
; PCA0CPM0 = 0x11;
; SOURCE LINE # 406
MOV PCA0CPM0,#011H
; PCA0CPL0 = 0x00;
; SOURCE LINE # 407
MOV PCA0CPL0,A
; PCA0CPH0 = 0x20;
; SOURCE LINE # 408
MOV PCA0CPH0,#020H
;
;
; PCA0CPM1 = 0x11;
; SOURCE LINE # 411
MOV PCA0CPM1,#011H
; PCA0CPL1 = 0x00;
; SOURCE LINE # 412
MOV PCA0CPL1,A
; PCA0CPH1 = 0x20;
; SOURCE LINE # 413
MOV PCA0CPH1,#020H
;
; PCA0CN = 0x40; //允许PCA定时器/计数器
; SOURCE LINE # 415
MOV PCA0CN,#040H
;
; }
; SOURCE LINE # 417
RET
; END OF PCA_Init
CSEG AT 0005BH
LJMP PCA_ISR
; /******************************************************************************
; ** 函数: PCA_ISR
; ** 入参: 无
; ** 返回: 无
; ** 说明: 脉冲捕获中断服务程序
; ******************************************************************************/
;
; void PCA_ISR (void) interrupt 11
RSEG ?PR?PCA_ISR?MAIN
USING 0
PCA_ISR:
PUSH ACC
PUSH DPH
PUSH DPL
PUSH PSW
MOV PSW,#00H
PUSH AR0
PUSH AR6
PUSH AR7
USING 0
; SOURCE LINE # 425
; {
;
;
; CF = 0; //脉冲中断清标记
; SOURCE LINE # 429
CLR CF
;
; wie_str=1; //设置标记提供TIME0检测
; SOURCE LINE # 431
SETB wie_str
; RE_LOAD_TIME0;
; SOURCE LINE # 432
MOV TH0,#00H
MOV TL0,TH0
; //重载定时器0
;
;
; if(CCF0==1) //查看d0 or d1
; SOURCE LINE # 436
JNB CCF0,?C0064
; {
; SOURCE LINE # 437
; CCF0 = 0; //清匹配中断标志
; SOURCE LINE # 438
CLR CCF0
;
; wiebuf_cout[wie_cout]<<=1;
; SOURCE LINE # 440
MOV R0,#LOW (wie_cout)
MOV A,@R0
MOV R7,A
ADD A,#LOW (wiebuf_cout)
MOV DPL,A
CLR A
ADDC A,#HIGH (wiebuf_cout)
MOV DPH,A
MOVX A,@DPTR
ADD A,ACC
MOVX @DPTR,A
; wiebuf_cout[wie_cout] |=0;
; SOURCE LINE # 441
MOV A,#LOW (wiebuf_cout)
ADD A,R7
MOV DPL,A
CLR A
ADDC A,#HIGH (wiebuf_cout)
MOV DPH,A
MOVX A,@DPTR
MOVX @DPTR,A
; wie_8bit--;
; SOURCE LINE # 442
MOV R0,#LOW (wie_8bit)
DEC @R0
;
; }
; SOURCE LINE # 444
?C0064:
;
;
; if(CCF1==1)
; SOURCE LINE # 447
JNB CCF1,?C0065
; {
; SOURCE LINE # 448
; CCF1 = 0;
; SOURCE LINE # 449
CLR CCF1
; wiebuf_cout[wie_cout]<<=1;
; SOURCE LINE # 450
MOV R0,#LOW (wie_cout)
MOV A,@R0
MOV R7,A
ADD A,#LOW (wiebuf_cout)
MOV DPL,A
CLR A
ADDC A,#HIGH (wiebuf_cout)
MOV DPH,A
MOVX A,@DPTR
ADD A,ACC
MOVX @DPTR,A
; wiebuf_cout[wie_cout] |=1;
; SOURCE LINE # 451
MOV A,#LOW (wiebuf_cout)
ADD A,R7
MOV DPL,A
CLR A
ADDC A,#HIGH (wiebuf_cout)
MOV DPH,A
MOVX A,@DPTR
ORL A,#01H
MOVX @DPTR,A
; wie_8bit--;
; SOURCE LINE # 452
MOV R0,#LOW (wie_8bit)
DEC @R0
; }
; SOURCE LINE # 453
?C0065:
;
;
; if(!wie_8bit) //8bit 1字节溢出归0,数组指针+1
; SOURCE LINE # 456
MOV R0,#LOW (wie_8bit)
MOV A,@R0
JNZ ?C0066
; {
; SOURCE LINE # 457
; wie_cout++;
; SOURCE LINE # 458
MOV R0,#LOW (wie_cout)
INC @R0
; wie_8bit=8;
; SOURCE LINE # 459
MOV R0,#LOW (wie_8bit)
MOV @R0,#08H
; }
; SOURCE LINE # 460
?C0066:
;
;
; if(wie_cout>=32) //最多接收32字节wiegand信号
; SOURCE LINE # 463
MOV R0,#LOW (wie_cout)
MOV A,@R0
CLR C
SUBB A,#020H
JC ?C0068
; {
; SOURCE LINE # 464
; CLR_WIEBUF_COUT;
; SOURCE LINE # 465
MOV @R0,#00H
MOV R0,#LOW (wie_8bit)
MOV @R0,#08H
; }
; SOURCE LINE # 466
;
; }
; SOURCE LINE # 468
?C0068:
POP AR7
POP AR6
POP AR0
POP PSW
POP DPL
POP DPH
POP ACC
RETI
; END OF PCA_ISR
; /******************************************************************************
; ** 函数: relay_work
; ** 入参: 无
; ** 返回: 无
; ** 说明: 继电器动作
; ******************************************************************************/
; void relay_work()
RSEG ?PR?relay_work?MAIN
relay_work:
USING 0
; SOURCE LINE # 475
; {
; SOURCE LINE # 476
; if(TRIG==1) //非外部触发信号
; SOURCE LINE # 477
JNB TRIG,?C0069
; {
; SOURCE LINE # 478
; if(WIE_CK==0) //既进又出
; SOURCE LINE # 479
JB WIE_CK,?C0070
; {
; SOURCE LINE # 480
; RELAY_IN=0;
; SOURCE LINE # 481
CLR RELAY_IN
; RELAY_OUT=0;
; SOURCE LINE # 482
CLR RELAY_OUT
; }
; SOURCE LINE # 483
RET
?C0070:
;
; else
; {
; SOURCE LINE # 486
; if(IN_OUT==1) //根据卡标记动作
; SOURCE LINE # 487
JNB IN_OUT,?C0072
; {
; SOURCE LINE # 488
; RELAY_IN=0;
; SOURCE LINE # 489
CLR RELAY_IN
; }
; SOURCE LINE # 490
RET
?C0072:
; else
; {
; SOURCE LINE # 492
; RELAY_OUT=0;
; SOURCE LINE # 493
CLR RELAY_OUT
; }
; SOURCE LINE # 494
; }
; SOURCE LINE # 495
;
; }
; SOURCE LINE # 497
RET
?C0069:
; else //外部触发信号
; {
; SOURCE LINE # 499
; if(RELAY_TRIG_STATE==1)
; SOURCE LINE # 500
MOV R0,#LOW (RELAY_TRIG_STATE)
MOV A,@R0
CJNE A,#01H,?C0075
; {
; SOURCE LINE # 501
; RELAY_IN=0; //如果触发的是进门,开进门继电器
; SOURCE LINE # 502
CLR RELAY_IN
; }
; SOURCE LINE # 503
RET
?C0075:
; else
; {
; SOURCE LINE # 505
; RELAY_OUT=0;
; SOURCE LINE # 506
CLR RELAY_OUT
; }
; SOURCE LINE # 507
;
; }
; SOURCE LINE # 509
; }
; SOURCE LINE # 510
?C0077:
RET
; END OF relay_work
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -