Thiết bị khóa cửa điện tử
Trang 1ĐỒ ÁN MÔN HỌC
VI ĐIỀU KHIỂN VÀ GHÉP NỐI NGOẠI VI
Tên đề tài :
THIẾT BỊ KHÓA CỬA ĐIỆN TỬ
Giáo viên hướng dẫn:ThS Lê Xứng
Họ và tên sinh viên:
Trang 2LỜ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 10 Tháng 04 Năm 2014
Trang 3NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN
-oOo -
Đà Nẵng, ngày… tháng …năm 2014
MỤC LỤC
Trang 4Chương 1: GIỚI THIỆU ĐỀ TÀI 6
1.1Giới thiệu 6
1.1.1Chức năng hệ thống 6
1.1.2Hoạt động của hệ thống 6
1.2Phân tích các khối chức năng của hệ thống 7
1.2.1Khối xử lý trung tâm 7
1.2.2 Bàn phím 7
1.2.3 Khối hiển thị 7
1.2.4 Khối nguồn 8
1.2.5 Khối mạch điều khiển động cơ đóng ,mở cửa 8
1.2.6 Khối báo động 8
1.3 Giới thiệu vi điều khiển 8051 8
1.3.1 Giới thiệu MSC-51 8
1.3.2 Sơ lược về các chân của μc 89C51: 9
1.3.3 Khảo sát các khối bên trong 89c51 − tổ chức bộ nhớ: 11
1.3.4 Hoạt động của bộ định thì timer: 13
1.3.5 Hoạt động của bộ ngắt (INTERRUPT): 18
1.4 Giới thiệu về LCD 21
1.4.1 Cấu tạo 21
1.4.2 Chức năng các chân 22
1.4.3 Sơ đồ khối của HD44780 23
1.5 Giới thiệu về bàn phím 27
Chương 2: THIẾT KẾ VÀ THI CÔNG MẠCH 28
2.1 Sơ đồ mạch 28
2.1.1Khối điều khiển trung tâm 29
2.1.2 LCD 30
2.1.3 Bàn Phím 31
2.1.4 Khối mạch điều khiển đóng mở cửa 32
2.1.5Khối báo động 33
2.1.6 Mạch nguồn 33
Chương 3: LƯU ĐỒ THUẬT TOÁN VÀCHƯƠNG TRÌNH 34
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 53.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
Chương 1: GIỚI THIỆU ĐỀ TÀI
Trang 6án có hiệu quả cao Ở đây em xin giới thiệu về đề tài về khóa điện tử với một số yêucầu cơ bản của một thiết bị khóa thông dụng:
- Tính an toàn: phải có chức năng bảo mật cao
- Hệ thống gồm một chuổi mã số từ 0 đến 9, và độ dài mật mã không quá 10 số chỉ
có người được phân quyền sử dụng mới biết được
- Có hệ thống phím gồm 15 phím, ngoài 10 số mật khẩu có các phím chức năng:phím Enter, phím Xóa, phím Đổi mã, phím Khóa, và một phím dự bị để mở rộngthêm khi cần thiết
- Hệ thống hiển thị trực quan qua LCD 16x2A, có đèn chiếu sáng khi điều kiện môitrườ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 3lầ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ểnthị : ”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ôngthì LCD hiễn thị:”DA DOI MK”
Nếu sai thì hệ thống sẽ hiển thị:” SAI MA, NHAP LAI”, sai quá 3lần thì sẻ kích hoạt hệ thống báo động
Trang 7 Lcd hiển thị nhập mật khẩu, người sử dụng nhập mã thông qua bànphím, nhấn Enter để xác nhận nhập xong, nếu nhập đúng thì LCDhiể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 saithông qua phím Xóa, và nếu nhập quá 10 ký tự thị hệ thống tự kiểmtra, 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ủabà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 81.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
1.2.6 Khối báo động
Chức năng: nhận tín hiệu từ bộ xử lý trung tâm, phát ra tín hiệu báo động bằng âm thanh
1.3 Giới thiệu vi điều khiển 8051
1.3.1 Giới thiệu MSC-51
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
- 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
Trang 9- 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 μc 89C51:
89C51 l IC vi điều khiển (Microcontroller) do hãng intel sản xuất μC 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
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
Trang 10Port 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 8951 như bảng sau:
INT1\
T0T1WR\
RD\
Ngõ vào dữ liệu nối tiếpNgõ ra dữ liệu nối tiếpNgõ vào ngắt ngồi 0Ngõ vào ngắt ngoài 1Ngõ vào của timer/couter 0Ngõ 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ácbyte 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 (μC 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ì μC89C51 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ì μC89C51 không có bộ nhớ
Trang 11chươ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
- 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
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êntrong 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 12Hì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 địachỉ 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, #5FHMOV A, @R0Lệ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
Trang 13RAM địa chỉ hĩa từng bit:
8951 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,05HCá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 ghitrạ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ếpvớ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 - flopcủa timer có thể xem như đếm số xung nhịp (hoặc cc sự kiện) từ khởi động timer Ví dụ
Trang 14timer 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.
μC89C51 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
- Đếm sự kiện
- Tạo tốc độ baud cho port nối tiếp trong μC89C51
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ácngõ 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
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/ 1 Bit chọn chức năng đếm hoặc định thời
C/=1:bộ định thời l bộ đếm C/=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/ 0 Bit chọn chức năng đếm hoặc định thời
C/=1:bộ định thời l bộ đếm C/=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ả
Trang 15TCON.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ắtTCON.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ưngTCON.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
Trang 16Định khoảng thời gian (interval timing):
Nếu C/T=0 hoạt động timer liên tục được chọn vào timer được dùng cho việc địnhkhoả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
Trang 17Vì 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
Trì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ưngcá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 μC8031/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
Trang 18Khở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 = 00010000BNế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, # 9CHMOV TH1, # OFFHRồ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, WAITKhi timer trên, cần dừng timer và xóa cờ báo tràn trong phần mềm:
CLR TR1CLR 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,TH1MOV R6, TL1
Trang 19Cá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 đồngthờ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 treoviệ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ìnhtiế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
Tổ chức ngắt của μc89C51:
Thật sự tất cả các nguồn ngắt ở μC89C51: 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 đượcphụ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.1 ET0 A8H Cho phép ngắt từ timer 0
Trang 20Hai 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à bitcho 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:
Xử lý ngắt (Processing Interrupt):
Khi ngắt xảy ra và CPU chấp thuận, chương trình chính ngắt quảng những
hoạt động sau đây xảy ra:
+ Lệnh hiện hành hòan tất việc thực thi
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:
Trang 21Khi “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 đượckiể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ể rắ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ểnchấ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 (LiquidCrystal)
+ Để 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
Trang 22qua 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
Trang 231.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
3 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 ghilệnh IR của LCD (ở chế độ “ghi” - write) hoặcnố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ânR/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ậnkhi có 1 xung cho phép của chân E
+ Ở chế độ ghi: Dữ liệu ở bus sẽ được LCDchuyể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ốngmức thấp
7 14
DB0-Tám đường của bus dữ liệu dùng để trao đổi thôngtin 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
Trang 241.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
Thanh ghi DR : Thanh ghi DR dùng để chứa dữ liệu 8 bit để ghi vào vùng RAMDDRAM hoặc CGRAM (ở chế độ ghi) hoặc dùng để chứa dữ liệu từ 2 vùng RAM nàygởi ra cho MPU (ở chế độ đọc) Nghĩa là, khi MPU ghi thông tin vào DR, mạch nội bêntrong chíp sẽ tự động ghi thông tin này vào DDRAM hoặc CGRAM Hoặc khi thông tin
Trang 25về đị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 thanhghi 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ảngthờ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ậpRS=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ùngRAM theo kiểu rẽ nhánh Khi một địa chỉ lệnh được nạp vào thanh ghi IR, thông tin đượcnố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 baohà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 RAMnà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ạikhô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à
Trang 26(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 (8bit / 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
Trang 271C Dịch toàn bộ vị trí hiển thị sang phải
không).sau khi xác định được cột thì cho hàng là mức cao, cột tìm được mức thấp, rồi xác định hàng tương ứng với phím đả nhấn.
Trong đồ á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.