- Kiểu MODEM 91h 92h Kích th−ớc bản tin nhận từ Host(RxSize) 93h
B ản đồ bộ nhớ vựng chương trỡnh
5.3 Thiết kế các ch−ơng trình hệ thống
Khi thiết kế các hệ vi xử lý nhỏ, các ch−ơng trình th−ờng đ−ợc viết rồi nạp trong ROM. Với các ch−ơng trình nhỏ có thể sử dụng ROM trong vi điều khiển hoặc ROM ngoài.
Cũng t−ơng tự, với các ứng dụng nhỏ thì RAM trong đã có thể đáp ứng nhu cầu sử dụng. Nếu cần dung l−ợng lớn hơn ta phải sử dụng RAM ngoài. Vớ dụ dưới đõy là chương trỡnh hệ thống và địa chỉ trong ROM.
CHƯƠNG TRèNH HỆ THỐNG
S_Start(ColdStart): 0100h
Input: + Bấm nút Reset hoặc
+ Thực hiện lệnh jump địa chỉ 0000h (ít dùng), hoặc + Do yêu cầu của Host
Output: đến ch−ơng trình SPOST Call: Non
Ch−ơng trình Reset dùng để xác định cấu hình hệ thống theo số liệu cố định trong ROM. Tiếp theo ch−ơng trình sẽ thực hiện POST
S_POST: Là ch−ơng trình kiểm tra toàn bộ hệ thống nnnmh
Input: + SStart hoặc (nnnmh là một địa chỉ nào đú) + Host
Output: + Byte trạng thái SSt, địa chỉ 4Ah-RAM + Sáng các giá trị t−ơng ứng trên LED 7 thanh + SInit
Call_ SDislay Bao gồm :
+Kiểm tra các thanh ghi CPU và các Int.RAM bằng cách ghi vào ô đầu tiên và chuyển sang các ô tiếp theo cho đến hết các mã 00, 0ffh
55h và 0aah.
+ Kiểm tra thanh ghi trạng thái CPU, bằng cách set/clear các cờ trạng thái rồi nhảy ng−ợc lại. Ví dụ:
SETB C ;Set carry Flag JNC CPUErr ;Báo CPU có lỗi
+ Kiểm tra ROM bằng cách tính CheckSum 2 bytes rồi so với ROMBCC, địa chỉ ROM 104h và 105h
+ Kiểm tra các thanh ghi của cổng vào ra và các thiết bị ghép nối
S_Init(WarmStart/Restart): nnnnmh
Dùng để khởi tạo (Initializing) các thiết bị cho phù hợp cấu hình của hệ. Input: + SPOST hoặc
+ Host hoặc
+ Lệnh JMP đến SInit Output: Main Program
Call: SDisplay, Blinking Ready LED
Khởi tạo các thiết bị có tính mềm dẻo, nh− xác định format character và tốc độ cho đ−ờng truyền tin nối tiếp, nạp mode cho các mạch PPI cho phù hợp với cấu hình hệ thống đã định.
S_Main nnmnh
Là ch−ơng trình th−ờng trực của RTU: • Lấy số đo f, U, I
• Tính cosϕ, P, Q cất vào vùng nhớ • So sánh giá trị set point
Điều khiển đóng cắt tụ bù
• Hiển thị LED 7 segment (default hiện cosϕ)
Input: + SInit
+ Các Subroutine khác Output: Các Subroutine
Call: SDisplay, A_P, A_Q, A_cosϕ, A_f, A_FFC, A_ADC
S_Display (Subroutine ) nmnnh
Là ch−ơng trình : • Đổi 2 bytes giá trị từ các ô nhớ I_RAM chứa hoặc: f, P, Q, U, I, cosϕ, thành 3bytes BCD rồi chuyển vào 3 ô nhớ 5Dh, 5Eh, 5Fh
• Đổi 3 bytes BCD ở các ô nhớ này thành 6 bytesmã 7 đoạn cất vào 6 ô nhớ từ 30h đến 35h
• Đ−a 6 ô nhớ ra cổng PA để hiển thị trên 6 LED Input : + Từ các ch−ơng trình, các Subroutine
Output: + Về Smain + Về Caller Call Non
S_Rx (Ch−ơng trình phục vụ ngắt) mmnnh
Dùng để thu 1 gói tin có kích th−ớc theo ROMData 92h, cất vào RxBuff, RAM 36h đến 3Ah.
Input: I_S_Routine gọi khi có số liệu thu về
Output: SRxCheck để kiểm tra Format và BCC có phù hợp. Call ISR thu 1 char
Dùng bộ thanh ghi RB1
S_Tx (Ch−ơng trình phục vụ ngắt) mnnnh
Dùng để gửi 1 gói tin có kích th−ớc theo TxSize, địa chỉ ROMData 93h. Nội dung tin từ địa chỉ RAM OdB 4Ah .. 5Ch về host theo giao thức đã định
Input: + Các modul ch−ơng trình khác Output: + Caller
Call I_S_Routine phát 1 char dùng bộ thanh ghi RB2
S_RxCheck nnnn
Để kiểm tra cú pháp của câu lệnh và mã BCC sau đó báo về host tình hình nhận lệnh bằng 2 mã ACK(06h) hoặc (15h) của ASCII.