Trong quá trình học tập em có cơ hội làm quen với vi điều khiển qua các môn học trên lớp và tìm hiểu thêm thông qua các tài liệu sách báo và internet, em nhận thấy: ”Ứng dụng vi điều khi
Trang 1LỜI NÓI ĐẦU
Kỹ thuật vi điều khiển đã được phát triển và ứng dụng rộng rãi trên thế giới trong rất nhiều lĩnh vực khác nhau, khắc phục được những vấn đề về cơ khí Ứng dụng kỹ thuật vi điều khiển là sự phát triển cần thiết của một xã hội hiện đại
Trong quá trình học tập em có cơ hội làm quen với vi điều khiển qua các môn học trên lớp và tìm hiểu thêm thông qua các tài liệu sách báo và internet, em nhận thấy: ”Ứng dụng vi điều khiển vào cuộc sống là một điều thú vị và là cả một quá trình sáng tạo”
Trong đồ án kỹ thuật vi điều khiển và kết nối ngoại vi này, em chọn đề tài:
”Thiết bị khóa cửa điện tử”
Tuy em đã cố gắng thực hiện đồ án tốt nhất có thể, nhưng vẫn không tránh được thiếu sót, mong quý Thầy Cô góp ý và thông cảm cho những thiếu sót của em Trong đồ án em đã sử dụng các tài liệu tham khảo:
“Họ Vi Điều Khiển 8051” của thầy Tống Văn On và Hoàng Đức Hải
“Giáo Trình Vi Điều Khiển” Của GV Phạm Hùng Kim Khánh
Từ các trang web: www.dientuvietnam.net, codientu.org
Đà Nẵng, Ngày 25 Tháng 05 Năm 2015
Phạm Ngọc Hiên Nguyễn Xuân Toàn
Trang 2NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN
-oOo -
Đà Nẵng, ngày… tháng …năm 2015
Trang 3MỤC LỤC
LỜI NÓI ĐẦU 1
Chương 1: GIỚI THIỆU ĐỀ TÀI 5
1.1Giới thiệu 5
1.1.1 Chức năng hệ thống 5
1.1.2Hoạt động của hệ thống 5
1.2Phân tích các khối chức năng của hệ thống 6
1.2.1Khối xử lý trung tâm 6
1.2.2 Bàn phím 6
1.2.3 Khối hiển thị 6
1.2.4 Khối nguồn 7
1.2.5 Khối mạch điều khiển động cơ đóng ,mở cửa 7
1.2.6 Khối báo động 7
1.3 Giới thiệu vi điều khiển 8051 7
1.3.1 Giới thiệu MSC-51 7
1.3.2 Sơ lược về các chân của ic 89C51: 8
1.3.3 Khảo sát các khối bên trong 89c51 − tổ chức bộ nhớ: 10
1.3.4 Hoạt động của bộ định thì timer: 12
1.3.5 Hoạt động của bộ ngắt (INTERRUPT): 17
1.4 Giới thiệu về LCD 19
1.4.1 Cấu tạo 19
1.4.2 Chức năng các chân 20
1.4.3 Sơ đồ khối của HD44780 22
1.5 Giới thiệu về bàn phím 25
Chương 2: THIẾT KẾ VÀ THI CÔNG MẠCH 25
2.1 Sơ đồ mạch 25
2.1.1Khối điều khiển trung tâm 26
2.1.2 LCD 27
2.1.3 Bàn Phím 28
2.1.4 Khối mạch điều khiển đóng mở cửa 30
2.1.5Khối báo động 31
2.1.6 Mạch nguồn 32
Chương 3: LƯU ĐỒ THUẬT TOÁN VÀCHƯƠNG TRÌNH 32
3.1 Lưu đồ thuật toán của chương trình chính (chương trình nhập mật khẩu) 34
3.2 Thuật toán của các chương trình con 35
3.2.1 Thuật toán quét phím 35
Trang 43.2.2 Thuật toán của chương trình con enter và so sánh mật khẩu 37
3.2.3 Thuật toán của chương trình con đổi mật khẩu 38
3.2.5 Thuật toán của chương trình con đóng và mở cửa 40
3.2.6 Thuật toán của chương trình con phím xóa 41
3.2.7 Thuật toán hiển thị trên LCD 42
3.3 CHƯƠNG TRÌNH 43
Trang 5Chương 1: GIỚI THIỆU ĐỀ TÀI
- Tính an toàn: phải có chức năng bảo mật cao
- Hệ thống hiển thị trực quan qua LCD 16x2A, có đèn chiếu sáng khi điều kiện môi trường tối
- Có hệ thống báo động khi nhập sai quá nhiều lần (ở đây em thiết kế là 3 lần, sau 3 lần nhập sai thì LCD hiển thị sai mã, và kích hoạt hệ thống báo động)
- Có chức năng thay đổi mật khẩu khi cần thiết, và mật khẩu mặc định ban đầu là
111111
- Phím Xóa có thể xóa khi bạn nhập sai, sửa nhầm lẫn khi nhập phím
1.1.2Hoạt động của hệ thống
Ban đầu:
- Thay đổi mật khẩu cho người sử dụng:
Ấn phím thay đổi mật khẩu, hệ thống sẽ hiển thị trên LCD là : ” NHAP MK CU”
Tiến hành nhập mật khẩu cũ, nhấn Enter, nếu đúng thì hệ thống hiển thị : ”NHAP MK MOI”, sau khi nhập mật khẩu mới , nhấn Enter thì LCD hiển thị:”NHAP LAI MK”, nếu quá trình đổi mã thành công thì LCD hiễn thị:”DA DOI MK”
Nếu sai thì hệ thống sẽ hiển thị:” SAI MA, NHAP LAI”, sai quá
3 lần thì sẻ kích hoạt hệ thống báo động
-Nhập mật khẩu:
Trang 6 Lcd hiển thị nhập mật khẩu, người sử dụng nhập mã thông qua bàn phím, nhấn Enter để xác nhận nhập xong, nếu nhập đúng thì LCD hiển thị “ MO KHOA”, nếu nhập sai thì LCD hiển thị:” SAI MA, NHAP LAI”,sai quá 3 lần thì kích hoạt hệ thống báo động
Nếu người dùng có thể xóa khi mã đang hập khi cảm thấy nhập sai thông qua phím Xóa, và nếu nhập quá 10 ký tự thị hệ thống
tự kiểm tra, và thông báo sai mã
1.2Phân tích các khối chức năng của hệ thống
1.2.1Khối xử lý trung tâm
Chức năng: Đóng vai trò đầu não của hệ thống,tiếp nhận tín hiệu từ bàn phím
và so sánh mã, hiển thị trên LCD.Từ đó đưa các tín hiệu điều khiển đến cho
khối mạch điều khiển động cơ, hay khối mạch báo động tương ứng
- Sử dụng chip: AT89S52
1.2.2 Bàn phím
Bàn phím gồm các nút Mỗi nút là một bộ phận đóng mở bằng cơ khí Các mã của bàn phím tạo ra có thể được tạo ra trực tiếp hoặc bằng phép quét hàng và quét cột Bàn phím gồm 15 phím được xắp xếp theo kiểu 3x5( với 3 cột và 5 dòng)
Chức năng: là tín hiệu đầu vào cho bộ xử lý trung tâm, nhập mã đóng mở cửa
Trang 7Thay đổi nội dung linh hoạt.Xử lý lập trình đơn giản hơn LED7 thanh và
- ở đây sử dụng họ 78xx, bao gồm 7805 cung cấp cho vi điều khiển và lcd, 7809
dùng cho động cơ đóng mở cửa
1.2.5 Khối mạch điều khiển động cơ đóng ,mở cửa
Chức năng: đóng và khóa cửa khi có tín hiệ tương ứng từ bộ xử lý trung tâm
- Mạch sử dụng mạch cầu H để điều khiển, và động cơ sử dụng là động cơ DC
MCS-51 l một họ IC điều khiển (micro controller), được chế tạo và bán trên thị trường
bởi hãng Intel của Mỹ Họ IC này được cung cấp các thiết bị bởi nhiều hãng sản xuất
IC khác trên thế giới chẳng hạn: nhà sản xuất IC SIEMENS của Đức, FUJITSU của
Nhật và PHILIPS của Hà Lan Mỗi IC trong họ đều có sự hoàn thiện riêng và có sự
hãnh diện riêng của nó, phù hợp với nhu cầu của người sử dụng và yêu cầu đặt ra của
nhà sản xuất
IC 89C51 là IC tiêu biểu trong họ MCS-51 được bán trên thị trường Tất cả các
IC trong họ đều có sự tương thích với nhau và có sự khác biệt là sản xuất sau có cái
mới mà cái sản xuất trước không có, để tăng thêm khả năng ứng dụng của IC đó
Chúng có đặc điểm sau
Hình 2.1: Sơ đồ cấu tạo 89C51
Trang 8- 4k byte ROM (được lập trình bởi nhà sản xuất, chỉ có trong 8051)
- 128 byte RAM
- 4 Port I/O 8 bit
- 2 bộ định thời 16 bit
- Giao tiếp nối tiếp
- 64k không gian bộ nhớ chương trình mở rộng
- 64k không gian bộ nhớ dữ liệu mở rộng
- Một bộ xử lý luận lý (thao tác trên các bit đơn)
- 210 bit được địa chỉ hóa
- Bộ nhân /chia 4 bit
1.3.2 Sơ lược về các chân của ic 89C51:
89C51 l IC vi điều khiển (Microcontroller) do hãng intel sản xuất ic 89C51 có tất cả 40 chân có chức năng như các đường xuất nhập Trong đó có 24 chân có tác dụng kép, mỗi đường có thể hoạt động như các đường xuất nhập hoặc như các đường điều khiển hoặc là thành phần của bus dữ liệu
Hình 2.2: Sơ đồ chân
Chức năng các chân của 89C51:
Port 0:Port 0 l port có hai chức năng ở các chân từ 32÷39 của 89C51 Trong
các thiết kế cỡ nhỏ không dùng bộ nhớ mở rộng nó có chức năng như các đường vào
ra
Port 1:Port 1 l port I\O ở các chân từ 1-8 Các chân được ký hiệu l P0.0,
P0.1, P0.2,…P1.7, có thể dùng cho giao tiếp với các thiết bị bên ngoài nếu cần Port 1 không có chức năng khác vì vậy nó chỉ dùng cho giao tiếp với các thiết bị bên ngoài
(chẳng hạn ROM, RAM, 8255, 8279, …)
U1
AT89C51 9
18
19
29 30
31
1 2 3 4 5 6 7 8
21 22 23 24 25 26 27 28 10 11 12 13 14 15 16 17
39 38 37 36 35 34 33 32
RST
XTAL2
XTAL1
PSEN ALE/PROG
EA/VPP
P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7
P2.0/A8 P2.1/A9 P2.2/A10 P2.3/A11 P2.4/A12 P2.5/A13 P2.6/A14 P2.7/A15 P3.0/RXD P3.1/TXD P3.2/INT0 P3.3/INT1 P3.4/T0 P3.5/T1 P3.6/WR P3.7/RD
P0.0/AD0 P0.1/AD1 P0.2/AD2 P0.3/AD3 P0.4/AD4 P0.5/AD5 P0.6/AD6 P0.7/AD7
Trang 9Port 2:Port2 là một port có tác dụng kép ở các chân từ 21-28 được dùng như các đường xuất nhập hoặc các byte cao của Bus địa chỉ đối với thiết kế lớn
Port3:Port3 l một port có tác dụng kép từ chân 10 –17 Các chân của port này
có nhiều chức năng, các công dụng chuyển đổi có liên hệ với đặc tính đặc biệt của
INT1\
T0 T1 WR\
RD\
Ngõ vào dữ liệu nối tiếp Ngõ ra dữ liệu nối tiếp Ngõ vào ngắt ngòai 0 Ngõ vào ngắt ngoài 1 Ngõ vào của timer/couter 0 Ngõ vào của timer/couter 1 Điều khiển ghi bộ nhớ dữ liệu (RAM) ngoài Điều khiển đọc bộ nhớ dữ liệu (RAM) ngoài
Bảng2.1: Chức năng của các chân port 3
- Ngõ tín hiệu PSEN\ (Progam store enable):
PSEN\ l tín hiệu ngõ ra ở chân 29 có tác dụng cho phép đọc bộ nhớ chương trình mở rộng và thường được nối với chân OE\ (output enable) của EPROM cho phép đọc các byte mã lệnh
PSEN ở mức thấp trong thời gian lấy lệnh.Các mã nhị phân của chương trình được đọc từ EPROM qua bus dữ liệu và được chốt vào thanh ghi bên trong 89C51 để giải mã lệnh.Khi thi hành chương trình trong ROM nội (ic 89C51) thì PSEN\ sẽ ở mức
1
- Ngõ tín hiệu điều khiển ALE (Address latch enable):
Khi 89C51 truy xuất bộ nhớ bên ngoài, port0 có chức năng là địa chỉ và dữ liệu
do đó phải tách đường địa chỉ và dữ liệu Tín hiệu ra ALE ở chân thứ 30 dùng làm tín hiệu điều khiển để giải đa hợp các đường địa chỉ và dữ liệu khi kết nối với IC chốt
Tín hiệu ra ở ALE l một xung trong khoảng thời gian port 0 đóng vai trò là địa chỉ thấp nên chốt địa chỉ hoàn toàn tự động Các xung tín hiệu ALE có tốc độ bằng 1/6 tần số dao động trên vi điều khiển 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 cho EPROM trong 89C51
Ngõ tín hiệu EA\ (External Access: truy xuất dữ liệu bên ngoài):
Tín hiệu vo EA\ ở chân 31 thường được mắc lên mức 1 hoặc mức 0 Nếu ở mức
1 thì ic89C51 thi hành chương trình trong ROM nội trong khoảng địa chỉ thấp 4k.Nếu
ở mức 0 thì 89C51 thi hành chương trình từ bộ nhớ mở rộng (vì ic89C51 không có bộ nhớ chương trình trên chip).Chân EA\ được lấy làm chân cấp nguồn 21v lập trình cho EPROM trong 89C51
Trang 10- Ngõ tín hiệu RST (Reset):
Ngõ tín hiệu RST ở chân 9 và ngõ vào Reset của 89C51 Khi ngõ vào tín hiệu đưa lên mức cao ít nhất l 2 chu kỳ máy, các thanh ghi bên trong được nạp những gi trị thích hợp để khởi động hệ thống Khi cấp điện mạch tự động Reset
- Ngõ vào bộ dao động X1, X2:
Bộ tạo dao động được tích hợp bên trong 8951, khi sử dụng 89C51 người thiết
kế cần ghép nối thêm tụ, thạch anh.Tần số thạch anh được sử dụng cho 89C51 l
1.3.3 Khảo sát các khối bên trong 89c51 − tổ chức bộ nhớ:
Bộ nhớ trong 89C511 bao gồm ROM và RAM RAM trong 89C51 bao gồm nhiều thnh phần: phần lưu trữ đa dụng, phần lưu trữ địa chỉ hóa từng bit, các bank thanh ghi và các thanh ghi chức năng đặc biệt 89C51 có cấu trúc bộ nhớ theo kiểu Harvard: có những vùng nhớ riêng biệt cho chương trình và dữ liệu Chương trình và
dữ liệu có thể chứa bên trong 89C51, nhưng 89C51 vẫn có thể kết nối với 64k byte chương trình và 64k byte dữ liệu
Các thanh ghi và các port xuất nhập đã được định vị (được định vị có nghĩa l xác định) trong bộ nhớ và có thể truy xuất trực tiếp giống như các bộ nhớ địa chỉ khác
Ngăn xếp bên trong RAM nội nhỏ hơn so với ROM ngoại như các bộ vi xử lý khác
RAM bên trong 89C51 được phân chia như sau:
- Các Bank thanh ghi có địa chỉ 00H ÷ 1FH
- RAM địa chỉ hóa từng bit có địa chỉ 20H ÷ 2FH
- RAM đa dụng có địa chỉ 30H ÷ 7FH
Các thanh ghi có chức năng đặc biệt 80H ÷ FFH
Trang 11Hình 2.3 :Sơ đồ tổ chức bộ nhớ
RAM đa dụng:
Mặc dù trên hình vẽ cho thấy 80 byte đa dụng chiếm các địa chỉ từ 30H ÷7FH
32 địa chỉ dưới từ 00H ÷ 1FH cũng có thể được dùng với mục đích tương tự (mặc dù các địa chỉ này cũng đã định với mục đích khác)
Mọi địa chỉ trong vùng RAM đa dụng đều có thể truy xuất tự do dùng kiểu địa chỉ gián tiếp hoặc trực tiếp Ví dụ: để đọc nội dung ở địc chỉ 5FH của RAM nội vào thanh ghi tích lũy A, có thể dùng một trong hai cách sau:
- Cách 1: MOV A, #5FH
- Cách 2: Ngoài cách trên RAM bên trong cũng có thể được truy xuấtbằng cách dùng địa chỉ gián tiếp hoặc trực tiếp qua R0 hay R1:
MOV R0, #5FH MOV A, @R0 Lệnh đầu tin dùng để nạp địa chỉ tức thời #5FH vo thanh ghi R0, lệnh thứ 2 dùng để chuyển nội dung của ô nhớ có địa chỉ mà R0 đang chỉ tới vào thanh ghi tích lũy A
RAM địa chỉ hĩa từng bit:
Trang 128951 chứa 210 bit được địa chỉ hóa, trong đó có 128bit chứa các byte có địa chỉ
từ 20H÷2FH và các bit còn lại chức trong nhóm thanh ghi có chứa năng đặc biệt
Ý tưởng truy xuất từng bit bằng phần mềm l một đặc tính mạnh của vi điều khiển nói chung Các bit có thể được đặt, xóa, And, OR…, với một lệnh đơn Mà điều này đối với vi xử lý đòi hỏi phải có một chuỗi lệnh đọc – sửa - ghi để đạt được mục đích tương tự như vi điều khiển Ngồi ra các port cũng có thể truy xuất được từng bit làm đơn giản đi phần mềm xuất nhập từng bit 128 bit truy xuất từng bit này cũng có thể truy xuất như các byte hoặc các bit phụ thuộc vào lệnh được dùng
Ví dụ: để đặt bit thứ 57 ta dùng lệnh sau:
SETB 67H
Các Bank thanh ghi:
32 byte thấp của bộ nhớ RAM nội được dùng cho các bank thanh ghi Bộ lệnh
8031 hỗ trợ 8 thanh ghi nói trên có tên là R0 ÷ R7 và theo mặc định khi reset hệ thống, các thanh ghi này có địa chỉ từ 00H ÷ 07H
Ví dụ: lệnh sau đây sẽ đọc nội dung của ô nhớ có địa chỉ 05H vào thanh ghi A
MOV A, R5 Đây là lệnh 1 byte dùng địa chỉ thanh ghi Tuy nhiên yêu cầu trên có thể thi hành bằng lệnh 2 byte dùng địa chỉ trực tiếp nằm trong byte thứ hai:
MOV A,#05H Các lệnh dùng các thanh ghi R0 ÷ R7 sẽ ngắn hơn và nhanh hơn so với các lệnh
có chức năng tương tự 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 bank thanh ghi nên tại một thời điểm chỉ có một bank thanh ghi được truy xuất bởi các thanh ghi R0 ÷ R7 Để chuyển đổi việc truy xuất các bank thanh ghi ta phải thay đổi các bit chọn bank trong thanh ghi trong thanh ghi trạng thi Giả sử bank thanh ghi thứ 3 đang được truy xuất lệnh sau đây sẽ chuyển nội dung của thanh ghi A vào ô nhớ RAM có địa chỉ 18H:
MOV R0, A Tóm lại :ý tưởng dùng các bank thanh ghi cho phép ta chuyển hướng chương trình nhanh và hiệu quả hơn
1.3.4 Hoạt động của bộ định thì timer:
Giới thiệu:
Một định nghĩa đơn giản của timer l một chuỗi các flip-flop chia đôi tần sồ nối tiếp với nhau, chúng nhận tín hiệu vào làm nguồn xung nhịp Ngõ ra của tầng cuối làm xung nhịp cho flip - flop báo tràn của timer (flip - flop cờ) Giá trị nhị phân trong các flip - flop của timer có thể xem như đếm số xung nhịp (hoặc cc sự kiện) từ khởi động timer Ví dụ timer 16 bit sẽ đếm từ 0000H đến FFFFH.Cờ báo tràn sẽ lên 1 khi số đếm tràn từ FFFFH đến 0000H
ic89C51 có hai timer 16 bit, mỗi timer có 4 cách làm việc Người ta sử dụng các timer để:
- Định khoảng thời gian
Trang 13- Đếm sự kiện
- Tạo tốc độ baud cho port nối tiếp trong ic89C51
Trong các ứng dụng định nghĩa khoảng thời gian, người ta sử dụng lập trình timer ở một khoảng đều đặn và đặt cờ tràn timer.Cờ được sử dụng để đồng bộ hóa chương trình để thực hiện một tác động như kiểm tra trạng thái của các ngõ vào hoặc gởi sự kiện ra các ngõ ra Các ứng dụng khác có thể sử dụng việc tạo xung nhịp đều đặn của timer để đo thời gian trôi qua giữa hai sự kiện (Ví dụ: đo độ rộng xung)
Đếm sự kiện dùng để xác định số lần xảy ra của một số sự kiện.Một “sự kiện” l bất cứ tác động ngoài nào có thể cung cấp một chuyển trạng thái trên một chân của 89C51
Thanh ghi chế độ timer ( TMOD ):
Thanh ghi TMOD chứa hai nhóm 4 bit dùng để đặt chế độ làm việc cho timer 0
và timer 1
Bit Tn Timer Mơ tả
7 GATE 1 Bit điều khiển cổng Khi GATE=1 thì bộ định thời chỉ
hoạt động khi chân INTO=1
6 C/T 1 Bit chọn chức năng đếm hoặc định thời
C/T=1:bộ định thời l bộ đếm C/T=0:bộ định thời l bộ định khoảng thời gian
5 M0 1 Bit chon chế độ hoạt động của bộ định thời
4 M1 1 Bit chon chế độ hoạt động của bộ định thời
3 GATE 0 Bit điều khiển cổng Khi GATE=1 thì bộ định thời chỉ
hoạt động khi chân INTO=1
2 C/T 0 Bit chọn chức năng đếm hoặc định thời
C/T=1:bộ định thời l bộ đếm C/T=0:bộ định thời l bộ định khoảng thời gian
1 M0 0 Bit chon chế độ hoạt động của bộ định thời
0 M1 0 Bit chon chế độ hoạt động của bộ định thời
Bảng 2.2 Thanh ghi timer Thanh ghi điều khiển timer ( TCON )
Thanh ghi TCON chứa các bit trạng thi và các bit điều khiển cho timer 0
và timer 1
Bit Ký hiệu Địa chỉ Mơ tả
TCON.7 TF1 8FH Cờ báo tràn Timer.Đặt bởi phần cứng khi
tràn, đuợc xóa bởi phần mềm hoặc phần cứng khi bộ xử lí chỉ đến chương trình phục
vụ ngắt TCON.6 TR1 8EH Bit điều khiển Timer 1 chạy.Đặt/xóa bằng
timer để cho phần mềm chạy/ngưng
Trang 14TCON.5 TF0 8DH Cờ báo tràn timer 0
TCON.4 TR0 8CH Bit điều khiển timer chạy
TCON.3 IE1 8BH Cờ cạnh ngắt cạnh bên ngoài.Đặt bởi phần
cứng khi phát hiện 1 cạnh xuống ở INT1:xóa bằng phần mềm hoặc phần cứng khi CPU chỉ đến chương trình phục vụ ngắt
TCON.2 IT1 8AH Cờ kiểu ngắt 1 bên ngoài.Đặt/xóa bằng phần
mềm để ngắt ngồi tích cực cạnh xuống/mức thấp
TCON.1 IE0 89H Cờ cạnh ngắt ngoàii 0
TCON.0 IT0 88H Cờ kiểu ngắt ngoài 0
Bảng 2.3 :Tóm tắt thanh ghi TCON
Chế độ TIMER:
Chế độ 1 – Chế độ TIMER 16 BIT:
Hoạt động như timer 16 bit đầy đủ
Cờ báo tràn l bit TFx trong TCON có thể đọc hoặc ghi bằng phần mềm MSB của giá trị trong thanh ghi timer l bit 7 của THx và LSB l bit 0 của TLx Các thanh ghi timer (TLx/THx) có thể đọc hoặc ghi bất cứ lúc nào bằng phần mềm
Nguồn tạo xung nhịp:
Có hai nguồn tạo xung nhịp có thể có, được chọn bằng cách ghi vào C/T
(counter/timer) trong TMOD khi khởi động timer.Một nguồn tạo xung nhịp dùng cho định khoảng thời gian, cái khác cho đếm sự kiện
Định khoảng thời gian (interval timing):
Trang 15Nếu C/T=0 hoạt động timer liên tục được chọn vào timer được dùng cho việc định khoảng thời gian Lúc đó, timer lấy xung nhịp từ bộ dao động trên chip.Bộ chia
12 được thêm vào để giảm tần số xung nhịp đến giá trị thích hợp cho các ứng dụng Như vậy, thạch anh 12 MHz sẽ cho tốc độ xung nhịp timer 1 MHz Báo tràn timer xảy
ra sau một số (cố định) xung nhịp, phụ thuộc vào giá trị ban đầu được nạp vào các thanh ghi timer TLx/THx
Đếm sự kiện (Event Counting):
Nếu C/T=1, timer lấy nguồn xung nhịp từ bên ngoài Trong hầu hết các ứng dụng, nguồn bên ngoài này cung cấp cho timer một xung khi xảy ra một sự kiện – timer dùng đếm sự kiện Số sự kiện được xác định bằng phần mềm bằng cách đọc các thanh ghi TLx/THx vì giá trị 16 bit trong thanh ghi này tăng thêm một cho mỗi sự kiện
Nguồn xung nhịp ngồi có từ thay đổi chức năng của các port 3, bit 4 của port 3 (P3.4) dùng làm ngõ vào tạo xung nhịp bên ngoài cho timer 0 và được gọi là “T0” V P3.5 hay “T1” l ngõ vào tạo xung nhịp cho timer 1
Trong các ứng dụng bộ đếm, các thanh ghi Timer được tăng thêm 1 tương ứng với chuyển từ 1 xuống 0 ở ngõ vào bên ngoài: Tx, ngõ vào bên ngoài được lấy mẫu trong S5P2 của mọi chu kỳ máy Như vậy, khi ngõ vào cao trong một chu kỳ và thấp trong một chu kỳ kế thì số đếm được tăng thêm một Gía trị mới được xuất hiện trong các thanh ghi trong S3P1 của chu kỳ theo sau chu kỳ trong đó phát hiện sự chuyển tiếp Do đó, mất 2 chu kỳ máy (2μs) để ghi nhận sự chuyển 1 sang 0, tần số ngồi tối đa
l 500KHz (giả sử hoạt động ở 12 MHz)
Bắt đầu, dừng và điều khiển các Timer:
Phương pháp đơn giản nhất để bắt đầu (cho chạy) và dừng các timer l dùng các bit điều khiển chạy: TRx trong TCON TRx bị xóa sau khi Reset hệ thống Như vậy, các timer theo mặc nhin l bị cấm (bị dừng) TRx được đặt lên 1 bằng phần mềm để cho các timer chạy
Vì TRx ở trong thanh ghi TCON có địa chỉ bit, nên dễ dàng cho việc điều khiển các timer trong chương trình
Ví dụ: cho timer 0 chạy bằng lệnh: SETB TR0 v dừng bằng lệnh: CLR TRO
Trang 16Trình bin dịch sẽ thực hiện việc chuyển đổi ký hiệu cần thiết từ “TR0” sang địa chỉ bit đúng SETB TR0 chính xác giống như SETB 8CH
Một phương pháp khác để điều khiển các timer l dùng bit GATE trong TMOD
và ngõ vào bên ngoài INTx Đặt GATE =1 cho phép timer sẽ được điều khiển bằng INTx Việc này rất hiệu dụng cho việc đo độ rộng xung như sau: Giả sử INT0 ở mức thấp nhưng các xung ở mức cao trong khoảng thời gian đo Khởi động timer 0 ở chế
độ 2 (chế độ timer 16 bit), với TL0/TH0=0000H, Gate = 1 v TR0 = 1 Khi INT0 ở mức cao, timer được mở cổng và được cấp xung nhịp 1 MHz (nếu ic8031/8051 hoạt động ở tần số 12 MHz).Khi INT0 xuống thấp, timer bị ‘đóng cổng’ và thời khoảng của xung tính bằng μs l số đếm trong TL0/TH0.(Có thể lập trình INT0 để tạo ra một ngắt khi nó xuống thấp)
Hình sau minh họa Timer 1 hoạt động ở chế độ 1 như một timer 16 bit.Các thanh ghi timer TL1/TH1 v cờ báo tràn TF1 trong sơ đồ chỉ các khả năng có thể có của nguồn tạo xung nhịp và dễ cho chạy, dừng và điều khiển timer
Khởi động và truy xuất các thanh ghi:
Thông thường các thanh ghi được khởi động một lần ở đầu chương trình để đặt chế độ làm việc đúng Sau đó, trong thân chương trình, các timer được
cho chạy, dừng, các bit cờ được kiểm tra và xóa, các thanh ghi timer được đọc v cập nhật v,v… theo đòi hỏi của các ứng dụng
TMOD l thanh ghi thứ nhất được khởi động vì nó đặt chế đơ hoạt động
Ví du: các lệnh sau khởi động timer1 như timer 16 bit (chế độ 1) có xung nhịp
từ bộ dao động trn chip cho việc định khoảng thời gian:
MOV TMOD = 00010000B Nếu cần số đếm ban đầu, các thanh ghi timer TL1/TH1 cũng phải được khởi động Nhớ lại các timer đếm lên và đặt cờ báo tràn khi có sự chuyển tiếp FFFFH sang 0000H một khoảng 100μs có thể được định thời bằng cách khởi động trị cho
TL1/TH1 lFF9C:
MOV TL1, # 9CH MOV TH1, # OFFH
Trang 17Rồi timer được cho chạy bằng cách điều khiển bit như sau:
SETB TR1
Cờ báo tràn được tự động đạt lên sau 100μ s Phần mềm có thể đợi trong 100μ s bằng cách dùng lệnh rẽ nhanh có điều kiện nhảy đến chính trị trong khi cờ báo tràn chưa được đặt lên 1:
WAIT: JMB TF1, WAIT Khi timer trên, cần dừng timer và xóa cờ báo tràn trong phần mềm:
CLR TR1 CLR TF1 Đọc timer đang chạy:
Trong một số ứng dụng cần đọc giá trị trong các thanh ghi timer đang chạy Vì phải đọc 2 thanh ghi timer, “sai pha” nếu byte thấp trên vào byte cao giữa hai lần đọc Giá trị có thể đọc được không đýng.Giải pháp l đọc byte cao trước, kế đó đọc byte thấp rồi đọc byte cao một lần nữa Nếu byte cao thay đổi thì lặp lại các hoạt động đọc Các lệnh dưới đây đọc các lệnh thanh ghi timer TL1/TH1 vào các thanh ghi R6/R7:
AGAIN: MOV A,TH1 MOV R6, TL1
Các interrupt đóng vai trò quan trọng trong việc thiết kế và cài đặt các ứng dụng
vi điều khiển Chúng cho phép hệ thống bất đồng bộ với một sự kiện và giải quyết một
sự kiện trong khi đó một chương trình khác đang thực thi
Một hệ thống được điều khiển bằng interrupt cho ta ảo giác là làm nhiều việc đồng thời Dó nhin l CPU đồng thời không thể thực thi hơn một lệnh Nhưng nó có thể tạm treo việc thực thi một chương trình để thực thi một chương trình khác, rồi quay về chương trình thứ nhất Theo cách này, interrupt giống như một chương trình con, nhưng có một khác biệt trong hệ thống được điều khiển l sự ngắt quảng không xảy ra như kết quả của một lệnh, mà đáp ứng một sự kiện xảy ra bất đồng bộ với chương trình chính Người ta không biết lúc nào và ở đâu chương trình chính bị ngắt quảng
Chương trình giải quyết ngắt gọi là chương trình phục vụ ngắt (ISR: Interrupt Service Routine) hoặc bộ xử lý ngắt ISR thực thi đáp ứng ngắt và thông thường thực hiện tác vụ nhập hay xuất với một thiết bị Khi ngắt xảy ra, chương trình chính tạm thời bị treo và rẽ nhánh đến ISR: ISR thi hành và kết thúc bằng lệnh trở về ngắt
Chương trình tiếp tục thực thi tại chỗ mà nó tạm dừng Thường người ta xem chương trình chính thực thi ở mức nền (cơ sở) và các ISR thực thi ngắt (Interrupt Level)
Người ta dùng thuật ngữ Foreground (phía trước) (Base – Level) chỉ mức nền và
Background (phía sau) (Interrupt – level) chỉ mức ngắt
Trang 18Tổ chức ngắt của ic89C51:
Thật sự tất cả các nguồn ngắt ở ic89C51: 2 ngắt ngoài, 2 từ timer và một ngắt Port nối tiếp Tất cả các ngắt theo mặc nhin đều bị cấm sau khi Reset hệ thống và được cho phép bằng phần mềm
Khi có 2 hoặc nhiều ngắt đồng thời, 1 ngắt xảy ra trong khi 1 ngắt khác đang được phục vụ, có cả 2 sự tuần tự hỏi và sơ đồ ưu tiên 2 mức dùng để xác định thực hiện ngắt Việc hỏi vịng tuần tự thì cố định nhưng ưu tin ngắt thì có thể lập trình được
Cho phép và cấm các ngắt: (Enabling and Disnabling Interrupt)
Mỗi nguồn Interrupt được cho phép hoặc cấm từng ngắt qua một thanh ghi chức năng đặc biệt có địa chỉ bit IE (Interrupt Enable) ở địa chỉ A8H Cũng như xác định bit cho phép riêng biệt cho mỗi nguồn ngắt, có một bit cho phép/cấm tồn bộ được xóa để cấm hòan tòan các ngắt được xt (đặt ln 1) để cho phép tất cả các ngắt
Bit Ký hiệu Địa chỉ bit Mơ tả
IE.4 ES ACH Cho phép ngắt Port nối tiếp
IE.3 ET1 ABH Cho phép ngắt từ timer 1
IE.2 EX1 AAH Cho phép ngắt ngoài 1
IE.1 ET0 A8H Cho phép ngắt từ timer 0
IE.0 EX0 A8H Cho phép ngắt ngoài 0
Bảng tóm tắt thanh ghi IE
Hai bit phải được đặt lần một để cho phép bất kỳ ngắt no: bit cho phép riêng và bit cho phép tồn bộ.Ví dụ các ngắt từ timer được cho phép như sau:
SETB ET1 ; Cho phép ngắt từ timer 1
SETB EA ; Đặt bit cho phép tồn bộ
Hoặc : MOV IE, #10001000B
Mặc dù hai cách này có cùng một hiệu quả sau khi reset hệ thống nhưng hiệu quả sẽ khác nếu IE được ghi giữa chương trình Cách thứ nhất không ảnh hưởng tới 5 bit trong thanh ghi IE, tri lại cách thứ hai sẽ xóa các bit khác Nên khởi trị IE theo cách thứ hai ở đầu chương trình (nghĩa l sau khi mở my hoặc reset hệ thống), nhưng cho phép và cấm các ngắt ngay trong chương trình nên dùng cách thứ nhất để tránh ảnh hưởng đến các bit khác trong thanh ghi IE
Ngắt Port nối tiếp có từ Logic OR của ngắt thu (RI) và phát (TI) Các bit cờ tạo các ngắt được tóm tắt trong bảng sau:
Bên ngoài 1 IE.1 TCON.3
Port nối tiếp TI SCON.1
Port nối tiếp RI SCON.0
Trang 19ISR thực thi và đáp ứng ngắt.ISR hoàn tất bằng lệnh RETI (quay về từ
ngắt).Điều này làm lấy lại giá trị cũ PC từ ngăn xếp và lấp lại trạng thi ngắt cũ.Thực thi chương trình chính ở chỗ mà nó bị dừng
Các vector ngắt (Interrupt Vectors):
Khi chấp nhận ngắt, gi trị được nạp vo PC được gọi l vector ngắt Nó là địa chỉ bắt đầu của ISR cho nguồn tạo ngắt Các vector ngắt được cho bảng sau:
Khi “chỉ đến một ngắt”, cờ gây ra ngắt tự động bị xóa bởi phần cứng.Các ngoại
lệ là RI và TI với các ngắt port nối tiếp v TF2, EXF2 với các Interrupt Timer.Vì có hai nguồn có thể cho mỗi ngắt này, không thực tế để CPU xóa cờ ngắt Các bit này phải được kiểm tra trong ISR để xác định nguồn ngắt và cờ tạo ngắt sẽ được xóa bằng phần mềm Thông thường một rẽ nhánh xảy ra với một phản ứng thích hợp, phụ thuộc vào nguồn ngắt
Vì các vector ngắt ở phần đầu của bộ nhớ chương trình, nên lệnh thứ nhất của chương trình chính thường l lệnh nhảy qua chương trình chính này.Ví dụ như lệnh LJMP 0030H
1.4 Giới thiệu về LCD
1.4.1 Cấu tạo
LCD (Liquid Crystals Display ) - Màn hình tinh thể lỏng, cơ sở vật lý để LCD
có thể hiển thị được thông tin, hình ảnh chính là do đặc tính của vật liệu chế tạo nên LCD, tức là Liquid Crystals (thạch anh lỏng) Các tinh thể bình thường chúng ở thể
Trang 20rắn với sự định hướng đặc biệt Tuy nhiên ở đây các thể lỏng được cấu trúc từ các tinh thể động Các tinh thể này có thể điều chỉnh bởi một điện trường đây là một cách để điều khiển chất lỏng thay đổi từ trong suốt đến trạng thái mờ đục(Chắn sáng)
LCD gồm 2 bề mặt dạng rãnh , giữa 2 bề mặt này là 1 lớp Thạch Anh lỏng
(Liquid Crystal)
+ Để có 1 điểm tối trên LCD: ánh sáng phát ra từ bên trong LCD sẽ đi qua bề mặt rãnh thứ nhất (lớp lọc đơn cực), sau đó ánh sáng đi qua lớp Liquid Cristal (lớp này được phân cực nên ánh sáng qua nó mà không bị xoắn), sau đó ánh sáng qua
bề mặt rãnh thứ 2lớp phân cực thứ 2 (lớp lọc đơn cực), ánh sáng không ló ra được khỏi lớp này(bị chặn lại hoàn toàn) ta thấy1 điểm tối trên màn hình LCD
+ Để có 1 điểm sáng trên LCD: quá trình đi tương tự nhưng khác ở chỗ ánh sáng qua lớp Liquid Cristal không được phân cực nên ánh sáng bị xoắn 90 độ, nhờ thế
mà đi qua được bề mặt rãnh thứ 2 (lớp lọc đơn cực) Ta thấy 1 điểm sáng trên LCD
1.4.2 Chức năng các chân
1 Vss Chân nối đất cho LCD, khi thiết kế mạch ta nối chân
này với GND của mạch điều khiển
2 Vdd Chân cấp nguồn cho LCD, khi thiết kế mạch ta nối
chân này với Vcc=5V của mạch điều khiển
Trang 213 Vee Chân này dùng để điều chỉnh độ tương phản của
LCD
Chân chọn thanh ghi (Register select)
+ Logic “0”: Bus DB0-DB7 sẽ nối với thanh ghi lệnh IR của LCD (ở chế độ “ghi” - write) hoặc nối với bộ đếm địa chỉ của LCD (ở chế độ “đọc”
- read) + Logic “1”: Bus DB0-DB7 sẽ nối với thanh ghi dữ liệu DR bên trong LCD
Chân chọn chế độ đọc/ghi (Read/Write) Nối chân R/W với logic “0” để LCD hoạt động ở chế độ ghi, hoặc nối với logic “1” để LCD ở chế độ đọc
Chân cho phép (Enable) Sau khi các tín hiệu được đặt lên bus DB0-DB7, các lệnh chỉ được chấp nhận khi có 1 xung cho phép của chân E
+ Ở chế độ ghi: Dữ liệu ở bus sẽ được LCD chuyển vào(chấp nhận) thanh ghi bên trong nó khi phát hiện một xung (high-to-low transition) của tín hiệu chân E
+ Ở chế độ đọc: Dữ liệu sẽ được LCD xuất ra DB7 khi phát hiện
DB0-cạnh lên (low- to-high transition) ở chân E và được LCD giữ ở bus đến khi nào chân E xuống mức thấp
7 14 DB0-
DB7
Tám đường của bus dữ liệu dùng để trao đổi thông tin với MPU Có 2 chế độ sử dụng 8 đường bus này : + Chế độ 8 bit : Dữ liệu được truyền trên cả 8 đường, với bit MSB là bit DB7
+ Chế độ 4 bit : Dữ liệu được truyền trên 4 đường từ DB4 tới DB7, bit MSB là DB7
15,16 A,K Đèn của LCD
Trang 221.4.3 Sơ đồ khối của HD44780
Khi sản xuất LCD, nhà sản xuất đã tích hợp chíp điều khiển (HD44780) bên trong lớp
vỏ và chỉ đưa các chân giao tiếp cần thiết
Hình 2.4: Sơ đồ khối của HD44780
trong chíp sẽ tự động ghi thông tin này vào DDRAM hoặc CGRAM Hoặc khi thông tin
Trang 23về địa chỉ được ghi vào IR, dữ liệu ở địa chỉ này trong vùng RAM nội của HD44780
sẽ
được chuyển ra DR để truyền cho MPU
Bằng cách điều khiển chân RS và R/W chúng ta có thể chuyển qua lại giữ 2 thanh ghi này khi giao tiếp với MPU Bảng sau đây tóm tắt lại các thiết lập đối với hai chân RS và R/W theo mục đích giao tiếp
0 0 Ghi vào thanh ghi IR để ra lệnh cho LCD (VD: cần display
clear,…)
0 1 Đọc cờ bận ở DB7 và giá trị của bộ đếm địa chỉ ở DB0-DB6
1 0 Ghi vào thanh ghi DR
1 1 Đọc dữ liệu từ DR
b Cờ báo bận BF(busy Flag):
Khi thực hiện các hoạt động bên trong chíp, mạch nội bên trong cần một khoảng thời gian để hoàn tất Khi đang thực thi các hoạt động bên trong chip như thế, LCD bỏ qua mọi giao tiếp với bên ngoài và bật cờ BF (thông qua chân DB7 khi có thiết lập RS=0,R/W=1) lên để báo cho MPU biết nó đang “bận” Dĩ nhiên, khi xong việc, nó sẽ đặt cờ BF lại mức 0
c Bộ Đếm địa chỉ AC (Address Counter):
Như trong sơ đồ khối, thanh ghi IR không trực tiếp kết nối với vùng RAM (DDRAM và CGRAM) mà thông qua bộ đếm địa chỉ AC Bộ đếm này lại nối với 2 vùng RAM theo kiểu rẽ nhánh Khi một địa chỉ lệnh được nạp vào thanh ghi IR, thông tin được nối trực tiếp cho 2 vùng RAM nhưng việc chọn lựa vùng RAM tương tác đã được bao hàm trong mã lệnh
d Vùng Ram hiển thị DDRAM(Display Data RAM):
Đây là vùng RAM dùng để hiển thị, nghĩa là ứng với một địa chỉ của RAM là một ô kí tự trên màn hình và khi bạn ghi vào vùng RAM này một mã 8 bit, LCD sẽ hiển thị tại vị trí tương ứng trên màn hình một kí tự có mã 8 bit mà chúng ta đã cung cấp.Vùng RAM này có 80x8 bit nhớ, nghĩa là chứa được 80 kí tự mã 8 bit Những vùng RAM còn lại không dùng cho hiển thị có thể dùng như vùng RAM đa mục đích
e Vùng ROM chứa ký tự đồ họa:
Vùng ROM này dùng để chứa các mẫu kí tự loại 5x8 hoặc 5x10 điểm ảnh/kí tự,
và định địa chỉ bằng 8 bit Tuy nhiên, nó chỉ có 208 mẫu kí tự 5x8 và 32 mẫu kí tự
Trang 24kiểu 5x10 (tổng cộng là 240 thay vì 28 = 256 mẫu kí tự) Người dùng không thể thay đổi vùng ROM này
f Vùng RAM chứa kí tự đồ họa CGRAM (Character Generator RAM):
Nhà sản xuất dành vùng có địa chỉ byte cao là 0000 để người dùng có thể tạo các mẫu kí tự đồ họa riêng Tuy nhiên dung lượng vùng này rất hạn chế: Ta chỉ có thể tạo 8 kí tự loại 5x8 điểm ảnh, hoặc 4 kí tự loại 5x10 điểm ảnh Địa chỉ tử 40h đến 7Fh
1.4.4 Tập lệnh của LCD:
Các lệnh của LCD có thể chia thành 4 nhóm như sau :
• Các lệnh về kiểu hiển thị VD : Kiểu hiển thị (1 hàng / 2 hàng), chiều dài dữ liệu (8 bit / 4 bit), …
• Chỉ định địa chỉ RAM nội
• Nhóm lệnh truyền dữ liệu trong RAM nội
• Các lệnh còn lại
Mã (Hex) Lệnh đến thanh ghi của LCD
1 Xóa màn hình hiển thị
4 Giảm con trỏ (dịch con trỏ sang trái)
6 Tăng con trỏ (dịch con trỏ sang phải)
7 Dịch hiển thị sang trái
5 Dịch hiển thị sang phải
8 Tắt con trỏ, tắt hiển thị
A Tắt hiển thị, bật con trỏ
C Bật hiển thị, tắt con trỏ
E Bật hiển thị, nhấp nháy con trỏ
F Tắt con trỏ, nhấp nháy con trỏ
10 Dịch vị trí con trỏ sang trái
14 Dịch vị trí con trỏ sang phải
18 Dịch toàn bộ vị trí hiển thị sang trái
1C Dịch toàn bộ vị trí hiển thị sang phải
Trang 25Trong đồ án em thiết kế với phím 3 cột và 5 hàng
Có phím 0 đến 9 là phím nhập mã
Còn có 4 phím chức năng: Enter, Xóa, Đổi mật khẩu, Khóa
Còn lại 1 phím dự bị, nhằm mở rộng chức năng khi cần thiết
Chương 2: THIẾT KẾ VÀ THI CÔNG MẠCH
2.1 Sơ đồ mạch
Trang 262.1.1Khối điều khiển trung tâm
Khối kết nối xử lý trung tâm trong hệ thống này sử dụng AT89S52
AT89S52 cũng có cấu trúc phần cứng giống như các vi điều khiển khác trong
họ 8051 và còn có các đặc trưng riêng:
+ Bộ nhớ 8k
+ 3 Timer/Counter 16 bit Timer 0,1,2
+ So với 89C, nó có chân MISO (P1.5), MOSI (P1.6), SCK (P1.7) nên có thể nạp
Khối xử lý trung tâm với 89s52 có nhiệm vụ là nhận biết tín hiệu thu được từ bàn phím Sau đó xử lý các tín hiệu đó và xuất ra các tín hiệu điều khiển thích hợp để điều khiển hệ thống theo chương trình lập sẵn
Địa chỉ chức năng kết nối của hệ thống xử lý trung tâm như sau:
Trang 27P2 nối với D0-D7 của LCD
Bộ dao động thạch anh có tác dụng tạo xung nhịp với tần số 12MHz cho VĐK hoạt động Hai đầu này được nối vào 2chân XTAL1 và XTAL2 của VĐK
Bộ RESET có tác dụng đưa vi điều khiển về trạng thái ban đầu Khi nút Reset được ấn điện áp +5V từ nguồn được nối vào chân Reset của vi điều khiển được chạy thẳng xuống đất lúc này điện áp tại chân vi điều khiển thay đổi đột ngột về
0, VĐK nhận biết được sự thay đổi này và khởi động lại trạng thái ban đầu cho
hệ thống
2.1.2 LCD
Là thiết bị hiển thị cho hệ thống
Khi nhập mã thì sẻ hiển thị ký tự * , và hiển thị các trạng thái làm việc của hệ thống như đổi mật khẩu , sai mã, nhập mật khẩu
LCD được sử dụng là 16x2A với 2 dòng và hiển thị 5x7
Trang 28Các chân được nối:
và so sánh thì cho ra tín hiệu điều khiển tương ứng
-Bàn phím được dùng bằng phương pháp quét phím theo hàng và cột
Dùng bàn phím cơ với 3 cột 5 hàng
Xắp xếp các hàng cột như bảng: