+ Mắt nhận hồng ngoại nhận tín hiệu từ điều khiển từ xa phát ra từ giải điều chế và đua tín hiệu đảo ra chân OUT . Tín hiệu từ chân OUT được đưa đến chân P3.3 của vi xử lí để giải mã , mã lệnh 7 bit được hiển thị trên cổng P1.Tín hiệu điều khiển được đưa ra cổng P2 . Khi bấm phím 1 đưa tín hiệu điều khiển ra chân P2.0, bấm phím 2 ra chân P2.1…..bấm phím 8 ra chân P2.7.
2) Nguyên Lí Hoạt Động :
Dòng DC khoảng 5v-7v đưa qua 7805 để ổn định áp 5v cung cấp cho vxli 8051 . chân OUT của mắt nhận hồng ngoại đưa vào chân P3.3, tín hiệu tới chân P3.3 được lập trình và giải mã . Mã lệnh hiện thị trên cổng P1 , tín hiệu điều khiển đưa ra chân P2.
Trong mạch chỉ sử dụng 3 chân P2.0 , P2.1 , P2.2 để điều khiển 3 thiết bị thông qua 3 rơle (5v) có tác dụng đóng mở cho dòng điện xoay chiều 220v đi qua các thiết bị điện .Khi P2.0 , P2.1 , P2.2 ở mức cao (+5v) thì không có dòng qua Rơle , Rơle đóng . Khi P2.0 , P2.1 , P2.2 ở mức thấp (0v) thì có dòng qua Rơle , Rơle mở nên có dòng 220v qua các thiết bị điện , các thiết bị hoạt động . Đối với gia đình có nhiều thiết bị điện thí ta tiếp tục nối các chân còn lại của port 2 qua Rơle , như vậy ta có thể dùng cho thiết bị tuỳ thích
III)CODE CHƯƠNG TRÌNH :
ORG 00
MOV P1,#0
MOV P2,#00000111B
LCALL LONG_DELAY ; cho tín hiệu đầu tiên nhận được nhận được ko bị sai
MAIN:
SETB P3.3 ; P3.3 làm đầu vào nhận tín hiệu
MOV A,#01000000B ; sau 7 lần quay phải A thì C=1 để kiểm tra
RP1: JB P3.3, RP1 ; chờ cho tín hiệu đi xuống
RP2: JNB P3.3, RP2 ; chờ cho tín hiệu đi lên
RP3: JB P3.3, RP3 ; chờ cho tín hiệu đi xuống
LCALL DELAY ; tạo trễ 900 us
MOV C,P3.3 ; Ghi tín hiệu thu được vào C để đo
JC BIT0 ; nếu tín hiệu là bit cao thì bit nhận được là bit 0
SETB C ; tín hiệu mức thấp , bit nhận dược là bit 1
RRC A ; ghi từng bit mã lệnh vào trong A
JC END_SIGNAL ; nếu C =1 thì nhận đủ 7 bit mã lệnh , kết thúc
; nhận
; kết thúc quá trình nhận tín hiệu
SJMP RP2 ; nếu C=0 thì quay lại nhãn RP2
BIT0:
CLR C ; tín hiệu mức cao bit nhận được là bit 0
RRC A
JC END_SIGNAL ; nếu C =1 thì nhận đủ 7 bit mã lệnh , kết thúc
; kết thúc quá trình nhận tín hiệu
SJMP RP3 ; nếu C=0 thì quay lại nhãn RP3
BIT0:
END_SIGNAL: ; kết thúc quá trình nhận tín hiệu
LCALL LONG_DELAY ; tạo trễ để chống nhiễu
; 7 bit trái của A đang chứa mã lệnh , bit LSB = 0
RR A ; 7 bit phải của A đang chứa mã lệnh, bit MSB = 0
MOV P1, A ; hiển thị mã lệnh ra cổng P1
KEY_1:
CJNE A,#00000000B,KEY_2 ; bấm phím 1
;---KEY = 1---
CPL P2.0 ; đảo bit sau đó
SJMP MAIN ; quay lại từ đầu
;-------------
KEY_2: CJNE A,#1,KEY_3 ; bấm phím 2
;-------------
;---KEY = 2---
CPL P2.1
SJMP MAIN
;-------------
KEY_3:
CJNE A,#2,KEY_4 ; bấm phím 3
;-------------
;---KEY = 3---
CPL P2.2
SJMP MAIN
;-------------
KEY_4:
CJNE A,#3,KEY_5 ; bấm phím 4
;-------------
;---KEY = 4---
CPL P2.3
SJMP MAIN
;-------------
KEY_5:
CJNE A,#4,KEY_6 ; bấm phím 5
;-------------
;---KEY = 2---
CPL P2.4
LJMP MAIN
;-------------
KEY_6:
CJNE A,#5,KEY_7 ; bấm phím 6
;-------------
;---KEY = 6---
CPL P2.5
LJMP MAIN
;-------------
KEY_7:
CJNE A,#6,KEY_8 ; bấm phím 7
;-------------
;---KEY = 7---
CPL P2.6
LJMP MAIN
;-------------
KEY_8:
CJNE A,#7,OTHER_KEY ; bấm phím 8
;-------------
;---KEY = 8---
CPL P2.7
LJMP MAIN
;-----------------------------------
OTHER_KEY: ; bấm các phím khác thì không làm gì
LJMP MAIN
;-----------------------------------
; tạo trễ
;-----------------------------------
DELAY: ; tạo trễ 900 ms
MOV R5,#165 ; Thời gian tạo trễ 165 x 5 x 1.085 ms = 900 ms
AGAIN: NOP
NOP
NOP
DJNZ R5,AGAIN
RET
;-----------------------------------
LONG_DELAY: ; tạo trễ dài để chống nhiễu
MOV R5,#50
REPEAT:
MOV R6,#255
HERE:
DJNZ R6,HERE
DJNZ R5,REPEAT
RET
END
nguon : http://www.ant7.com