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
Trang 1LỜI CẢM ƠN Với lòng biết ơn sâu sắc, em xin cảm ơn thầy giáo ThS Vũ Văn Diện,
người đã hết lòng hướng dẫn và ủng hộ tinh thần cho em cũng như định hướng cho
em những phương pháp lập trình và cung cấp tài liệu tham khảo, để em có thể hoàn thành tốt đề tài đồ án của mình
Em xin gửi lời cảm ơn tới các thầy, cô đã giảng dạy em trong suốt quá trình học tập tại trường, và đặc biệt là các thầy, cô giảng viên trong bộ môn Truyền Thông Và Mạng Máy Tính – Khoa Công Nghệ Thông Tin – Trường ĐH Công Nghệ Thông Tin Và Truyền Thông – ĐH Thái Nguyên
Xin cảm ơn các bạn đã nhiệt tình giúp đỡ tôi rất nhiều về tài liệu cũng như những kiến thức liên quan để tôi hoàn thành tốt đồ án này
Em xin chân thành cảm ơn !
Sinh viên
Dương Văn Miêu
Trang 2LỜI CAM ĐOAN
Để hoàn thành đồ án tốt nghiệp đúng thời gian quy định và đáp ứng được yêu cầu đề ra, em đã cố gắng tìm hiểu, học hỏi, tích lũy kiến thức đã học Em có tham khảo một số tài liệu đã nêu trong phần “Tài liệu tham khảo” nhưng không sao chép nội dung từ bất kỳ đồ án nào khác
Em xin cam đoan những lời khai trên là đúng, mọi thông tin sai lệch em xin hoàn toàn chịu trách nhiệm
Sinh viên
Dương Văn Miêu
Trang 3MỤC LỤC
LỜI CẢM ƠN 1
LỜI CAM ĐOAN 2
MỤC LỤC 3
DANH MỤC HÌNH ẢNH 5
LỜI MỞ ĐẦU 7
CHƯƠNG I: GIỚI THIỆU VỀ VI ĐIỀU KHIỂN 8051 VÀ CÁC LINH KIỆN ĐIỆN TỬ SỬ DỤNG TRONG MẠCH 8
1.1 Tổng quan về 8051 8
1.1.1 Giới thiệu vi điều khiển AT89C51 8
1.1.2 Cấu trúc bên trong vi điều khiển 17
1.1.3 Ram chức năng và các thanh ghi đặc biệt 18
1.2 Giới thiệu IC thời gian thực RTC (Real Time Clock ) DS1307 24
1.2.1 Giới thiệu chung về DS1307 24
1.2.2 Cơ chế hoạt động và chức năng các chân củaDS1307 26
1.2.3 Sơ đồ địa chỉ RAM và RTC 27
1.3 KHẢO SÁT LCD 16x2 33
1.3.1 Gới thiệu chung về LCD 16x2 33
1.3.2 Chức năng các chân của LCD 16x2 33
1.3.3 Bảng tập lệnh của LCD 35
CHƯƠNG II: THIẾT KẾ MẠCH MÔ PHỎNG VÀ LƯU ĐỒ THUẬT TOÁN 36 2.1 Giới thiệu phần mềm thiết kế mô phỏng proteus 36
2.1.1 Giới thiệu 36
2.1.2 Các thao tác cơ bản 37
2.1.3 Cách vẽ mạch in 43
2.2 Thiết kế mạch mô phỏng trên proteus 47
2.2.1 Khối nguồn 47
Trang 42.2.2 Khối điều khiển trung tâm 48
2.2.3 Khối tạo thời gian thực 49
2.2.4 Khối hiển thị 49
2.2.5 Khối giao tiếp phím bấm 50
2.2.6 Mạch mô phỏng 51
2.2.7 Lưu đồ thuật toán 52
CHƯƠNG III: THIẾT KẾ MẠCH IN VÀ THI CÔNG MẠCH THẬT 54
3.1 Thiết kế mạch in 54
3.2 Thi công mạch thật 55
3.2.1 Lựa chọn linh kiện 55
3.2.2 Thi công mạch 59
KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 62
TÀI LIỆU THAM KHẢO 63
NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN 64
Trang 5DANH MỤC HÌNH ẢNH
Hình 1.1 Sơ đồ khối AT89C51 10
Hình1.2 Sơ đồ chân AT89C51 11
Hình 1.3 Mạch reset tác động bằng tay và tự động reset khi khởi động máy 13
Hình 1.4 Xung clock 14
Hình 1.5 Tổ chức bộ nhớ 17
Hình 1.6 Truy xuất bộ nhớ mã ngoài 21
Hình 1.7 Truy xuất bộ nhớ dữ liệu ngoài 22
Hình 1.8 Sự giải mã địa chỉ 23
Hình 1.9 Manual Reset 23
Hình 1.10 IC thời gian thực DS1307 25
Hình 1.11 Chân của IC thời gian thực DS1307 26
Hình 1.12 Sơ đồ khối của DS1307 27
Hình 1.13 Sơ đồ địa chỉ RAM và RTC của DS1307 27
Hình 1.14 Tổ chức các thanh ghi thời gian 28
Hình 1.15 Số BCD 29
Hình 1.16 LCD 16x2 33
Hình 2.1 Khởi động chương trình Proteus 36
Hình 2.2 Giao diện chương trình Proteus 37
Hình 2.3 Thanh công cụ 37
Hình 2.4 Sử dụng thanh linh kiện 38
Hình 2.5 Các nút mô phỏng 39
Hình 2.6 Thêm linh kiện mới từ thư viện 39
Hình 2.7 Cửa sổ lấy linh kiện 40
Hình 2.8 Mở thư viện ISIS 41
Hình 2.9 Lấy linh kiện từ thư viện ISIS 41
Hình 2.10 Chọn linh kiện để vẽ mạch 42
Trang 6Hình 2.11 Xác định đầu nối dây dẫn 42
Hình 2.12 Nối dây dẫn 43
Hình 2.13 Vẽ mạch in 43
Hình 2.14 Định dạng đường bao của bo mạch 44
Hình 2.15 Chọn chế độ vẽ mạch Auto 45
Hình 2.16 Cửa sổ Autorouter 45
Hình 2.17 Chỉnh sửa thông số của mạch 46
Hình 2.18 Sơ đồ khối tổng quát 47
Hình 2.19 Khối nguồn 48
Hình 2.20 Khối điều khiển trung tâm 48
Hình 2.21 Khối tạo thời gian thực 49
Hình 2.22 Khối hiển thị 50
Hình 2.23 Khối giao tiếp phím bấm 51
Hình 2.24 Mạch mô phỏng 51
Hình 2.25 Lưu đồ thuật toán 52
Hình 3.1 Mạch in 54
Hình 3.2 Mạch in 3D 55
Hình 3.3 IC ổn áp 7805 56
Hình 3.4 Tụ điện 57
Hình 3.5 Hình dạng của điện trở trong thiết bị điện tử 57
Hình 3.6 Nút bấm button 57
Hình 3.7 Biến trở 58
Hình 3.8 Thạch anh 58
Hình 3.9 Pin CMOS 58
Hình 3.10 Mạch in ra giấy 59
Hình 3.11 Bo mạch đồng 59
Hình 3.12 Mạch thực tế (mặt trước) 60
Hình 3.13 Mạch thực tế (mặt sau) 61
Trang 8LỜI MỞ ĐẦU
Ngày nay kĩ thuật vi điều khiển đã trở nên quen thuộc trong các ngànhkỹ thuậtvà trong dân dụng Vi điều khiển ngày càng được ứng dụng rộng rãi, từ các dây truyền sản xuất lớn đến các thiết bị gia dụng chúng ta đều thấy sự hiện diện của vi điều khiển Vi điều khiển không những góp phần vào kỹ thuật điều khiển
mà còn góp phần to lớn vào phát triển thông tin Đó là sự ra đời của hàng loạt thiết
bịviễn thôngvà truyền hình hiện đại, đặc biệt nó đã góp phần đưa con người lên đỉnh cao của nền văn minh nhân loại
Do vậy, việc tìm hiểu về vi điều khiển 8051 và ứng dụng của nó đang được
nhiều người quan tâm Vì thế, em đã lựa chọn đề tài: “Thiết kế mạch đồng hồ số sử dụng vi điều khiển AT89C51.” với sự hướng dẫn của thầy giáo ThS Vũ Văn Diện
Em xin chân cảm ơn sự giúp đỡ và hướng dẫn tận tình của thầy giáo ThS
Vũ Văn Diện cùng các thầy cô giáo trong bộ môn đã giúp đỡ em hoàn thành đề tài
này
Em xin chân thành cảm ơn!
Trang 9CHƯƠNG I: GIỚI THIỆU VỀ VI ĐIỀU KHIỂN 8051 VÀ CÁC LINH KIỆN
ĐIỆN TỬ SỬ DỤNG TRONG MẠCH 1.1 Tổng quan về 8051
Vào năm 1981 hãng Intel giới thiệu bộ vi điều khiển được gọi là 8051 Bộ
vi điều khiển này có 128 byte RAM, 4K byte ROM trên chip, hai bộ định thời, một cổng nối tiếp và 4 cổng (độ rộng 8 bit) vào – ra tất cả được đặt trên một chip Vi điều khiển 8051 là một bộ xử lý 8 bit có nghĩa là CPU chỉ có thể làm việc với 8 bit
dữ liệu tại một thời điểm Dữ liệu lớn hơn 8 bit được chia ra thành các dự liệu 8 bit
để xử lý Vi điều khiển 8051 đã trở lên phổ biến sau khi Intel cho phép các nhà sản xuất khác sản xuất và bán các dạng biến thể của 8051, điều này dẫn đến sự ra đời nhiều phiên bản của 8051 với các tốc độ khác nhau và dung lượng ROM trên chip khác nhau Mặc dù có nhiều biến thể khác nhau của 8051 về tốc độ và dung lượng nhớ ROM trên chip, nhưng tất cả chúng đều tương thích với 8051 ban đầu về các lệnh, điều này có nghĩa là nếu viết chương trình của mình cho một phiên bản nào của 8051 thì nó cũng sẽ chạy với mọi phiên bản khác mà không phân biệt nó được sản xuất từ hãng nào
MCS-51 là họ IC vi điều khiển do hãng Intel sản xuất Các IC tiêu biểu cho
họ là 8051 và 8031 Các sản phẩm MCS-51 thích hợp cho những ứng dụng điều khiển Việc xử lý trên Byte và các toán số học ở cấu trúc dữ liệu nhỏ được thực hiện bằng nhiều chế độ truy xuất dữ liệu nhanh trên RAM nội Tập lệnh cung cấp một bảng tiện dụng của những lệnh số học 8 Bit gồm cả lệnh nhân và lệnh chia Nó cung cấp những hỗ trợ mở rộng trên Chip dùng cho những biến một Bit như là kiểu dữ liệu riêng biệt cho phép quản lý và kiểm tra Bit trực tiếp trong điều khiển
và những hệ thống logic đòi hỏi xử lý luận lý
1.1.1 Giới thiệu vi điều khiển AT89C51
AT89C51 cung cấp những đặc tính chuẩn như sau: 4 KB bộ nhớ chỉ đọc có thể xóa và lập trình nhanh (EPROM), 128 Byte RAM, 32 đường I/O, 2
Trang 10TIMER/COUNTER 16 Bit, 5 vectơ ngắt có cấu trúc 2 mức ngắt, một Port nối tiếp bán song công, 1 mạch dao động tạo xung Clock và bộ dao động ON-CHIP Thêm vào đó, AT89C51 được thiết kế với logic tĩnh cho hoạt động đến mức không tần số
và hỗ trợ hai phần mềm có thể lựa chọn những chế độ tiết kiệm công suất, chế độ chờ (IDLE MODE) sẽ dừng CPU trong khi vẫn cho phép RAM, timer/counter, port nối tiếp và hệ thống ngắt tiếp tục hoạt động Chế độ giảm công suất sẽ lưu nội dung RAM nhưng sẽ treo bộ dao động làm mất khả năng hoạt động của tất cả những chức năng khác cho đến khi Reset hệ thống
Các đặc điểm của AT89C51 đượctóm tắt như sau
4 KB bộ nhớ có thể lập trình lại nhanh, có khả năng tới 1000 chu kỳ ghi xoá
Tần số hoạt động từ: 0Hz đến 24 MHz
3 mức khóa bộ nhớ lập trình
2 bộ Timer/counter 16 Bit
128 Byte RAM nội
4 Port xuất /nhập I/O 8 bit
Giao tiếp nối tiếp
Trang 111.1.1.1 Sơ đồ khối của AT89C51
Trang 13Hình 1.1 Sơ đồ khối AT89C51
Các thanh ghi có trong vi điều khiển bao gồm
Khối ALU đi kèm với thanh ghi temp 1, temp 2 và thanh ghi trạng thái PSM
Bộ điều khiển logic
Vùng nhớ RAM và vùng nhớ Flash Rom lưu trữ chương trình
Mạch tạo dao động
Khối xử lý ngắt, truyền dữ liệu, khối Time/Counter
Thanh ghi A, B, dptr và 4 port có chốt đệm
Thanh ghi bộ đếm chương trình PC
Con trỏ dữ liệu dptr
Thanh ghi con trỏ ngăn xếp SP
Thanh ghi lệnh IR
Các thanh ghi hỗ trợ để quản lý địa chỉ bộ nhớ bên trong và bên ngoài
1.1.1.2 Sơ đồ chân AT89C51
Trang 14Hình1.2 Sơ đồ chân AT89C51 1.1.1.3 Chức năng các chân của AT89C51
AT89C51 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ỉ
Vcc (40): Chân cung cấp điện (5V).
Trang 15Port 0 còn được cấu hình làm bus địa chỉ (byte thấp) và bus dữ liệu đa hợp
trong khi truy xuất bộ nhớ dữ liệu ngoài và bộ nhớ chương trình ngoài
Port 0 cũng nhận các byte mã trong khi lập trình cho Flash và xuất các byte
mã trong khi kiểm tra chương trình (Các điện trở kéo lên bên ngoài được cần đến trong khi kiểm tra chương trình)
Port 1(1-8) :
Port 1 là port xuất nhập 8-bit hai chiều Port 1 cũng nhận byte địa chỉ thấp
trong thời gian lập trình cho Flash
Port 2 (21-28):
Port 2 là port xuất nhập 8-bit hai chiều.
Port 2 tạo ra các byte cao của bus địa chỉ trong thời gian tìm nạp lệnh từ bộ
nhớ chương trình ngoài và trong thời gian truy xuất bộ nhớ dữ liệu ngoài sử dụng các địa chỉ 16-bit Trong thời gian truy xuất bộ nhớ dữ liệu ngoài sử dụng các địa
chỉ 8-bit, Port 2 phát các nội dung của thanh ghi chức năng đặc biệt P2 Port 2
cũng nhận các bít địa chỉ cao và vàitín hiệu điều khiển trong thời gian lập trình cho Flash và kiểm tra chương trình
Port 3 (10-17) :
Port 3 là Port xuất nhập 8-bit hai chiều Port 3 cũng còn làm các chức năng
khác của AT89C51 Các chức năng này được liệt kê như sau:
INT1\
T0T1WR\
RD\
Ngõ nhập dữ liệu nối tiếpNgõ xuất dữ liệu nối tiếpNgõ vào ngắt cứng thứ 0Ngõ vào ngắt cứng thứ 1Ngõ vào của TIMER/COUNTER thứ 0Ngõ vào của TIMER/COUNTER thứ 1Tín hiệu điều khiển ghi dữ liệu lên bộ nhớ ngoàiTín hiệu điều khiển đọc bộ nhớ dữ liệu ngoài
Trang 16Port 3 cũng nhận một vài tín hiệu điều khiển cho việc lập trình Flash và
kiểm tra chương trình
ALE là một xung ngõ ra để chốt byte thấp của địa chỉ trong khi truy xuất bộ
nhớ ngoài Chân này cũng làm ngõ vào xung lập trình( ) trong thời gian lập trình cho Flash
Khi hoạt động bình thường, xung ngõ ra ALE luôn có tần số không đổi là 1/6 tần số của mạch dao động, có thể được dùng cho các mụch đích định thời từ
bên ngoài vàtạo xung clock Tuy nhiên, lưu ý là một xung ALE sẽ bị bỏ qua trong
mỗi một chu kỳ truy xuất bộ nhớ dữ liệu ngoài
Khi cần, hoạt động ALE có thể được vô hiệu hoá bằng cách set bit 0 của thanh ghi chức năng đặc biệt có địa chỉ 8Eh Khi bit này được set, ALEchỉ tích cực
trong thời gan thực hiện lệnh MOVX hoặc MOVC Ngược lại, chân này sẽ được
kéo lên cao Việc set bit không cho phép hoạt động chốt byte thấp của địa chỉ sẽ
không có tác dụng nếu bộ vi điều khiển đang ở chế độ thực thi chương trình ngoài
Trang 17 PSEN (29):
(Program Store Enable) là xung điều khiển truy xuất bộ nhớchương trình ngoài Khi AT89C51 đang thực thi chương trình từ bộ nhớ chương trình
ngoài, được kích hoạt hai lần mỗi chu kỳ máy, nhưng hai hoạt động
sẽ bị bỏ qua mỗi khi truy cập bộ nhớ dữ liệu ngoài
Trang 18 /Vpp (31):
(External Access Enable) là chân cho phép truy xuất bộ nhớ chương trình ngoài (bắt đầu từ địa chỉ từ 0000H đến FFFFH)
= 0 cho phép truy xuất bộ nhớ chương trình ngoài, ngược lại =1 sẽ
thực thi chương trình bên trong chip.Tuy nhiên, lưu ý rằng nếu bit khoá 1 (lock-bit
1) được lập trình, sẽ được chốt bên trong khi reset.Chân này cũng nhận điện
áp cho phép lập trình Vpp=12V khi lập trình Flash (khi đó điện áp lập trình 12V được chọn)
XTAL1 và XTAL2:
XTAL1 và XTAL2 là hai ngõ vào và ra của một bộ khuếch đại đảo của mạch dao động, được cấu hình để dùng như một bộ dao động trên chip
Hình 1.4 Xung clock Không có yêu cầu nào về chu kỳ nhiệm vụ của tín hiệu xung clock bên
ngoài do tín hiệu này phải qua một flip-flop chia hai trước khi đến mạch tạo xung
clock bên trong, tuy nhiên các chi tiết kỹ thuật về thời gian mức thấp và mức cao,
điện áp cực tiểu và cực đại cần phải được xem xét
1.1.1.4 Các chế độ đặc biệt
Trang 19Trong chế độ nghỉ, CPU tự đi vào trạng thái ngủ trong khi tất cả các ngoại
vi bên trong chip vẫn tích cực Chế độ này được điều khiển bởiphần mềm Nội dung của RAM trên chip và của tất cả các thanh ghi chức năng đặc biệt vẫn không
đổi trong khi thời gian tồn tại chế độ này Chế độ nghỉ có thể được kết thúc bởi
một ngắt bất kỳ nào được phép hoặc bằng cách reset cứng.
Ta cần lưu ý rằng khi chế độnghỉ được kết thúc bởi một reset cứng, chip vi
điều khiển sẽ tiếp tục bình thường việc thực thi chương trình từ nơi chương trình
bị tạm dừng, trong vòng 2 chu kỳ máy trước khi giải thuật reset mềm nắm quyền
điều khiển
Ở chế độ nghỉ, phần cứng trên chip cấm truy xuất RAM nội nhưng cho phép truy xuất các chân của các port Để tránh khả năng có một thao tác ghi không mong muốn đến một chân port khi chế độ nghỉ kết thúc bằng reset, lệnh tiếp theo yêu cầu chế độ nghỉ không nên là lệnh ghi đến chân port hoặc đến bộ nhớ ngoài.
Chế độ nguồn giảm
Trong chế độ này, mạch dao động ngừng hoạt động và lệnh yêu cầu chế độ
nguồn giảm là lệnh sau cùng được thực thi RAM trên chip và các thanh ghi chức
năng đặc biệt vẫn duy trì các giá trị của chúng cho đến khi chế độ nguồn giảm kết
thúc Chỉ có một cách ra khỏi chế độ nguồn giảm, đó là reset cứng.
Việc reset sẽ xác định lại các thanh ghi chức năng đặc biệt nhưng không làm thay đổi RAM trên chip Việc reset không nên xảy ra (chân reset ở mức tích
cực) trước khi Vcc được khôi phục lại mức điện áp bình thường và phải kéo dài
trạng thái tích cực của chân reset đủ lâu để cho phép mạch dao động hoạt động trở
Trang 20Nghỉ Bên ngoài 1 1 Thả nổi Dữ liệu Dữ
Trên chip có ba bit khoá, các bít này có thể không cho phép lập trình
hoặccho phép lập trình, các bit này cho ta thêm một số đặc trưng nữa của
AT89C51như sau.Khi bit khoá 1 LB1 được lập trình, mức logic ở chân được
lấymẫu và được chốt trong khi reset.Nếu việc cấp nguồn cho chip không cócông dụng reset, mạch chốt được khởi động bằng một giá trị ngẫu nhiên và giátrị này được duy trì cho đến khi có tác động reset Điều cần thiết là giá trịđược chốt của
phải phù hợp với mức logic hiện hành ở chân này
Chế
độ
1 U U U Không có đặc trưng khóa chương trình
2 P U U Các lệnh MOVC được thực thi từ bộ nhớ
chương trình ngoài không được phép tìm nạp
lệnh từ bộ nhớ nội, được lấy mẫu và được
chốt khi reset, hơn nữa việc lập trình trên Flash
Trang 211.1.2 Cấu trúc bên trong vi điều khiển
1.1.2.1 Tổ chức bộ nhớ
Hình 1.5 Tổ chức bộ nhớ 1.1.2.2 Cấu trúc RAM bên trong AT89C51 được phân chia như sau
Các bank thanh ghi có địa chỉ từ 00H đến 1FH
RAM địa chỉ hóa từng bit có địa chỉ từ 20H đến 2FH
RAM đa dụng từ 30H đến 7FH
Các thanh ghi chức năng đặc biệt từ 80H đến FFH
1.1.2.3 Bản đồ bộ nhớ RAM trên Chip như sau
7F
RAM đa dụng
FFF0 F7 F6 F5 F4 F3 F2 F1 F0 B
D0 D7 D6 D5 D4 D3 D2 D1 D0 PSW
Trang 2230 B8 - - - BC BB BA B9 B8 IP
2F 7F 7E 7D 7C 7B 7A 79 78
2E 77 76 75 74 73 72 71 70 B0 B7 B6 B5 B4 B3 B2 B1 B0 P.32D 6F 6E 6D 6C 6B 6A 69 68
2C 67 66 65 64 63 62 61 60 A8 AF AE AD AC AB AA A9 A8 IE2B 5F 5E 5D 5C 5B 5A 59 58
23 1F 1E 1D 1C 1B 1A 19 18 8D Không được định địa chỉ hóa bit TH1
22 17 16 15 14 13 12 11 10 8C Không được định địa chỉ hóa bit TH0
21 0F 0E 0D 0C 0B 0A 09 08 8B Không được định địa chỉ hóa bit TL1
20 07 06 05 04 03 02 01 00 8A Không được định địa chỉ hóa bit TL0
10
07 Bank thanh ghi 0 81 Không được định địa chỉ hóa bit SP
Trang 2300 (mặc định cho R0 -R7) 80 87 86 85 84 83 82 81 80 P0
1.1.3 Ram chức năng và các thanh ghi đặc biệt
Bộ nhớ trong AT89C51 bao gồm ROM và RAM RAM trong AT89C51 bao gồm nhiều thành 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
AT89C51 có bộ nhớ theo cấu trúc Harvard: có những vùng bộ nhớ riêng biệt cho chương trình và dữ liệu Chương trình và dữ liệu chứa bên trong AT89C51 nhưng AT89C51 vẫn có thể kết nối với 64 Kbyte bộ nhớ chương trình và 64 Kbyte dữ liệu
Trang 24Mọi địa chỉ trong vùng RAM đa dụng đều có thể truy xuất tự do dùng kiểu địa chỉ trực tiếp hoặc gián tiếp
RAM có thể truy xuất từng bit
AT89C51 chứa 210 bit được địa chỉ hóa, trong đó có 128 bit có chứa các byte
có chứa các địa chỉ từ 20H đến 2FH và các bit còn lại chứa trong nhóm thanh ghi có chức năng đặc biệt
Ý tưởng truy xuất từng bit bằng phần mềm là các đặc tính mạnh củaMicrocontroller xử lý chung Các bit có thể được đặt, xóa, AND, OR, với mộtlệnh đơn Đa số các vi xử lý đòi hỏi một chuỗi lệnh đọc - sửa - ghi để đạt được mục đích tương tự Ngoài ra các Port cũng có thể truy xuất được 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 như các bit phụ thuộc vào lệnh được dùng
Các bank thanh ghi
32 byte thấp của bộ nhớ nội được dành cho các bank thanh ghi Bộ lệnh AT89C51 hỗ trợ 8 thanh ghi có tên là R0 đến R7 và theo mặc định sau khi Reset
hệ thống, các thanh ghi này có 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
Trang 25cá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 dùng thường xuyên nên dùng một trong những 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 đến 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 trạng thái
1.1.3.2 Các thanh ghi có chức năng đặc biệt
Các thanh ghi nội của AT89C51 được truy xuất ngầm định bởi bộ lệnh.Những thanh ghi trong AT89C51 được định dạng 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ộ điế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ư R0 đến R7, AT89C51 có 21 thanh ghi có chức năng đặc biệt (SFR: Special Function Register) ở vùng trên của RAM nội từ địa chỉ 80H đến FFH
Chú ý: Tất cả 128 địa chỉ từ 80H đến FFH không được định nghĩa, chỉ có
21 thanh ghi có chức năng đặc biệt được định nghĩa sẵn các địa chỉ
Ngoại trừ thanh ghi A có thể được truy xuất ngầm như đã nói, đa số các thanh ghi có chức năng đặc biệt SFR có thể địa chỉ hóa từng bit hoặc byte.Thanh ghi trạng thái chương trình (PSW: Program Status Word):Từ trạng thái chương trình ở địa chỉ D0H được tóm tắt như sau:
00=Bank 0; address 00H07H01=Bank 1; address 08H0FH10=Bank 2; address 10H17H11=Bank 3; address 18H1FH
Trang 26PSW.2 OV D2H Overlow Flag
1.1.3.3 Bộ nhớ ngoài (external memory)
AT89C51 có khả năng mở rộng bộ nhớ lên đến 64K byte bộ nhớ chương trình và 64k byte bộ nhớ dữ liệu ngoài Do đó có thể dùng thêm RAM và ROM nếu cần.Khi dùng bộ nhớ ngoài, Port0 không còn chức năng I/O nữa Nó được kết hợp giữa bus địa chỉ (A0-A7) và bus dữ liệu (D0-D7) với tín hiệu ALE để chốt byte của bus địa chỉ chỉ khi bắt đầu mỗi chu kỳ bộ nhớ Port được cho là byte cao của bus địa chỉ
Truy xuất bộ nhớ mã ngoài (Acessing External Code Memory)
Bộ nhớ chương trình bên ngoài là bộ nhớ ROMđược cho phép của tín hiệu PSEN\ Sự kết nối phần cứng của bộ nhớ EPROM như sau:
Trang 27Hình 1.6 Truy xuất bộ nhớ mã ngoài
Trong một chu kỳ máy tiêu biểu, tín hiệu ALE tích cực 2 lần Lần thứ nhất cho phép 74HC373 mở cổng chốt địa chỉ byte thấp, khi ALE xuống 0 thì byte thấp
và byte cao của bộ đếm chương trình đều có nhưng EPROM chưa xuất vì PSEN\ chưa tích cực, khi tín hiệu lên một trở lại thì Port 0 đã có dữ liệu là Opcode ALE tích cực lần thứ hai được giải thích tương tự và byte 2 được đọc từ bộ nhớ chương trình Nếu lệnh đang hiện hành là lệnh 1 byte thì CPU chỉ đọc Opcode, còn byte thứ hai bỏ đi
Trang 28 Truy xuất bộ nhớ dữ liệu ngoài (Accessing External Data Memory)
Hình 1.7 Truy xuất bộ nhớ dữ liệu ngoài
Bộ nhớ dữ liệu ngoài là một bộ nhớ RAMđược đọc hoặc ghi khi được cho phép của tín hiệu RD\ và WR Hai tín hiệu này nằm ở chân P3.7 (RD) và P3.6(WR) Lệnh MOVX được dùng để truy xuất bộ nhớ dữ liệu ngoài và dùng một bộ đệm dữ liệu 16 bit (DPTR), R0 hoặc R1 như là một thanh ghi địa chỉ
Sự giải mã địa chỉ (Address Decoding)
Sự giải mã địa chỉ là một yêu cầu tất yếu để chọn EPROM, RAM, 8279
Sự giải mã địa chỉ đối với AT89C51 để chọn các vùng nhớ ngoài như các vi điều khiển Nếu các con EPROM hoặc RAM 8K được dùng thì các bus địa chỉ phải được giảimã để chọn các IC nhớ nằm trong phạm vi giới hạn 8K: 0000H÷1FFFH, 2000H÷3FFFH, …
Một cách cụ thể, IC giải mã 74HC138 được dùng với những ngõ ra của nó được nối với những ngõ vào chọn Chip CS (Chip Select) trên những IC nhớ EPROM, RAM, … Hình sau đây cho phép kết nối nhiều EPROM và RAM
Trang 29Hình 1.8 Sự giải mã địa chỉ
Hoạt động Reset:
AT89C51 có ngõ vào reset RST 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 để AT89C51 bắt đầu làm việc RST có thể kích bằng tay bằng một phím nhấn thường hở, sơ đồ mạch reset như sau:
Hình 1.9 Manual Reset
Trang 30Trạng thái của tất cả các thanh ghi trong AT89C51 sau khi reset hệ thống được tóm tắt trong bảng sau:
Đến chương trình PCThanh ghi tích lũy AThanh ghi B
Thanh ghi trạng thái PSW
SPDPRTPort 0đến port 3IP
IECác thanh ghi định thờiSCON SBUF
PCON (HMOS)PCON (CMOS)
0000H00H00H00H07H0000HFFHXXX0 0000 B0X0X 0000 B00H
00H00H0XXX XXXXH0XXX0000 B
1.2 Giới thiệu IC thời gian thực RTC (Real Time Clock ) DS1307
1.2.1 Giới thiệu chung về DS1307
IC thời gian thực là họ vi điều khiển của hãng dalat DS1307 có một số đặc trưng cơ bản sau:
DS1307 là một IC thời gian thực với nguồn cung cấp nhỏ, dùng để cập nhật thời gian và ngày tháng với 56 bytes SRAM Địa chỉ và dữ liệu được truyền nối tiếp qua 2 đường bus 2 chiều Nó cung cấp thông tin về giờ, phút, giây, thứ, ngày, tháng, năm Ngày cuối tháng sẽ tự động được điều chỉnh với các tháng nhỏ hơn 31 ngày, bao gồm cả việc tự động nhảy năm Đồng hồ có thể hoạt động ở dạng 24h
Trang 31hoặc 12h với chỉ thị AM/PM DS1307 có một mạch cảm biến điện áp dùng để dò các điện áp lỗi và tự động đóng ngắt với nguồn pin cung cấp
DS1307 là IC thời gian thực với nguồn cung cấp nhỏ dùng để cập nhật thời gian và ngày tháng
- SRAM : 56 bytes
- Địa chỉ và dữ liệu được truyền nối tiếp qua 2 đường bus 2 chiều
- DS1307 có một mạch cảm biến điện áp dùng để dò các điện áp lỗi và tự động đóng ngắt với nguồn pin cung cấp 3V:DS1307 có 7 bytes dữ liệu nằm từ địa chỉ 0x00 tới 0x06, 1 byte điều khiển, và 56 bytes lưu trữ ( dành cho người sử dụng )
Khi xử lý dữ liệu từ DS1307, họ đã tự chuyển cho ta về dạng số BCD, ví dụ như ta đọc được dữ liệu từ địa chỉ 0x04 (tương ứng với Day- ngày trong tháng) và tại 0x05 (tháng)là 0x15, 0x11
+ Lưu ý đến vai trò của chân SQW/OUT Đây là chân cho xung ra của DS1307 có 4 chế độ 1Hz, 4.096HZ, 8.192Hz, 32.768Hz các chế độ này đuợc quy định bởi các bít của thanh ghi Control Register (địa chỉ 0x07 )
+ Địa chỉ của DS1307là 0xD0
Cơ chế hoạt động : DS1307 hoạt động với vai trò slave trên đường bus nối tiếp.Việc truy cập được thi hành với chỉ thị start và một mã thiết bị nhất định được cung cấp bởi địa chỉ các thanh ghi Tiếp theo đó các thanh ghi sẽ được truy cập liên tục đến khi chỉ thị stop được thực thi
Trang 32Hình 1.10 IC thời gian thực DS1307
Trang 331.2.2 Cơ chế hoạt động và chức năng các chân củaDS1307
Hình 1.11 Chân của IC thời gian thực DS1307
X1 và X2: là 2 ngõ kết nối với 1 thạch anh 32.768KHz làm nguồn tạo
dao động cho chip
V BAT: cực dương của một nguồn pin 3V nuôi chip
GND: chân mass chung cho cả pin 3V và Vcc.
Vcc: nguồn cho giao diện I2C, thường là 5V và dùng chung với vi điều
khiển Chú ý là nếu Vcc không được cấp nguồn nhưng VBAT được cấp thì DS1307 vẫn đang hoạt động (nhưng không ghi và đọc được)
SQW/OUT: một ngõ phụ tạo xung vuông (Square Wave / Output
Driver), tần số của xung được tạo có thể được lập trình Như vậy chân này hầu như không liên quan đến chức năng của DS1307 là đồng hồ thời gian thực, chúng ta sẽ
bỏ trống chân này khi nối mạch
SCL và SDA là 2 đường giao xung nhịp và dữ liệu của giao diện I2C
Trang 34Có thể kết nối DS1307 bằng một mạch điện đơn giản.
DS1307 hoạt động với vai trò slave trên đường bus nối tiếp Việc truy cập được thi hành với chỉ thị START và một mã thiết bị nhất định được cung cấp bởi địa chỉ các thanh ghi Tiếp theo đó các thanh ghi sẽ được truy cập liên tục đến khi chỉ thị STOP được thực thi
Trang 35Sơ đồ khối của DS1307
Hình 1.12 Sơ đồ khối của DS1307
1.2.3 Sơ đồ địa chỉ RAM và RTC
Trang 36Hình 1.13 Sơ đồ địa chỉ RAM và RTC của DS1307
Thông tin về thời gian và ngày tháng được lấy ra bằng cách đọc các byte thanh ghi thích hợp Thời gian và ngày tháng được thiết lập cũng thông qua các byte thanh ghi này bằng cách viết vào đó những giá trị thích hợp Nội dung của các thanh ghi dưới dạng mã BCD (binary coded decreaseimal) Bit 7 của thanh ghi seconds là bit clock halt (CH),khi bit này được thiết lập 1 thì dao động disable, khi
nó được xoá về 0 thì dao động được enable
Chú ý: enable dao động trong suốt quá trình cấu hình thiết lập (CH=0)
Thanh ghi thời gian thực được mô tả như sau:
Trang 37Hình 1.14 Tổ chức các thanh ghi thời gian
DS1307 có thể chạy ở chế độ 24h cũng như 12h Bit thứ 6 của thanh ghi hours là bit chọn chế độ 24h hoặc 12h, khi bit này ở mức cao thì chế độ 12h được chọn Ở chế độ 12h thì bit 5 là bit AM/PM với mức cao là PM Ở chế độ 24h thì bit 5 là bit chỉ 20h (từ 20h đến 23h)
Trong quá trình truy cập dữ liệu, khi chỉ thị START được thực thi thì dòng thời gian được truyền tới một thanh ghi thứ 2, thông tin thời gian sẽ được đọc từ thanh ghi thứ cấp này, trong khi đó đồng hồ vẫn tiếp tục chạy Trong DS1307 có một thanh ghi điều khiển để điều khiển hoạt động của chân SQW/OUT :
OUT(output control): bit này điều khiển mức ra của chân SQW/OUT khi đầu ra xung vuông là disable Nếu SQWE = 0 thì mức logic ở chân SQW/OUT
Trang 38sẽ là 1 nếu OUT=1 và OUT = 0 nếu OUT = 0.
SQWE(square wave enable): bit này được thiết lập 1 sẽ enable đầu ra của bộ tạo dao động Tần số của đầu ra sóng vuông phụ thuộc vào giá trị của RS1
và RS0
DS1307 hỗ trợ bus 2 dây 2 chiều và giao thức truyền dữ liệu, thiết bị gửi dữ liệu lên bus được gọi là bộ phát và thiết bị nhận gọi là bộ thu, thiết bị điều khiển quá trình này gọi là master, thiết bị nhận sự điều khiển của master gọi là slave Các bus nhận sự điều khiển của master, là thiết bị phát ra chuỗi xung clock(SCL),master sẽ điều khiển sự truy cập bus, tạo ra các chỉ thị START và STOP
Điều đầu tiên cần chú ý là giá trị thời gian lưu trong các thanh ghi theo dạng BCD BCD là viết tắt của cụm từ Binary-Coded Decimal, tạm dịch là các số thập phân theo mã nhị phân Ví dụ bạn muốn cài đặt cho thanh ghi MINUTES giá trị
42 Nếu quy đổi 42 sang mã thập lục phân thì chúng ta thu được 42=0x2A Theo cách hiểu thông thường chúng ta chỉ cần gán MINUTES=42 hoặc MINUTES=0x2A, tuy nhiên vì các thanh ghi này chứa giá trị BCD nên mọi chuyện sẽ khác
Trang 39Hình 1.15 Số BCD
Với số 42, trước hết nó được tách thành 2 chữ số (digit) 4 và 2 Mỗi chữ số sau đó được đổi sang mã nhị phân 4-bit Chữ số 4 được đổi sang mã nhị phân 4-bit
là 0100 trong khi 2 được đổi thành 0010 Ghép mã nhị phân của 2 chữ số lại chúng
ta thu được một số 8 bit, đó là số BCD Với trường hợp này, số BCD thu được là
01000010 (nhị phân) = 66 Như vậy, để đặt số phút 42 cho DS1307 chúng ta cần ghi vào thanh ghi MINUTES giá trị 66 (mã BCD của 42) Tất cả các phần mềm lập trình hay thanh ghi của chip điều khiển đều sử dụng mã nhị phân thông thường, không phải mã BCD, do đó chúng ta cần viết các chương trình con để quy đổi từ
số thập nhị phân (hoặc thập phân thường) sang BCD Thoạt nhìn, mọi người đều cho rằng số BCD chỉ làm vấn đền thêm rắc rối, tuy nhiên số BCD rất có ưu điểm trong việc hiển thị nhất là khi hiển thị từng chữ số như hiển thị bằng LED 7 đoạn chẳng hạn Quay lại ví dụ 42 phút, giả sử chúng ta dùng 2 LED 7-đoạn để hiện thị
2 chữ số của số phút Khi đọc thanh ghi MINUTES chúng ta thu được giá trị 66 (mã BCD của 42), do 66=01000010 (nhị phân), để hiển thị chúng ta chỉ cần dùng phương pháp tách bit thông thường để tách số 01000010 thành 2 nhóm 0100 và
0010 (tách bằng toán tử shift “>>” của C hoặc instruction LSL, LSR trong asm) và
Trang 40xuất trực tiếp 2 nhóm này ra LED vì 0100 = 4 và 0010 =2, rất nhanh chóng Thậm chí, nếu chúng ta nối 2 LED 7-đoạn trong cùng 1 PORT, việc tách ra từng digit là không cần thiết, để hiển thị cả số, chỉ cần xuất trực tiếp ra PORT Như vậy, với số BCD, việc tách và hiển thị digit được thực hiện rất dễ dàng, không cần thực hiện phép chia (rất tốn thời gian thực thi) cho cơ số 10, 100, 1000…như trong trường hợp số thập phân.
Thanh ghi giây (SECONDS): thanh ghi này là thanh ghi đầu tiên trong bộ
nhớ của DS1307, địa chỉ của nó là 0x00 Bốn bit thấp của thanh ghi này chứa mã BCD 4-bit của chữ số hàng đơn vị của giá trị giây Do giá trị cao nhất của chữ số hàng chục là 5 (không có giây 60 !) nên chỉ cần 3 bit (các bit SECONDS6:4) là có thể mã hóa được (số 5 =101, 3 bit) Bit cao nhất, bit 7, trong thanh ghi này là 1 điều khiển có tên CH (Clock halt – treo đồng hồ), nếu bit này được set bằng 1 bộ dao động trong chip bị vô hiệu hóa, đồng hồ không hoạt động Vì vậy, nhất thiết phải reset bit này xuống 0 ngay từ đầu
Thanh ghi phút (MINUTES): có địa chỉ 0x01, chứa giá trị phút của đồng
hồ Tương tự thanh ghi SECONDS, chỉ có 7 bit của thanh ghi này được dùng lưu
mã BCD của phút, bit 7 luôn luôn bằng 0
Thanh ghi giờ (HOURS): có thể nói đây là thanh ghi phức tạp nhất trong
DS1307 Thanh ghi này có địa chỉ 0x02 Trước hết 4-bits thấp của thanh ghi này được dùng cho chữ số hàng đơn vị của giờ Do DS1307 hỗ trợ 2 loại hệ thống hiển thị giờ (gọi là mode) là 12h (1h đến 12h) và 24h (1h đến 24h) giờ, bit6 xác lập hệ thống giờ Nếu bit6=0 thì hệ thống 24h được chọn, khi đó 2 bit cao 5 và 4 dùng mã hóa chữ số hàng chục của giá trị giờ Do giá trị lớn nhất của chữ số hàng chục trong trường hợp này là 2 (=10, nhị phân) nên 2 bit 5 và 4 là đủ để mã hóa Nếu bit6=1 thì hệ thống 12h được chọn, với trường hợp này chỉ có bit 4 dùng mã hóa chữ số hàng chục của giờ, bit 5 chỉ buổi trong ngày, AM hoặc PM Bit5 =0 là AM
và bit5=1 là PM Bit 7 luôn bằng 0
Thanh ghi thứ (DAY – ngày trong tuần): nằm ở địa chỉ 0x03 Thanh ghi