I. LƯU ĐỒ VÀ GIẢI THUẬT CHƯƠNG TRÌNH 1. Giải thuật 1.1. Giải thuật chương trình chính -
Bước 1:Truy xuất dữ liệu từ bộ biến đổi ADC
-
Bước 2: Hiển thị kết quả
-
Bước 3: Tạo hiệu ứng cho led đơn, sau đó quay lại bước 1
1.2. Giải thuật chương trình con “ TRUY_CAP_ADC” -
Tạo một xung từ thấp lên cao áp đến chân WR để ADC0804 bắt đầu quá trình chuyển đổi.
-
Chờ cho quá trình biến đổi được thực hiên xong (chân INTR xuống mức thấp).
-
Tạo một xung từ cao xuống thấp áp đến chân RD để đọc dữ liệu ra từ chip ADC0804.
-
Đưa đữ liệu vào thanh ghi R0 và thoát khỏi chương trình.
2. Lưu đồ 2.1. Lưu đồ chương trình chính
2.2. Lưu đồ chương trình con 2.2.1. Lưu đồ chương trình con “ TRUY_CAP_ADC”
2.2.2. Lưu đồ chương trình con “HIENTHI_1”
II. PHẦN MỀM DO NHIỆT ĐỘ (CODE_1)
Phần mềm đo nhiệt độ (Code_1) được lập trình bằng ngôn ngữ Assembler (ASM), soạn thảo và biên dịch bằng chương trình Keil Version. Nội dung Code_1 nằm ở thư mục phụ lục “trang 76”.
B. ĐỒNG HỒ THỜI GIAN THỰC VÀ BỘ ĐIỀU KHIỂN TỪ XA DÙNG REMOTE HỒNG NGOẠI.
I. LƯU ĐỒ VÀ GIẢI THUẬT CHƯƠNG TRÌNH 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 ngắt “GIAI_MA_REMOTE_SONY” -
Bước 1: Thiết lập giá trị thanh ghi A = 01000000B (40h)
-
Bước 2: Chờ cho tín hiệu lên (Đây là bit mã lệnh đầu tiên)
-
Bước 3: Chờ tín hiệu đi xuống
-
Bước 4: Chờ khoảng 900s
-
Bước 5: Đo mức tín hiệu
-
Bước 6: Nếu mức tín hiệu là mức cao thì bit nhận được là bit 0
- Thiết lập bit nhớ C = 0 (bit mã lệnh thu được)
- Quay phải có nhớ A, như vậy C sẽ được gửi vào MSB của A, LSB của A gửi vào C.
- Ban đầu, A = 01000000B thì sau khi quay ta có C = 0 và MSB của A là bit đầu tiên của mã lệnh.
- Như vậy sau 7 lần quay thì C = 1 và 7 bit bên trái của A sẽ chứa mã lệnh
- Kiểm tra bit nhớ C, nếu C = 1 nhảy tới bước 8, nếu C = 0 quay lại bước 3
-
Bước 7: Nếu mức tín hiệu là mức thấp thì bit nhận được là bit 1
- Thiết lập Bit nhớ C = 1 (bit mã lệnh thu được)
- Quay phải có nhớ A
- Kiểm tra bit nhớ C, nếu C = 1 nhảy tới bước 8, nếu C = 0 quay lại bước 2
-
Bước 8: Lúc này 7 bit mã lệnh chứa trong 7 bit bên trái của thanh ghi A : A = D6D5D4D3D2D1D00
Quay phải thanh ghi A thu được 7 bit mã lệnh nằm bên phải thanh ghi A
A = 0D6D5D4D3D2D1D0
Tạo trễ dài để chống nhiễu (chọn 0.1s)
-
Bước 9: Nhận dạng các phím được ấn:
- Nếu phím được ấn là KEY_ON_OFF thì mở chế độ điều chỉnh ngược lại thì nhảy đến bước 10.
- Nếu phím được ấn là KEY_NEXT hoặc KEY_BACK thì tăng hoặc giảm thanh ghi R0 một đơn vị cho mỗi lần ấn. Kế tiếp gọi chương trình để tạo ra hiệu ứng điều chỉnh tương ứng, sau đó nhảy đến bước 10.
- Nếu phím được ấn là các số thì chương trình “xử lý số” được gọi để chuyển các số được ấn vào biến được lựa chọn ở trên, ghi giá trị này vào RTC. Sau đó đọc và hiển thị các giá trị ra ngoài, cuối cùng nhảy đến bước 10.
- Nếu phím được ấn là KEY_ON_BELL / KEY_OFF_BELL thì tương ứng với việc mở/tắt chuông theo từng giờ, sau đó nhãy đến bước 10.
-
Bước 10: Tạo trể 0.1s và thoát khỏi ngắt
1.3. 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.4. 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 lại điều kiện START.
-
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 ngắt “GIAI_MA_REMOTE_SONY”
2.3. Lưu đồ chương trình con 2.3.1. Lưu đồ chương trình con “WRITE_CLOCK”
2.3.2. Lưu đồ chương trình con “READ_CLOCK”
2.3.3. Lưu đồ chương trình con ghi 1 byte vào DS1307“SEND_BYTE”
2.3.4. Lưu đồ chương trình con đọc 1 byte từ DS1307“READ_BYTE”
2.3.5. Lưu đồ chương trình con “ALARM_CLOCK_TEST”
2.3.6. Lưu đồ chương trình con “TAT_MO_CHUONG”
2.3.7. Lưu đồ chương trình con “HIEU_UNG_CHINH”
2.3.8. Lưu đồ chương trình con “HIENTHI_2”
Chia sẻ với bạn bè của bạn: |