Chương 7: 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 độnghệthốngvà thực hiện chức
năng tựđộngbáo hiệu. Lưu đồ tổng quát như sau:
BẮT ĐẦU
CHỜ 1 PHÚT KHỞI ĐỘNGHỆ THỐNG
N THỜI GIAN
THỰC BẰNG THỜI ĐIỂM
BÁO HIỆU ?
Y
CÓ BÁO HIỆU Y
KHÔNG ?
N
XÓA SKIPTIME BÁO HIỆU
N
PHẢI HOTTIME
KHÔNG?
Y
XÓA HOTTIME
Hình 26 : LƯU ĐỒ TỔNG QUÁT CHƯƠNG TRÌNH MAIN
Khởi độnghệ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ự độngbáo hiệu.
Quá trình tựđộngbá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
LẤY GIỜBÁO HIỆU
KẾ
LẤY GIỜ, PHÚT
THỰC
ĐỊA CHỈ ĐẦU BẢNG
HOTTIME TRỪ 3
KHỞI ĐỘNGHỆ THỐNG
PHẢI EOFHT?
LẤY PHÚT BÁO HIỆU
PHẢI
EOFRT?
BẰNG GIỜ
THỰC?
BẰNG PHÚT
THỰC ?
CẤM NGẮT INT
LẤY ĐỊA CHỈ ĐẦU
BẢNG SKIPTIME TRỪ 2
PHÚT THAY
ĐỔI ?
LẤY PHÚT THỰC
LẤY ĐỊA CHỈ ĐẦU
BẢNG RESTIME TRỪ 3
Y
MINWT
Y
N
Y
N
N
Y
N
Y
N
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 Y
CẶP NHẬT SỐ SKIPTIME
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ò.
. 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. 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