ORG 0000H ;Điểm nhập của chương trình chính
LJMP MAIN
ORG 0003H ;Điểm nhập của I0ISR
LJMP I0ISR
ORG 000BH ;Điểm nhập của T0ISR
LJMP T0ISR
ORG 0030H
MAIN: MOV TMOD,#9 ;Chương trình chính
MOV IP,#2 ;ưu tiên ngắt cho bộ định thời 0
MOV B,#0
MOV R0,#0 ;Chứa vị trí bit dịch trong A
MOV R1,#20H ;Chứa địa chỉ của 1 byte trong ;RAM từ20h đến 23h, 4 byte này
;chứa nội dung từ m• thu được và ;được ghi vào bằng cách định địa ;chỉ gián tiếp qua R1
MOV DPTR,#012CH ;Địa chỉ đầu bảng dữ liệu
MOV P0,#0 ;Tắt mọi thiết bị nối vào máy
MOV P1,#0
MOV P2,#0
SETB IT0 ;Kích khởi cạnh
MOV IE,#83H ;Cho phép các ngắt
SJMP $ ;Chờ ngắt
I0ISR: CLR TR0 ;Dừng bộ định thời
JB B.0,INT2 ;B.0=1 : đ• nhận sườn xung đầu
;tiên
SETB B.0
SJMP EXIT
INT2: MOV R7,TH0 ;Đọc byte cao của bộ định thời
JB B.1,KTBIT ;B.1=1 : đ• nhận bit khởi động
CJNE R7,#0E6H,N1
SJMP HALT
N1: JNC HALT
CJNE R7,#0E3H,N2
SJMP HALT
N2: JC HALT
SETB B.1
SJMP EXIT
KTBIT: CJNE R7,#0FCH,N3 ;Kiểm tra độ rộng xung
SJMP HALT
N3: JNC HALT
CJNE R7,#0F9H,N4
SJMP HALT
N4: JNC GAN1
CJNE R7,#0F8H,N5
SJMP HALT
N5: JNC HALT
CJNE R7,#0F5H,N6
SJMP HALT
N6: JNC GAN0
SJMP HALT
GAN0: CLR C ;Bit nhận giá trị ‘0’
SJMP N7
GAN1: SETB C ;Bit nhận giá trị ‘1’
N7: RLC A
CJNE R0,#7,N8
MOV @R1,A
MOV R0,#0
INC R1
SJMP EXIT
N8: INC R0
EXIT: MOV TH0,#0E4H ;Đặt lại các giá trịsau khi thu 1 bit
MOV TL0,#0A7H
SETB TR0
RETI
HALT: MOV R0,#0 ;Thiết lập lại các giá trị ban đầu
;nếu bit thu được sai
MOV R1,#20H
MOV B,#0
RETI
T0ISR: CLR TR0 ;Dừng bộ định thời
CJNE R0,#0,THOAT
CJNE R1,#24H,THOAT
MOV A,20H
CJNE A,#0CH,THOAT ;Kiểm tra m• Sanyo
MOV A,22H
RR A
RR A
RR A ;Tách lấy 5 bit mang tin
MOVC A,@A+DPTR ;Chiếu vào bộ m•
MOV B,#8 ;Xử lý để xuất tín hiệu ra cổng
DIV AB
MOV R0,A
MOV A,#1
MOV R1,B
N9: CJNE R1,#0,N10
SJMP N11
N10: DEC R1
RL A
SJMP N9
N11: CJNE R0,#0,N12
XRL P0,A
SJMP THOAT1
N12: CJNE R0,#1,N13
XRL P1,A
SJMP THOAT1
N13: CJNE R0,#2,THOAT
XRL P2,A
THOAT1: MOV R3,#0FAH
D1: MOV R2,#78H
CPL P0.0
DJNZ R2,$
MOV R2,#78H
CPL P0.0
DJNZ R2,$
MOV R2,#78H
CPL P0.0
DJNZ R2,$
DJNZ R3,D1
THOAT: MOV B,#0
MOV R0,#0
MOV R1,#20H
RETI
ORG 012CH
TABLE: DB 15 ;Bảng m• tham chiếu
DB 1
DB 0
DB 9
DB 0
DB 5
DB 0
DB 20
DB 17
DB 3
DB 19
DB 11
DB 0
DB 7
DB 0
DB 22
DB 16
DB 2
DB 18
DB 10
DB 13
DB 6
DB 0
DB 23
DB 0
DB 4
DB 14
DB 12
DB 0
DB 8
DB 21
DB 0
ORG 0003H ;Điểm nhập của I0ISR
LJMP I0ISR
ORG 000BH ;Điểm nhập của T0ISR
LJMP T0ISR
ORG 0030H
MAIN: MOV TMOD,#9 ;Chương trình chính
MOV IP,#2 ;ưu tiên ngắt cho bộ định thời 0
MOV B,#0
MOV R0,#0 ;Chứa vị trí bit dịch trong A
MOV R1,#20H ;Chứa địa chỉ của 1 byte trong ;RAM từ20h đến 23h, 4 byte này
;chứa nội dung từ m• thu được và ;được ghi vào bằng cách định địa ;chỉ gián tiếp qua R1
MOV DPTR,#012CH ;Địa chỉ đầu bảng dữ liệu
MOV P0,#0 ;Tắt mọi thiết bị nối vào máy
MOV P1,#0
MOV P2,#0
SETB IT0 ;Kích khởi cạnh
MOV IE,#83H ;Cho phép các ngắt
SJMP $ ;Chờ ngắt
I0ISR: CLR TR0 ;Dừng bộ định thời
JB B.0,INT2 ;B.0=1 : đ• nhận sườn xung đầu
;tiên
SETB B.0
SJMP EXIT
INT2: MOV R7,TH0 ;Đọc byte cao của bộ định thời
JB B.1,KTBIT ;B.1=1 : đ• nhận bit khởi động
CJNE R7,#0E6H,N1
SJMP HALT
N1: JNC HALT
CJNE R7,#0E3H,N2
SJMP HALT
N2: JC HALT
SETB B.1
SJMP EXIT
KTBIT: CJNE R7,#0FCH,N3 ;Kiểm tra độ rộng xung
SJMP HALT
N3: JNC HALT
CJNE R7,#0F9H,N4
SJMP HALT
N4: JNC GAN1
CJNE R7,#0F8H,N5
SJMP HALT
N5: JNC HALT
CJNE R7,#0F5H,N6
SJMP HALT
N6: JNC GAN0
SJMP HALT
GAN0: CLR C ;Bit nhận giá trị ‘0’
SJMP N7
GAN1: SETB C ;Bit nhận giá trị ‘1’
N7: RLC A
CJNE R0,#7,N8
MOV @R1,A
MOV R0,#0
INC R1
SJMP EXIT
N8: INC R0
EXIT: MOV TH0,#0E4H ;Đặt lại các giá trịsau khi thu 1 bit
MOV TL0,#0A7H
SETB TR0
RETI
HALT: MOV R0,#0 ;Thiết lập lại các giá trị ban đầu
;nếu bit thu được sai
MOV R1,#20H
MOV B,#0
RETI
T0ISR: CLR TR0 ;Dừng bộ định thời
CJNE R0,#0,THOAT
CJNE R1,#24H,THOAT
MOV A,20H
CJNE A,#0CH,THOAT ;Kiểm tra m• Sanyo
MOV A,22H
RR A
RR A
RR A ;Tách lấy 5 bit mang tin
MOVC A,@A+DPTR ;Chiếu vào bộ m•
MOV B,#8 ;Xử lý để xuất tín hiệu ra cổng
DIV AB
MOV R0,A
MOV A,#1
MOV R1,B
N9: CJNE R1,#0,N10
SJMP N11
N10: DEC R1
RL A
SJMP N9
N11: CJNE R0,#0,N12
XRL P0,A
SJMP THOAT1
N12: CJNE R0,#1,N13
XRL P1,A
SJMP THOAT1
N13: CJNE R0,#2,THOAT
XRL P2,A
THOAT1: MOV R3,#0FAH
D1: MOV R2,#78H
CPL P0.0
DJNZ R2,$
MOV R2,#78H
CPL P0.0
DJNZ R2,$
MOV R2,#78H
CPL P0.0
DJNZ R2,$
DJNZ R3,D1
THOAT: MOV B,#0
MOV R0,#0
MOV R1,#20H
RETI
ORG 012CH
TABLE: DB 15 ;Bảng m• tham chiếu
DB 1
DB 0
DB 9
DB 0
DB 5
DB 0
DB 20
DB 17
DB 3
DB 19
DB 11
DB 0
DB 7
DB 0
DB 22
DB 16
DB 2
DB 18
DB 10
DB 13
DB 6
DB 0
DB 23
DB 0
DB 4
DB 14
DB 12
DB 0
DB 8
DB 21
DB 0
Phạm Văn Ngọc Anh- 01644326695
Đăng nhận xét