TÓM TẮT NỘI DUNG ĐỒ ÁN. 7
Chương 1: Giới thiệu qua về tình hình phát triển khoa học và công nghệ điện tử trên thực tế, sự phát triển phần cứng song song với phần mềm đã đem lại hiệu quả to lớn trong cuộc sống con người. 8
Chương 2: Thiết kế phần cứng. 8
Chương 3: Xây dựng phần mềm, lập trình cho hệ thống. 8
Chương 4: Cài đặt và hoàn thiện hệ thống. 8
CHƯƠNG 1: TỔNG QUAN. 8
1.1 Đặt vấn đề. 8
1.2. Khảo sát vấn đề: 9
1.3. Các vấn đề cần giải quyết của bài toán : 9
1.4. Giải pháp: 10
1.5. Mục đích đề tài. 10
CHƯƠNG 2: THIẾT KẾ VÀ XÂY DỰNG PHẦN CỨNG. 10
2.1. CÁC YÊU CẦU CỦA HỆ THỐNG. 11
2.2. HƯỚNG XÂY DỰNG HỆ THÔNG. 11
2.3. SƠ ĐỒ KHỐI. 11
2.3.1. Sơ đồ khối tổng quan. 12
2.3.2.1. Khối tạo xung dao động. 13
2.3.2.1.1. Khối tạo xung dao động cho vi điều khiển 89S52. 13
2.3.2.1.2. Giao tiếp DS 1307 với khối giao động. 13
2.3.2.3. Khối hiển thị 15
2.3.2.4. Khối điều chỉnh. 16
2.4. SƠ ĐỒ MẠCH NGUYÊN LÝ. 18
Sơ đồ nguyên lý của mạch như sau. 18
Hình 2.6 Sơ đồ mạch nguyên lý. 19
2.5. CÁC LINH KIỆN SỬ DỤNG TRONG MẠCH. 19
2.5.1.Giới thiệu về vi điều khiển 89S52. 19
2.5.1.1. Tổng Quan Về 89S52. 19
2.5.1.2. Mô tả chân 89S52. 22
2.5.1.2.1. Sơ đồ chân 89S52. 22
2.5.1.2.2. Chức năng các chân 89S52. 22
2.5.1.2.3. Tổ chức bộ nhớ bên trong 89S52. 25
2.5.1.2.4. RAM đa dụng. 27
2.5.1.2.5. RAM có thể định địa chỉ bit. 27
2.5.1.2.6. Các bank thanh ghi. 27
2.5.1.2.7. Các thanh ghi có chức năng đặc biệt. 28
2.5.1.2.7.1. Thanh ghi trạng thái chương trình (PSW: Program Status Word) 28
2.5.1.2.7.2. Thanh ghi TIMER. 30
2.5.1.2.7.3. Thanh ghi ngắt (INTERRUPT). 30
2.5.2. Giới thiệu về IC DS 1307. 35
2.5.2.1. Tổng quan về DS1307. 35
2.5.2.1.1. Sơ đồ chân DS1307. 35
2.5.2.1.2. Cấu tạo bên trong DS1307. 37
2.5.2.2. Khái quát giao diện I2C. 41
2.5.2.3. Mode (chế độ) truyền dữ liệu giữa DS1307 và AT89S52. 45
2.5.2.3.1. Mode Data Write (chế độ ghi dữ liệu). 45
2.5.2.3.2. Mode Data Read (chế độ dọc dữ liệu). 47
2.5.3. CÁC LINH LIỆN KHÁC SỬ DỤNG TRONG MẠCH. 48
2.5.3.1 Điện trở. 48
2.5.3.2 Tụ điện. 49
2.5.3.3 Led 7 đoạn. 49
2.5.3.3.1. Khái niệm cơ bản. 49
2.5.3.3.2. Kết nối với vi điều khiển. 51
CHƯƠNG 3: XÂY DỰNG PHẦN MỀM ĐIỀU KHIỂN HỆ THỐNG. 55
3.1. LƯU ĐỒ CHƯƠNG TRÌNH CHÍNH. 55
3.2. LƯU ĐỒ CHƯƠNG TRÌNH CON. 57
3.2.1. Lưu đồ chương trình con “WRITE_CLOCK”. 57
3.2.3. Lưu đồ chương trình con “ READ_CLOCK”. 58
3.2.4. Lưu đồ chương trình con ghi 1 byte vào DS1307“SEND_BYTE”. 59
3.2.5. Lưu đồ chương trình con đọc 1 byte từ DS1307“READ_BYTE”. 60
3.2.6. Lưu đồ chương trình con “ALARM_CLOCK_TEST”. 61
3.2.7. Lưu đồ chương trình con “HIEU_UNG_CHINH”. 62
3.2.8. Lưu đồ chương trình con “TAT_MO_CHUONG”. 63
3.2.9. Lưu đồ chương trình con “HIENTHI”. 64
3.4. PHẦN MỀM LẬP TRÌNH CHO VI ĐIỀU KHIỂN. 65
3.4.1. Định hướng sử dụng ngôn ngữ lập trình. 65
3.4.2.1. Các lệnh số học. 65
3.4.2.2. Các lệnh logic. 67
3.4.2.3. Các lệnh di chuyển dữ liệu. 68
3.4.2.4. Các lệnh xử lý bit. 69
3.4.2.5. Các lệnh rẽ nhánh. 69
3.4.2.6. Các lệnh dịch và quay. 71
3.4.2.7. Các lệnh làm việc với ngăn xếp. 72
CHƯƠNG 4: CÀI ĐẶT VÀ HOÀN THIỆN HỆ THỐNG. 73
4.1. PHẦN MỀM BIÊN DỊCH CHƯƠNG TRÌNH. 73
4.1.1. Các bước cài đặt phần mềm Keli C. 73
4.1.2. Lập trình ASM với Keil: 82
4.2. MÔ PHỎNG TRÊN PROTUERS. 86
4.4. MÔ HÌNH MẠCH THỰC TẾ. 88
4.5. KIỂM TRA VÀ ĐÁNH GIÁ. 90
4.5.1 Ưu Điểm. 90
4.5.2 Khuyết Điểm. 90
4.5.3 Hướng Phát Triển. 90
4.5.4 Kết Luận. 91
TÀI LIỆU THAM KHẢO 92
88 trang |
Chia sẻ: lvcdongnoi | Lượt xem: 7706 | Lượt tải: 2
Bạn đang xem trước 20 trang tài liệu Thiết kế và xây dựng lịch vạn niên - Kem theo file chay mô phỏng với proteus, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
lĩnh vực điều khiển đã được ứng dụng rộng rãi trong các
thiết bị, sản phẩm phục vụ cho nhu cầu sinh hoạt hàng ngày của con người như máy
giặt, đồng hồ báo giờ... đã giúp cho đời sống cuả chúng ta ngày càng hiện đại và tiện
nghi hơn.
Đề tài “Thiết kế lịch vạn niên điện tử” Nhằm đáp ứng nhu cầu ham muốn học
hỏi của bản thân, cũng như là góp phần nâng giá trị của những mạch điện tử trong
đời sống của con người.
Đề tài “Thiết kế lịch vạn niên điện tử” rất đa dạng và phong phú, có nhiều
loại hình khác nhau dựa vào công dụng và độ phức tạp. Do tài liệu tham khảo bằng
Tiếng Việt còn hạn chế, trình độ có hạn và kinh nghiệm trong thực tế còn non kém,
nên đề tài chắc chắn còn nhiều thiếu sót. Vì vậy rất mong nhận được những ý kiến
đóng góp, giúp đỡ chân thành của các thầy cô cũng như của các bạn sinh viên.
6
TÓM TẮT NỘI DUNG ĐỒ ÁN
Chương 1: Giới thiệu qua về tình hình phát triển khoa học và công nghệ điện tử
trên thực tế, sự phát triển phần cứng song song với phần mềm đã đem lại hiệu quả to
lớn trong cuộc sống con người.
- Nguyên nhân chọn đề tài.
- Mục đích đề tài.
- Khảo sát bài toán.
- Các vấn đề cần giải quyết của bài toán.
- Đưa ra giải pháp.
Chương 2: Thiết kế phần cứng.
- Mô tả chức năng mong muốn của đồ án.
- Hướng xây dựng đồ án.
- Sơ đồ khối .
- Sơ đồ mạch nguyên lý.
- Các linh kiện cần sử dụng trong mạch.
Chương 3: Xây dựng phần mềm, lập trình cho hệ thống.
- Lưu đồ chương trình chính.
- Lưu đồ chương trình con.
- Phần mềm lập trình cho hệ thống.
Chương 4: Cài đặt và hoàn thiện hệ thống.
- Mô phỏng hệ thống trên protuers.
- Triển khai mạch thực tế.
- Kiểm tra và đánh giá.
7
CHƯƠNG 1: TỔNG QUAN
1.1 Đặt vấn đề
Cùng với sự phát triển của khoa học và công nghệ, các thiết bị điện tử đã,
đang và sẽ tiếp tục được ứng dụng ngày càng rộng rãi và mang lại hiệu quả trong
hầu hết các lĩnh vực khoa học kỹ thuật cũng như trong đời sống xã hội.
Việc gia công, xử lý các tín hiệu điện tử hiện đại đều dựa trên cơ sở nguyên
lý số. Vì các thiết bị làm việc dựa trên cơ sở nguyên lý số có ưu điểm hơn hẳn so với
các thiết bị làm việc dưạ trên cơ sở nguyên lý tương tự, đặc biệt là trong kỹ thuật
tính toán.
Sự phát triển mạnh mẽ của công nghệ điện tử đã cho ra đời nhiều vi mạch số
cỡ lớn với giá thành rẻ và khả năng lập trình cao đã mang lại những thay đổi lớn
trong ngành điện tử. Mạch số ở những mức độ khác nhau đã đang thâm nhập trong
các lĩnh vực điện tử thông dụng và chuyên nghiệp một cách nhanh chóng. Các
trường kỹ thuật là nơi mạch số thâm nhập mạnh mẽ và được học sinh, sinh viên ưa
chuộng do lợi ích và tính khả thi của nó. Vì thế sự hiểu biết sâu sắc về kỹ thuật số là
không thể thiếu đối với sinh viên ngành điện tử hiện nay. Nhu cầu hiểu biết về kỹ
thuật số không chỉ riêng đối với những người theo chuyên ngành điện tử mà còn đối
với những cán bộ kỹ thuật khác có sử dụng thiết bị điện tử.
1.2. Khảo sát vấn đề
Hiện nay, những ứng dụng của phần cứng được sử dụng ngày càng nhiều và
phổ biến, đảo qua các con phố chúng ta có thể nhìn thấy những bảng quảng cáo có
sử dụng đèn led hoặc sử dụng vi xử lý để hiển thị thời gian hay nhiệt độ. Chúng
trông khá đẹp mắt và tiện lợi. Trong đồ dùng gia đình cũng có rất nhiều đồ điện tử
mang tính tự động như: ti vi, máy vi tính…
Đề tài em chọn xuất phát từ ý tưởng sử dụng IC DS1307 thời gian thực, cùng
với việc mọi người cần phải biết chính xác ngày, giờ để thu xếp việc làm cho hợp lý.
Với ý tưởng này, em đã kết hợp lý thuyết và thực tế để làm đồ án về “ thiết kế lịch
vạn niên điện tử”
8
1.3. Các vấn đề cần giải quyết của bài toán
Bài toán xây dựng thiết kế lịch vạn niên điện tử đặt ra các yêu cầu sau:
- Lập trình thời gian thực cho AT 89S52 rồi từ đó áp dụng cho ứng dụng.
- Đảm bảo hiển thị đúng thời gian ngày tháng năm, giờ phút giây.
- Có khả năng phát triển và mở rộng vào các ứng dụng khác trong thực tế.
Có độ bền cao. Hệ thống chạy ổn định và giá cả hợp lý.
1.4. Giải pháp
Giải pháp đưa ra để đáp ứng yêu cầu bài toán:
- Sử dụng vi điều khiển AT 89S52.
- Sử dụng chíp thời gian thực DS 1307.
- Xây dựng chương trình phần mềm điều khiển.
- Lập trình cho nút bấm để tăng giảm giờ, phút.
1.5. Mục đích đề tài
Sự cần thiết, quan trọng cũng như tính khả thi và lợi ích của mạch số cũng
chính là lý do để em chọn và thực hiện đồ án “Thiết kế lich vạn niên điện tử” nhằm
ứng dụng kiến thức đã học vào thực tế.
Sử dụng một con IC thời gian thực (DS1307) kết hợp với vi điều khiển 89S52
, 89S52 có nhiệm vụ đọc/ghi (giờ, phút, giây, thứ, ngày…..thời gian báo thức) từ
chip DS1307. Khi thời gian báo thức trùng với thời gian thực thì loa sẽ phát ra âm
thanh trong 20 giây. Hiển thị ngày tháng năm, giờ phút giây đề trên led 7 thanh.
Mục đích yêu cầu của đề tài như sau:
Mạch hiển thị giờ, phút, giây, thứ, ngày, tháng, năm một cách chính xác
Khi thời gian báo thức trùng với thời gian thực thì loa phải phát ra âm
thanh báo thức.
9
CHƯƠNG 2: THIẾT KẾ VÀ XÂY DỰNG PHẦN CỨNG
2.1. CÁC YÊU CẦU CỦA HỆ THỐNG
Với ý tưởng xây dựng một đồng hồ báo thức kết hợp với lịch điện tử. Em đã
xây dựng bài đồ án “lịch vạn niên điện tử”. Bài đồ án là kết quả của quá trình học
tâp trên giảng đường với sự hướng dẫn của thầy cô giáo cùng với việc khảo sát nhu
cầu thực tế cũng như ứng dụng của các vi điều khiển trong cuộc sống. Việc xây
dựng hệ thống “lịch vạn niên điện tử” với các tính năng mong muốn:
-Chức năng: Hiển thị được thứ ngày tháng năm, giờ phút giây trên led 7 đoạn.
Có hệ thống chuông báo thức.
Có các nút điều chỉ thời gian cũng như chuông báo giờ.
-Giao diện: Mạch phải nhỏ gọn, dễ nhìn, dễ sử dụng.
- Hoạt động: Bền, chạy ổn định, sai số thời gian thấp.
- Tính thực tế: Mạch có ứng dụng cao ngoài cuộc sống, có thể mang ra ứng
dụng lắp đặt ngoài thực tế, giá thì lắp mạch rẻ, phù hợp.
2.2. HƯỚNG XÂY DỰNG HỆ THỐNG
Từ các yêu cầu của hệ thống như đã nên trên. Có rất nhiều giải pháp khác nhau
để xây dựng thành công hệ thống” lịch vạn niên điện tử”. Từ việc mua các linh kiện,
sử dụng vi điều khiển nào cho việc lập trình đến sử dụng chip thời gian thực nào để
đo thời gian. Mỗi loại lại có một phương pháp xây dựng và cách làm khác nhau.
Qua một quá trình tìm hiểu và nghiên cứu em đã đưa ra được phương pháp lựa
chọn tối ưu cho bài đồ án “ lịch vạn niên điện tử”:
- Sử dụng vi điều khiển 89S52 làm vi điều khiển đê lập trình.
-Sử dụng chip thời gian thực DS1307 để đo và đếm thời gian.
-Sử dụng các đèn led 7 đoạn để hiển thị thời gian.
Sau đây là quá trình xây dựng bài đồ án “ lịch vạn niên điện tử ”.
10
2.3. SƠ ĐỒ KHỐI
2.3.1. Sơ đồ khối tổng quan
* Vi điều khiển 89S52: Xử lý toàn bộ mọi công việc xuất nhập thời gian, hiển thị
thời gian, cài đặt hệt thống báo thức. Khối xử lý gồm có vi điều khiển 89S52.
* Khối thời gian thực: Dùng cho việc đếm thời gian thực, nhập xuất thời gian thực:
thứ ngày tháng năm, giờ phút giây. Khối thời gian thực gồm có chip thời gian thực
DS 1307.
* Khối hiển thị: Dùng để hiển thị thời gian, hiển thị: thứ ngày tháng năm, giờ phút
giây và hẹn thời gian báo thứ. Khối hiển thị dùng led 7 đoạn.
* Khối điều chỉnh: Dùng để điều chỉnh thời gian, điều chỉnh giờ báo thức. Khối điều
chỉnh gồm 3 nút bấm được nối trực tiếp với vi điều khiển 89S52.
* Khối tạo xung dao động: Dùng để tạo xung dao động cho vi điều khiển 89S52 và
tạo xung dao động cho chip thời gian thực DS1307.
KHỐI THỜI GIAN
THỰC
KHỐI ĐIỀU
CHỈNH
VI ĐIỀU
KHIỂN
89S52
KHỐI HIỂN THỊ
KHỐI TẠO XUNG
DAO ĐỘNG
KHỐI TẠO XUNG
DAO ĐỘNG
Hình 2.1 Sơ đồ khối tổng quan
11
2.3.2.1. Khối tạo xung dao động
2.3.2.1.1. Khối tạo xung dao động cho vi điều khiển 89S52
Sử dụng khối tạo xung dao động bằng thạch anh. Đây chính là nguồn cung
cấp xung đồng hồ cho vi điều khiển 89S52 và IC thời gian thực DS 1307. Hai chân
XTAL1 (chân 19) và XTAL2 (chân 18) ở vi điều khiển 89S52 được mắc với mạch
dao động thạch anh bên ngoài. Các điện trở C1 và C2 là cần thiết khi mắc mạch dao
động thạch anh cho 89S52. Sơ đồ mạch như sau :
Hình 2.2. Sơ đồ khối tạo giao động cho 89S52
12
2.3.2.1.2. Giao tiếp DS 1307 với khối giao động
Hình 2.3 Sơ đồ khối tạo xung dao động cho DS1307
IC thời gian thực DS 1307 kết nối với khối tạo xung dạo động qua 2 chân X1
và X2 như hình vẽ:
13
2.3.2.3. Khối hiển thị
Giao tiếp vi đều khiển với led 7 đoạn
Hình 2.4 Sơ đồ giao tiếp vi điều khiển với led 7 đoạn
Vi điều khiển 89S52 giao tiếp với led 7 đoạn theo kiểu truyền nối tiếp. Sử dụng
tất cả các chân 89S52 xuất ra led 7 đoạn. Thông qua trở băng.
14
2.3.2.4. Khối điều chỉnh
Hình 2.5 Khối điều chỉnh
Sử dụng các chân P1.6, P1.7 và P7.0 của vi điều khiển 89S52 để tạo nút bấm với các
chứa năng sau:
SET: Chuyển sang chế độ điều chỉnh ngày tháng năm, giờ phút, thứ.
DOWN: Điều chỉnh giảm.
UP/AL: Điều chỉnh tăng.
UP/AL: Còn có chức năng chuyển sang chế độ điều chỉnh hẹn giờ.
15
2.4. SƠ ĐỒ MẠCH NGUYÊN LÝ
Sơ đồ nguyên lý của mạch như sau.
16
Hình 2.6 Sơ đồ mạch nguyên lý
2.5. CÁC LINH KIỆN SỬ DỤNG TRONG MẠCH
2.5.1.Giới thiệu về vi điều khiển 89S52
2.5.1.1. Tổng Quan Về 89S52
AT89S52 là họ IC vi điều khiển do hãng Intel sản xuất. Các sản phẩm
AT89S52 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 hệ thống điều khiển.
AT89S52 cung cấp những đặc tính chuẩn như: 8 KByte bộ nhớ chỉ đọc có thể
xóa và lập trình nhanh (EPROM), 128 Byte RAM, 32 đường I/O, 3
17
TIMER/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.
Các đặc điểm của chip AT89S52 được tóm tắt như sau:
8 KByte bộ nhớ có thể lập trình 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
3 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.
64 KB vùng nhớ mã ngoài
64 KB vùng nhớ dữ liệu ngoại.
4 s cho hoạt động nhân hoặc chia
18
Hình 2.7 Sơ đồ khối của AT89S52
19
A
T8
9S
52
2.5.1.2. Mô tả chân 89S52
2.5.1.2.1. Sơ đồ chân 89S52
Mặc dù các thành viên của họ
8051(ví dụ 8751, 89S52, 89C51,
DS5000) đều có các kiểu đóng vỏ
khác nhau, chẳng hạn như hai hàng
chân DIP (Dual In-Line Pakage),
dạng vỏ dẹt vuông QPF (Quad Flat
Pakage) và dạng chip không có chân
đỡ LLC (Leadless Chip Carrier) thì
chúng đều có 40 chân cho các chức
năng khác nhau như vào ra I/O, đọc
RD , ghi WR , địa chỉ, dữ liệu và
ngắt. Cần phải lưu ý một số hãng
cung cấp một phiên bản 8051 có 20 chân với số cổng vào ra ít hơn cho các ứng dụng
yêu cầu thấp hơn. Tuy nhiên vì hầu hết các nhà phát triển sử dụng chíp đóng vỏ 40
chân với hai hàng chân DIP nên ta chỉ tập trung mô tả phiên bản này.
2.5.1.2.2. Chức năng các chân 89S52
Port 0: từ chân 32 đến chân 39 (P0.0 _P0.7). Port 0 có 2 chức năng: 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 thiết kế lớn có bộ nhớ mở rộng nó được kết hợp giữa bus địa chỉ và bus dữ liệu.
Port 1: từ chân 1 đến chân 9 (P1.0 _ P1.7). Port 1 là port IO dùng cho giao tiếp
với thiết bị bên ngoài nếu cần.
Port 2: từ chân 21 đến chân 28 (P2.0 _P2.7). Port 2 là một port có tác dụng
kép 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.
Hình 2.8 Sơ đồ chân 89S52
20
Port 3: từ chân 10 đến chân 17 (P3.0 _ P3.7). Port 3 là port có tác dụng kép.
Các chân của port này có nhiều chức năng, có công dụng chuyển đổi có liên hệ đến
các đặc tính đặc biệt của 89S52 như ở bảng sau:
Bit Tên Chức năng chuyển đổi
P3.0
P3.1
P3.2
P3.3
P3.4
P3.5
P3.6
P3.7
RXD
TXD
INT0
INT1
T0
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 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.
PSEN (Program store enable):
PSEN là tín hiệu ngõ ra có tác dụng cho phép đọc bộ nhớ chương trình
mở rộng và thường được nối đến chân OE của Eprom cho phép đọc các byte
mã lệnh.
PSEN ở mức thấp trong thời gian 89S52 lấy lệnh. Các mã lệnh của chương
trình được đọc từ Eprom qua bus dữ liệu, được chốt vào thanh ghi lệnh bên trong
89S52 để giải mã lệnh. Khi 89S52 thi hành chương trình trong ROM nội, PSEN ở
mức cao.
ALE (Address Latch Enable):
21
Khi 89S52 truy xuất bộ nhớ bên ngoài, Port 0 có chức năng là bus địa chỉ và
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 ở 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.
EA (External Access): Tín hiệu vào EA (chân 31) thường được mắc lên mức 1
hoặc mức 0. Nếu ở mức 1, 89S52 thi hành chương trình từ ROM nội. Nếu ở mức 0,
89S52 thi hành chương trình từ bộ nhớ mở rộng. Chân EA được lấy làm chân cấp
nguồn 21V khi lập trình cho Eprom trong 89S52.
RST (Reset): Khi ngõ vào tín hiệu này đưa lên
mức cao ít nhất 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 phải tự động
reset.
Các giá trị tụ và điện trở được chọn là:
R1=10, R2=220, C=10 F.
Các ngõ vào bộ dao động X1, X2:
Bộ tạo dao động được tích hợp bên trong
89S52. Khi sử dụng 89S52, người ta chỉ cần
nối thêm thạch anh và các tụ. Tần số thạch anh
tùy thuộc vào mục đích của người sử dụng, giá
trị tụ thường được chọn là 33p.
Hình 2.9 Nối chân Reset
Hình 2.10 Ngõ tạo xung dao động
22
2.5.1.2.3. Tổ chức bộ nhớ bên trong 89S52
Bộ nhớ trong 89S52 bao gồm ROM và RAM. RAM trong 89S52 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.
AT89S52 có bộ nhớ được tổ chức 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 có thể chứa bên
trong 89S52 nhưng 89S52 vẫn có thể kết nối với 64K byte bộ nhớ chương trình và
64K byte dữ liệu bên ngoài.
23
Bản đồ bộ nhớ Data bên trong Chip 89S52 được tổ chức như sau:
Địa chỉ
byte
Địa chỉ bit
Địa chỉ bit
Địa chỉ
byte
Hình 2.11 Bộ nhớ bên trong 89S52
24
RAM bên trong AT89S52 đượ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.
2.5.1.2.4. RAM đa dụng
RAM đa dụng có địa chỉ từ 30h – 7Fh có thể truy xuất mỗi lần 8 bit bằng cách
dùng chế độ định địa chỉ trực tiếp hay gián tiếp.
Các vùng địa chỉ thấp từ 00h – 2Fh cũng có thể sử dụng cho mục đích như
trên, ngoài các chức năng đặc biệt được đề cập ở phần sau.
2.5.1.2.5. RAM có thể định địa chỉ bit
Vùng địa chỉ từ 20h -2Fh gồm 16 byte có thể thực hiện như vùng RAM đa
dụng (truy xuât mỗi lần 8 bit) hay thực hiện truy xuất mỗi lần 1 bit bằng các lệnh xử
lý bit.
2.5.1.2.6. Các bank thanh ghi.
Vùng địa chỉ 00h – 1Fh được chia thành 4 bank thanh ghi: bank 0 từ 00h –
07h, bank 1 từ 08h – 0Fh, bank 2 từ 10h – 17h và bank 3 từ 18h – 1Fh. Các bank
thanh ghi này được đại diện bằng các thanh ghi từ R0 đến R7. Sau khi khởi động thì
hệ thống bank 0 được chọn sử dụng.
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. Viêc thay đổi bank thanh ghi được thực hiện
thông qua thanh ghi từ trạng thái chương trình (PSW).
25
2.5.1.2.7. Các thanh ghi có chức năng đặc biệt
Các thanh ghi trong 89S52 đượ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ộ đế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, 89S52 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 0FFH.
Sau đây là một vài thanh ghi đặc biệt thường được sử dụng:
2.5.1.2.7.1. Thanh ghi trạng thái chương trình (PSW: Program Status Word)
BIT SYMBOL ADDRESS DESCRIPTION
PSW.7 CY D7H Cary Flag
PSW.6 AC D6H Auxiliary Cary Flag
PSW.5 F0 D5H Flag 0
PSW4 RS1 D4H Register Bank Select 1
PSW.3 RS0 D3H Register Bank Select 0
00=Bank 0; address 00H07H
01=Bank 1; address 08H0FH
10=Bank 2; address 10H17H
11=Bank 3; address 18H1FH
PSW.2 OV D2H Overlow Flag
PSW.1 - D1H Reserved
PSW.0 P DOH Even Parity Flag
26
Chức năng từng bit trạng thái chương trình
- Cờ Carry CY (Carry Flag):
Cờ nhớ thường nó được dùng cho các lệnh toán học: C =1 nếu phép toán cộng
có sự tràn hoặc phép trừ có mượn và ngược lại C = 0 nếu phép toán cộng không tràn
và phép trừ không có mượn.
- Cờ Carry phụ AC (Auxiliary Carry Flag):
Khi cộng những giá trị BCD (Binary Code Decimal), cờ nhớ phụ AC được set
nếu kết quả 4 bit thấp nằm trong phạm vi điều khiển 0AH - 0FH. Ngược lại AC = 0
- Cờ 0 (Flag 0):
Cờ 0 (F0) là 1 bit cờ đa dụng dùng cho các ứng dụng của người dùng.
- Những bit chọn bank thanh ghi truy xuất:
RS1 và RS0 quyết định dãy thanh ghi tích cực. Chúng được xóa sau khi reset
hệ thống và được thay đổi bởi phần mềm khi cần thiết.
Tùy theo RS1, RS0 = 00, 01, 10, 11 sẽ được chọn Bank tích cực tương ứng là
Bank 0, Bank1, Bank2 và Bank3.
RS1 RS0 BANK
0 0 0
0 1 1
1 0 2
27
- Cờ tràn OV (Over Flag):
Cờ tràn được set sau một hoạt động cộng hoặc trừ nếu có sự tràn toán học.
- Bit Parity (P):
Bit tự động được set hay Clear ở mỗi chu kỳ máy để lập Parity chẵn với
thanh ghi A. Sự đếm các bit 1 trong thanh ghi A cộng với bit Parity luôn luôn chẵn.
Ví dụ A chứa 10101101B thì bit P set lên một để tổng số bit 1 trong A và P tạo
thành số chẵn.
Bit Parity thường được dùng trong sự kết hợp với những thủ tục của Port nối
tiếp để tạo ra bit Parity trước khi phát đi hoặc kiểm tra bit Parity sau khi thu.
2.5.1.2.7.2. Thanh ghi TIMER
Vi Điều Khiển 89S52 có 3 timer 16 bit, mỗi timer có bốn cách làm việc.
Người ta sử dụng các timer để:
o Định khoảng thời gian.
o Đếm sự kiện.
o Tạo tốc độ baud cho port nối tiếp trong 89S52.
Trong các ứng dụng định khoảng thời gian, người ta lập trình timer ở những
khoảng đều đặn và đặt cờ tràn timer. Cờ được 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
1 1 3
28
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).
2.5.1.2.7.3. Thanh ghi ngắt (INTERRUPT)
Một ngắt là sự xảy ra một điều kiện, một sự kiện mà nó gây ra treo tạm thời
thời chương trình chính trong khi điều kiện đó được phục vụ bởi một chương trình
khác.
Các ngắt đóng một vai trò quan trọng trong 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 đáp ứng bất đồng bộ với một sự kiện và giải
quyết sự kiện đó trong khi một chương trình khác đang thực thi.
- Tổ chức ngắt của 89S52:
Có 5 nguồn ngắt ở 89S52: 2 ngắt ngoài, 2 ngắt từ timer và 1 ngắt port
nối tiếp. Tất cả các ngắt theo mặc nhiên đều bị cấm sau khi reset hệ thống và được
cho phép từng cái một bằng phần mềm. Mức độ ưu tiên của các ngắt được lưu trong
thanh ghi IP (Interrupt Priority) hay nói cách khác thanh ghi IP cho phép chọn mức
ưu tiên cho các ngắt (giá trị thanh ghi IP khi reset là 00h).
Bit Ký hiệu Địa chỉ bit Mô tả
IP.7 _ _ Không được mô tả
IP.6 _ _ Không được mô tả
IP.5 ET2 BDH Chọn mức ưu tiên cao (=1) hay thấp (=0) tại
timer 2
IP.4 ES BCH Chọn mức ưu tiên cao (=1) hay thấp (=0) tại
cổng nối tiếp.
IP.3 ET1 BBH Chọn mức ưu tiên cao (=1) hay thấp (=0) tại
29
timer 1
IP.2 EX1 BAH Chọn mức ưu tiên cao (=1) hay thấp (=0) tại
ngắt ngoài 1
IP.1 ET0 B9H Chọn mức ưu tiên cao (=1) hay thấp (=0) tại
timer 0
IP.0 EX0 B8H Chọn mức ưu tiên cao (=1) hay thấp (=0) tại
ngắt ngoài 0
Tóm tắt thanh ghi IP
Nếu 2 ngắt xảy ra đồng thời thì ngắt nào có nào có mức ưu tiên cao hơn sẽ
được phục vụ trước.
Nếu 2 ngắt xảy ra đồng thời có cùng mức ưu tiên thì thứ tự ưu tiên được
thực hiện từ cao đến thấp như sau: ngắt ngoài 0 – timer 0 – ngắt ngoài 1 – timer 1 –
cổng nối tiếp – timer 2.
Nếu chương trình của một ngắt có mức ưu tiên thấp đang chạy mà có một
ngắt xảy ra với mức ưu tiên cao hơn thì chương trình này tạm dừng để chạy một
chương trình khác có mức ưu tiên cao hơn.
- Cho phép và cấm ngắt:
Mỗi nguồn ngắt được cho phép hoặc cấm ngắt qua một thanh ghi chức năng
đặt biệt có định địa chỉ bit IE (Interrupt Enable: cho phép ngắt) ở địa chỉ A8H.
30
- Các cờ ngắt:
Khi điều kiện ngắt xảy ra thì ứng với từng loại ngắt mà loại cờ đó được đặt
lên mức cao để xác nhận ngắt.
Bit Ký hiệu Địa chỉ bit Mô tả
IE.7 EA AFH Cho phép / Cấm toàn bộ
IE.6 _ AEH Không được mô tả
IE.5 ET2 ADH Cho phép ngắt từ Timer 2 (8052)
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 A9H Cho phép ngắt từ Timer 0
IE.0 EX0 A8H Cho phép ngắt ngoài 0
Tóm tắt thanh ghi IE
31
Ngắt Cờ Thanh ghi SFR và vị trí bit
Bên ngoài 0 IE0 TCON.1
Bên ngoài 1 IE1 TCON.3
Timer 1 TF1 TCON.7
Timer 0 TF0 TCON.5
Port nối tiếp TI SCON.1
Port nối tiếp RI SCON.0
Các loại cờ ngắt
- Các vectơ ngắt:
Khi chấp nhận ngắt, giá trị được nạp vào PC 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 :
Ngắt Cờ Địa chỉ vector
Reset hệ thống RST 0000H
Bên ngoài 0 IE0 0003H
Timer 0 TF0 000BH
32
Bên ngoài 1 IE1 0013H
Timer 1 TF1 001BH
Port nối tiếp TI và RI 0023H
Timer 2 002BH
Vector reset hệ thống (RST ở địa chỉ 0000H) được để trong bảng này vì theo
nghĩa này, nó giống ngắt: nó ngắt chương trình chính và nạp cho PC giá trị mới.
2.5.2. Giới thiệu về IC DS 1307
2.5.2.1. Tổng quan về DS1307
2.5.2.1.1. Sơ đồ chân DS1307
DS1307 là chip đồng hồ thời gian thực (RTC : Real-time clock), khái niệm thời
gian thực ở đây được dùng với ý nghĩa thời gian tuyệt đối mà con người đang sử
dụng, tính bằng giây, phút, giờ…DS1307 là một sản phẩm của Dallas
Semiconductor (một công ty thuộc Maxim Integrated Products). Chip này có 7 thanh
ghi 8-bit chứa thời gian là: giây, phút, giờ, thứ (trong tuần), ngày, tháng, năm. Ngoài
ra DS1307 còn có 1 thanh ghi điều khiển ngõ ra phụ và 56 thanh ghi trống có thể
dùng như RAM. DS1307 được đọc và ghi thông qua giao diện nối tiếp I2C nên cấu
tạo bên ngoài rất đơn giản. DS1307 xuất hiện ở 2 gói SOIC và DIP có 8 chân như
trong hình sau.
Hình 2.12 Hai gói cấu tạo của chip DS1307
33
Các chân của DS1307 được mô tả như sau:
- 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
- VBAT: 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ú ý: 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: Đây là chân tạo ngõ ra xung vuông 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 bit của
thanh ghi Control Register (địa chỉ 0x07).
- SCL và SDA là đường giữ xung nhịp và đường dữ liệu của giao diện I2C mà
chúng ta sẽ tìm hiểu sau.
34
2.5.2.1.2. Cấu tạo bên trong DS1307
Hình 2.13 Sơ đồ khối bên trong chip DS1307
Cấu tạo bên trong DS1307 bao gồm một số thành phần như mạch nguồn,
mạch dao động, mạch điều khiển logic, mạch giao điện I2C, con trỏ địa chỉ và các
thanh ghi (hay RAM). Do đa số các thành phần bên trong DS1307 là thành phần
“cứng” nên chúng ta không có quá nhiều việc khi sử dụng DS1307. Sử dụng
DS1307 chủ yếu là ghi và đọc các thanh ghi của chip này. Vì thế cần hiểu rõ 2 vấn
35
đề cơ bản đó là cấu trúc các thanh ghi và cách truy xuất các thanh ghi này thông qua
giao diện I2C
Như đã trình bày, bộ nhớ DS1307 có tất cả 64 thanh ghi 8bit được đánh địa
chỉ từ 0 đến 63 (từ 0x00h đến 0x3Fh). Tuy nhiên, thực chất chỉ có 8 thanh ghi đầu là
dùng cho chức năng “đồng hồ”, còn lại 56 thanh ghi bỏ trống có thể được dùng chứa
biến tạm như RAM nếu muốn. Bảy thanh ghi đầu tiên chứa thông tin về thời gian
của đồng hồ bao gồm: giây (SECONDS), phút (MINUETS), giờ (HOURS), thứ
(DAY), ngày (DATE),
Hình 2.14 Cấu tạo 7 thanh ghi đầu tiên
tháng (MONTH) và năm (YEAR). Việc ghi giá trị vào 7 thanh ghi này tương đương
với việc “cài đặt” thời gian khởi động cho RTC. Việc đọc giá từ 7 thanh ghi là quá
trình đọc thời gian thực mà RTC tạo ra.
Vì 8 thanh ghi đầu tiên là quan trọng nhất trong hoạt động của DS1307,
chúng ta sẽ khảo sát các thanh ghi này một cách chi tiết. Trước hết hãy quan sát tổ
chức theo từng bit của các thanh ghi này trong hình sau:
36
Chú ý là tất cả các giá trị thời gian lưu trong các thanh ghi theo dạng BCD
(Binary-Coded Decimal).
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 nên chỉ cần 3 là đủ. Bit cao nhất (bit thứ 7) trong thanh ghi này là 1
bit đ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ỉ 0x01h, 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 thứ 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
chip DS1307. Thanh ghi này có địa chỉ 0x02h. Trước hết 4 bit 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ờ là: 12h và 24h giờ, vì vậy bit thứ 6 được dùng để xác lập hệ thống giờ.
Nếu bit thứ 6 = 0 thì hệ thống 24h được chọn, khi đó 2 bit thứ 5 và thứ 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 nên cần 2 bit để mã hóa. Nếu bit thứ 6 = 1 thì hệ thống 12h
được chọn. Với trường hợp này chỉ có 1 bit thứ 4 dùng mã hóa chữ số hàng chục
của giờ, bit thứ 5 chỉ buổi trong ngày (AM hoặc PM). Bit thứ 5 = 0 là AM và bit thứ
5 = 1 là PM. Bit thứ 7 luôn bằng 0.
Hình 2.15 Tổ chức bộ nhớ trong DS1307
37
Thanh ghi thứ (DAY – ngày trong tuần): nằm ở địa chỉ 0x03h. Thanh ghi
DAY chỉ mang giá trị từ 1 đến 7 tương ứng từ Chủ nhật đến thứ 7 trong 1 tuần. Vì
thế, chỉ có 3 bit thấp trong thanh ghi này có nghĩa. Các bit còn lại luôn bằng 0.
Thanh ghi ngày (DATE – ngày trong tháng): nằm ở địa chỉ 0x04h. Thanh
ghi DATE mang giá trị từ 1 đến 31, chỉ có 5 bit đầu tiên là có nghĩa. Các bit còn lại
luôn bằng 0.
Thanh ghi tháng (MONTH): nằm ở địa chỉ 0x05h. Thanh ghi MONTH
mang giá trị từ 1 đến 12, chỉ có 4 bit đầu tiên là có nghĩa. Các bit còn lại bằng 0.
Thanh ghi năm (YEAR): nằm ở địa chỉ 0x06h. Thanh ghi YEAR mang giá
trị từ 0 đến 99. Chip DS1307 chỉ dùng cho 100 năm, nên giá trị năm chỉ có 2 chữ số,
phần đầu của năm do người dùng tự thêm vào.
Thanh ghi điều khiển (CONTROL REGISTER): có địa chỉ là 0x07h, thanh
ghi CONTROL REGISTER được dùng để điều khiển tần số xung vuông ở ngỏ ra
SQW/OUT. Giá trị các bít trong thanh ghi CONTROL REGISTER được biểu diển
như sau:
Bit 7_Output Control (OUT): dùng để kiểm soát mức logic tại SQW/OUT.
Bit 4_Square-Wave Enable (SQWE): bit này được set lên bằng 1 để tạo dao
động ở đầu ra.
Bits 1 and 0_ Rate Select (RS[1:0]): 2 bit này dùng điều khiển tần số dao
động ở ngỏ ra SQW/OUT, với 4 tần số được chọn như sau:
38
2.5.2.2. Khái quát giao diện I2C
I2C là viết tắc của từ Inter - Integrated Circuit là một chuẩn truyền thông nối
tiếp đồng bộ do hãng điện tử Philips Semiconductor sáng lập và xây dựng thành
chuẩn năm 1990.
Các khái niệm cơ bản trong giao diện I2C:
Master (chip chủ): là chip khởi động quá trình truyền nhận, phát đi địa chỉ
của thiết bị cần giao tiếp và tạo xung giữ nhịp trên đường SCL.
Slave (chip tớ): là chip có một địa chỉ cố định, được gọi bởi Master và phục
vụ yêu cầu từ Master.
SDA (Serial Data): là đường dữ liệu nối tiếp, tất cả các thông tin về địa chỉ
hay dữ liệu đều được truyền trên đường này theo thứ tự từng bit một. Chú ý
là trong chuẩn I2C, bit có trọng số lớn nhất (MSB) được truyền đi trước nhất.
SCL (Serial Clock): là đường xung giữ nhịp nối tiếp. I2C là chuần truyền
thông nối tiếp đồng bộ, cần có 1 đường tạo xung giữ nhịp cho quá trình truyền/nhận,
cứ mỗi xung trên đường giữ nhịp SCL, một bit dữ liệu trên đường SDA sẽ được lấy
mẫu (sample). Dữ liệu nối tiếp trên đường SDA được lấy mẫu khi đường SCL ở
mức cao trong một chu kỳ giữ nhịp, vì thế đường SDA không được đổi trạng thái
khi SCL ở mức cao (trừ điều kiện START và STOP). Chân SDA có thể được đổi
trạng thái khi SCL ở mức thấp.
Một giao tiếp I2C gồm có 2 dây: Serial Data (SDA) và Serial Clock (SCL).
SDA là đường truyền dữ liệu theo 2 hướng (từ master đến slave và ngược lại), còn
SCL là đường truyền xung đồng hồ chỉ truyền theo một hướng (từ master đến
slave).
Hình 2.16 Chế độ truyền trong giao tiếp I2C
39
Trong một giao diện I2C thì có một thiết bị là chủ (master) và một thiết bị là tớ
(slave). Tại sao lại có sự phân biệt này? Đó là vì trên một giao diện I2C thì quyền
điều khiển thuộc về thiết bị chủ. Thiết bị chủ nắm vai trò tạo xung đồng bộ cho toàn
hệ thống, khi giữa 2 thiết bị chủ/tớ giao tiếp thì thiết bị chủ có nhiệm vụ tạo ra xung
đồng bộ và quản lý đến thiết bị tớ trong suốt quá trình giao tiếp. Thiết bị chủ giữ vai
trò chủ động, còn thiết bị tớ giữ vai trò bị động trong quá trình giao tiếp.
Một giao diện I2C có thể hoạt động ở nhiều chế độ khác nhau:
- Một chủ một tớ (one master – one slave)
- Một chủ nhiều tớ (one master – multi slave)
- Nhiều chủ nhiều tớ (Multi master – multi slave)
Vài điều kiện cần biết khi thiết lập một giao tiếp I2C:
- Điều kiện START (gọi tắt là S): điều kiện START được thiết lập khi có
một sự chuyển đổi trạng thái từ cao xuống thấp tại SDA, khi SCL đang ở mức
cao (mức cao là 1, mức thấp là 0).
- Điều kiện STOP (gọi tắt là P): điều kiện STOP được thiết lập khi có một
sự chuyển đổi trạng thái từ thấp lên cao tại SDA, khi SCL đang ở mức cao.
- Điều kiện REPEAT START (bắt đầu lặp lại): khoảng giữa điều kiện
START và STOP là khoảng bận của đường truyền, các master khác không tác
động được vào đường truyền trong khoảng này. Trường hợp sau khi kết thúc
quá trình truyền/nhận mà master không gởi điều kiện STOP lại gởi thêm 1 điều
kiện START gọi là REPEAT START. Khả năng này thường được dùng khi
master muốn lấy dữ liệu liên tiếp từ các Slaves.
40
- Bit ACK: dùng để báo hiệu dữ liệu đã được nhận, bit ACK được tạo ra tại
thời điểm xung clock thứ 9 bằng cách kéo chân SDA xuống mức thấp.
- Bit NACK: dùng để báo hiệu dữ liệu đã bị lỗi hoặc byte truyền cuối cùng,
bit NACK cũng được tạo ra tại thời điểm xung clock thứ 9 bằng cách kéo chân SDA
lên mức cao.
Hình 2.18 Bit ACK/NACK trong giao diện I2C
Định dạng dữ liệu truyền:
Dữ liệu được truyền trên bus I2C theo từng bit, bit dữ liệu được truyền
đi tại mỗi sườn lên của xung đồng hồ trên đường dây SCL, quá trình thay đổi bit dữ
liệu xảy ra khi SCL đang ở mức thấp.
Hình 2.17 Mô tả điều kiện START, STOP và REPEAT
41
Hình 2.19 Quá trình truyền nhận 1 bit dữ liệu
Mỗi byte dữ liệu được truyền có độ dài là 8 bit. Số byte có thể truyền trong một
lần là không hạn chế. Mỗi byte được truyền đi theo sau là một bit ACK, bit có trong
số lớn nhất (MSB) sẽ được truyền đi đầu tiên, các bit kế tiếp sẽ được truyền đi lần
lượt. Sau 8 xung clock thì dữ liệu đã được truyền đi, ở xung clock thứ 9 thì bit ACK
được truyền đi báo hiệu đã nhận đủ 8 bits. Thiết bị truyền sau khi nhận được bit
ACK sẽ tiếp tục thực hiện quá trình truyền hoặc kết thúc.
Hình 2.30 Dữ liệu được truyền trên giao diện I2C
42
Một byte truyền đi có kèm theo bit ACK là điều kiện bắt buộc, nhằm đảm bảo
cho quá trình truyền nhận được chính xác. Khi không nhận được đúng địa chỉ hay
muốn kết thúc quá trình giao tiếp, thiết bị nhận sẽ gởi một xung Not_ACK (NACK)
để báo cho thiết bị chủ biết. Thiết bị chủ sẽ tạo ra xung STOP để kết thúc hay lặp lại
một xung START để bắt đấu quá trình mới.
2.5.2.3. Mode (chế độ) truyền dữ liệu giữa DS1307 và AT89S52
Trong giao tiếp I2C giữa DS1307 và 89S52 thì chip 89S52 đóng vai trò là một
master và DS1307 đóng vai trò là một slave. Do chỉ có một master và một chip giao
tiếp với nhau nên chỉ có 2 mode (chế độ) hoạt động giao tiếp giữa 2 chip này. Hai
mode đó là: Data Write (từ AT89S52 đến DS14307) và Data Read (từ DS1307 vào
AT89S52).
2.5.2.3.1. Mode Data Write (chế độ ghi dữ liệu).
Mode Data Write (chế độ truyền dữ liệu từ master đến slave) được dùng khi
xác lập giá trị ban đầu cho các thanh ghi thời gian hoặc dùng để canh chỉnh thời gian
cho chip DS1307. Cấu trúc truyền dữ liệu trong mode Data Write được mô tả như
hình sau:
Hình 2.31 Chế độ data write
Trước hết hãy nói về địa chỉ SLA (Slave Address) của chip DS1307 trong
mạng I2C, trên mạng I2C mỗi thiết bị sẽ có một địa chỉ riêng gọi là SLA. SLA được
tính theo lý thuyết chuẩn I2C sẽ có giá trị tối đa là 128 (do có 128 thiết bị trong 1
mạng I2C). Chip DS1307 là một Slave nên cũng có một địa chỉ SLA, giá trị này
43
được set cố định là 1101000b (68h). Do SLA của DS1307 cố định nên trong 1 mạng
I2C sẽ không thể tồn tại cùng lúc 2 chip này.
Quan sát hình trên ta thấy, đầu tiên master (AT89S52) sẽ gửi điều kiện START
đến Slave (DS1307), tiếp theo sau master sẽ là 7 bit địa chỉ SLA của slave (cố định
là: 1101000b). Do chế độ này là Data Write nên bit W = 0 và sẽ được gửi kèm sau
SLA. Bit ACK (A) được slave trả về cho master sau mỗi quá trình giao tiếp.
Tiếp theo sau địa chỉ SLA sẽ là 1 byte chứa địa chỉ của thanh ghi cần truy cập
(Word Address). Cần phân biệt địa chỉ của thanh ghi cần truy cập và địa chỉ SLA.
Như đã đề cập trên, địa chỉ của thanh ghi cần truy cập sẽ được lưu trong thanh ghi
địa chỉ (hay con trỏ địa chỉ), vì vậy byte dữ liệu đầu tiên sẽ được chứa trong thanh
ghi địa chỉ của DS1307.
Sau byte địa chỉ thanh ghi là một dãy các byte dữ liệu được ghi vào bộ nhớ của
DS1307. Byte dữ liệu đầu tiên sẽ được ghi vào thanh ghi có địa chỉ được chỉ định
bởi Word Address, sau khi ghi xong 1 byte thì Word Address tự động tăng nên các
byte tiếp theo sẽ được ghi liên tiếp vào DS1307 ở các thanh ghi kế sau. Số lượng
bytes dữ liệu cần ghi do master quyết định và không được vượt quá dung lương bộ
nhớ của DS1307. Quá trình ghi kết thúc khi master phát ra điều kiện STOP.
Chú ý: Sau khi ghi thành công 1 byte thì DS1307 sẽ trả lời lại bằng một bit ACK.
Nếu như byte được ghi vào là byte cuối cùng thì DS1307 sẽ trả lời lại bằng 1 bit
Not_ACK (NACK).
Nếu sau khi gửi byte Word Address, master không gửi các byte dữ liệu mà gửi
liền điều kiện STOP thì không có thanh ghi nào được ghi. Trường hợp này được
dùng để set địa chỉ Word Address để phục vụ cho quá trình đọc.
44
2.5.2.3.2. Mode Data Read (chế độ dọc dữ liệu)
Mode Data Read (chế độ truyền dữ liệu từ salve về master) được sử dụng khi
đọc thời gian thực từ DS1307 về AT89S52. Cấu trúc truyền dữ liệu trong mode Data
Write được mô tả như hình sau:
Hình 2.32 Chế độ Data Read
Nguyên tắc truyền trong chế độ Data Read cơ bản cũng giống như trong truyền
chế độ Data Write. Trong chế độ Data Read bit R = 1 sẽ được gửi kèm sau 7 bit
SLA. Sau đó liên tiếp các byte dữ liệu được truyền từ DS1307 đến AT89S52. Điểm
khác biệt trong cách bố trí dữ liệu của chế độ này so với chế độ Data Write là không
có byte địa chỉ thanh ghi dữ liệu nào được gửi đến. Tất cả các byte theo sau SLA+R
đều là dữ liệu đọc từ bộ nhớ của DS1307.
Lưu ý: dữ liệu được đọc tại thanh ghi được chỉ định bởi con trỏ địa chỉ, vì vậy muốn
đọc chính xác dữ liệu từ một địa chỉ nào đó, chúng ta cần thực hiện quá trình ghi giá
trị cho con trỏ định địa chỉ trước khi thực hiên quá trình đọc. Để ghi giá trị vào con
trỏ định địa chỉ chúng ta sẽ gọi chương trình Data Write với chỉ 1 byte được ghi sau
SLA+W như phần chú ý ở trên.
45
Resistor
2.5.3. CÁC LINH LIỆN KHÁC SỬ DỤNG TRONG MẠCH
2.5.3.1 Điện trở
Điện trở là đại lượng vật lý đặc trưng cho tính chất cản trở dòng điện của một
vật thể dẫn điện. Nó được định nghĩa là tỉ số của hiệu điện thế giữa hai đầu vật thể
đó với cường độ dòng điện đi qua nó
Trong đó:
Hình 2.33 Điện trở
U : là hiệu điện thế giữa hai đầu vật dẫn điện, đo bằng vôn (V).
I : là cường độ dòng điện đi qua vật dẫn điện, đo bằng ampe (A).
R : là điện trở của vật dẫn điện, đo bằng Ohm (Ω).
Ký hiệu:
Ứng dụng:
Điện trở được dùng để chế tạo ra địch mức điện áp giữa hai điểm khác nhau của
mạch.
46
2.5.3.2 Tụ điện
Tụ điện phẳng gồm hai bàn phẳng kim loại diện tích đặt song song và cách
nhau một khoảng d.
Tụ phân cực Tụ không phân cực
Hình 2.34 Tụ điện
Cường độ điện trường bên trong tụ có trị số:
E =
0
0 = 8.86.10-12 C2/ N.m2 là hằng số điện môi của chân không.
là hằng số điện môi tương đối của môi trường; đối với chân không = 1, giấy
tẩm dầu = 3,6; gốm = 5,5; mica = 4 5
2.5.3.3 Led 7 đoạn
2.5.3.3.1. Khái niệm cơ bản
Trong các thiết bị, để báo trạng thái hoạt động của thiết bị đó cho người sử
dụng với thông số chỉ là các dãy số đơn thuần, thường người ta sử dụng "led 7
đoạn". Led 7 đoạn được sử dụng khi các dãy số không đòi hỏi quá phức tạp, chỉ cần
hiện thị số là đủ, chẳng hạn led 7 đoạn được dùng để hiển thị nhiệt độ phòng, trong
47
các đồng hồ treo tường bằng điện tử, hiển thị số lượng sản phẩm được kiểm tra sau
một công đoạn nào đó...
Led 7 đoạn có cấu tạo bao gồm 7 led đơn có dạng thanh xếp theo hình và có
thêm một led đơn hình tròn nhỏ thể hiện dấu chấm tròn ở góc dưới, bên phải của led
7 đoạn.
8 led đơn trên led 7 đoạn có Anode(cực +) hoặc Cathode(cực -) được nối
chung với nhau vào một điểm, được đưa chân ra ngoài để kết nối với mạch điện. 8
cực còn lại trên mỗi led đơn được đưa thành 8 chân riêng, cũng được đưa ra ngoài
để kết nối với mạch điện. Nếu led 7 đoạn có Anode(cực +) chung, đầu chung này
được nối với +Vcc, các chân còn lại dùng để điều khiển trạng thái sáng tắt của các
led đơn, led chỉ sáng khi tín hiệu đặt vào các chân này ở mức 0. Nếu led 7 đoạn có
Cathode(cực -) chung, đầu chung này được nối xuống Ground (hay Mass), các chân
còn lại dùng để điều khiển trạng thái sáng tắt của các led đơn, led chỉ sáng khi tín
hiệu đặt vào các chân này ở mức 1.
Vì led 7 đoạn chứa bên trong nó các led đơn, do đó khi kết nối cần đảm bảo
dòng qua mỗi led đơn trong khoảng 10mA-20mA để bảo vệ led. Nếu kết nối với
nguồn 5V có thể hạn dòng bằng điện trở 330Ω trước các chân nhận tín hiệu điều
khiển.
48
Sơ đồ vị trí các led được trình bày như hình dưới:
Hình 2.35 Sơ đồ chân led 7 đoạn
Các điện trở 330Ω là các điện trở bên ngoài được kết nối để giới hạn dòng điện qua
led nếu led 7 đoạn được nối với nguồn 5V.
Chân nhận tín hiệu a điều khiển led a sáng tắt, ngõ vào b để điều khiển led b. Tương
tự với các chân và các led còn lại.
2.5.3.3.2. Kết nối với vi điều khiển
Ngõ nhận tín hiệu điều khiển của led 7 đoạn có 8 đường, vì vậy có thể dùng 1
Port nào đó của Vi điều khiển để điều khiển led 7 đoạn. Như vậy led 7 đoạn nhận
49
một dữ liệu 8 bit từ Vi điều khiển để điều khiển hoạt động sáng tắt của từng led led
đơn trong nó, dữ liệu được xuất ra điều khiển led 7 đoạn thường được gọi là "mã
hiển thị led 7 đoạn". Có hai kiểu mã hiển thị led 7 đoạn: mã dành cho led 7 đoạn có
Anode(cực +) chung và mã dành cho led 7 đoạn có Cathode(cực -) chung. Chẳng
hạn, để hiện thị số 1 cần làm cho các led ở vị trí b và c sáng, nếu sử dụng led 7 đoạn
có Anode chung thì phải đặt vào hai chân b và c điện áp là 0V(mức 0) các chân còn
lại được đặt điện áp là 5V(mức 1), nếu sử dụng led 7 đoạn có Cathode chung thì
điện áp(hay mức logic) hoàn toàn ngược lại, tức là phải đặt vào chân b và c điện áp
là 5V(mức 1).
Bảng mã hiển thị led 7 đoạn:
Phần cứng được kết nối với 1 Port bất kì của Vi điều khiển, để thuận tiện cho
việc xử lí về sau phần cứng nên được kết nối như sau: Px.0 nối với chân a, Px.1 nối
với chân b, lần lượt theo thứ tự cho đến Px.7 nối với chân h.
Dữ liệu xuất có dạng nhị phân như sau : hgfedcba
Bảng mã hiển thị led 7 đoạn dành cho led 7 đoạn có Anode chung (các led đơn
sáng ở mức 0):
Số hiển thị trên led
7 đoạn
Mã hiển thị led 7 đoạn dạng
nhị phân
Mã hiển thị led 7 đoạn dạng
thập lục phân
h g f e d c b a
0 1 1 0 0 0 0 0 0 C0
1 1 1 1 1 1 0 0 1 F9
2 1 0 1 0 0 1 0 0 A4
3 1 0 1 1 0 0 0 0 B0
50
4 1 0 0 1 1 0 0 1 99
5 1 0 0 1 0 0 1 0 92
6 1 1 0 0 0 0 1 0 82
7 1 1 1 1 1 0 0 0 F8
8 1 0 0 0 0 0 0 0 80
9 1 0 0 1 0 0 0 0 90
A 1 0 0 0 1 0 0 0 88
B 1 0 0 0 0 0 1 1 83
C 1 1 0 0 0 1 1 0 C6
D 1 0 1 0 0 0 0 1 A1
E 1 0 0 0 0 1 1 0 86
F 1 0 0 0 1 1 1 0 8E
- 1 0 1 1 1 1 1 1 BF
Bảng mã hiển thị led 7 đoạn dành cho led 7 đoạn có Cathode chung (các led đơn
sáng ở mức 1):
51
Số hiển thị trên led
7 đoạn
Mã hiển thị led 7 đoạn dạng
nhị phân
Mã hiển thị led 7 đoạn dạng
thập lục phân
0 0 0 1 1 1 1 1 1 3F
1 0 0 0 0 0 1 1 0 06
2 0 1 0 1 1 0 1 1 5B
3 0 1 0 0 1 1 1 1 4F
4 0 1 1 0 0 1 1 0 66
5 0 1 1 0 1 1 0 1 6D
6 0 1 1 1 1 1 0 1 7D
7 0 0 0 0 0 1 1 1 07
8 0 1 1 1 1 1 1 1 7F
9 0 1 1 0 1 1 1 1 6F
A 0 1 1 1 0 1 1 1 77
B 0 1 1 1 1 1 0 0 7C
C 0 0 1 1 1 0 0 1 39
D 0 1 0 1 1 1 1 0 5E
E 0 1 1 1 1 0 0 1 79
F 0 1 1 1 0 0 0 1 71
- 0 1 0 0 0 0 0 0 40
52
CHƯƠNG 3: XÂY DỰNG PHẦN MỀM ĐIỀU KHIỂN
HỆ THỐNG
3.1. LƯU ĐỒ CHƯƠNG TRÌNH CHÍNH
53
BEGIN
Khởi tạo giá trị
ban đầu
WRITE_CLOCK
READ_CLOCK
Hiển thị thời gian
ra led 7 đoạn
Khởi tạo giá trị
ban đầu
ALARM_CLOCK
TEST
Mở/tắt chuông
theo từng giờ
Tạo hiệu ứng khi
điều chỉnh
END
54
3.2. LƯU ĐỒ CHƯƠNG TRÌNH CON
3.2.1. Lưu đồ chương trình con “WRITE_CLOCK”
BEGIN
Gửi điều kiện
START
Gửi địa chỉ
Slave+W (0D0h)
Gửi 1byte địa chỉ
con trỏ (00h)
Ghi tất cả byte dữ liệu như
giây phút….thời gian báo
thức vào RTC
Gửi điều kiện
STOP
END
55
3.2.3. Lưu đồ chương trình con “ READ_CLOCK”
Đọc tất cả byte dữ liệu như
giây, phút… thời gian báo
thức từ RTC
END
BEGIN
Gửi điều kiện
START
Gửi địa chỉ
Slave+W (0D0h)
Gửi 1byte địa chỉ
con trỏ (00h)
Gửi điều kiện
STOP
Gửi điều kiện
START
Gửi địa chỉ
Slave+W (0D0h)
Gửi điều kiện
STOP
56
3.2.4. Lưu đồ chương trình con ghi 1 byte vào DS1307“SEND_BYTE”
NO YES
YES
YES NO
NO
BEGIN
RET
Tạo một xung nhip
tại chân SCL
Gán giá trị
BITCOUNT = 08
ACC.7 = = 0
SDA = 1 SDA = 0
Quay trái thanh ghi
A
LAST = = 0
Gửi bit NACK Gửi bit ACK
BITCOUNT = = 0
57
3.2.5. Lưu đồ chương trình con đọc 1 byte từ DS1307“READ_BYTE”
NO YES
YES
NO
BEGIN
END
Đưa dữ liệu từ SDA
vào cờ C
Gán giá trị: A = 00
BITCOUNT = 08
Quay trái thanh ghi A
có cớ nhớ C
LAST = = 0
Gửi bit NACK Gửi bit ACK
BITCOUNT = = 0
Tạo một xung nhip
tại chân SCL
YES
58
3.2.6. Lưu đồ chương trình con “ALARM_CLOCK_TEST”
HOUR= =ALL_HOUR
MINUTES= =ALL_MIUNTES
Kích hoạt hệ thống
âm thanh
MINUTES= =ALL_MIUNTES
Đọc thời gian thực
từ RTC
Hiển thị ra led 7
đoạn
Dừng kích hoạt hệ
thống âm thanh
END
NO
NO
YES
YES
YES
NO
BEGIN
59
3.2.7. Lưu đồ chương trình con “HIEU_UNG_CHINH”
YES
YES
YES
YES
YES
NO
NO
NO
NO
NO
BEGIN
END
R0 = = 20H
Tạo hiệu ứng chỉnh giờ
R0 = = 21H
Tạo hiệu ứng chỉnh phút
R0 = = 22H
Tạo hiệu ứng chỉnh giây
Tạo hiệu ứng chỉnh giờ báo thức
R0 = = 28H
Tạo hiệu ứng điều phút báo thức
R0 = = 27H
60
3.2.8. Lưu đồ chương trình con “TAT_MO_CHUONG”
BEGIN
R3 = = 0FFH
MINUTES = = 0
SECOND = = 0
Kích hoạt hệ thống âm
thanh
Tạo trễ khoảng 0.5 giây
Dừng kích hoạt hệ thống
âm thanh
END
NO
NO
NO
YES
YES
YES
61
3.2.9. Lưu đồ chương trình con “HIENTHI”
BEGIN
END
Chuyển sang mã BCD
Đưa nội dung biến HOUR vào
thanh ghi A
Xuất ra led 7 đoạn
Chuyển sang mã BCD
Đưa nội dung biến MINUTES vào
thanh ghi A
Xuất ra led 7 đoạn
Chuyển sang mã BCD
Đưa nội dung biến
ALK_MINUTE vào thanh ghi A
Xuất ra led 7 đoạn
62
3.4. PHẦN MỀM LẬP TRÌNH CHO VI ĐIỀU KHIỂN
3.4.1. Định hướng sử dụng ngôn ngữ lập trình
Với việc lập trình cho vi điều khiển 89S52. Chúng ta có thể sử dụng nhiều
phương pháp cũng như ngôn ngữ lập trình khác nhau cho vi điều khiển.
Có hai ngôn ngữ mà mọi người hay dung nhất đó là: Lập trình C cho vi điều khiển
98S52 và dùng lập trình ASM cho vi điều khiển 89S52.
Mỗi loại ngôn ngữ lập trình đều có phần khó và dễ khác nhau. Trong bài đồ án của
em, em sử dụng phương pháp lập trình bằng ASM cho vi điều khiển 89S52.
Sau đây là một số tập lệnh của ngôn ngữ lập trình ASM chi vi điều khiển 89S52.
3.4.2. Các nhóm lệnh
3.4.2.1. Các lệnh số học
63
64
3.4.2.2. Các lệnh logic
65
3.4.2.3. Các lệnh di chuyển dữ liệu
66
3.4.2.4. Các lệnh xử lý bit
67
3.4.2.5. Các lệnh rẽ nhánh
68
3.4.2.6. Các lệnh dịch và quay
69
3.4.2.7. Các lệnh làm việc với ngăn xếp
70
CHƯƠNG 4: CÀI ĐẶT VÀ HOÀN THIỆN HỆ THỐNG
4.1. PHẦN MỀM BIÊN DỊCH CHƯƠNG TRÌNH
Sử dụng phần mềm Keli C để viết chương trình điều khiển lập trình cho Vi
Điều Khiển 89S52.
4.1.1. Các bước cài đặt phần mềm Keli C
Đầu tiên, bạn chạy Files thực thi: Setup->Setup.exe, hiện lên:
71
Bạn chọn bản đầy đủ (Full Version)
Bấm Next để tiếp tục.
72
Bấm Yes để tiếp tục.
73
Tại đây, bạn chọn thư mục sẽ đặt chương trình Keil for 8051(uV2) và bấm
Next. Bạn dùng Serial Number như trong Files Help kèm theo.
74
Hiện bảng thông báo như trên, Bấm Next,
75
76
77
Cài đặt thành công, mở chương trình uV3, vào phần Help, bạn sẽ được:
78
79
4.1.2. Biên dịch ASM với Keil
Đầu tiên tạo 1 Project mới: Project/New Project. Đặt cho nó 1 cái tên: vidu
nhấn Enter.
Chọn chip cần dùng: Atmel/AT89S52
Nhấn Ok, nhấn Yes.
80
Ta được:
Để tạo được File .hex cần làm như sau:
Tạo File nguồn mới: File/New. Nhấn Save đặt cho nó 1 cái tên nhớ sau cái tên
phải có .c, ví dụ như: bai1.c
Sau đó bắt đầu như sau:
81
Rồi nhấn Add xong thì tắt hộp thoại đi.
Phần chuẩn bị đã xong. Bắt đầu lập trình. Sau khi lập trình xong nhấn F7 để
biên dịch. Nếu có lỗi thì chương trình sẽ thông báo ở dưới:
82
Chương trình báo là đã tạo File hex, 0 lỗi, 0 cảnh báo. Vậy là tốt, đôi khi có 1
vài Warning như ko có lỗi cũng ko sao vẫn ok(warning và có thể khai báo biến mà
ko dùng, có chương trình con chưa được gọi… tùy vào từng cảnh báo).
83
4.2. MÔ PHỎNG TRÊN PROTUERS
4.3. SƠ ĐỒ MẠCH IN
Sơ đồ khối hiển thị.
84
Khối vi xử lý.
Khối nút bấm.
85
4.4. MÔ HÌNH MẠCH THỰC TẾ
Sơ đồ nguyên lý và sơ đồ mạch in đã nêu ở trên. Sau khi có mạch in và các linh
kiện đầy đủ, sẽ tiến hành lắp ráp thành mạch hoàn chỉnh.
86
Mạch sau khi lắp giáp các linh kiện.
Sử dụng mạch nạp và phần mềm nạp để kết nối giữa máy tính và mạch đã lắp
ráp. Tùy từng mạch nạp mà có phần mềm nạp riêng.
Sau khi nạp xong chúng ta có thể test thử và cung cấp nguồn cho mạch hoạt
động. Và đây là kết quả:
Mạch hoàn chỉnh khi đã nạp chương trình
87
4.5. KIỂM TRA VÀ ĐÁNH GIÁ
4.5.1 Ưu Điểm
Sản phẩm lịch vạn niên điện tử có ưu điểm là đếm thời gian một cách chính
xác, thời gian vẫn được lưu khi bị mất điện. Sản phẩm đơn giản, gọn nhẹ dễ thi công
và lắp đặt. Giá thành sản phẩm rẻ. Mạch có thể ứng dụng ra ngoài cuộc sống rất
rộng rãi, có thể mang sản xuất công nghiệp.
Sản phẩm hoạt động trên dòng điện một chiều nên tiêu thụ rất ít điện năng.
4.5.2 Khuyết Điểm
-Mạch nhìn còn thô va xấu, tính thẩm mĩ chưa cao.
-Led hiển thị còn chưa sáng rõ.
- Khi chạy mạch đôi khi còn bị đơ, led không hoạt động.
4.5.3 Hướng Phát Triển
Sau khi hoàn thành song sản phẩm lịch vạn niên điện tử. Sản phẩm của em còn
ít tính năng. Sau đây là một số hướng phát triển cho đề tài này.
- Thêm phần hiển thị lịch âm.
- Thêm phần đo nhiệt độ môi trường.
- Xây dựng thêm phần điều khiển từ xa cho lịch vạn niên.
- Hiển thị được ngày tốt ngày xấu.
- Hệ thống chuông báo thêm bài hát,tiếng chim.
4.5.4 Kết Luận
Bài đồ án tốt nghiệp này giúp em hoàn thiện thêm kĩ năng làm viêc độc lập.
Giúp em vận dụng được hết các kĩ năng đã học được ở trên giang đường để áp dụng
vào. Bài đồ án tốt nghiệp đã mở ra cho em một hướng đi mới, giúp em làm quen dần
với việc làm đồ án. Để chuẩn bị tốt cho công việc sau này.
Bài đồ án tốt nghiệp cũng là một tài liệu tham khảo hữu ích cho các sinh viên
khóa sau.
88
TÀI LIỆU THAM KHẢO
[1] Th.Phạm Hùng Kim Khánh _ Giáo trình Vi Điều Khiển.
[2] Th.Trần Nhật Khải Hoàn, KS.Trần Hữu Danh.
_ Tài liệu hướng dẫn Thực Tập Vi Điều Khiển.
[3] Th.Lương Văn Sơn, KS.Nguyễn Khắc Nguyên.
_ Giáo trình MẠCH XUNG.
[4] Th.Nguyễn Trung Lập _ Giáo trình MẠCH SỐ.
[5] KS. Trương Văn Tám _ Giáo trình MẠCH TƯƠNG TỰ .
[6]
[7]
[8]