Ngày nay cùng với sự tiến bộ của khoa học kỹ thuật, đặc biệt là ngành vi điều khiển. Đời sống xã hội ngày càng phát triển cao dựa trên những ứng dụng của khoa học vào đời sống. Vì vậy mà những công nghệ điện tử mang tính tự động ngày càng được ứng dụng rộng rãi. Trong số đó có sự đóng góp không nhỏ của kỹ thuật vi điều khiển. Các bộ vi điều khiển đang được ứng dụng rộng rãi và thâm nhập ngày càng nhiều trong các lĩnh vực kỹ thuật và đời sống xã hội. Hầu hết là các thiết bị được điều khiển tự động từ các thiết bị văn phòng cho đến các thiết bị trong gia đình đều dung các bộ vi điều khiển nhằm đem lại sự tiện nghi cho con người trong thời đại công nghiệp hóa, hiện đại hóa. Ngoài ra cùng với sự phát triển của các ngành kinh tế, giáo dục, y học,… làm tăng số lượng công việc tính toán và xử lý số liệu và phải tiếp cận những con số lớn và lẻ mà không thể tính toán bằng tay được. Chính vì vậy chúng em lựa chọn đề tài cho đồ án 1 là :” Thiết kế máy tính bỏ túi sử dụng vi xử lý 89C51 “ này. Tuy đã cố gắng thực hiện đồ án trong sự nghiêm túc và trách nhiệm nhất, nhưng do khả năng nghiên cứu cũng như kiến thức các thành viên còn nhiều hạn chế nên không thể tránh khỏi những lỗi và thiếu sót. Rất mong nhận được những ý kiến đóng góp tích cực từ thầy Nguyễn Tuấn Ninh.
Trang 1VIỆN ĐIỆN
Trang 2
Lời nói đầu
Ngày nay cùng với sự tiến bộ của khoa học kỹ thuật, đặc biệt là ngành vi điều khiển Đời sống
xã hội ngày càng phát triển cao dựa trên những ứng dụng của khoa học vào đời sống Vì vậy mà những công nghệ điện tử mang tính tự động ngày càng được ứng dụng rộng rãi Trong số đó có
sự đóng góp không nhỏ của kỹ thuật vi điều khiển Các bộ vi điều khiển đang được ứng dụng rộng rãi và thâm nhập ngày càng nhiều trong các lĩnh vực kỹ thuật và đời sống xã hội Hầu hết
là các thiết bị được điều khiển tự động từ các thiết bị văn phòng cho đến các thiết bị trong gia đình đều dung các bộ vi điều khiển nhằm đem lại sự tiện nghi cho con người trong thời đại
công nghiệp hóa, hiện đại hóa
Ngoài ra cùng với sự phát triển của các ngành kinh tế, giáo dục, y học,… làm tăng số lượng công việc tính toán và xử lý số liệu và phải tiếp cận những con số lớn và lẻ mà không thể tính
toán bằng tay được Chính vì vậy chúng em lựa chọn đề tài cho đồ án 1 là :” Thiết kế máy tính
Trang 3MỤC LỤC
Trang
Trang bìa ……….1
Lời nói đầu ……… 2
Phần 1: GIỚI THIỆU ……… 4
Phần 2 : CƠ SỞ LÝ THUYẾT………5
I Các linh kiện sử dụng trong mạch ……… … 5
II Đặc điểm, cấu tạo, chức năng của các linh kiện ……… 5
Phần 3 : THIẾT KẾ VÀ MÔ PHỎNG ……… … 16
I Sơ đồ khối ……….….…16
Quét bàn phím ……… 17
1 Hàm Num() ……… 18
2 Hàm Dec() ……….20
3 Hàm Sign() ………21
4 Hàm Calx() ………23
II Mô phỏng ……….…….24
III Code chương trình ……… ….29
Phần 4 : KẾT QUẢ VÀ HƯỚNG PHÁT TRIỂN ……… … 39
Các tài liệu tham khảo ……….…….39
Trang 4Phần I
GIỚI THIỆU
I Mục tiêu đề tài:
- Ứng dụng vào thực tế Vi Xử Lí 8051 đã được học
- Biết cách sử dụng, tương tác, lập trình với VXL
- Biết sử dụng, ghép nối bàn phím 4x4 và LCD với VXL
II Yêu cầu của đặt ra:
- Thiết kế máy tính bỏ túi sử dụng VXL 8051
- Máy tính bỏ túi có các chức năng cơ bản như sau:
4 phép tính cơ bản: Cộng “+”, Trừ “-“, Nhân “x”, Chia “/”
Có thể xử lí được 2 chữ số sau dấu chấm thập phân “.”
Bàn phím bao gồm 10 phím số (từ 0 đến 9), 4 phím phép tính ( + - x /), 1 phím bằng (=),
1 phím chấm thập phân ( )
=> Bàn phím 16 phím nên ta sẽ sử dụng ma trận phím 4x4 (Phím ON/Reset sẽ được tích
hợp với chân reset của VXL)
- Sử dụng LCD 16x2 để hiện thị phép tính và kết quả
Trang 5Phần 2
CƠ SỞ LÝ THUYẾT
I CÁC LINH KIỆN SỬ DỤNG TRONG MẠCH
- Vi điều khiển AT89C51
II ĐẶC ĐIỂM, CẤU TẠO, CHỨC NĂNG CỦA CÁC LINH KIỆN
1 Vi điều khiển AT89C51
a Giới thiệu chung về 89C51
Vi điều khiển (VĐK) là một hệ vi xử lý được tổ chức như một chip IC VĐK AT89C51 tương thích với họ MCS51 có những đặc điểm sau :
- Bộ xử lý bit thao tác trên các bit riêng
- 4 μs cho hoạt động nhân hoặc chia
- 210 vị trí nhớ định địa chỉ, mỗi vị trí một bit
- Có các thanh ghi chức năng, cơ chế điều khiển ngắt
- Các bộ thời gian dung trong lĩnh vực chia tần số và tạp thời gian thực
Trang 6 Sơ đồ chân 89C51
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 (có nghĩa 1 chân có 2 chức năng), mỗi đường có thể hoạt động như đường xuất nhập hoặc như đường điều khiển hoặc là thành phần của các bus dữ liệu và bus địa chỉ
1 GND ( chân 20) : chân nối đất 0V
2 Port 0 là port có 2 chức năng ở các chân 32 – 39 của 8951 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 IO Đối với các thiết
kế cỡ lớn có bộ nhớ mở rộng, nó được kết hợp giữa bus địa chỉvà bus dữliệu
3 Port 1 là port IO trên các chân 1-8 Các chân được ký hiệu P1.0, P1.1, P1.2, … có thể
dùng cho giao tiếp với các thiết bị ngoài nếu cần Port 1 không có chức năng khác, vì vậy chúng chỉ được dùng cho giao tiếp với các thiết bị bên ngoài
Trang 74 Port 2 là 1 port có tác dụng kép trên các chân 21 - 28 được dùng như các đường xuất
nhập hoặc là byte cao của bus địa chỉ đối với các thiết bị dùng bộ nhớ mở rộng
5 Port 3 là port có tác dụng kép trên các 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ác đặc tính đặc biệt của 8951 như ở bảng sau:
TO T1
WR
RD
Ngõ vào dữ liệu nối tiếp Ngõ xuất dữ liệu nối tiếp Ngõ vào ngắt cứng thứ 0 Ngõ vào ngắt cứng thứ 1 Ngõ vào của TIMER/COUNTER thứ 0 Ngõ vào của TIMER/COUNTER thứ 1 Tín hiệu ghi dữ liệu lên bộ nhớ ngoài Tín hiệu đọc bộ nhớ dữ liệu ngoài
6 PSEN ( Program 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 thường được nói đến chân 0E\ (output enable) của
Eprom cho phép đọc các byte mã lệnh PSEN ở mức thấp trong thời gian Microcontroller
8951 lấy lệnh Các mã lệnh của chương trình được đọc từ Eprom qua bus dữ liệu và được chốt vào thanh ghi lệnh bên trong 8951 đểgiải mã lệnh Khi 8951 thi hành chương trình trong ROM nội PSEN sẽ ở mức logic 1
7 ALE ( Address latch enable ) : Khi 8951 truy xuất bộ nhớ bên ngoài, port 0 có chức năng
là bus địa chỉ và bus dữ liệu do đó phải tách các đường dữ liệu và địa chỉ 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 chúng với IC chốt Tín hiệu ra ở chân 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 lần tần số dao động trên chip 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 8951
Trang 88 EA ( External access) : Chọn bộ nhớ trong hoặc ngoài Nếu EA = 5V: chọn ROM nội Nếu EA =0V: chọn ROM ngoài
9 RST ( Reset ) : Ngõ vào RST ở chân 9 là ngõ vào Reset của 8951 Khi ngõ vào tín hiệu này đưa lên 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
10 X1, X2 : Bộ dao động được tích hợp bên trong 8951, khi sử dụng 8951 người thiết kế chỉ cần kết nối thêm thạch anh và các tụ như hình vẽ trong sơ đồ Tần số thạch anh thường sử dụng cho 8951 là 12Mhz
11 Vcc : chân nguồn nối lên 5V
b Tổ chức bộ nhớ
Bộ nhớ bên trong chip bao gồm ROM, RAM và EPROM RAM trên chip bao gồm vùng RAM đa chức năng, vùng RAM với từng bit được định địa chỉ, các thanh ghi (bank) và các thanh ghi chức năng đặc biệt
Chip 8951 chứa 210 vị trí định địa chỉ đó có 128byte chứa trong các byte ở địa chỉ 20H
đến 2FH (16bytex8=128bits), phần còn lại chứa trong các thanh ghi chức năng đặc biệt
- Công dụng:
+ Truy xuất các bit riêng rẽ thông qua các phần mềm
Trang 9+ Các port có thể định địa chỉ từng bit, làm đơn giản việc giao tiếp băng phần mền với
các thiết bị xuất nhập đơn bit
Các thanh ghi chức năng đặc biệt (SFR):
Không phải tất cả 128 địa chỉ từ 80H đến FFH đều được định nghĩa mà chit có 21 địa chỉ
được định nghĩa.
Các thanh ghi chức năng đặc biệt bao gồm:
+ Từ trạng thái chương trình PSW: có địa chỉ là D0H
+ Thanh ghi B: Có địa chỉ F0H được dùng chung với thanh chứa A trong các phép toán nhân và chia
+ Con trỏ Stack (SP): là thanh ghi 8bit ở địa chỉ 81H, nó chứa địa chỉ của dữ liệu hiện
đang ở đỉnh của stack
+ Con trỏ dữ liệu DPTR: Dùng để truy xuất bộ nhớ chương trình ngoài hoặc bộ nhớ dữ
liệu ngoài DPTR là thanh ghi 16bit có địa chỉ 82H (bytethấp) và 83H (bytecao)
+ Các thanh ghi port :
Port 0 : đại chỉ 80H
Port 1 : địa chỉ 90H
Port 2: địa chỉ A0H
Port 3: địa chi B0H
+ Các thanh ghi định thời: 89C51có 2 bộ định thời/đếm dùng để định khoảng thời gian
hoặc đếm các sự kiện
- Bộ định thời 0: địa chỉ 8AH (TL0) và 8CH (TH0)
- Bộ định thời 1: địa chỉ 8bH (TL1) và 8DH (TH1)
Hoạt động của bộ định thời được thiết lập bởi thanh ghi chế độ định thời TMOD ở địa
chỉ 89H và thanh ghi điều khiển bộ định thời TCON ở địa chỉ 88H (chỉ cóTCON được
định địa chỉ từng bit)
Trang 10+ Các thanh ghi của port nối tiếp: 89C51 có 1 port nối tiếp để truyền thông với các
thiết bị như các thiết bị đầu cuối hoặc model
+ Các thanh nghi ngắt: có 1 cấu trúc ngắt với 2 mức ưu tiên và 5 nguyên nhân ngắt Các ngắt bị vô hiệu hóa sau khi reset hệ thống và được phép bằng cách vào thanh ghi IE
ở địa chỉ A8H Mức ưu tiên ngắt được thiết lập bởi thanh ghi IP ở địa chỉ B8H
+Thanh ghi điều khiển nguồn: PCON có địa chỉ 87H
c Tập lệnh của 89C51
* Các kiểu định địa chỉ: Trong tập lệnh có 8 chế độ đánh địa chỉ
- Thanh ghi đại chỉ
- Địa chỉ trực tiếp
- Địa chỉ gián tiếp
- Địa chỉ tức thời
- Địa chỉ tuyệt đối
- Địa chỉ tương đối
Trang 112 Cơ cấu hiện thị LCD 16x2
a Hình dáng và kích thước:
Có rất nhiều loại LCD với nhiều hình dáng và kích thước khác nhau, trên hình 1 là loại LCD thông dụng
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 Các chân này được đánh số thứ tự và đặt tên như hình 2 :
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 Điều chỉnh độ tương phản của LCD
4 RS Chân chọn thanh ghi (Register select) Nối chân RS với logic
Trang 12“0” (GND) hoặc logic “1” (VCC) để chọn thanh ghi
+ 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ế độ 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 DB0-DB7 khi phát hiện 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
Trang 13Bảng 1 : Chức năng các chân của LCD
Chú ý : Chân 15 và chân 16: ghi là A và K Nó là anot và katot của một con led dùng để
sáng LCD trong bóng tối, chúng ta có thể k nối , nếu sử dụng nối chân 15 với trở 220 or
330 ôm lên VCC , chân 16 nối đất
b Các thành phần chức năng
- Cờ Busy (BF - Busy flag): Nếu BF = 1, LCD đang trong quá trình thực thi một lệnh
Khi đó, các lệnh gởi tiếp theo sẽ bị bỏ qua BF được đọc tại chân D7 khi RS = 0 và R/W
= 1 Do đó, trước khi thực hiện một lệnh, cần kiểm tra BF trước, nếu BF = 0 thì mới gởi lệnh
- Các chế độ truyền dữ liệu:
LCD 16x2 có 2 chế độ truyền dữ liệu : chế độ 8 bit ( dùng cả D0-D7 ) và chế độ 4 bit ( không dùng D3 - D0, chỉ dùng D7-D4 ) Trong trường hợp dùng chế độ 4 bit, dữ liệu 8 bit sẽ được truyền 2 lần: truyền 4 bit cao rồi tiếp tục truyền 4 bit thấp Sau khi thực hiện truyền xong 8bit, BF mới chuyển lên 1
- Bảng mã lệnh trong LCD 16×2 :
Trang 142.Bàn phím 4x4:
Trang 15
bị đơ Để biết chính xác giá trị thạch anh cho từng loại VĐK ta cần xem kĩ trong Datasheet của IC 2 con tụ 33pF có nhiệm vụ ổn định xung nhịp cho thạch anh, từ đó ổn định hoạt động của VĐK, nếu không có tụ cũng không sao.
a - Mạch tạo dao động thạch anh 12MHz:
b Cấp nguồn 5V cho vi điều khiển (Vcc: 5V chân 40; GND: 0V chân 20) Trong đó C1,C2= 30pF±10pF (thường được sử dụng với C1,C2 là tụ 33pF) dùng ổn định dao động cho thạch anh
2 Ma trận phím 4x4:
Như đã trình bày ở Phần I, ta cần sử dụng ma trận phím 4x4 gồm 4 hàng được đặt tên từ Row 1 đến Row 4, và 4 cột được đặt tên từ Col 1 đến Col 4:
- Mỗi linh kiện phím bấm có 2 chân: chân 1 và chân 2 Phím nằm trên cùng một hàng sẽ
có tất cả chân 1 được mắc song song với nhau và nối tới chân của VXL tương ứng với Row đó Phím nằm trên cùng cột sẽ có tất cả chân 2 mắc song song với nhau và nối tới
Trang 16chân của VXL tương ứng với Col đó Mỗi phím sẽ nằm trên 1 cột và 1 hàng nhất định được đánh số trước tạo thành ma trận bàn phím 4x4
- 4 chân Row 1 đến Row 4 được nối tới 4 port P1.0 đến P1.3 của VXL
- 4 chân Col 1 đến Col 4 được nối tới 4 port P1.4 đến P1.7 của VXL
- Mỗi tọa độ được xác định bởi số hàng và số cột (Row; Col) sẽ được gán 1 chức năng riêng như trong bảng sau:
Trang 17LCD 16x2 có 16 pin, chức năng từng pin đã được nêu trong phần II.1 Cở sở lí thuyết
- LCD sẽ được sử dụng ở chế độ 16bit nên tất cả các pin I/O từ D0 đến D7 đều được sử dụng và nối tới port P2.0 đến P2.7 của VXL Các port này đã được định nghĩa trong phần code chương trình
- Chân VSS: chân Ground, sẽ được nối đất
- Chân VCC: Nguồn 5V, sẽ được nối tới nguồn 5V
- LCD của ta sẽ luôn làm việc trong chế độ ghi nên pin RW sẽ được nối đất
- Chân RS chọn thanh ghi và chân E cho phép được treo lên nguồn 5V và được nối tới port P0.5 và P0.7 của VXL, mức logic của các pin này sẽ định nghĩa trong code chương trình tùy theo từng hoàn cảnh làm việc của LCD
- Chân VEE: điều chỉnh độ tương phản của LCD được đặt mặc định, nối đất
4 Vi Điều Khiển:
- Trong đồ án này chúng ta sẽ sử dụng hoàn toàn ROM nội nên chân EA = 5V
- Pin RESET được nối tới một phím bấm được chống nảy phím bằng một tụ điện và điện
trở
- Chức năng chính của VXL: Giao tiếp với ma trận phím 4x4, tính toán và hiển thị lên
LCD Các port được sử dụng:
P1.0 đến P1.3: nối với Row1 đến Row4 để thực hiện quét bàn phím
P1.4 đến P1.7: nối tới Col1 đến Col4 để thực hiện quét bàn phím
P2.0 đến P2.7: gửi thông tin tới LCD16x2
P0.5 và P0.7: nối với RS và E của LCD16x2 để điều khiển LCD
5 Mạch reset:
- 89x51 được reset bằng cách giữ chân RST ở mức cao tối thiểu là 2chu kì máy (lúc này VCC được nạp vào tụ thường dùng từ 1uf > 10uf) rồi sau đó chuyển về mức thấp ( VCC
từ chân RST được xả qua R= 8.2k đến10k ) RST có thể tác động bằng tay(nút bấm) hoặc
tự động khi cấp nguồn bằng mạch RC như hình vẽ là chuẩn:
- Một chu kỳ máy của 89x51 có 12 chu kỳ dao động.Nếu dùng thạch anh dao động chuẩn 12MHz thì môt chu kỳ máy dài 1us
- Điện trở treo xuống GND, ổn định mức logic 0 cho VĐK, chống việc VĐK reset liên tục
Có giá trị là 10k
Trang 186 Mạch nguồn:
- Ở mạch này ta sẽ dùng JAC để cấp nguồn cho toàn bộ mạch, thiết bị cấp cho JAC là adapter 5V
Trang 19II: MẠCH MÔ PHỎNG
- Dưới đây là mạch mô phỏng nguyên lý cấu tạo máy tính bỏ túi sử dụng chip AT89C51,
ma trận phím 4x4 và LCD16x2 trên phần mềm Proteus:
Trang 20III: SƠ ĐỒ KHỐI
Chương trình chính:
Ý tưởng quét bàn phím:
- Ban đầu, cho tất cả các cột (Col) và hàng (Row) lên mức logic 1
- Lần lượt đặt từng Row về mức logic 0, với mỗi Row được đặt về 0 thực hiện hành động quét cột (Col) Nếu một nút thuộc Row đó được bấm thì sẽ có một Col tương ứng bị đặt về 0 (khi bấm nút chân 1 và chân 2 của phím bấm sẽ thông mạch, Row
= 0 => Col tương ứng phím bấm sẽ bị đưa về 0)
Trang 21- Bằng việc dừng việc quét bàn phím khi có 1 Col bị đưa về 0 và xác định Row nào đang bằng = 0 tại thời điểm đó ta có thể xác định được vị trí phím được bấm
Ví dụ:
R1=0;R2=R3=R4=1; // Đặt Row1=0
if(C1==0){d='7';s=7;Num();} //Nếu Col1=0 thì nhận diện phím 7 được bấm
if(C2==0){d='8';s=8;Num();} //Nếu Col2=0 thì nhận diện phím 8 được bấm
if(C3==0){d='9';s=9;Num();} //Nếu Col3=0 thì nhận diện phím 9 được bấm
if(C4==0){d='+';h=1;Sign();} //Nếu Col4=0 thì nhận diện phím + được bấm
- Với việc nhận diện phím nào đã được bấm, chương trình sẽ gọi tới các hàm con để
xử lí tương ứng: Với phím số, chương trình sẽ gọi tới hàm Num() <sẽ được trình bày sau đây> Với phím dấu, chương trình sẽ gọi tới hàm Sign() Với phím “=” sẽ gọi hàm Cal()
Các hàm con trong chương trình:
Lưu ý:
Tất cả các cờ và chuỗi a, b, c đều được mặc định = 0 ở đầu chương trình
Mỗi khi một phím số được bấm, “s” sẽ được gán giá trị tương ứng với phím đó Mỗi khi một phím dấu dược bấm, “k” sẽ được gán giá trị tương ứng:
“+” tương ứng k=1, k=2 với “-“, k=3 với “x” và k=4 với “/”