$NOMOD51 $NOLIST $INCLUDE(REG51.PDF) ;$LIST is last statement in REG52.PDF ;发送,接收通讯参考请注意标注 ser bit p3.5 rclk bit p3.4 srclk bit P3.3 WDT BIT 76h RLED BIT P1.3 TLED BIT P1.4 BLED BIT P1.5 CON BIT p1.4 sb1 bit p3.7 WRR BIT 7FH VRF BIT 7EH KEYS BIT 7CH KYYA BIT 7BH KYYB BIT 7AH KYYC BIT 79H RIBZ BIT 78H r100 bit 77h csbz bit 76h csbb bit 75h rri bit 74h bufh equ 7fh bufl equ 7eh bull equ 7dh bftm equ 7ch rrbz equ 7bh bufb equ 7ah rbcn equ 79h rbuf equ 78h rsbf equ 77h LEDP EQU 18H KEB1 EQU 19H KEYC EQU 1AH LEDH EQU 1FH LEDM EQU 1EH LEDL EQU 1DH LEDC EQU 1CH RCON EQU 1BH RLEN EQU 17H RTIM EQU 16H TITM EQU 15H DCON EQU 14H main equ 30h IRQ0 EQU 3 time0 equ 0bh time1 equ 1bh sioo equ 23h stk equ 5fh sdzz equ 30 cseg org 0 jmp main ORG IRQ0 ORG TIME0 JMP EXT0 org time1 anl ie,#0f7h reti ORG SIOO JMP ES00 org main mov sp,#stk mov a,#0ffh ORL P3,a orl p1,a orl p2,a orl p0,a CLR A MOV IE,A MOV R5,a STT11: DJNZ R4,STt11 djnz r5,stt11 MOV R2,#50H MOV R0,#10H STT1: MOV @R0,A INC R0 DJNZ R2,STT1 MOV TMOD,#21H CLR ET1 MOV TH0,#0F8H SETB TR0 SETB EA SETB ET0 ;PPP0: MOV LEDH,#82H ; MOV LEDM,#3 ; MOV LEDL,#7 ; MOV P0,#0 ; MOV LEDP,#1 ; JMP PPP0 clr kyya clr kyyc SETB KYYB CLR KYYC stan1: MOV LEDH,#0FH MOV LEDM,#0FH MOV LEDL,#0FH MOV LEDP,#0 mov a,p1 cpl a rl a rl a anl a,#3 MOV DPTR,#DATE2 MOVC A,@A+DPTR clr r100 setb es CLR ET1 MOV TH1,A MOV A,TMOD ANL A,#0F0H CJNE A,#20H,SAR2 JMP SARR SAR2: MOV TMOD,#21H SARR: MOV SCON,#70H MOV PCON,#80H mov 5bh,#0 SETB TR1 SETB PT0 SETB PT1 setb rled setb tled SETB BLED STAN: CALL RESCR orl p1,#0c0h ; orl p3,#87h CLR EX0 CLR EX1 CLR RS0 CLR RS1 MOV SP,#STK strr1: jnb rri,lp201 clr rri mov r7,rsbf call ri01 lp201: JBC RIBZ,LOP2 JMP STAC LOP2: INC DCON CLR ES ;数据发送 CLR TI CLR TLED CLR CON ;R/T低电平,启动模块发送 MOV R3,#10 ;可以省掉 MOV R2,#0 ;可以省掉 LOP21: DJNZ R2,LOP21 ;延迟8ms,可以省掉 DJNZ R3,LOP21 ;可以省掉 CLR TI MOV SBUF,#0FFH ;发送数据0ffh,接收端 位同步 LOP22: JNB TI,LOP22 CLR TI MOV SBUF,#0FFH ;发送数据0ffh,接收端 位同步,可以省掉 LOP221: JNB TI,LOP221 CLR TI MOV SBUF,#0EBH;发送数据0ebh,字节1同步 LOP23: JNB TI,LOP23 CLR TI MOV R0,#30H MOV A,33H ADD A,#5 MOV R2,A LOP24: MOV A,@R0 MOV SBUF,A ;发送数据090h,feh字节同步,然后发送所有数据 INC R0 call rescr LOP25: JNB TI,LOP25 ;发送完有效数据后,再补发0ffh数据延迟关断R/T。如果采用KQ-100F模块建议不要补发0ffh数据。 CLR TI DJNZ R2,LOP24 SETB CON ;R/T置高关断发送,发送结束。模块处于接收状态。 SETB TLED SETB ES lop251: CALL RESCR STAC: jbc KYYC,LOP3 JMP STAD LOP3: clr kyyc setb kyyb mov c,p3.2 clr a rlc a mov 58H,a MOV R2,#0 mov 59h,#sdzz MOV R6,59h MOV 5AH,#0 MOV 5CH,#0 MOV 5DH,#0 MOV A,58H MOV 58H,#10H JNB ACC.0,LOP30 MOV 58H,#20H MOV 5BH,#0 LOP30: MOV A,#1 ADD A,5BH DA A MOV 5BH,A ANL A,#0FH MOV LEDM,A MOV A,5BH ANL A,#0F0H SWAP A MOV LEDH,A MOV LEDL,#0 ORL LEDM,#80H MOV LEDP,#0 MOV R7,58H MOV 30H,#90H MOV 31H,#0FEH MOV 32H,5BH MOV 33H,58H MOV R0,#34H MOV R2,5AH LOP301: MOV A,R2 MOV @R0,A INC R2 INC R0 DJNZ R7,LOP301 CLR ES CLR TI CLR TLED CLR CON MOV R3,#10 MOV R2,#0 LOP31: DJNZ R2,LOP31 DJNZ R3,LOP31 CLR TI MOV SBUF,#0FFH LOP32: JNB TI,LOP32 CLR TI MOV SBUF,#0FFH LOP222: JNB TI,LOP222 CLR TI MOV SBUF,#0EBH LOP33: JNB TI,LOP33 CLR TI MOV R0,#30H MOV A,58H ADD A,#5 MOV R2,A LOP34: MOV A,@R0 MOV SBUF,A INC R0 call rescr LOP35: JNB TI,LOP35 CLR TI DJNZ R2,LOP34 SETB CON SETB TLED SETB ES lop351: CALL RESCR MOV TITM,#0 LOP363: jnb rri,lp202 clr rri mov r7,rsbf call ri01 lp202: JBC RIBZ,LOP36 JBC KYYc,LOP361 CALL RESCR MOV A,#25 CJNE A,TITM,LOP362 LOP362: JNC LOP363 JMP LOP36R LOP36: MOV R7,58H MOV R0,#34H LOP364: MOV A,@R0 CJNE A,5AH,LOP365 SJMP LOP366 LOP365: MOV A,5DH ADD A,#1 MOV 5DH,A CLR A ADDC A,5CH MOV 5CH,A LOP366: INC 5AH INC R0 DJNZ R7,LOP364 LOP368: DJNZ R6,LOP367 JMP LOP37 lop361: mov a,#sdzz clr c subb a,r6 jnz lop36b jmp main lop36b: mov 59h,a jmp lop37 LOP367: JMP LOP30 LOP36R: MOV A,5DH ADD A,58H MOV 5DH,A CLR A ADDC A,5CH MOV 5CH,A MOV A,5AH ADD A,58H MOV 5AH,A SJMP LOP368 LOP37: MOV A,58H MOV B,59H MUL AB MOV R2,B MOV R3,A MOV R4,#0 MOV R5,#0 MOV R6,#10H LOP371: MOV A,5DH CLR C RLC A MOV 5DH,A MOV A,5CH RLC A MOV 5CH,A MOV A,5DH CLR C SUBB A,R3 MOV 5DH,A MOV A,5CH SUBB A,R2 JNC LOP372 MOV A,R3 ADD A,5DH MOV 5DH,A SETB C SJMP LOP373 LOP372: MOV 5CH,A LOP373: CPL C MOV A,R5 RLC A MOV R5,A MOV A,R4 RLC A MOV R4,A DJNZ R6,LOP371 MOV A,R5 ORL A,R4 JNZ LOP374 MOV LEDH,#1 MOV LEDM,#0 MOV LEDL,#0 JMP LOP375 LOP374: MOV A,R4 CPL A MOV R4,A MOV A,R5 CPL A ADD A,#1 MOV R5,A MOV A,R4 ADDC A,#0 MOV R4,A MOV R0,#30H MOV R2,#3 LOP376: MOV A,R5 MOV B,#0AH MUL AB MOV R5,A MOV R3,B MOV A,R4 MOV B,#0AH MUL AB ADD A,R3 MOV R4,A MOV A,B ADDC A,#0 MOV @R0,A INC R0 DJNZ R2,LOP376 MOV LEDH,30H MOV LEDM,31H ORL LEDM,#80H MOV LEDL,32H LOP375: CLR BLED LOP378: CALL RESCR JBC KYYC,LOP379 SJMP LOP378 LOP379: JMP MAIN STAD: LOP1: JMP STAN EXT0: PUSH PSW PUSH ACC PUSH DPH PUSH DPL SETB RS0 CLR RS1 MOV TH0,#0FfH inc bftm anl bftm,#7h etior: mov a,bftm jz etirr jmp et025 ;100BPS接收抗干扰滤波 etirr: MOV A,RCON JNZ EXTT3 MOV RTIM,#0 SETB RLED EXTT3: INC KEYC MOV A,KEYC JNZ EXTT1 INC TITM INC RTIM MOV A,RTIM CJNE A,#21,EXTT1 MOV RCON,#0 MOV RTIM,#0 SETB RLED EXTT1: mov a,keyc ANL A,#7 JNZ ET03 setb sb1 nop nop jnb sb1,et31 CLR KEYS clr kyyb JMP ET03 ET31: jb kyyb,et03 JB KEYS,ET32 SETB KEYS JMP ET03 ET32: SETB KYYC setb kyyb ET03: INC LEDC MOV A,#2 CJNE A,LEDC,ET01 ET01: JNC ET02 MOV LEDC,#0 ET02: MOV A,LEDC MOV R2,A ADD A,#LEDL MOV R0,A MOV A,@R0 MOV C,ACC.7 ANL A,#0FH MOV DPTR,#DATE MOVC A,@A+DPTR MOV ACC.7,C MOV R3,#8 ET021: RLC A MOV SER,C CLR SRCLK SETB SRCLK DJNZ R3,ET021 ORL P1,#07H CLR RCLK SETB RCLK MOV A,R2 INC A MOV R3,A MOV A,#0FfH clr c ET022: RLC A DJNZ R3,ET022 ET023: ANL P1,A ET025: POP DPL POP DPH POP ACC POP PSW RETi RESCR: CPL WDT CPL WDT RET ES00: PUSH PSW PUSH ACC SETB RS0 CLR RS1 JBC RI,RI0t CLR TI ESRg: call rescr POP ACC POP PSW RESS: RETI ri0t: mov r7,sbuf call ri01 jmp esrg RI01: JB RIBZ,ESRE ;接收通讯程序 MOV A,RCON JNZ RI02 CJNE R7,#0EBH,ESRE ;收到EBH? INC RCON JMP ESRE ;收到EBH ,RCON=1 RI02: MOV A,RCON CJNE A,#29H,RI21 RI21: JC RI22 MOV RCON,#0 JMP ESRE RI22: DEC A ADD A,#30H MOV R1,A MOV A,R7 MOV @R1,A INC RCON MOV A,RCON CJNE A,#3,RI03 MOV A,#90H ;当RCON=3时,已收到3字节数据,并且保证第一个字节是EBH CJNE A,30H,RI04 MOV A,#0FEH CJNE A,31H,RI04 ;判断三个字节是EBH,90H,FEH否? CLR RLED ;如果是,以接收到同步码,接收灯亮,准备接收数据。 JMP ESRE RI04: MOV A,30H CJNE A,#0EBH,RI41;如果不是第2,3字节是EBH否? MOV 30H,31H DEC RCON JMP ESRE RI41: MOV A,31H CJNE A,#0EBH,RI42 MOV RCON,#1 JMP ESRE RI42: MOV RCON,#0 ESRR: JMP ESRE RI03: CJNE A,#5,RI05 MOV A,33H ADD A,#5 MOV RLEN,A ;把字长放到RLEN JMP ESRE RI05: JC ESRR CJNE A,RLEN,RI51 RI51: JC ESRR SETB RIBZ ;已收到全部数据,置位接收标识。 SETB RLED ;接收灯熄灭 MOV RCON,#0 esre: ret DATE: DB 3FH,6,5BH,4FH,66H,6DH,7DH,7 DB 7FH,6FH,77H,7CH,39H,5EH,79H DB 40H DATE1: DB 6,12H,24h,48h DATE2: DB 0a0h,0D0H,0e8h,0f4h END