Lưu Đồ Tổng Quát Chương Trình Main


103Dh

0FEh


103Ch

EOST

End Of Skiptime

103Bh

Phút Skiptime10


103Ah

Giờ Skiptime 10



............


1029h

Phút Skiptime 1


1028h

Giờ Skiptime 1


Có thể bạn quan tâm!

Xem toàn bộ 105 trang tài liệu này.

Ứng dụng CPU Z80 - Thiết kế và thi công hệ thống báo giờ tự động - 7

Hình 24: CẤU TRÚC BẢNG SKIPTIME

Cũng như Hottime, Skiptime là loại dữ liệu động. Vì vậy, khi Hệ Thống mới khởi động phải tạo bảng Skiptime gồm 10 Skiptime rỗng bởi giá trị 0FEh.

Mỗi Skiptime chỉ cấm báo hiệu một thời điểm trong ngày, nên sẽ bị xóa đi sau khi đã được sử dụng.

3.2.5-Mã chuông:

Mã chuông là số nhị phân 8 bit. Mỗi bit sẽ tác động lên mạch báo hiệu trong một giây theo thứ tự từ bit cao đến bit thấp. Mức cao sẽ làm cho mạch điều khiển báo hiệu hoạt động.

Các Restime có thể có mã chuông khác nhau, tùy mục đích báo hiệu của từng thời điểm. Mã chuông cho các Hottime đều giống nhau và thể hiện mục đích báo hiệu đột xuất. Người viết tạm thời qui định mã chuông như sau:

Mã chuông Restime có 2 kiểu:

Bắt đầu tiết học: 0ABh (10101011)

Kết thúc tiết học: 0CFh (11001111)

Mã chuông cho Hottime: 0B7h (10110111).

3.2.6- Các biến :

Ngoài các dữ liệu trên, còn sử dụng các biến để thuận lợi cho các chương trình, tên và địa chỉ như sau:

SPMASK EQU 1000h ; Mặt nạ che hiển thị thời gian thực.

; (1 : che )

HTSTA EQU 1001h ; Trạng thái bảng Hottime.

; Số Hottime có trong bảng.


SKTSTA EQU 1002h ; Trạng thái bảng Skiptime

; Số Skiptime có trong bảng

3.2.7- Phân chia vùng nhớ :

Trong không gian 6KB gồm 4KB ROM và 2KB RAM bộ nhớ của Hệ Thống được phân chia như sau:


17FEh

102Eh


STACK

103Dh

1028h


BẢNG SKIPTIME

1027h

1008h


BẢNG HOTTIME

1007h

1005h


THỜI GIAN THỰC

1004h

1000h


VÙNG ĐỆM

0FFFh

0FA0h


BẢNG RESTIME

0F9Fh

0000h


PHẦN MỀM


Hình 25: BẢNG PHÂN CHIA BỘ NHỚ

3.3- Các chương trình.

3.3.1-Chương trình MAIN:

Mô tả chương trình:

Chương trình MAIN được đặt vào vùng nhớ bắt đầu từ địa chỉ 0000h. Nó được thực hiện ngay khi hệ thống vừa được cấp điện. Chương trình MAIN sẽ khởi động hệ thống và thực hiện chức năng tự động báo hiệu. Lưu đồ tổng quát như sau:



CHỜ 1 PHÚT

N

THỜI GIAN

THỰC BẰNG THỜI ĐIỂM

BÁO HIỆU ?

Y

CÓ BÁO HIỆU

KHÔNG ?

Y

N

XÓA SKIPTIME

N

PHẢI HOTTIME KHÔNG?

Y

XÓA HOTTIME

KHỞI ĐỘNG HỆ THỐNG

BÁO HIỆU

BẮT ĐẦU

Hình 26 : LƯU ĐỒ TỔNG QUÁT CHƯƠNG TRÌNH MAIN


Khởi động hệ thống như sau:

Khởi động Stack ở địa chỉ 27FFh

Reset mạch báo hiệu : xuất ra giá trị 0h ở địa chỉ 3000h.

Xóa vùng nhớ từ 1000h đến 1007h bằng giá trị 00h.

Tạo bảng Hottime và Skiptime rỗng có địa chỉ từ 1008h đến 103Dh bằng giá trị 0FEh.


Chọn ngắt INT và cho phép ngắt.

Hiển thị thời gian thực đầu tiên 2 00 00 00.

Tự động báo hiệu.

Quá trình tự động báo hiệu được bắt đầu ngay sau khi khởi động hệ thống, quá trình này do một vòng lặp thực hiện, mỗi phút một lần.

_ Chương trình bắt đầu duyệt bảng Hottime và Restime để tìm một thời điểm báo hiệu bằng với thời gian thực, nếu không có chương trình quay về chờ thực hiện quá trình mới.

_ Nếu có thời điểm trùng với thời gian thực, chương trình sẽ duyệt bảng Skiptime. Nếu không có Skiptime bằng với thời gian thực và thứ là thứ 2 – 6 thì chương trình ra quyết định báo hiệu (nếu thời điểm báo hiệu đó là Restime). Nếu có Skiptime bằng với thời gian thực, nghĩa là thời điểm đó bị cấm báo hiệu, chương trình sẽ không báo hiệu và xóa Skiptime đó.

_ Sau khi báo hiệu hay xóa Skiptime xong chương trình sẽ xóa Hottime (nếu thời điểm báo hiệu là (Hottime) rồi trở về thực hiện quá trình mới.

_ Khi nhận quyết định báo hiệu, chương trình sẽ lấy mã chuông của thời điểm cần báo hiệu. Mỗi giây 1 bit trong byte mã chuông sẽ được truyền cho mạch báo hiệu theo thứ tự từ D7 đến D0, mức cao làm chuông reo. Sau cùng xuất cho mạch mức 0 để reset. Sau 9 giây chương trình hoàn tất việc báo hiệu.

Để phân biệt thời điểm báo hiệu là Restime hay Hottime, ta dùng một mã định hướng. Mã định hướng này nằm trong thanh ghi C:

Khi C = 0 ; định hướng Restime, C = 1; định hướng Hottime.

Vấn đề xóa Hottime và Skiptime:

Để bảng Hottime (Skiptime) vẫn giữ được cấu trúc là danh sách tuần tự sau khi xóa Hottime (Skiptime), phải thực hiện theo cách sau: dời những byte còn lại trong bảng kể từ sau khi Hottime (Skiptime) cần xóa đến địa chỉ của Hottime (Skiptime ) cần xóa.

Lưu đồ chi tiết chương trình MAIN


BẮT ĐẦU




KHỞI ĐỘNG HỆ THỐNG

LẤY GIỜ, PHÚT THỰC

Y

N

PHÚT THAY ĐỔI ?

LẤY GIỜ BÁO HIỆU KẾ

LẤY PHÚT THỰC

Y

PHẢI EOFHT?

N

Y

MINWT

PHẢI EOFRT?

N

N

BẰNG GIỜ THỰC?


Y

LẤY PHÚT BÁO HIỆU

N

BẰNG PHÚT THỰC ?


Y

ĐỊA CHỈ ĐẦU BẢNG

HOTTIME TRỪ 3

LẤY ĐỊA CHỈ ĐẦU BẢNG RESTIME TRỪ 3

CẤM NGẮT INT

LẤY ĐỊA CHỈ ĐẦU BẢNG SKIPTIME TRỪ 2


CÒN SKIPTIME ?

N

N

PHẢI T7 HAY CN ?

Y

Y

LẤY GIỜ SKIPTIME

PHẢI HOTTIME /

N

Y

N

BẰNG GIỜ THỰC ?

LẤY MÃ CHUÔNG

Y


LẤY PHÚT SKIPTIME

LẤY GIÂY THỰC

N

BẰNG PHÚT THỰC ?


Y

N

CÓ THAY ĐỔI ?

XÓA SKIPTIME

CẶP NHẬT SỐ SKIPTIME

Y


XUẤT RA MẠCH BÁO HIỆU DỊCH TRÁI MÃ CHUÔNG

N

DỊCH ĐỦ 9 BIT CHƯA ?

Y

PHẢI HOTTIME ?

N

Y

XÓA HOTTIME

CAP NHẬT SỐ HOTTIME

HÌnh 27 : LƯU ĐỒ CHI TIẾT CHƯƠNG TRÌNH MAIN


3.3.2- Chương trình RTP (Realtime program).

Mô tả chương trình .

Chương trình được đặt ở địa chỉ 0066h đáp ứng cho ngắt NMI. Tần số gọi ngắt là 1Hz. Khi được gọi, chương trình RTP thực hiện như sau:

Tăng giây thêm 1. Khi giây = 60 phải tăng phút thêm 1 và cho giây bằng 0. Khi phút = 60 phải tăng giờ thêm 1 và cho phút bằng 0.

Khi giờ = 24 phải tăng thứ thêm 1 và gán giờ bằng 0. Khi thứ = 8 phải gán thứ = 2

Khi giây thực có sự thay đổi, phải tham khảo DPMASK để quyết định việc hiển thị thời gian thực:

Nếu DPMASK = 0 ; Hiển thị DPMASK = 1 ; Không hiển thị.

Lưu đồ chi tiết chương trình RTP


BẮT ĐẦU



CẤT AF, BC, DE, HL VÀO STACK


GIÂY + 1


GIÂY = 60 ? N


Y


GIÂY = 0, PHÚT + 1


PHÚT = 60 ? N


Y


PHÚT = 0, GIỜ + 1


GIỜ = 24 ? N


Y


GIỜ = 0, THỨ + 1


THỨ = 9 ? N


Y THỨ = 2


Y CÓ CHE HIỂN THỊ ?


N


HIỂN THỊ THỜI GIAN THỰC


HỒI PHỤC AF, BC, DE, HL


KẾT THÚC Hình 28 : LƯU ĐỒ CHƯƠNG TRÌNH RTP

3.3.3-Chương trình Settime.

Ngày đăng: 08/09/2023