Chức năng
|
--
|
--
|
--
|
--
|
--
|
A1 (8255A)
|
A0 (8255A)
|
,WR(8255A)
|
M ô hình phương pháp thu thập nhiệt độ:
Hình: Mô hình phương pháp thu thập nhiệt độ.
Mỗi cảm biến Si (i=0,7) trong khoảng nhiệt độ Ti đến Ti+1 qua bộ khuếch đại đệm vào chuẩn Ura tuyến tính theo nhiệt độ trong khoảng 0-5V, qua ADC biến thiên từ 0000.0000b đến 1111.1111b. Như vậy, khi nhiệt độ môi trường TX trong khoảng Ti đến Ti+1, các cảm biến S0 đến Si-1 đều cho giá trị 1111.1111b, các cảm biến Si+1 đến S7 đều cho giá trị 0000.0000b, còn cảm biến Si cho giá trị trung gian giữa 0000.0000b và 1111.1111b. Lấy tổng các giá trị này, ta biết được giá trị tuyến tính theo Tx.
b)Lưu đồ thuật toán chương trình:
Chú thích:
Sau khi chạy chương trình, hệ thống sẽ làm việc liên tục đến khi tắt nguồn cung cấp.
c)Đoạn mã chương trình:
TITLE Chuong trinh dieu khien dong co buoc theo nhiet do
.MODEL SMALL
.STACK 100H
.DATA
CWR DB 90h; 10010000b giá trị thiết lập mode cho 8255A
TGDL DW 378; Địa chỉ thanh ghi dữ liệu cổng song song
TGDK DW 37A; Địa chỉ thanh ghi điều khiển cổng song song
TGTT DW 379; Địa chỉ thanh ghi trạng thái cổng song song
VT DW 0; khởi tạo giá trị 0 cho biến chỉ báo nhiệt độ
Delta DW 26; biến điều khiển tốc độ động cơ
quay DW 00010001b; biến điều khiển động cơ quay
demxung DW 0; biến đếm xung CLK
Daucambien DB 0; biến chứa số liệu đầu cảm biến hiện thời
temp DB 0;
.CODE
MAIN PROC
OUT TGDK,111b; yêu cầu thanh ghi CWR chuẩn bị nhận dl
OUT TGDL,CWR; thiết lập mode cho 8255A
OUT TGDK,011b; yêu cầu PB chuẩn bị nhận dữ liệu
OUT TGDL,quay; cho động cơ bắt đầu khởi động
vonglap
IN AH, TGTT; lấy thanh ghi trạng thái
AND AH,10000b; chọn ra bit 4 (bit EOC của ADC)
CMP AH,10000b; so sánh với 1
JNE ADCchuaxong; nếu không =1 (ADC biến đổi chưa xong) thì chưa
;đọc nhiệt độ.
CALL Docnhietdo; nếu =1 (ADC đã biến đổi xong) thì đọc nhiệt độ
ADCchuaxong:
CALL Demxungclk; gọi thủ tục đếm xung CLK
CMP demxung,delta; so sánh biến đếm xung với biến điều khiển tốc độ
JNE khongquay; nếu chưa đếm đủ thì chưa cho động cơ nhảy tiếp
CALL Quaydongco; nếu đã đủ thì cho động cơ nhảy tiếp
MOV demxung,0; reset lại biến đếm xung
khongquay:
JMP vonglap;
Docnhietdo PROC NEAR
OUT 37A, 101b; yêu yêu cầu PC chuẩn bị nhận dữ liệu
OUT 00100000b; yêu cầu ADC chốt địa chỉ ra.
OUT 37Ah, 000b; yêu cầu PA chuẩn bị xuất dữ liệu
IN AX, 378h; nhận chỉ báo nhiệt độ từ đầu cảm biến
ADD VT, AX; cộng giá trị vào biến nhiệt độ
INC Daucambien;
CMP daucambien 8;
JNE alabel;
MOV daucambien,0; bắt đầu lại từ đầu cảm biến 0
ADD VT,227;
MOV AX,59712;
MOV DX,0;
DIV VT;
MOV delta,AX; suy ra delta=59712/(VT+227)
MOV VT,0; khởi tạo lại biến chỉ báo nhiệt độ
alabel:
RET
Quaydongco PROC NEAR
OUT TGDK,011b; yêu cầu PB chuẩn bị nhận dữ liệu
ROL quay;
OUT TGDL, quay; cho động cơ quay theo biến điều khiển quay
RET
Demxungclk PROC NEAR
IN AH, TGTT; lấy thanh ghi trạng thái vào AH
AND AH,1000b; lấy riêng bít 3 (bit CLK)
CMP temp,AH; so sánh trạng thái trước và trạng thái mới của CLK
JE boqua; nếu không có gi khác thì bỏ qua
CMP temp,1; nếu khác thì kiểm tra biến trạng thái trước
JNE khongdem; nếu trạng thái trước khác 1(=0) thì không đếm
INC demxung; nếu trạng thái trước = 1 (xung CLK nhảy từ 1 xuống 0) thì ;đếm.
khongdem:
MOV temp,AH
boqua:
RET
MAIN ENDP
END MAIN
Chia sẻ với bạn bè của bạn: |