TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP
GVHD : ĐÀO THỊ THU THỦY
LỜI MỞ ĐẦU
Trong cuộc sống, con người luôn muốn tận dụng thời gian và sức lực của mình để làm được nhiều công việc cùng lúc. Chính vì vậy nhiều sản phẩm và hệ thống máy móc với sự điều khiển từ xa đã ra đời để phục phụ nhu cầu đó của con người. Trong những sinh hoạt hằng, chắc hẳn chúng ta luôn bắt gặp nhiều thí bị được diều khiển từ xa bằng remote.
Vì vậy, em chọn đề “điều khiển quạt bằng remote” để tìm hiểu cách thức thu nhận tín hiệu từ remote từ đó thực hiện các lệnh để điều khiển thiết bị như thế nào. Đồng thời cũng cố kiến thức đã học về vi xử lý cũng như những môn cơ sở khác đã học. Do kiến thức còn hạn hẹp nên trong quá trình thực hiện đề tài không thể tránh những sai sót rất mong quý thầy cô thông cảm và giúp đỡ để em có thể thực hiện tốt những đề tài sau này.
Dùng vi điều khiển 89c51 thu tín hiệu từ remote sony điều khiển quạt, có hẹn giờ, hiển thị trên LED 7 đoạn.
MỤC LỤC
Nội dung Trang
CHƯƠNG 1: LÝ THUYẾT
1.1. Mắt thu hồng ngoại (TSOP 18x) -------------------------------------------------1
1.1.1.Mô tả ----------------------------------------------------------------------- 1
1.1.2.Đặc tính -----------------------------------------------------------------------3
1.1.3.Trạng thái khung dữ liệu ----------------------------------------------------3
1.2. Tìm hiểu về P89V51RB2 ----------------------------------------------------------4
1.2.1. Sơ đồ khối P89V51RB2 ----------------------------------------------------5
1.2.2 Sơ đồ chân và chức năng các chân P89V51RB2 -------------------------5
1.2.2.1. Các Port ------------------------------------- ---------------------------6
1.2.2.2 Các chân tín hiệu điều khiển-------------- ---------------------------7
1.2.3 Tổ chức bộ nhớ ---------------------------------------------------------------9
1.2.3.1 Bộ nhớ trong ------------------------------------------------------------9
1.2.3.1.1 Bộ nhớ ROM -----------------------------------------------------9
1.2.3.1.2 Bộ nhớ RAM -----------------------------------------------------9
1.2.3.1.3 Các thang ghi chức năng đặc biệt -----------------------------10
1.2.3.2 Bộ nhớ ngoài------------------------------------------------------------14
1.2.4 Hoạt động Reset --------------------------------------------------------------15
1.2.5 Các tập lệnh -------------------------------------------------------------------17
1.2.6 Hoạt động của các port nối tiếp---------------------------------------------19
1.2.6.1 Thanh ghi đệm port nối tiếp(SBUF)---------------------------------19
1.2.6.2 Thanh ghi điều khiển Port nối tiếp SCON --------------------------19
1.2.6.3 Khởi động và truy xuất các thanh ghi Port nối tiếp ---------------21
CHƯƠNG 2: THIẾT KẾ VÀ THI CÔNG
2.1. Tìm hiểu về đề tài ------------------------------------------------------------------- 23
2.1.1. Nhiệm vụ đặt ra -------------------------------------------------------------- 23
2.1.2.Giải quyết nhiệm vụ đặt ra -------------------------------------------------- 23
2.2. Thiết kế phần cứng và nguyên lý hoạt động của các khối
2.2.1 Khối thu tín hiệu --------------------------------------------------------------26
2.2.2 Khối vi xử lý -------- --------------------------------------------------------26
2.2.3. Khối điều khiển quạt --- ---------------------------------------------------- 27
2.2.4 Khối hiển thị ------------------------------------------------------------------ 28
2.2.5 Khối nguồn -------------------------------------------------------------------- 29
2.2.6 Sơ đồ nguyên lý điều khiển mạch điều khiển quạt----------------------- 30
2.2.7 Sơ đồ mạch in mạch điều khiển quạt ---- --------------------------------- 30
3. Phần mềm và giải thuật -------------------------------------------------------------- 31
2.3.1 Phần mềm---------------------------------------------------------------------- 31
2.3.2 Thuật toán và đồ giải thuật -------------------------------------------------- 31
CHƯƠNG 3: ĐÁNH GIÁ – KẾT LUẬN
3.1. Kết quả thực hiện ------------------------------------------------------------------- 47
3.2. Khuyết điểm ------------------------------------------------------------------------- 47
3.3. Hướng khắc phục và phát triển -------------------------------------------------- 47
PHỤC LỤC ------------------------------------------------------------------------------- 48
TÀI LIỆU THAM KHẢO-------------------------------------------------------------- 61
CHÚ THÍCH : TÀI LIỆU TRÊN GỒM FILE PDF + WORD
68 trang |
Chia sẻ: lvcdongnoi | Lượt xem: 3354 | Lượt tải: 4
Bạn đang xem trước 20 trang tài liệu Điều khiển quạt bằng remote, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
--19
1.2.6.3 Khởi động và truy xuất các thanh ghi Port nối tiếp ---------------21
CHƯƠNG 2: THIẾT KẾ VÀ THI CÔNG
2.1. Tìm hiểu về đề tài ------------------------------------------------------------------- 23
2.1.1. Nhiệm vụ đặt ra -------------------------------------------------------------- 23
2.1.2.Giải quyết nhiệm vụ đặt ra -------------------------------------------------- 23
2.2. Thiết kế phần cứng và nguyên lý hoạt động của các khối
2.2.1 Khối thu tín hiệu --------------------------------------------------------------26
2.2.2 Khối vi xử lý -------- --------------------------------------------------------26
2.2.3. Khối điều khiển quạt --- ---------------------------------------------------- 27
2.2.4 Khối hiển thị ------------------------------------------------------------------ 28
2.2.5 Khối nguồn -------------------------------------------------------------------- 29
2.2.6 Sơ đồ nguyên lý điều khiển mạch điều khiển quạt----------------------- 30
2.2.7 Sơ đồ mạch in mạch điều khiển quạt ---- --------------------------------- 30
3. Phần mềm và giải thuật -------------------------------------------------------------- 31
2.3.1 Phần mềm---------------------------------------------------------------------- 31
2.3.2 Thuật toán và đồ giải thuật -------------------------------------------------- 31
CHƯƠNG 3: ĐÁNH GIÁ – KẾT LUẬN
3.1. Kết quả thực hiện ------------------------------------------------------------------- 47
3.2. Khuyết điểm ------------------------------------------------------------------------- 47
3.3. Hướng khắc phục và phát triển -------------------------------------------------- 47
PHỤC LỤC ------------------------------------------------------------------------------- 48
TÀI LIỆU THAM KHẢO-------------------------------------------------------------- 61
CHƯƠNG 1: LÝ THUYẾT
1.1.Mắt thu hồng ngoại (TSOP 18x):
1.1.1. Mô tả:
Mắt thu hồng ngoại là một thiết bị quang có chức năng chuyển đổi quang (hồng ngoại) điện. Dòng TSOP18x là các thiết bị thu được làm nhỏ gọn cho hệ thống điều khiển từ xa bằng hồng ngoại. Diode PIN và bộ tiền khuếch đại được kết hợp trên
khung dẫn. Một vỏ bọc nhựa epoxy được thiết kế như màng lọc hồng ngoại. Tín hiệu giải điều chế ngõ ra có thể được giải mã trực tiếp bởi bộ vi xử lý. Độ lợi chính là hàm đánh tin cậy thậm chí trong môi trường nhiễu và chống lại những xung không phải là tín hiệu điều khiển ở ngõ ra.
1.1.2.Đặc tính:
· Bộ cảm quang và tiền khuếch đại trong cùng một gói.
· Bộ lọc nội cho tầng số PCM.
· Tích hợp cho TTL và CMOS.
· Ngõ ra tích cực mức thấp.
· Cải thiện vỏ bọc chống nhiễu điện.
· Chiều dài chuỗi xung tín hiệu ³ 6 chu kỳ/chuỗi xung.
· Kích thước nhỏ.
· Tăng cường khả năng chống lại các loại nhiễu ánh sáng.
· Không xuất hiện xung nhiễu tại ngõ ra.
· Thời gian đáp ứng ngắn sau khi mở nguồn (< 200 m s).
1..1.3.Trạng thái khung dữ liệu:
Tín hiệu dữ liệu nên theo các điều kiện:
· Tần số sóng mang nên được dặt ở trung tâm giải thông.
· Chiều dài chuỗi xung tín hiệu nên là 6 chu kỳ/một chuỗi xung tín hiệu hoặc hơn.
· Sau mõi chuỗi xung tín hiệu một khoảng thời gian trống là cần thiết .
· Khung dữ liệu không nên tiếp tục sự truyền tín hiệu. Ở đó phải có một thời gian dừng (ít nhất 15ms) tại thời điểm bé hơn mõi 90ms ( xem hình1.4).
Một vài ví dụ cho khung trạng thái tín hiệu: NEC code (lặp xung), NEC code
(lặp dữ liệu), Toshiba Micom format, Sharp code, RC5 code, RECS-80 code, R-2000
code.
Khi một tín hiệu nhiễu được đáp ứng cho TSOP18x. Nó có thể vẫn thu tín hiệu dữ liệu. Tuy nhiên cường độ được giảm để mà xung không mong đợi không xuất
hiện.
Một vài ví dụ về tín hiệu nhiễu bị triệt tiêu bởi TSOP18x:
· DC light ( đèn dây tóc, ánh sáng mặt trời).
· Tín hiệu liên tục tại một tần số bất kỳ.
· Tín hiệu từ đèn huỳnh quang.
· Tín hiệu hồng ngoại liên tục( 1ms xung tín hiệu, 2ms dừng).
1.2. Tìm hiểu về P89V51RB2:
Là bộ vi điều khiển của Philips Corporation sử dụng bộ vi điều khiển trung tâm 80C51 với 16/32/64 kB ROM,1kB RAM và nhiều tính năng vượt trội. Ba Timer 16 bit, hai Watch-dog Timer, hai thanh ghi DPTR, tám nguồn ngắt, PWM( Pulse Width Modulator), SPI( Serial Peripheral Interface) và đặc biệt là bộ nhớ chương trình trên chip có tính năng ISP( In-System Programming) và IAP( In-Application Programming),…
1.2.1. Sơ đồ khối P89V51RB2:
Hình 1.5: Sơ đồ khối của 89V51RB2
1.2.2 Sơ đồ chân và chức năng các chân P89V51RB2:
P89V51RB2 có 40 chân trong đó 32 chân có công dụng xuất/ nhập. Trong 32
chân đó có 24 chân có tác dụng kép (nghĩa là 1 chân có 2 chức năng), mỗi một đường có
thể hoạt động xuất/ nhập, hoạt động như một đường điều khiển hoặc hoạt động như một
đường địa chỉ/dữ liệu của bus địa chỉ/ dữ liệu đa hợp.
1.2.2.1.Các port:
Port 0:
- Port 0 (P0.0 – P0.7) có số chân từ 32 – 39.
- Port 0 có chức năng xuất nhập dữ liệu (P0.0 – P0.7) trong các thiết kế cỡ nhỏ
không sử dụng bộ nhớ ngoài.
- Port 0 có chức năng là bus địa chỉ byte thấp và bus dữ liệu đa hợp (AD0 – AD7) trong các thiết kế cỡ lớn có sử dụng bộ nhớ ngoài.
Port 1:
- Port 1 (P1.0 – P1.7) có số chân từ 1 – 8.
- Port 1 là port xuất nhập dữ liệu (P1.0 – P1.7) khi sử dụng hoặc không sử dụng
bộ nhớ ngoài.
Port 2:
- Port 2 (P2.0 – P2.7) có số chân từ 21 – 28.
- Port 2 có chức năng là port xuất nhập dữ liệu (P2.0 – P2.7) khi không sử dụng
bộ nhớ ngoài.
ngoài.
- Port 2 có chức năng là bus địa chỉ byte cao (A8 - A15) khi sử dụng bộ nhớ
Port 3:
- Port 3 (P3.0 – P3.7) có số chân từ 10 – 17.
- Port 3 có chức năng xuất nhập dữ liệu (P3.0 – P3.7) khi không sử dụng bộ
nhớ ngoài hoặc các chức năng đặc biệt.
- Port 3 có chức năng là các tín hiệu điều khiển khi sử dụng bộ nhớ ngoài hoặc các chức năng đặc biệt.
- Chức năng của các chân port 3:
Bit
Tên
Địa chỉ bit
Chức năng
P3.0
RxD
B0H
Chân nhận dữ liệu của port nối tiếp.
P3.1
TxD
B1H
Chân phát dữ liệu của port nối tiếp.
P3.2
INT0\
B2H
Ngõ vào ngắt ngoài 0.
P3.3
INT1\
B3H
Ngõ vào ngắt ngoài 1.
P3.4
T0
B4H
Ngõ vào của bộ định thời/ đếm 0.
P3.5
T1
B5H
Ngõ vào của bộ định thời/ đếm 1.
P3.6
WR\
B6H
Điều khiển ghi vào RAM ngoài.
P3.7
RD\
B7H
Điều khiển đọc từ RAM ngoài.
Bảng1.3: Bảng tóm tắt chức năng các chân của Port 3
1.2.2.2. Các chân tín hiệu điều khiển:
Chân PSEN\:
- PSEN (Program Store Enable): cho phép bộ nhớ chương trình, chân số 29.
- Chân PSEN\ có chức năng là tín hiệu cho phép truy xuất (đọc) bộ nhớ chương trình (ROM) ngoài hoặc là tín hiệu truy xuất, tích cực mức thấp.
- PSEN ở mức thấp trong thời gian CPU tìm - nạp lệnh từ ROM ngoài. Khi
CPU sử dụng ROM trong, PSEN sẽ ở mức cao.
- Khi sử dụng bộ nhớ chương trình bên ngoài, chân PSEN\ thường được nối với chân OE\ của ROM ngoài để cho phép CPU đọc mã lệnh từ ROM ngoài.
Chân ALE:
- ALE (Address Latch Enable): cho phép chốt địa chỉ, chân số 30.
- Chân ALE có chức năng là tín hiệu cho phép chốt địa chỉ để thực hiện việc giải đa hợp cho bus địa chỉ byte thấp và bus dữ liệu đa hợp (AD0 – AD7). Ngoài ra chân
ALE còn là tín hiệu xuất, tích cực mức cao.
- Các xung tín hiệu ALE có tốc độ bằng 1/6 lần tần số dao động trên chíp và có
thể được dùng làm tín hiệu clock cho các phần khác của hệ thống. Chân ALE được dùng làm ngõ vào xung lập trình (PGM\).
Chân EA\:
- EA ( External Access): truy xuất ngoài, chân số 31.
- Tín hiệu vào EA\ thường được mắc lên mức 1 hoặc mức 0. Nếu ở mức 1,
89V51RB2 thi hành chương trình từ ROM nội. Nếu ở mức 0, 89V51RB2 thi hành chương trình từ ROM ngoài.
- Khi lập trình cho ROM trong chip thì chân EA đóng vai trò là ngõ vào của
điện áp lập trình (Vpp = 12V – 12,5V cho 89V51RB2).
Chân Reset:
- RST (Reset): thiết lập lại, chân số 9.
- Khi ngõ vào RST đưa lên cao ít nhất 2 chu kỳ máy, 89V51RB2 thiết lập lại trạng thái ban đầu. Khi ngõ vào RST ở mức thấp IC hoạt động bình thuờng.
Chân XTAL1, XTAL2:
- XTAL (Crystal): tinh thể thạch anh, chân số 18 – 19.
- XTAL1: ngõ vào mạch tạo xung clock trong chip.
- XTAL2: ngõ ra mạch tạo xung clock trong chip.
- Bộ dao động được tích hợp bên trong 89V51RB2, khi sử dụng 89V51RB2
người thiết kế chỉ cần nối thêm thạch anh (tần số thạch anh thường sử dụng là 12MHZ) và
tụ.
Chân VCC, GND:
- VCC, GND: nguồn cung cấp điện, chân số 40 và 20.
- VCC = +5V ± 10% và GND = 0V.
1.2.3.Tổ chức bộ nhớ:
FFFFH
PSEN\
ª
WR\ RD\
ª ª
80H
7FH
00H
SFR
FFFH
000H
Bộ nhớ chương trình (mã)
0000H
Bộ nhớ chương trình (mã)
Bộ nhớ
dữ liệu
Bộ nhớ trong chip
Bộ nhớ ngoài chip
Hình 1.6: Tóm tắt các vùng nhớ của 89V51RB2
1.2.3.1 Bộ nhớ trong:
Bộ nhớ trong 89V51RB2 bao gồm ROM và RAM. RAM trong 89V51RB2 bao gồm nhiều thành phần: RAM đa chức năng, RAM định địa chỉ bit và các dãy thanh ghi.
1.2.3.1.1 Bộ nhớ ROM(Bộ nhớ chương trình):
động.
Bộ nhớ chương trình dùng để lưu trữ chương trình điều khiển cho chip hoạt
1.2.3.1.2 Bộ nhớ RAM(Bộ nhớ dữ liệu):
Bộ nhớ dữ liệu dùng để lưu trữ các dữ liệu và tham số.
RAM đa chức năng:
7FH.
- Trên hình vẽ cho thấy 80 byte RAM đa chức năng chiếm địa chỉ từ 30H đến
- Mọi địa chỉ trong vùng RAM đa chức năng đều có thể truy xuất tự do dùng kiểu định địa chỉ trực tiếp hoặc gián tiếp.
RAM định địa chỉ bit:
- RAM định địa chỉ bit gồm 128 bit được định địa chỉ chứa các byte có địa chỉ từ 20H đến 2FH.
- RAM định địa chỉ bit có 3 kiểu truy xuất dữ liệu: trực tiếp, gián tiếp hoặc theo từng bit.
Các dãy thanh ghi:
- 32 vị trí thấp của bộ nhớ nội chứa các dãy thanh ghi. Các lệnh của
89V51RB2 hỗ trợ 8 thanh ghi từ R0 – R7 thuộc dãy 0 và theo mặc định sau khi Reset hệ
thống các thanh ghi này ở các địa chỉ từ 00H đến 07H.
- Các lệnh dùng các thanh ghi R0 đến R7 sẽ ngắn hơn và nhanh hơn so với các lệnh có chức năng tương ứng dùng kiểu địa chỉ trực tiếp. Các dữ liệu được dùng thường xuyên nên dùng một trong các thanh ghi này.
- Do có 4 dãy thanh ghi nên tại một thời điểm chỉ có một dãy thanh ghi tích cực. Dãy thanh ghi tích cực có thể được thay đổi bằng cách thay đổi bit chọn dãy trong từ trạng thái chương trình PSW.
1.2.3.1.3 Các thang ghi chức năng đặc biệt:
- Các thanh ghi nội của hầu hết các bộ vi xử lý đều được truy xuất rõ ràng bởi một tập lệnh.
- Các thanh ghi nội của 89V51RB2 được cấu hình thành một phần của RAM
trên chip, vì vậy mỗi thanh ghi sẽ có một địa chỉ (ngoại trừ thanh ghi bộ đếm chương trình
và thanh ghi lệnh vì các thanh ghi này hiếm khi bị tác động trực tiếp). Cũng như các thanh
ghi từ R0 đến R7, ta có 21 thanh ghi chức năng đặc biệt (SFR: Special Function Register)
chiếm phần trên của RAM nội từ địa chỉ 80H đến FFH.
- Ngoại trừ thanh ghi A có thể được truy xuất rõ ràng còn lại hầu hết các thanh ghi chức năng đặc biệt được truy xuất bằng kiểu định địa chỉ trực tiếp.
Thanh ghi từ PSW(Program Status Word):
Bit
Ký hiệu
Địa chỉ
Mô tả bit
PSW.7
CY
D7H
Cờ nhớ
PSW.6
AC
D6H
Cờ nhớ phụ
PSW.5
F0
D5H
Cờ 0
PSW.4
RS1
D4H
Chọn dãy thanh ghi (bit 1)
PSW.3
RS0
D3H
Chọn dãy thanh ghi (bit 0):
00 = dãy 0: địa chỉ từ 00H đến 07H
01 = dãy 1: địa chỉ từ 08H đến 0FH
10 = dãy 2: địa chỉ từ 10H đến 17H
11 = dãy 2: địa chỉ từ 18H đến 1FH
PSW.2
OV
D2H
Cờ tràn
PSW.1
-
D1H
Dự trữ
PSW.0
P
D0H
Cờ kiểm tra chẵn lẻ
Bảng1.4: Thanh ghi PSW
Thanh ghi A:
- Thanh ghi A là thanh ghi tích lũy có công dụng chứa dữ liệu của các phép toán mà vi điều khiển xử lý. Ví dụ lệnh MUL AB sẽ nhân những giá trị không dấu 8 bit
có trong hai thanh ghi A và B, rồi trả về kết quả 16 bit trong A (byte thấp) và B (byte cao). Lệnh DIV AB sẽ lấy A chia B, kết quả số nguyên đặt vào A, số dư đặt vào B.
- Thanh ghi A có địa chỉ byte là E0H và địa chỉ bit từ E0H – E7H.
Thanh ghi B:
- Thanh ghi B ở địa chỉ F0H được dùng cùng với thanh ghi A cho các phép toán nhân chia.
- Thanh ghi B có thể được dùng như một thanh ghi đệm trung gian đa mục
đích. Nó là những bit định vị thông qua những địa chỉ từ F0H – F7H.
Thanh ghi SP:
- Con trỏ ngăn xếp (SP: Stack Pointer) là một thanh ghi 8 bit ở địa chỉ byte là
81H, dùng để lưu trữ tạm thời các dữ liệu. Đây là thanh ghi không định địa chỉ bit. Thanh
ghi này chứa địa chỉ của byte dữ liệu hiện hành trên đỉnh ngăn xếp. Các lệnh trên ngăn xếp bao gồm lệnh cất dữ liệu vào ngăn xếp (PUSH) và lệnh lấy dữ liệu ra khỏi ngăn xếp (POP). Lệnh cất dữ liệu vào ngăn xếp sẽ làm tăng SP trước khi ghi dữ liệu và lệnh lấy ra khỏi ngăn xếp sẽ làm giảm SP. Đối với chip 8051 thì vùng nhớ được dùng để làm ngăn xếp được lưu giữ trong RAM nội.
- Để sử dụng ngăn xếp thì ta phải khởi động thanh ghi SP (nghĩa là nạp giá trị cho thanh ghi SP) => vùng nhớ của ngăn xếp có địa chỉ bắt đầu là (SP) +1 và địa chỉ kết thúc là 7FH.
- Sau khi reset IC, SP sẽ mang giá trị mặc định là 07H và dữ liệu đầu tiên sẽ được cất vào ô nhớ ngăn xếp có địa chỉ 08H. Nếu phần mềm ứng dụng không khởi động
SP một giá trị mới thì dãy thanh ghi 1, có thể cả 2 và 3 sẽ không dùng được vì vùng RAM
này đã được dùng làm ngăn xếp. Ngăn xếp được truy xuất trực tiếp bằng các lệnh PUSH
và POP để lưu trữ tạm thời và lấy lại dữ liệu, hoặc truy xuất ngầm bằng lệnh gọi chương trình con (ACALL, LCALL) và các lệnh trở về (RET, RETI) để lưu trữ giá trị của bộ đếm chương trình khi bắt đầu thực hiện chương trình con và lấy lại khi kết thúc chương trình con.
Thanh ghi DPTR:
- Con trỏ dữ liệu (DPTR: Data Pointer Register) là thanh ghi 16 bit chứa địa chỉ của ô nhớ cần truy xuất thuộc ROM trong hoặc ngoài và RAM ngoài.
- Thanh ghi DPTR có địa chỉ byte là 82H (DPL: byte thấp) và 83H (DPH:
byte cao). Thanh ghi này không định địa chỉ bit.
Thanh ghi port xuất nhập:
Các Port của P89V51RB2 bao gồm Port 0 ở địa chỉ 80H, Port 1 ở địa chỉ
90H, Port 2 ở địa chỉ A0H, Port 3 ở địa chỉ B0H. Tất cả các Port này đều có thể truy xuất từng bit nên rất thuận tiện trong khả năng giao tiếp.
Thanh ghi port nối tiếp:
P89V51RB2 chứa một port nối tiếp cho việc trao đổi thông tin với các thiết bị
nối tiếp như máy tính hoặc giao tiếp nối tiếp với các IC khác. Một thanh ghi đệm dữ liệu
nối tiếp (SBUF: Serial Buffer) ở địa chỉ 99H sẽ giữ cả dữ liệu truyền và dữ liệu nhận. Khi truyền dữ liệu thì ghi lên SBUF, khi nhận dữ liệu thì đọc SBUF. Ngoài ra còn có thanh
ghi điều khiển port nối tiếp (SCON: Serial Control) có địa chỉ byte 98H dùng để báo trạng thái và điều khiển quá trình hoạt động của port nối tiếp.
Thanh ghi định thời:
89V51RB2 có chứa ba bộ định thời/ bộ đếm 16 bit được dùng cho việc định thời hoặc đếm sự kiện. Timer 0 ở địa chỉ 8AH (TL0: byte thấp) và 8CH (TH0: byte cao). Timer 1 ở địa chỉ 8BH (TL1: byte thấp) và 8DH (TH1: byte cao). Việc khởi động Timer được SET bởi Timer Mode (TMOD) ở địa chỉ 89H và thanh ghi điều khiển Timer (TCON) ở địa chỉ 88H. Chỉ có TCON được địa chỉ hoá từng bit.
Thanh ghi ngắt:
- Thanh ghi IE (Interrupt Enable: cho phép ngắt) có địa chỉ byte A8H và địa
chỉ bit A8H – AFH có công dụng cho phép hoặc không cho phép các ngắt hoạt động (có thể từng ngắt riêng rẽ hoặc tất cả các ngắt).
- Thanh ghi IP (Interrup Priority: ưu tiên ngắt) có địa chỉ byte B8H và địa chỉ
bit B8H – BCH có công dụng thiết lập mức ưu tiên cho các ngắt (ưu tiên thấp hoặc ưu tiên cao).
Thanh ghi điều khiển nguồn:
Thanh ghi PCON (Power Control: điều khiển nguồn) không có bit định vị.
Nó ở địa chỉ 87H chứa nhiều bit điều khiển. Thanh ghi PCON được tóm tắt như sau:
· Bit 7 (SMOD) => cho phép tăng gấp đôi tốc độ truyền dữ liệu nối tiếp
(tốc độ baud) khi SMOD = 1.
· Bit 6, 5, 4 => không có địa chỉ.
· Bit 3, 2 (GF1, GF0) => cho phép người lập trình dùng với mục đích riêng.
· Bit 1 (PD) => dùng để quy định chế độ nguồn giảm.
· Bit 0 (IDL) => dùng để quy định chế độ nghỉ
Các bit điều khiển Power Down và Idle có tác dụng chính trong tất cả các IC
họ MCS – 51 nhưng chỉ được thi hành trong sự biên dịch của CMOD.
1.2.3.2 Bộ nhớ ngoài:
- 89V51RB2 có khả năng mở rộng không gian bộ nhớ chương trình lên đến
64KB và không gian bộ nhớ dữ liệu lên đến 64KB.
- Khi dùng bộ nhớ ngoài, Port 0 không còn chức năng I/O nữa mà đó là bus địa
chỉ byte thấp và bus dữ liệu đa hợp (AD0 – AD7). Port 2 là bus địa chỉ byte cao (A8 - A15). Port 3 là các tín hiệu điều khiển (WR\, RD\).
Kết nối và truy xuất bộ nhớ dữ liệu ngoài:
8951
RAM 64KB
AD0 – AD7
EA\ ALE
A8 – A15
WR\
RD\
74373
D Q G
D0 – D7
A0 – A7
CS\
A8– A15
WR\
OE\
Hình 1.7: Sơ đồ kết nối và truy xuất bộ nhớ dữ liệu ngoài
Bộ nhớ dữ liệu ngoài là bộ nhớ đọc/ ghi được cho phép bởi các tín hiệu RD\
và WR\ ở các chân P3.7 và P3.6. Lệnh dùng để truy xuất bộ nhớ dữ liệu ngoài là MOVX,
sử dụng con trỏ dữ liệu 16 bit DPTR hoặc R0, R1 làm thanh ghi chứa địa chỉ.
Giải mã địa chỉ:
Nếu trường hợp ROM và RAM được kết hợp từ nhiều bộ nhớ có dung lượng nhỏ hoặc cả hai giao tiếp với chip 89V51 thì cần phải giải mã địa chỉ. Việc giải mã này cần cho hầu hết các bộ vi xử lý.
Ví dụ nếu các ROM và RAM có dung lượng 8KB được sử dụng thì tầm địa
chỉ mà chip 89V51 quản lý (0000H – FFFFH) cần phải được giải mã thành từng đoạn
8KB để chip có thể chọn từng IC nhớ trên các giới hạn 8KB tương ứng: IC1: 0000H –
1FFFH, IC2: 2000H – 3FFFH,…
IC chuyên dùng cho việc tạo tín hiệu giải mã là 74HC138, các ngõ ra của IC này lần lượt nối với các ngõ vào chọn chip CS\ tương ứng của các IC nhớ để cho các IC nhớ hoạt động (tại một thời điểm chỉ có một IC nhớ được phép hoạt động). Cần lưu ý là
do các đường cho phép IC nhớ hoạt động riêng lẻ cho từng loại (PSEN\ cho bộ nhớ
chương trình, RD\ và WR\ cho bộ nhớ dữ liệu) nên 89V51 có thể quản lý không gian nhớ
lên đến 64KB cho ROM và 64KB cho RAM.
Các không gian nhớ chương trình và dữ liệu gối nhau:
Vì bộ nhớ chương trình là bộ nhớ chỉ đọc, một tình huống khó xử được phát sinh trong quá trình phát triển phần mềm cho 8951. Làm thế nào phần mềm được viết cho một hệ thống đích để gỡ rối nếu phần mềm chỉ có thể được thực thi từ không gian bộ nhớ chương trình chỉ đọc.
Giải pháp tổng quát là cho các bộ nhớ chương trình và dữ liệu ngoài gối lên nhau. Vì PSEN\ được dùng để đọc chương trình và RD\ được dùng để đọc bộ nhớ dữ liệu, một RAM có thể chiếm không gian nhớ chương trình và dữ liệu bằng cách nối chân OE\
tới ngõ ra cổng AND có các ngõ vào là PSEN\ và RD\.
1.2.4 Hoạt động Reset:
VCC
R1
100 C3
10uF
RESET
R2
8K2
0
Hình 1.8: Hoạt động Reset
89V51RB2 có ngõ vào Reset tác động ở mức cao trong khoảng thời gian 2 chu kỳ
xung máy, sau đó xuống mức thấp để 89V51RB2 bắt đầu làm việc. RST có thể kích bằng
tay bởi một nút nhấn thường hở hoặc RST khi cấp nguồn, sơ đồ mạch Reset tổng hợp như
sau:
Trạng thái của các thanh ghi sau khi Reset hệ thống:
Bộ đếm chương trình (PC) 0000H
Thanh ghi A 00H
Thanh ghi B 00H
Thanh ghi PSW 00H
Thanh ghi SP 07H
Thanh ghi DPTR 0000H
Port 0 – Port3 FFH
Thanh ghi IP xxx00000B
Thanh ghi IE 0xx00000B
Các thanh ghi định thời 00H
Thanh ghi SCON 00H
Thanh ghi SBUF 00H
Thanh ghi PCON (HMOS) 0xxxxxxxB
Thanh ghi PCON (CMOS) 0xxx0000B
1.2.5 Các tập lệnh:
Các lệnh số hoc:
ADD A, SUBB A, INC
DEC
MUL AB : (A) ¬ LOW [(A) x (B)]; có ảnh hưởng cờ OV
: (B) ¬ HIGH [(A) x (B)]; cờ Carry được xoá
DIV AB : (A) ¬ Integer result of [(A) / (B)]; cờ OV
: (B) ¬ Remainder of [(A) / (B)]; cờ Carry xoá.
Các lệnh logic:
Tất cả các lệnh logic sử dụng thanh ghi A như là một trong những toán hạng thực
thi một chu kì máy, ngoài A mất 2 chu kì máy. Những hoạt động logic có thể được thực hiện trên bất kì byte nào trong vị trí nhớ dữ liệu nội mà không thông qua thanh ghi A.
Các hoạt động logic được tóm tắt như sau:
ANL , ORL XRL ,
RL A : Quay thanh ghi A qua trái 1 bit
RLC A : Quay vòng thanh ghi A qua trái 1 bit có cờ Carry
RR A : Quay thanh A ghi sang phải 1 bit
Các lệnh rẽ nhánh:
JC Rel : Nhảy đến “Rel” nếu cờ carry C =1.
JNC Rel : Nhảy đến “Rel” nếu cờ Carry C =0
JB bit,rel : Nhảy đến “Rel” nếu (bit) =1
JNB bit,rel : Nhảy đến “rel” nếu (bit) =0
JBC bit, rel : Nhảy đến “rel” nếu (bit) =1 và xoá bit.
ACALL addr 11 : Lệnh gọi tuyệt đối trong Page 2K
LCAL Addr 16 : Lệnh gọi dài chương trình con trong 64 K
RET :Kết thúc chương trình con trở về chương trình chính.
RETI: Kết thúc thủ tục phục vụ ngắt quay về chương trình chính AJMP addr11 : Nhảy tuyệt đối không điều kiện trong 2 K LJMP addr16 : Nhảy dài không điều kiện trong 64 K
SJMP rel : Nhảy ngắn không điều kiện trong(-128 ¸ 127)
byte.
CJNE
A, direct, rel
: so sánh và nhảy đến A nếu A ¹ direct
DJNE
Rn,rel
: Giảm Rn và nhảy nếu Rn ¹ 0
DJNZ
direct, rel
: Giảm và nhảy nếu direct ¹ 0
Các lệnh dịch chuyển dữ liệu:
Các lệnh dịch chuyển dữ liệu trong những vùng nhớ nội thực thi 1 hoặc 2 chu kỳ máy. Mẫu lệnh MOV , cho phép di chuyển dữ liệu bất kỳ 2 vùng nhớ nào của RAM nội hoặc các vùng nhớ của các thanh ghi chức năng đặc biệt mà không thông qua thanh ghi A. Vùng Stack của 8051 chỉ chứa 128 byte RAM nội, nếu con trỏ Stack SP được tăng quá địa chỉ 7FH thì các byte được PUSH vào sẽ mất đi vào các byte POP ra thì không biết rõ.
Các lệnh dịch chuyển bộ nhớ nội và bộ nhớ ngoại dùng sự định vị gián tiếp. Địa
chỉ gián tiếp có thể dùng địa chỉ 1 byte (@ Ri) hoặc địa chỉ 2 byte (@ DPTR). Tất cả các lệnh dịch chuyển hoạt động trên toàn bộ nhớ ngoài thực thi trong 2 chu kỳ máy và dùng thanh ghi A làm toán hạng DESTINATION.
Việc đọc và ghi RAM ngoài (RD và WR) chỉ tích cực trong suốt quá trình thực
thi của lệnh MOVX, còn bình thường RD và WR không tích cực (mức 1).
Các lệnh luận lý:
CLR C : Xoá cờ Carry xuống 0. Có ảnh hưởng cờ Carry. CLR BIT : Xoá bit xuống 0. Không ảnh hưởng cờ Carry. SET C : Set cờ Carry lên 1. Có ảnh hưởng cờ Carry.
SET BIT : Set bit lên 1. Không ảnh hưởng cờ Carry. CPL C : Đảo bit cờ Carry. Có ảnh hưởng cờ Carry. CPL BIT : Đảo bit. Không ảnh hưởng cờ Carry.
ANL C, BIT : Có ảnh hưởng cờ Carry. ANL C, BIT : Không ảnh hưởng cờ Carry. ORL C, BIT : Tác động cờ Carry.
ORL C, : Tác động cờ Carry.
MOVC, BIT : Cờ Carry bị tác động.
MOVBIT, C : Không ảnh hưởng cờ Carry.
1.2.6 Hoạt động của các port nối tiếp:
Port nối tiếp tham dự hoạt động đầy đủ (sự phát và thu cùng lúc), và thu vào bộ
Bit
Ký
hiệu
Địa
chỉ
Mô tả hoạt động
SCON.7
SM0
9FH
Bit 0 của mode Port nối tiếp
SCON.6
SM1
9EH
Bit 1 của mode Port nối tiếp
SCON.5
SM2
9DH
Bit 2 của mode Port nối tiếp. cho phép sự
truyền của bộ xử lý đa kênh ở mode 2 và 3; RI
sẽ không tích cực nếu bit thứ 9 đã thu vào là 0.
SCON.4
REN
9CH
REN = 1 sẽ cho phép thu ký tự
SCON.3
TB8
9BH
Phát bit 8. Bit 9 phát trong mode 2 và 3, được
set và xóa bởi phần mềm
SCON.2
RB8
9AH
Thu bit 8. Bit thứ 9 nhận được
SCON.1
TI
99H
Cờ ngắt phát. Cờ này được set ngay khi kết
thúc việc phát một ký tự; được xóa bởi phần mềm
SCON.0
RI
98H
Cờ ngắt thu. Cờ này được set ngay khi kết thúc
việc thu một ký tự; được xóa bởi phần mềm
đệm mà nó cho phép 1 ký tự nhận vào và được cất ở bộ đệm trong khi ký tự thứ hai được
nhận vào. Nếu CPU đọc ký tự thứ nhất trước khi ký tự thứ hai được nhận vào hoàn toàn
thì dữ liệu không bị mất.
1.2.6.1 Thanh ghi đệm port nối tiếp(SBUF):
Thanh ghi SBUF(Serial Buffer Register): Được dùng để lưu giữ dữ liệu cần phát
đi và dữ liệu đã nhận được. Việc ghi dữ liệu lên thanh ghi SBUF sẽ nạp dữ liệu để phát đi
và việc đọc dữ liệu từ thanh ghi SBUF sẽ truy xuất dữ liệu đã thu được.
Thanh ghi SBUF bao gồm 2 thanh ghi:
- Thanh ghi phát(Bộ đệm phát): Dùng để lưu giữ dữ liệu cần phát đi.
- Thanh ghi thu(Bộ đệm thu): Dùng để lưu giữ dữ liệu đã được nhận
1.2.6.2 Thanh ghi điều khiển Port nối tiếp SCON:
Mode hoạt động của Port nối tiếp được set bởi việc ghi lên thanh ghi mode của
Port nối tiếp SCON ở địa chỉ 99H. Bảng tóm tắt thanh ghi điều khiển Port nối tiếp SCON
như sau:
Hình 1.4: Chức năng thanh ghi SCON
SM0
SM1
MODE
MÔ TẢ
TỐC ĐỘ BAUD
0
0
0
Thanh ghi dịch
Cố định (tần số dao động/12)
0
1
1
UART 8 bit
Thay đổi (thiết lập bởi bộ định thời)
1
0
2
UART 9 bit
Cố định (tần số dao động /12 hoặc
/64)
1
1
3
UART 9 bit
Thay đổi (thiết lập bởi bộ định thời)
Hình 1.5: Các chế độ hoạt động của Port nối tiếp
Trước khi dùng Port nối tiếp, SCON phải được định đúng chế độ. VD: Để khởi tạo Port nối tiếp chế độ 1 (SM0/SM1 = 0/1), cho phép thu (REN = 1), và set cờ ngắt của việc phát sẵn sàng hoạt động (TI = 1), ta dùng lệnh sau :
MOV SCON, #01010010H.
Port nối tiếp của 8051 có 4 mode hoạt động tùy thuộc theo trạng thái của SM0/SM1.
Ba trong 4 mode cho phép truyền động bộ với mỗi ký tự thu hoặc phát sẽ được bố trí bởi bit Start hoặc bit Stop.
1.2.6.3 Khởi động và truy xuất các thanh ghi Port nối tiếp:
Bit cho phép thu dữ liệu(REN: Receive Enable):
Bit cho phép thu REN trong thanh ghi SCON phải được set bởi phần mềm để cho phép sự thu các ký tự. Điều này thường được dùng làm ở đầu chương trình khi các Port nối tiếp và các timer được khởi động.
Ta có thể tác động bằng lệnh:
SETB REN
hoặc:
MOV SCON, # xxx1xxxxB
Dùng Timer tạo tốc độ Baud cho Port nối tiếp:
Muốn tạo ra tốc độ Baud, ta khởi tạo TMOD ở chế độ tự nạp lại 8 bit (mode 2
của timer) và đặt trước giá trị nạp lại đúng vào byte cao của thanh ghi timer 1 (TH1) để
tạo ra tốc độ tràn chính xác. Có những tốc độ Baud rất chậm ta dùng chế độ 16 bit là chế
độ 1 của timer, nhưng ta phải khởi tạo lại sau mỗi lần tràn cho TL1/TH1.
Hoạt động khác được đếm giờ bởi việc dùng timer 1 ngoài là T1 (P3.5). Công thức chung để xác định tốc độ Baud trong mode 1 và mode 3 là:
BAUD RATE = TIMER 1 OVERFLOW RATE ¸ 32
Ví dụ một hoạt động 1200 Baud đòi hỏi một tốc độ tràn là 1200/32 = 38,4 KHz.
Nếu thạch anh 12MHz lái dao động trên Chip, thì timer 1 được đếm giờ ở tốc độ của tần
số 1 MHz. Bởi vì timer phải tràn ở tốc độ tần số 38,4 KHz và Timer đếm giờ ở tốc độ của
tần số 1 MHz, nên một sự tràn được yêu cầu với 1000/38,4 = 26,04 clock (làm tròn 26). Bởi vì các timer đếm lên và tràn khi có sự chuyển đổi từ FFH Æ 00H của bộ đếm, nên 26
là giá trị cần nạp cho TH1 (giá trị đúng là -26). Ta dùng lệnh: MOV TH1, #26
Ví dụ sau khi khởi động Port nối tiếp hoạt động giống như một UART 8 bit ở
tốc độ 2400 Baud, dùng timer 1 để cung cấp tốc độ Baud:
MOV SCON, #01010010B ; Port nối tiêp mode 1
MOV TMOD, #20 ; Timer 1 mode 2
MOV TH1, #-13 ; Nạp vào bộ đếm tốc
độ 2400Baud
SETB TR1 ;Start timer 1
Trong SCON có SM0/SM1 để vào mode UART 8 bit, REN = 1 cho phép Port
nối tiếp thu các ký tự và TI = 1 cho phép phát ký tự đầu tiên bởi việc cho biết thanh ghi
đếm rỗng. TMOD có M1/M0 = 1/0 để đặt timer 1 vào mode tự động nạp lại 8 bit. Việc set
bit TR1 để mở máy chạy timer. Tốc độ Baud 2400 sẽ cho ta tốc độ tràn timer 1 là 2400/32
= 76,8 KHz (ứng với thạch anh 12 MHz) sẽ cho số xung clock sau mỗi sự tràn là
1000/76,8 = 13,02 (lấy tròn là 13). Vậy -13 là giá trị cần nạp vào TH1 để có tốc độ Baud
là 2400 Baud.
CHƯƠNG 2: THIẾT KẾ VÀ THI CÔNG
2.1.Tìm hiếu đề tài:
2.1.1.Nhiệm vụ đặt ra:
· Tìm hiểu tín hiệu phát từ remote Tivi Sony.
· Phương pháp thu tín hiệu.
· Hiện thị liên tục và thay đổi theo thông số nhập vào.
· Hẹn thời gian tắt mở quạt.
· Thực hiện các chức năng.
2.1.2.Giải quyết nhiệm vụ đặt ra:
2.1.2.1.Tìm hiểu tín hiệu phát từ remote Tivi Sony:
· Tín hiệu phát từ Tivi Sony có dạng:
Hình2.1.Dạng tín hiệu phát
bit.
Phần đầu tiên của tín hiệu có độ dài 3T bằng 1800ms gọi là header hay start
Các bit còn lại được mã hóa như sau:
500ms im lặng + 700ms hồng ngoại = bit 0
500ms im lặng +1300ms hồng ngoại = bit 1
Hình2.2.Dạng tín hiệu phát
Bit đầu tiên là bit LSB ta đặt tên cho nó là bit B0 , bít cuối cùng sẽ là bit B11. Trong đó từ :
· Phím Mã lệnh :
B0 – B6 : là 7 bit mã lệnh
B7 _ B11: là 5 bit địa chỉ
Phím 0 : ------------------------------------------------------------------- 09H Phím1: ------------------------------------------------------------------- 00H Phím 2 : ------------------------------------------------------------------- 01H Phím 3 : ------------------------------------------------------------------- 02H Phím 4 : ------------------------------------------------------------------- 03H Phím 5 : ------------------------------------------------------------------- 04H Phím 6 : ------------------------------------------------------------------- 05H Phím 7 : ------------------------------------------------------------------- 06H Phím 8 : ------------------------------------------------------------------- 07H Phím 9 : ------------------------------------------------------------------- 08H Phím 10 : ------------------------------------------------------------------ 09H Phím program + : -------------------------------------------------------- 10H Phím program - : --------------------------------------------------------- 11H Phím vol + : --------------------------------------------------------------- 12H Phím vol - : --------------------------------------------------------------- 13H
Phím power :-------------------------------------------------------------- 15H
·
Các phím sử dụng và chức năng tương ứng của phím:
Phím 0 : -------------------------------------------------------------
Tắt quạt
Phím 1: -------------------------------------------------------------
Mở số 1
Phím 2: -------------------------------------------------------------
Mở số 2
Phím 3: -------------------------------------------------------------
Mở số 3
Phím 4: -------------------------------------------------------------
Mở time
Phím vol + : ---------------------------------------------------------
Tăng phút
Phím vol - : ---------------------------------------------------------
Giảm phút
Phím program + : --------------------------------------------------
Tăng giờ
Phím program - : --------------------------------------------------
Giảm giờ
Phím power :--------------------------------------------------------
Chế độ nghỉ
2.1.2.2. Phương pháp thu tín hiệu:
Dùng led thu hồng ngoại (TSOP1838) để thu tín hiệu. Tín hiệu qua led thu sẽ
bị đảo như sau :
Hình2.3.Dạng tín hiệu thu
bit 0 = 500ms mức cao + 700ms mức thấp bit 1 = 500ms mức cao + 1300ms mức thấp
Ở đây 7 bit đầu là bit mã lệnh 5 bit tiếp theo là bit địa chỉ, mà ta thu tín hiệu từ
cùng một remote nên ta chỉ thu 7 bit mã lệnh.
· Giải mã tín hiệu :
Khi có tín hiệu ngắt sẽ thực hiện thu mã. Để thu được 7 bit lệnh ta cần nạp cho
thanh ghi A giá trị 01000000B để sau 7 lần quay phải có cờ nhớ C thì giá trị thanh ghi A
chính là mã lệnh điều khiển của phím bấm remote lúc này cờ C = 1.
2.1.2.3.Hiện thị chính:
Để hiển thị liên tục ta sử dụng ngắt cho các chức năng khác, chương trình
hiện thị được xem như chương trình chính. Khi có một ngắt xuất hiện nhảy sang phục vụ
ngắt rồi quay lại chương trình hiển thị. Chương trình hiển thị sẽ hiện số, giờ, phút. Chương trình hiển thị được chia làm hiển thị có thời gian và hiện thị không thời gian (HienA00). Trong hiển thị có thời gian được chia ra hiện có phút không có giờ (HienA10), hiện không có phút có giờ (HienA01), hiện có phút có giờ (HienA11).
2.1.2.4.Hẹn thời gian:
Sử dụng Time0 để hẹn phút, Time1 hẹn giờ cả hai Time hoạt động ở chế độ
2. Để hẹn phút ta dùng một vòng lặp có thời gian cố định là 5 phút, cứ mõi giá trị R0 thì thực hiện một vòng lặp 5 phút. Để hẹn giờ ta dùng một vòng lặp có thời gian cố định là 1 giờ, cứ mõi giá trị R1 thì thực hiện một vòng lặp 1 giờ. Vì việc hiển thị được thực hiện
liên tục nên việc giảm giá trị vòng lặp chỉ xảy ra khi có ngắt Time. Các giá trị vòng lặp
được khai báo lần đầu ở đầu chương trình chính. Sử dụng địa chỉ 0024H, 0025H , 0026H
lưu giá trị cố định cho vòng lặp của hai Time.
2.1.2.5.Thực hiện các chức năng:
Khi có một ngắt ngoài chương trình tạm thời chuyển sang phục vụ ngắt để thu
mã (chứa trong A) sau đó so sánh mã để thực hiện các chức năng tương ứng với mã lệnh.
2.2.Thiết kế phần cứng và nguyên lý hoạt động của các khối:
2.2.1.Khối thu tín hiệu:
2.2.1.1.Sơ đồ nguyên lý phần cứng:
Hình2.4.Khối thu tín hiệu
2.2.1.2.Nguyên lý hoạt động:
Nguồn Vcc cung cấp 5V, khi có tín hiệu phát từ remote mắt thu tạo một chuỗi xung ở ngõ ra. Khi có ánh sáng ngõ ra (chân 1) tích cực ở mức 0, khi không có ánh sáng
ngõ ra ở mức 1. Tín hiệu được đưa đến khối vi xử lý để xử lý tín hiệu.
2.2.2.Khối vi xử lý:
2.2.2.1. Sơ đồ nguyên lý:
Hình2.5.Khối vi xử lý
2.2.2.2.Nguyên lý hoạt động:
Dùng P3.3 để thực hiện việc thu tín hiệu từ mắt thu hồng ngoại và cho biết bộ
vi xử lý đang thu tín hiệu khi led đơn nháy.
Sử dụng P0 để xuất giá trị hiển thị trên các led 7 đoạn, giá trị tích cực ở mức
logic 0.
Dùng P2 để quét lần lượt các led, giá trị tích cực ở mức logic 0.
Dùng P1.0 đến P1.2 đển đóng mở các Role tương ứng khi ở mức logic 0.
Dùng P3.7 để hiển thị led đơn khi sử dụng chức năng hẹn giờ.
2.2.3.Khối điều khiển quạt:
2.2.3.1.Sơ đồ nguyênl ý:
Hình 2.6.Khối Role
2.2.3.2.Nguyên lý hoạt động:
Ba Role được đóng mở thông qua ba transistor A1015. Khi A1015 dẫn bảo hòa làm Role tương ứng đóng.
Ba diode được dùng để chống điện áp nghịch sinh ra trên cuộn dây của các
Role khi điện áp tren nó thay đổi đột ngột.
2.2.4.Khối hiển thị:
2.2.4.1.Sơ đồ nguyên lý:
Hình 2.7.Khối hiển thị
2.2.4.2.Nguyên lý hoạt động:
Led 1 hiện thị số chọn, bộ 4 led hiện phút và giờ ( hai led đầu từ phải qua trái hiện phút hai led còn lại hoện giờ)
LEDTIME hiện thị cho biết đang chọn chức năng hẹn giờ. LEDXUNG cho biết đang nhận tín hiệu khi led nháy.
Năm trasistor cấp nguồn cho anot của các led khi transistor dẫn bảo hào.
2.2.5.Sơ đồ nguyên lý mạch điều khiển quạt:
Hình2.8.Sơ đồ nguyên lý mạch
2.2.6.Sơ đồ mạch in mạch điều khiển quạt:
Hình2.9.Mạch in
2.3.Phần mềm và giải thuật:
2.3.1.Phần mềm:
Dùng ngôn ngữ lập trình Assembler để viết chương trình điều khiển xem
phần phụ lục.
2.3.2.Thuật toán và giải thuật:
2.3.2.1.Thuật toán:
2.3.2.1.1.Chương trình chính:
B1.Khai báo các giá trị ban đầu cho chương trình chính. B2.Thưc hiện chương trình hiển thị.
+ Nếu không có bất cứ ngắt nào tiếp tục chương trình hiển thị
+ Nếu có ngắt ngoài1, ngắt Time0, Ngắt Time1 chuyển sang phục vụ
ngắt, phục vụ ngắt xong quay lại chương trình hiển thị.
2.3.2.1.2.Chương trình hiển thị:
B1.Nạp giá trị phút, giờ và số tương ứng vào các thanh ghi R0, R1, R2. B2.Kiểm tra có chọn chế độ nghỉ, nếu có thực hiện, nếu không thực hiện B3
B3.Kiểm tra là loại hiện thi nào (HienA00, HienA01, HienA10, HienA11). B4.Gọi lệnh hiện thị tương ứng quay lại B1.
Trong chương trình hiện thị có lồng một đoạn chương trình kiểm tra chế độ
nghỉ. Dưới đây là thuật toán của chương trình phục vị chế độ nghỉ:
· Chế độ nghỉ:
B1.Kiểm tra có chon chế độ nghỉ hay không:
+ Nếu không tiếp tục hiển thị
+ Nếu có lưu giá trị thanh ghi PCON vào thanh ghi A thực hiện B2. B2.Kiểm tra A có bằng 0 hay không (kiểm tra chế độ nghỉ có được chọn
chưa).
+ Nếu không xóa giá trị thanh ghi PCON và thanh ghi B (thanh ghi B lưu giá trị thanh ghi PCON)
+ Nếu có tắt các led hiển thị MOV B,#01H, MOV PCON,#01H (cho phép chế độ nghỉ và lưu giá trị trong thanh ghi B) .
· Thuật toán hiện A00:
B1.Kiểm tra số được chọn.
B2.Hiển thị số được chọn và không giờ không phút. B3.Quay lại chương trình hiển thị chính.
· Thuật toán hiện A01:
B1.Kiểm tra số được chọn.
B2.Hiển thị số được chọn và không phút. B3.Quét giờ (QuetG).
B4.Quay lại chương trình hiển thị chính.
· Thuật toán hiện A10:
B1.Quét phút kèm theo số chọn (HT0). B2.Hiển thị không giờ.
B3.Quay lại chương trình hiển thị chính.
· Thuật toán hiện A11:
B1. Quét phút kèm theo số chọn (HT0). B2.Quét giờ (QuetG).
B3.Quay lại chương trình hiển thị chính.
· Thuật toán quét phút kèm số chọn (HT0):
B1. Kiểm tra số chọn.
B2.Nạp mã dữ liệu cho thanh ghi DPTR tương ứng số chọn.
B3.Nạp giá trị quét anot của led (MOV R6,#FEH), xóa giá trị trong A, số lần lặp cho 1 mã.
B4.Mõi phút cộng A cho 3 (tăng vị trí quét lên 3).
B5.Nạp mã dữ liệu cho A tương ứng vị trí của mã MOV A,@A+DPTR (mõi mã dữ liệu có 3 số HEX số chọn và phút).
B6.Xuất giá trị ra P0 (MOV P0,A). B7.Dịch giá trị quét anot (RL A) B8.Giảm vị trí của mã dữ liệu.
B9.Kiểm tra quét đủ 3 mã HEX, chưa đủ quay lại B5
B10.Kết thúc HT0
· Thuật toán quét giờ (QUETG):
B1.Nạp giá trị quét anot của led (MOV R6,#F7H), xóa giá trị trong A, số lần lặp cho 1 mã.
B4.Mõi phút cộng A cho 2 (tăng vị trí quét lên 2).
B5.Nạp mã dữ liệu cho A tương ứng vị trí của mã MOV A,@A+DPTR (mõi mã dữ liệu có 2 số HEX số chọn và phút).
B6.Xuất giá trị ra P0 (MOV P0,A). B7.Dịch giá trị quét anot (RL A) B8.Giảm vị trí của mã dữ liệu.
B9.Kiểm tra quét đủ 2 mã HEX, chưa đủ quay lại B5
B10.Kết thúc QUETG
2.3.2.1.3.Thuật toán ngắt ngoài1:
B1.Khóa ngắt, nạp thanh ghi A giá trị 40H
B2.Chờ tín hiệu đi lên (khởi đầu mức cao của 1 bit) B3.Chờ tín hiệu đi xuống (mức thấp của 1 bit).
B4.Chờ khoảng 700ms < t < 1200ms, chọn t =1 000 m s = 1ms.
Đo tín hiệu:
+ Nếu ở mức cao bit nhận được là bit 0, đặt C=0 quay phải A có cờ C, quay lại bước 4.
+ Nếu ở mức thấp bit nhận được là bit 1, đặt C=1 quay phải A có cờ C, quay lại bước 3.
B5. Nếu C=1, giá trị trong thanh ghi A= B6B5B4B3B2B1B00, quay phải A
không có cờ C thu được A = 0D6D5D4D3D2D1D0. B6.Kiểm tra A có bằng 09H
+ Nếu có lưu giá trị A vào 0027H, đóng tất cả các role, thoát ngắt.
+ Nếu không thực hiện B7. B7.Kiểm tra A có bằng 00H
+ Nếu có lưu giá trị A vào 0027H, đóng tất cả các role, mở Role 1, thoát
ngắt.
+ Nếu không thực hiện B8. B8.Kiểm tra A có bằng 01H
+ Nếu có lưu giá trị A vào 0027H, đóng tất cả các role, mở Role 2, thoát
ngắt.
ngắt.
+ Nếu không thực hiện B9. B9.Kiểm tra A có bằng 02H
+ Nếu có lưu giá trị A vào 0027H, đóng tất cả các role, mở Role 3, thoát
+ Nếu không thực hiện B10. B10.Kiểm tra A có bằng 12H
+ Nếu có gọi lệnh tăng phút, thoát ngắt.
+ Nếu không thực hiện B11. B11.Kiểm tra A có bằng 13H
+ Nếu có gọi lệnh giảm phút, thoát ngắt.
+ Nếu không thực hiện B12. B12.Kiểm tra A có bằng 10H
+ Nếu có gọi lệnh tăng giờ, thoát ngắt.
+ Nếu không thực hiện B13. B13.Kiểm tra A có bằng 11H
+ Nếu có gọi lệnh giảm phút, thoát ngắt.
+ Nếu không thực hiện B14. B14.Kiểm tra A có bằng 12H
+ Nếu có gọi lệnh Time.
+ Nếu không thoát ngắt.
· Thuật toán tăng phút:
B1.Kiểm tra R0 có bằng 12:
+ Nếu có nạp R0 bằng 255, thực hiện B2.
+ Nếu không thực hiện B2.
B2.Tăng R0 một đơn vị, lưu giá trị R0 vào 0028H, kết thúc chương trình.
· Thuật toán giảm phút:
B1.Kiểm tra R0 có bằng 0:
+ Nếu có nạp R0 bằng 13, thực hiện B2.
+ Nếu không thực hiện B2.
B2.Giảm R0 một đơn vị, lưu giá trị R0 vào 0028H, kết thúc chương trình.
· Thuật toán tăng giờ:
B1.Kiểm tra R1 có bằng 24:
+ Nếu có nạp R1 bằng 255, thực hiện B2.
+ Nếu không thực hiện B2.
B2.Tăng R1 một đơn vị, lưu giá trị R1 vào 0029H, kết thúc chương trình.
· Thuật toán giảm giờt:
B1.Kiểm tra R1 có bằng 0 :
+ Nếu có nạp R1 bằng 25, thực hiện B2.
+ Nếu không thực hiện B2.
B2.Giảm R1 một đơn vị, lưu giá trị R1 vào 0029H, kết thúc chương trình.
· Thuật toán Time:
B1.Kiểm tra có Time nào đang chạy không:
+ Nếu có tắt time đó, nại giá trị cho vòng lặp của Time đó, kết thúc.
+ Nếu không thực hiện B2. B2.Kiểm tra R0 có bằng 0:
+ Nếu có thực hiện B3.
+ Nếu không mở Time0, kết thúc. B2.Kiểm tra R1 có bằng 0:
+ Nếu có kết thúc.
+ Nếu không mở Time1, kết thúc.
2.3.2.1.4.Thuật toán Ngắt Time0:
B1.Tạm thời cho Time0 ngưng hoạt động. B2.Giảm giá trị vòng lặp (0025H,0026H):
+ Giảm giá trị trong 0025, nếu 0025H khác 0 nạp lại giá trị TH0, TL0, cho Time0 hoạt động lại thoát ngắt. Nếu 0025H bằng 0 giảm 0026H.
+ Giảm giá trị trong 0026H, nếu 0026H khác 0 nạp lại giá trị TH0, TL0,
0025H, cho Time0 hoạt động lại thoát ngắt. Nếu 0026H bằng 0 giảm R0.
+ Giảm giá trị chứa trong R0, nếu R0 khác 0 nạp lại giá trị TH0, TL0,
0025H, 0026H, cho Time0 hoạt động trở lại, thoát ngắt. Nếu R0 bằng 0 lại giá trị
TH0, TL0, 0025H, 0026H nhưng không cho Time0 hoạt động trở lại.
B3.Kiểm tra có dùng Time1 hay không:
+ Nếu có thực hiện mở Time1
+ Nếu không kiểm tra P1 để tắt hoặc mở, thoát ngắt.
2.3.2.1.5.Thuật Toán Ngắt Time1:
B1.Tạm thời cho Time1 ngưng hoạt động. B2.Kiểm tra giá trị R0 có thay đổi không
+ Nếu có nạp lại gía trị cho 0024H, 0026H
+ Nếu không thực hiện B3
B3.Giảm giá trị vòng lặp (0024H,0026H):
+ Giảm giá trị trong 0024, nếu 0024H khác 0 nạp lại giá trị TH1, TL1, cho Time1 hoạt động lại thoát ngắt. Nếu 0024H bằng 0 giảm 0026H.
+ Giảm giá trị trong 0026H, nếu 0026H khác 0 nạp lại giá trị TH1, TL1,
0025H, cho Time0 hoạt động lại thoát ngắt. Nếu 0026H bằng 0 giảm R1.
+ Giảm giá trị chứa trong R1, nếu R1 khác 0 nạp lại giá trị TH1, TL1,
0024H, 0026H, cho Time0 hoạt động trở lại, thoát ngắt. Nếu R1 bằng 0 lại giá trị
TH1, TL1, 0024H, 0026H nhưng không cho Time1 hoạt động trở lại.
B4.Kiểm tra P1 để tắt hoặc mở quạt.
2.3.2.2.Lưu đồ giải thuật:
2.3.2.2.1.Lưu đồ giải thuật chính:
2.3.2.2.2.Lưu đồ hiển thị:
· Lưu đồ HIEN A00:
· Lưu đồ hiện A01:
· Lưu đồ hiện A10:
· Lưu đồ hiện A11:
· Lưu đồ quét phút theo số chọn (HT0):
· Lưu đồ QUETG:
2.3.2.2.3.Lưu đồ ngắt ngoài1:
· Lưu đồ giải thuật tăng phút:
· Lưu đồ giải thuật giảm phút:
· Lưu đồ giải thuật tăng giờ:
· Lưu đồ giải thuật giảm giờ:
· Lưu đồ giải thuật Time:
2.3.2.2.4.Lưu đồ ngắt Time0:
2.3.2.2.5.Lưu đồ ngắt Time1:
g Nghiệp Tp.HCM Đồ án 1:Điều khiển quạt bằng r
Trường ĐH Côn emote
CHƯƠNG 3: ĐÁNH GIÁ – KẾT LUẬN
3.1. Kết quả thực hiện:
Hệ thống hoạt động đúng theo yêu cầu của đề tài. Hiển thị các giá trị một cách liên tục theo thông số. Mắt thu thu tín hiệu tốt.
Các Role đóng mở theo đúng yêu cầu.
3.2. Khuyết điểm:
Mạch tương đối lớn.
Các Role dễ bị hỏng tiếp điểm.
Mắt hiện thị thu tín hiệu luôn sáng. Chương trình tương đối dài.
3.3. Hướng khắc phục và phát triển:
Dùng các linh kiện nhỏ, dùng mạch in hai lớp.
Sử dụng loại Role có tiếp điểm tốt hơn như loại có vỏ bọc trong suốt. Sử dụng cổng đảo trước khi đưa qua led.
Đưa ra các giải thuật khác để chương trình gọn và tối ưu hơn.
Chương Trình:
$MOD51
ORG 00H SJMP MAIN ORG 000BH
PHỤ LỤC
MAIN:
LJMP NGATTIME0
ORG 0013H
LJMP NGATNGOAI1
ORG 001BH
LJMP NGATTIME1
ORG 0030H
MOV 0024H,#20
MOV 0025H,#240
MOV 0026H,#250
MOV 0027H,#09H MOV 0028H,#00H MOV 0029H,#00H MOV B,#00H
MOV P1,#0FFH
MOV TH0,#HIGH(-60000) MOV TL0,#LOW(-60000) MOV TH1,#HIGH(-60000) MOV TL1,#LOW(-60000) MOV TMOD,#11H
SETB IT1
SETB P3.3
MOV IE,#8EH MOV IP,#02H
HIENTHI:
MOV R0,0028H MOV R1,0029H MOV R2,0027H INC R3
CJNE R3,#40,TIEP CLR IE1
SETB EX1
MOV R3,#00H
TIEP:
CJNE A,#15H,TIEP2
MOV A,B
CJNE A,#00H,TIEP2
MOV P0,#0FFH MOV P2,#0FFH CLR IE1
SETB EX1
MOV B,#01H MOV PCON,#01H SJMP TIEP1
TIEP2:
TIEP1:
KTR1:
MOV B,#00H MOV PCON,#00H
CJNE R0,#00H,KTR1
CJNE R1,#00H,HIENA01
LCALL HIENA00
SJMP HIENTHI
CJNE R1,#00H,GOIHIENA11
LCALL HIENA10
SJMP HIENTHI
GOIHIENA11:
LCALL HIENA11
SJMP HIENTHI HIENA01:
CJNE R2,#09H,XEM1
MOV P0,#03H MOV P2,#0FEH LCALL DELAYHT MOV P2,#0FFH
ACALL HIENR0
LCALL QUETG SJMP HIENTHI
XEM1:
XEM2:
CJNE R2,#00H,XEM2
MOV P0,#9FH MOV P2,#0FEH LCALL DELAYHT MOV P2,#0FFH
ACALL HIENR0
LCALL QUETG SJMP HIENTHI
CJNE R2,#01H,XEM3
MOV P0,#25H
MOV P2,#0FEH LCALL DELAYHT MOV P2,#0FFH
ACALL HIENR0
LJMP HIENTHI
XEM3:
CJNE R2,#02H,THOATXEM3
MOV P0,#0DH MOV P2,#0FEH LCALL DELAYHT MOV P2,#0FFH
ACALL HIENR0
ACALL QUETG LJMP HIENTHI
THOATXEM3: RET
HIENR0:
MOV P0,#03H MOV P2,#0FDH LCALL DELAYHT MOV P2,#0FBH LCALL DELAYHT MOV P2,#0FFH RET
HIENA11:
LCALL HT0
LCALL QUETG RET
HIENA00:
CJNE R2,#09H,TEXT1
MOV P0,#03H MOV P2,#0FEH LCALL DELAYHT MOV P2,#0FFH
ACALL HIENR0R1
RET TEXT1:
CJNE R2,#00H,TEXT2
MOV P0,#9FH MOV P2,#0FEH LCALL DELAYHT MOV P2,#0FFH
ACALL HIENR0R1
RET
TEXT2:
CJNE R2,#01H,TEXT3
MOV P0,#25H MOV P2,#0FEH LCALL DELAYHT MOV P2,#0FFH
ACALL HIENR0R1
RET TEXT3:
CJNE R2,#02H,THOATTEXT3
MOV P0,#0DH MOV P2,#0FEH LCALL DELAYHT MOV P2,#0FFH
ACALL HIENR0R1
THOATTEXT3: RET
HIENR0R1:
MOV P0,#03H MOV P2,#0FDH LCALL DELAYHT MOV P2,#0FBH LCALL DELAYHT MOV P2,#0F7H LCALL DELAYHT MOV P2,#0EFH LCALL DELAYHT MOV P2,#0FFH RET
HIENA10:
LCALL HT0
MOV P0,#03H MOV P2,#0F7H LCALL DELAYHT MOV P2,#0EFH LCALL DELAYHT MOV P2,#0FFH RET
;************************************************ NGAT NGATNGOAI1:
CLR EX1
MOV R0,0028H MOV R1,0029H MOV R7,#00H
CLR C
MOV A,#40H CHOLENIR1:
JNB P3.3,CHOLENIR1
CHOXUONGIR1:
JB P3.3,KT MOV R7,#00H
LCALL DELAY1000
JB
P3.3,NHAPC0IR1
SETB
C
RRC
A
JC
MAINIR2
;KT VA THUC HIEN
SJMP
CHOLENIR1
NHAPC0IR1:
CLR
C
RRC
A
JC
MAINIR2
;KT VA THUC HIEN
SJMP
CHOXUONGIR1
MAINIR2:
RR A
CJNE A,#09H,KTIR0
MOV 0027H,A MOV P1,#0FFH SJMP NHAY
KTIR0:
KTIR1:
KTIR2:
CJNE A,#00H,KTIR1
MOV 0027H,A MOV P1,#0FFH
LCALL DELAYROLE MOV P1,#0FEH SJMP NHAY
CJNE A,#01H,KTIR2
MOV 0027H,A MOV P1,#0FFH
LCALL DELAYROLE
MOV P1,#0FDH SJMP NHAY
CJNE A,#02H,KTIR3
MOV 0027H,A MOV P1,#0FFH
LCALL DELAYROLE
MOV P1,#0FBH
SJMP NHAY
KTIR3:
KTIR4:
KTIR5:
KTIR6:
KTIR7:
NHAY:
KT:
CJNE A,#12H,KTIR4
LCALL TANGPHUT ;TANG PHUT SJMP NHAY
CJNE A,#13H,KTIR5
LCALL GIAMPHUT ;GIAM PHUT SJMP NHAY
CJNE A,#10H,KTIR6
LCALL TANGGIO ;TANG GIO SJMP NHAY
CJNE A,#11H,KTIR7
LCALL GIAMGIO ;GIAM GIO SJMP NHAY
CJNE A,#03H,NHAY
LCALL TIME ;TAT MO TIME
RETI
INC R7
CJNE R7,#150,CHOXUONGIR1
MOV R7,#00H SJMP NHAY
;**************************************** NGAT TIME0
NGATTIME0:
CLR TR0
DJNZ 0025H,NAPCCC0
DJNZ 0026H,NAPBBB0
DJNZ 0028H,NAPAAA0
MOV TH0,#HIGH(-60000) MOV TL0,#LOW(-60000)
MOV 0025H,#20
MOV 0026H,#250
CLR TR0
MOV R1,0029H
CJNE R1,#00H,NHAYTIME1
SETB P3.7
PUSH ACC MOV A,P1
CJNE A,#0FFH,TATQUAT0
MOV P1,#0FEH MOV 0027H,#00H POP ACC
THOATNGAT0: RETI
NAPCCC0:
MOV TH0,#HIGH(-60000) MOV TL0,#LOW(-60000) SETB TR0
SJMP THOATNGAT0
NAPBBB0:
MOV 0025H,#20
MOV TH0,#HIGH(-60000) MOV TL0,#LOW(-60000) SETB TR0
SJMP THOATNGAT0
NAPAAA0:
MOV 0025H,#20
MOV 0026H,#250
MOV TH0,#HIGH(-60000) MOV TL0,#LOW(-60000) SETB TR0
SJMP THOATNGAT0
TATQUAT0:
MOV P1,#0FFH MOV 0027H,#09H POP ACC
SJMP THOATNGAT0
NHAYTIME1:
SETB TR1
SJMP THOATNGAT0
;****************************************** NGAT TIME1
NGATTIME1:
CLR TR1
MOV R1,0028H
CJNE R1,#00H,NHAYTIME0
DJNZ 0024H,NAPCCC1
DJNZ 0026H,NAPBBB1
DJNZ 0029H,NAPAAA1
CLR TR1
SETB P3.7
MOV 0024H,#240
MOV 0026H,#250
MOV TH1,#HIGH(-60000)
MOV TL1,#LOW(-60000) TATMO1:
PUSH ACC MOV A,P1
CJNE A,#0FFH,TATQUAT1
MOV P1,#0FEH MOV 0027H,#00H POP ACC
THOATNGAT1:
RETI NAPCCC1:
MOV TH1,#HIGH(-60000) MOV TL1,#LOW(-60000) SETB TR1
SJMP THOATNGAT1
NAPBBB1:
MOV 0024H,#4
MOV TH1,#HIGH(-60000) MOV TL1,#LOW(-60000) SETB TR1
SJMP THOATNGAT1
NAPAAA1:
MOV 0024H,#240
MOV 0026H,#250
MOV TH1,#HIGH(-60000) MOV TL1,#LOW(-60000) SETB TR1
SJMP THOATNGAT1
TATQUAT1:
MOV P1,#0FFH MOV 0027H,#09H POP ACC
SJMP THOATNGAT1
NHAYTIME0:
MOV 0024H,#240
MOV 0026H,#250
MOV TH1,#HIGH(-60000) MOV TL1,#LOW(-60000) SETB TR0
SJMP THOATNGAT1
;**************************************** DELAY DELAYHT: ;DELAY DO MA
PUSH 00H
PUSH 01H
MOV R0,#5
DLHT:
MOV R1,#250
DJNZ R1,$
DJNZ R0,DLHT POP 01H
POP 00H RET
DELAY1000: ;DELAY DO MA
PUSH 00H PUSH 01H MOV R0,#2
DL1000:
MOV R1,#250
DJNZ R1,$
DJNZ R0,DL1000
POP 01H POP 00H RET
DELAYROLE: PUSH 00H PUSH 01H
MOV R0,#200
DLRL:
MOV R1,#250
DJNZ R1,$ DJNZ R0,DLRL POP 01H
POP 00H RET
;***************************************** QUET PHUT HT0: ;QUETPHUT
CJNE
R2,#09H,NAPMA1
;NAP MA QUET PHUT
MOV
DPTR,#MAP0
SJMP
QUETP
;NHAY DEN QUET
NAPMA1:
CJNE R2,#00H,NAPMA2
MOV DPTR,#MAP1
SJMP QUETP NAPMA2:
CJNE R2,#01H,NAPMA3
MOV DPTR,#MAP2
LJMP QUETP NAPMA3:
CJNE R2,#02H,HIENR MOV DPTR,#MAP3
SJMP QUETP HIENR:
MOV DPTR,#MAP0
LCALL QUETP LCALL QUETG
LJMP HIENTHI ;NAP MA XONG QUETP:
PUSH 03H ;QUET PHUT
PUSH
04H
PUSH
05H
PUSH
06H
PUSH
ACC
MOV
A,R0
MOV
R5,A
MOV
A,#00H
MOV
R6,#0FEH
;MA COT
CONGP:
ADD
A,#3
;DICH DEN VUNG MA(MOI R0 CO 3 MA)
DJNZ
R5,CONGP
MOV
R3,A
;LAY VI TRI MA
MOV
R4,#3
;QUET 3 LED
LAPQUETP:
MOVC A,@A+DPTR MOV P0,A
MOV P2,R6
LCALL DELAYHT
MOV
P2,#0FFH
MOV
A,R6
RL
A
MOV
R6,A
DEC
R3
;DICH DEN MA KE
MOV
A,R3
DJNZ
R4,LAPQUETP
;KT DU 4
POP
ACC
POP
06H
POP
05H
POP
04H
POP
03H
RET
QUETG:
PUSH
03H
;QUET GIO
PUSH
04H
PUSH 05H PUSH 06H PUSH ACC MOV A,R1
MOV R5,A
MOV R6,#0F7H MOV A,#00H
MOV DPTR,#MAG CONGG:
ADD A,#2
DJNZ R5,CONGG MOV R4,#2
MOV R3,A LAPQUETG:
MOVC A,@A+DPTR MOV P0,A
MOV P2,R6
LCALL DELAYHT MOV P2,#0FFH MOV A,R6
RL A MOV R6,A DEC R3
MOV A,R3
DJNZ R4,LAPQUETG POP ACC
POP 06H POP 05H POP 04H POP 03H RET
;***************************************** LENH THUC HIEN TANGPHUT:
CJNE R0,#12,TANGP ;KT DAY
MOV R0,#255 ;QUAY VE 0
TANGP:
INC R0
MOV 0028H,R0
RET GIAMPHUT:
CJNE R0,#00H,GIAMP ;KT CAN MOV R0,#13 ;QUAY VE 60(3CH)
GIAMP:
DEC R0
MOV 0028H,R0
RET TANGGIO:
CJNE
R1,#24,TANGG
MOV
R1,#255
;QUAY VE 0
TANGG:
INC R1
MOV 0029H,R1
RET GIAMGIO:
CJNE R1,#00H,GIAMG
MOV R1,#25 ;QUAY VE 24(18H) GIAMG:
DEC R1
MOV 0029H,R1
RET
TIME:
MOV R0,0028H MOV R1,0029H
JB TR0,TATTIME JB TR1,TATTIME
CJNE R0,#00H,GOITIME0
CJNE R1,#00H,GOITIME1
SETB P3.7
THOATTIME: RET
TATTIME:
CLR TR0
CLR TR1
SETB P3.7
MOV 0028H,#00H MOV 0029H,#00H MOV 0024H,#240
MOV 0025H,#20
MOV 0026H,#250
MOV TH0,#HIGH(-60000) MOV TL0,#LOW(-60000) MOV TH1,#HIGH(-60000) MOV TL1,#LOW(-60000) SJMP THOATTIME
GOITIME0:
CLR P3.7
SETB TR0
SJMP THOATTIME
GOITIME1:
CLR P3.7
SETB TR1
SJMP THOATTIME
;************************************** MA MAP0:
DB
0FFH,03H,49H,03H,9FH,03H,03H,9FH,49H,03H,25H,03H,03H,25H,49H,03H,0
DH,03H,03H,0DH,49H,03H,99H,03H,03H,99H,49H,03H,49H,03H,03H,49H,49H,03H,4
1H,03H,03H MAP1:
DB
0FFH,03H,49H,9FH,9FH,03H,9FH,9FH,49H,9FH,25H,03H,9FH,25H,49H,9FH,
0DH,03H,9FH,0DH,49H,9FH,99H,03H,9FH,99H,49H,9FH,49H,03H,9FH,49H,49H,9FH
,41H,03H,9FH MAP2:
DB
0FFH,03H,49H,25H,9FH,03H,25H,9FH,49H,25H,25H,03H,25H,25H,49H,25H,0
DH,03H,25H,0DH,49H,25H,99H,03H,25H,99H,49H,25H,49H,03H,25H,49H,49H,25H,4
1H,03H,25H MAP3:
DB
0FFH,03H,49H,0DH,9FH,03H,0DH,9FH,49H,0DH,25H,03H,0DH,25H,49H,0D H,0DH,03H,0DH,0DH,49H,0DH,99H,03H,0DH,99H,49H,0DH,49H,03H,0DH,49H,49H,
0DH,41H,03H,0DH MAG:
DB
0FFH,03H,9FH,03H,25H,03H,0DH,03H,99H,03H,49H,03H,41H,03H,1FH,03H,
01H,03H,09H,9FH,03H,9FH,9FH,9FH,25H,9FH,0DH,9FH,99H,9FH,49H,9FH,41H,9FH
,1FH,9FH,01H,9FH,09H,25H,03H,25H,9FH,25H,25H,25H,0DH,25H,99H
END
TÀI LIỆU THAM KHẢO
1. Phạm Quang Trí – Giáo trình vi xử lý – Trường ĐH Công Nghiệp TP. HCM.
2. Các Wedsite:
www.alldatasheets.com
www.Tailieuvn.com
www.ant7.com
Các file đính kèm theo tài liệu này:
- dieu khien quat bang hn.doc
- dieu khien quat bang hn.pdf