Thủ tục tiến hành phân tích là thủ tục CK, đây là một thủ tục dùng thường xuyên trong quá trình điều khiển. Thủ tục này cĩ nhiệm vụ tạo một xung Ck cho mạch giãi mã điều khiển. Nĩ sẽ truyền tín hiệu điều khiển đến mạch điều khiển thơng qua Port A- Tùy theo ý nghĩa của từng cờ bit (DataA_Bit07, BA07) mà Data A được điều chế tương ứng.
Sơ đồ khối của thủ tục được trình bày như trên, sau đây là chương trình nguồn được viêt bằng ngơn ngữ PASCAL.
Dịng 1. ProceDure CK; Dịng 2. Var
Dịng 3. i:byte; Dịng 4. Begin
Dịng 5. DataA:=DataA and $C0; (*Xoa het du lieu, tru bit 06, 07*) Dịng 6. For i:=0 to 5 do
Dịng 7. If DataA_Bit[i]=True then DataA:=DataA or ($01 shl i); Dịng 8. DataA_Bit[0]:=False; Dịng 9. DataA_Bit[2]:=False; Dịng 10. DataA_Bit[4]:=False; DataB =Port B ResetData Star End
Dịng 11. Port[Add_Port[0]]:=DataA; Dịng 12. Delay(T_DL_CK); Dịng 13. Port[Add_Port[0]]:=DataA and $D5; Dịng 14. Delay(1); Dịng 15. End; Phân tích:
Dịng 1: Procedure CK; –Khai báo tên thủ tục, khi cầân gọi thủ tục này ta chỉ cần gọi tên trực tiếp trong chương trình chính (hay thủ tục hay hàm khác). Đây là một thủ tục khơng cĩ tham số.
Dịng 2: Var –Thơng báo: bắt đầu khai báo biến cục bộ.
Dịng 3: I:Byte; –Khai báo một biến tên là “I” kiểu Byte (chiều rộng từ dữ liệu là 08 bit). Biến này dùng cho con chạy của dịng For. Do giới hạn dịng chạy của dịng For chỉ là 6 bước nên chọn I kiểu byte (giá trị lớn nhất là 255).
Dịng 4: Begin –Khai báo bắt đầu phần chương trình của thủ tục. Dịng 5: DataA:=DataA and $C0; –Xĩa dữ liệu Data A, giữ lại giá trị
của hai bit 6 và 7 (DataA6: điều khiển động cơ DC1; DataA7: điều khiển động cơ DC1). Thực hiện điều này bằng cách AND dữ liệu DataA với giá trị $C0 (Giá trị thập lục phân: $C0 chuyển sang giá trị nhị phân là : 1100000B).
Dịng 6: For i:=0 to 5 do –Thực hiện lệnh tạo vịng lập trình tự “For … do”. Vịng lập này thực hiện 06 vịng để xét duyệt giá trị từ DataA_Bit[0] đến DataA_Bit[5].
Dịng 7: If DataA_Bit[i]=True then DataA:=DataA or ($01 shl i); – Lệnh xét điêu kiện, nếu trường hợp cờ DataA_Bit[I] đang trỏ đến bật (cĩ giá trị [True]) thì Bit tương ứng trong biến DataA bật lên giá trị [1]. Thực hiện việc chuyển đổi này bằng cách OR giá trị của biến DataA với giá trị 1 shl I.
Dịng 810: Các cờ DataA_Bit[0,2,4] được xĩa trạng thái bật trở về trạng thái tắt.
Dịng 11: Port[Add_Port[0]]:=DataA; –Gởi giá trị DataA ra Port A.
Dịng 12: Delay(T_DL_CK); –Chờ một khoảng thời gian T_DL_CK, thời gian này chính là thời gian xung dương của tín hiệu điều khiển (độ rộng xung dương).
Dịng 13: Port[Add_Port[0]]:=DataA and $D5; a –Tạo xung xuống cho tín hiệu xung nhịp CK bằng cách gởi ra Port A giá trị DataA sau khi đã AND với giá trị $D5 (11010101B).
Dịng 14: Delay(1); –Chờ khoảng thời gian 1 đơn vị thời gian của thủ tục Delay, thời gian này chính là thời gian xung âm tối thiểu của tín hiệu điều khiển (độ rộng xung âm).
Dịng 15: End; –Khai báo kết thúc thủ tục.
Thủ tục này được xây dựng trên sơ đồ khối và được nghiệm chứng qua thực tế. Kết quả: thủ tục hoạt động tốt theo yêu cầu.
* Phần chương trình điều khiển mẫu xin xem phụ lục B.