1. Giải thuật
1.1. Giải thuật chương trình chính
• Bước 1: Đọc thời gian thực từ RTC (chip DS1307)
• Bước 2: Hiển thị thời gian vừa đọc ra led 7 đoạn
• Bước 3: Kiểm tra thời gian báo thức
• Bước 4: Kiểm tra chế độ chuông báo theo từng giờ
• Bước 5: Tạo hiệu ứng chỉnh khi cài đặt giờ, sau đó quay lại bước 1.
1.2. Giải thuật chương trình con “WRITE_CLOCK”
• Gởi điều kiện START đến RTC
• Gởi tiếp địa chỉ Slave + W (0D0h)
• Gởi địa chỉ thanh ghi đầu tiên được chọn để ghi (00h: địa chỉ thanh ghi SECOND)
• Ghi tất cả các byte dữ liệu vào RTC như: giây, phút, giờ, thứ, ngày, tháng, năm, giá trị thanh ghi control và cuối cùng là thời gian báo thức
• Gởi điều kiên STOP và thoát.
Chú ý: Nếu không phải là lần ghi/đọc cuối cùng thì kéo biến LAST xuống mức thấp để gởi bit ACK, ngược lại đưa biến LAST lên cao để gởi bit Not_ACK (NACK).
1.3. Giải thuật chương trình con “READ_CLOCK”
• Gởi điều kiện START đến RTC
• Gởi tiếp địa chỉ Slave + W (0D0h).
• Gởi địa chỉ thanh ghi đầu tiên được chọn để ghi (00h: địa chỉ thanh ghi SECOND).
• Gởi điều kiện STOP.
• Gởi địa chỉ Slave + R (0D1h).
• Bắt đầu đọc lần lượt từng byte dữ liệu từ RTC. Đầu tiên là giây, phút, giờ, thứ, ngày, tháng, năm, giá trị thanh ghi control và cuối cùng là thời gian báo thức
• Gửi điều kiện STOP và thoát.
2. Lưu đồ
2.1. Lưu đồ chương trình chính
2.2. Lưu đồ chương trình con
BEGIN
Khởi tạo giá trị ban đầu Đọc thời gian
thực từ RTC
Hiển thị thời gian ra led 7 đoạn
Thời gian báo thức
Mở/tắt chuông theo từng giờ
Tạo hiệu ứng khi điều chỉnh
BEGIN
RET Gởi điều kiện
STOP Gởi điều kiện
START
Gởi địa chỉ Slave+W (0D0h)
Gởi 1 byte đị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
2.2.2. Lưu đồ chương trình con “READ_CLOCK”
BEGIN
Gởi điều kiện STOP Gởi điều kiện
START Gởi địa chỉ Slave+W (0D0h)
Gởi 1 byte địa chỉ con trở (00h)
Đọc tất cả byte dữ liệu như: giây, phút,....,thời gian báo thức từ RTC
Gởi điều kiện STOP Gởi điều kiện
START Gởi địa chỉ Slave+R (0D1h)
2.2.3. Lưu đồ chương trình con ghi 1 byte vào DS1307“SEND_BYTE” N Y Y Y N N 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 = =
2.2.4. Lưu đồ chương trình con đọc 1 byte từ DS1307“READ_BYTE”
N Y
Y N
BEGIN
Đư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
2.2.5. Lưu đồ chương trình con “ALARM_CLOCK_TEST” N N Y N Y Y BEGIN RET HOUR = = ALK_HOUR MINUTE = = ALK_MINUTE Kích hoạt hệ thống âm thanh MINUTE = = ALK_MINUTE Đọ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
2.2.6. Lưu đồ chương trình con “TAT_MO_CHUONG” N N N Y Y Y Y BEGIN R3 = = 0FFH MINUTE = = 0 Kích hoạt hệ thống âm thanh SECOND = = 0 Tạo trễ khoảng 0.5s Dừng kích hoạt hệ thống âm thanh
2.2.7. Lưu đồ chương trình con “HIEU_UNG_CHINH” Y Y Y Y Y N N N N N BEGIN 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
2.2.8. Lưu đồ chương trình con “HIENTHI”
BEGIN
Tách số BCD
Đưa nội dung biến HOUR vào thanh ghi A
Xuất ra led 7 đoạn
Tách số BCD
Đưa nội dung biến MINUTE vào thanh ghi A
Xuất ra led 7 đoạn
Tách số BCD Đưa nội dung biến
ALK_MINUTE vào thanh ghi A