LƯU ĐỒ VÀ GIẢI THUẬT CHƯƠNG TRÌNH

Một phần của tài liệu DO AN MON HOC THIẾT KẾ LỊCH VẠN NIÊN ĐIỆN TỬ (Trang 41 - 51)

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ờ (adsbygoogle = window.adsbygoogle || []).push({});

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 (adsbygoogle = window.adsbygoogle || []).push({});

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

Một phần của tài liệu DO AN MON HOC THIẾT KẾ LỊCH VẠN NIÊN ĐIỆN TỬ (Trang 41 - 51)