Hiện em đang làm 1 mạch thu và 1 mach phát dữ liệu bằng AT89C51
Đây là code của mạch phát dữ liệu (Mã hóa chuỗi bit giống như trong hình . "Bit 1" là xung 1 delay T , một xung 0 delay 2T ; "bit 0" là xung là 1 delay T , xung 0 delay T . Bit start đầu tiên là xung 0 delay 3T ) . Dùng ma trận phím từ phát chuỗi bit theo giá trị thập phân từ 1~49
Còn đây là code thu
Không hiểu sao mà thu phát ra toàn sai
Đây là code của mạch phát dữ liệu (Mã hóa chuỗi bit giống như trong hình . "Bit 1" là xung 1 delay T , một xung 0 delay 2T ; "bit 0" là xung là 1 delay T , xung 0 delay T . Bit start đầu tiên là xung 0 delay 3T ) . Dùng ma trận phím từ phát chuỗi bit theo giá trị thập phân từ 1~49
COT EQU P2
HANG EQU P1
ORG 00H
COT1:
MOV COT,#0FEH
MOV A,HANG
CJNE A,#0FFH,NEXT1
JMP COT2
NEXT1:
MOV R0,#1
CALL KT_COT
JMP COT1
COT2:
MOV COT,#0FDH
MOV A,HANG
CJNE A,#0FFH,NEXT2
JMP COT3
NEXT2:
MOV R0,#8
CALL KT_COT
JMP COT1
COT3:
MOV COT,#0FBH
MOV A,HANG
CJNE A,#0FFH,NEXT3
JMP COT4
NEXT3:
MOV R0,#15
CALL KT_COT
JMP COT1
COT4:
MOV COT,#0F7H
MOV A,HANG
CJNE A,#0FFH,NEXT4
JMP COT5
NEXT4:
MOV R0,#22
CALL KT_COT
JMP COT1
COT5:
MOV COT,#0EFH
MOV A,HANG
CJNE A,#0FFH,NEXT5
JMP COT6
NEXT5:
MOV R0,#29
CALL KT_COT
JMP COT1
COT6:
MOV COT,#0DFH
MOV A,HANG
CJNE A,#0FFH,NEXT6
JMP COT7
NEXT6:
MOV R0,#36
CALL KT_COT
JMP COT1
COT7:
MOV COT,#0BFH
MOV A,HANG
CJNE A,#0FFH,NEXT7
JMP COT1
NEXT7:
MOV R0,#43
CALL KT_COT
JMP COT1
KT_COT:
CJNE A,#0FEH,TT1
CALL TAO_DL
JMP THOAT1
TT1: CJNE A,#0FDH,TT2
MOV A,R0
ADD A,#1
MOV R0,A
CALL TAO_DL
JMP THOAT1
TT2: CJNE A,#0FBH,TT3
MOV A,R0
ADD A,#2
MOV R0,A
CALL TAO_DL
JMP THOAT1
TT3: CJNE A,#0F7H,TT4
MOV A,R0
ADD A,#3
MOV R0,A
CALL TAO_DL
JMP THOAT1
TT4: CJNE A,#0EFH,TT5
MOV A,R0
ADD A,#4
MOV R0,A
CALL TAO_DL
JMP THOAT1
TT5: CJNE A,#0DFH,TT6
MOV A,R0
ADD A,#5
MOV R0,A
CALL TAO_DL
JMP THOAT1
TT6: CJNE A,#0BFH,TT7
MOV A,R0
ADD A,#6
MOV R0,A
CALL TAO_DL
JMP THOAT1
TT7: CJNE A,#07FH,THOAT1
MOV A,R0
ADD A,#7
MOV R0,A
CALL TAO_DL
THOAT1:
RET
TAO_DL:
CLR P3.7
CALL DELAY_600US
CALL DELAY_600US
CALL DELAY_600US
MOV R1,#8
MOV A,R0
TIEP: RRC A
JC BIT1
SETB P3.7
CALL DELAY_600US
CLR P3.7
CALL DELAY_600US
JMP NEXT
BIT1: SETB P3.7
CALL DELAY_600US
CLR P3.7
CALL DELAY_600US
CALL DELAY_600US
NEXT: DJNZ R1,TIEP
SETB P3.7
RET
DELAY_600US:
MOV TMOD,#01H
MOV TH0,#HIGH(-600)
MOV TL0,#LOW(-600)
SETB TR0
JNB TF0,$
CLR TF0
RET
END
HANG EQU P1
ORG 00H
COT1:
MOV COT,#0FEH
MOV A,HANG
CJNE A,#0FFH,NEXT1
JMP COT2
NEXT1:
MOV R0,#1
CALL KT_COT
JMP COT1
COT2:
MOV COT,#0FDH
MOV A,HANG
CJNE A,#0FFH,NEXT2
JMP COT3
NEXT2:
MOV R0,#8
CALL KT_COT
JMP COT1
COT3:
MOV COT,#0FBH
MOV A,HANG
CJNE A,#0FFH,NEXT3
JMP COT4
NEXT3:
MOV R0,#15
CALL KT_COT
JMP COT1
COT4:
MOV COT,#0F7H
MOV A,HANG
CJNE A,#0FFH,NEXT4
JMP COT5
NEXT4:
MOV R0,#22
CALL KT_COT
JMP COT1
COT5:
MOV COT,#0EFH
MOV A,HANG
CJNE A,#0FFH,NEXT5
JMP COT6
NEXT5:
MOV R0,#29
CALL KT_COT
JMP COT1
COT6:
MOV COT,#0DFH
MOV A,HANG
CJNE A,#0FFH,NEXT6
JMP COT7
NEXT6:
MOV R0,#36
CALL KT_COT
JMP COT1
COT7:
MOV COT,#0BFH
MOV A,HANG
CJNE A,#0FFH,NEXT7
JMP COT1
NEXT7:
MOV R0,#43
CALL KT_COT
JMP COT1
KT_COT:
CJNE A,#0FEH,TT1
CALL TAO_DL
JMP THOAT1
TT1: CJNE A,#0FDH,TT2
MOV A,R0
ADD A,#1
MOV R0,A
CALL TAO_DL
JMP THOAT1
TT2: CJNE A,#0FBH,TT3
MOV A,R0
ADD A,#2
MOV R0,A
CALL TAO_DL
JMP THOAT1
TT3: CJNE A,#0F7H,TT4
MOV A,R0
ADD A,#3
MOV R0,A
CALL TAO_DL
JMP THOAT1
TT4: CJNE A,#0EFH,TT5
MOV A,R0
ADD A,#4
MOV R0,A
CALL TAO_DL
JMP THOAT1
TT5: CJNE A,#0DFH,TT6
MOV A,R0
ADD A,#5
MOV R0,A
CALL TAO_DL
JMP THOAT1
TT6: CJNE A,#0BFH,TT7
MOV A,R0
ADD A,#6
MOV R0,A
CALL TAO_DL
JMP THOAT1
TT7: CJNE A,#07FH,THOAT1
MOV A,R0
ADD A,#7
MOV R0,A
CALL TAO_DL
THOAT1:
RET
TAO_DL:
CLR P3.7
CALL DELAY_600US
CALL DELAY_600US
CALL DELAY_600US
MOV R1,#8
MOV A,R0
TIEP: RRC A
JC BIT1
SETB P3.7
CALL DELAY_600US
CLR P3.7
CALL DELAY_600US
JMP NEXT
BIT1: SETB P3.7
CALL DELAY_600US
CLR P3.7
CALL DELAY_600US
CALL DELAY_600US
NEXT: DJNZ R1,TIEP
SETB P3.7
RET
DELAY_600US:
MOV TMOD,#01H
MOV TH0,#HIGH(-600)
MOV TL0,#LOW(-600)
SETB TR0
JNB TF0,$
CLR TF0
RET
END
ORG 0000H
JMP CTCHINH
ORG 0013H
JMP NGAT
ORG 0020H
CTCHINH:
MOV A,#0
MAIN:
SETB EA
SETB EX1
SETB IT1
MOV P1,A
JMP MAIN
NGAT:
CLR EX0 ; cấm ngắt
MOV A,#80H
CLR C
LAP1:
JNB P3.3,LAP1 ; chờ cạnh lên của bit start
LAP2:
JB P3.3,LAP2 ; chờ cạnh xuống của xung dương đầu tiên của mỗi bit
CALL DELAY1MS ; delay khoảng T<delay<2T . Chọn T = 1ms
JNB P3.3,LAP3
CLR C
RRC A
JNC LAP2 ; La bit 0 thi quay lai lap2 , cho canh xuống
JMP KETTHUC
LAP3:
SETB C
RRC A
JNC LAP1 ; là bit 1 thì quay lai lap1 chờ cạnh lên rồi chờ cạnh xuống
KETTHUC:
RETI
DELAY1MS:
MOV TMOD,#01H
MOV TH0,#HIGH(-1000)
MOV TL0,#LOW(-1000)
SETB TR0
JNB TF0,$
CLR TF0
RET
END
JMP CTCHINH
ORG 0013H
JMP NGAT
ORG 0020H
CTCHINH:
MOV A,#0
MAIN:
SETB EA
SETB EX1
SETB IT1
MOV P1,A
JMP MAIN
NGAT:
CLR EX0 ; cấm ngắt
MOV A,#80H
CLR C
LAP1:
JNB P3.3,LAP1 ; chờ cạnh lên của bit start
LAP2:
JB P3.3,LAP2 ; chờ cạnh xuống của xung dương đầu tiên của mỗi bit
CALL DELAY1MS ; delay khoảng T<delay<2T . Chọn T = 1ms
JNB P3.3,LAP3
CLR C
RRC A
JNC LAP2 ; La bit 0 thi quay lai lap2 , cho canh xuống
JMP KETTHUC
LAP3:
SETB C
RRC A
JNC LAP1 ; là bit 1 thì quay lai lap1 chờ cạnh lên rồi chờ cạnh xuống
KETTHUC:
RETI
DELAY1MS:
MOV TMOD,#01H
MOV TH0,#HIGH(-1000)
MOV TL0,#LOW(-1000)
SETB TR0
JNB TF0,$
CLR TF0
RET
END
Comment