CHƯƠNG III: Phần mềm………………………………………………………

Một phần của tài liệu Đồ án tốt nghiệp lập trình điều khiển thiết bị bay bằng máy tính (Trang 81 - 98)

1. Giới thiệu:

Phần cứng đó là những gì đã cố định, nó là một cỗ máy, cỗ máy muốn hoạt động thì phải có công nhân lành nghề điều khiển nó, với cùng một cỗ máy nhưng người công nhân có tay nghề cao thì sản phẩm càng có chất lượng. Từ đó chúng ta nhận thấy rằng, phần cứng muốn hoạt động được đòi hỏi phải có sự can thiệp của con người mà chủ yếu là thông qua phần mềm điều khiển và sự hoạt động mềm dẻo của phần cứng lại phụ thuộc vào trình độ người lập trình. Như vậy, phần mềm và phần cứng tuy là hai bộ phận hoạt động độc lập nhưng hoạt động của chúng không thể tách rời nhau trong cùng một hệ thống, chúng hỗ trợ lẫn nhau để hình thành nên hoạt động của hệ thống.

Biết được tầm quan trọng của phần mềm, chúng ta sẽ vận dụng phần cứng để các chương trình phần mềm phục vụ mụch đích của chúng ta.

2. Giới thiệu ngôn ngữ Assembly:

Khi máy tính thực hiện chương trình, nó đọc một dãy các số nhị phân chỉ gồm toàn các số 0 và 1 vào bộ nhớ, giải mã rồi hiển thị. Để cho dễ đọc và dễ viết hơn thường ta viết các số nhị phân dưới dạng các số thập lục phân được gọi là chương trình viết bằng ngôn ngữ máy. Dùng kí tự “A” hay “B”.để ra lệnh cho vi xử lí thực hiện một chương trình đã được viết sẵn.

Tuy chương trình có thể viết trực tiếp bằng ngôn ngữ máy, nhưng nếu trong chương trình có một lỗi nào đó, hoặc muốn thêm hoặc xoá một mã lệnh nào đó có điạ chỉ đi kèm như jump, call, loop … cũng phải được tính toán lại cho đúng địa chỉ, nên rất khó cho việc lập, sửa và bảo trì chương trình. Vì vậy thay vì viết trực tiếp bằng ngôn ngữ máy, người lập trình có thể viết bằng một ngôn ngữ dưới dạng các ký hiệu hình thức hoặc các từ gợi nhớ tương đương với một lệnh của CPU. Đây chính là Hợp Ngữ (Assembly Language).

Hợp ngữ (Assembly Language) là ngôn ngữ lập trình cấp thấp gần với ngôn ngữ máy. Assembly là chương trình dịch các chương trình viết bằng hợp ngữ sang mã máy.

Sau đây là chương trình nạp vào vi xử lý:

#include <sfr51.inc> ;PCON EQU 87H

ORG 00H

BAUD_RATE:

MOV TMOD,#20H ;Enable reception

;Set Serial port mode to 8-bit UART MOV SCON,#53H ;Set baudrate to 9600 at 11.0592MHz MOV TH1,#0FDH

MOV TL1,#0FDH

SETB TR1 ;Start Timer

MAIN: MOV P0,#01111111B ; MAIN

CJNE A,#'A',D1 ; LENH MO DEN LCALL TRIPLE10

D1: CJNE A,#'C',D2 ;LENH MO QUAT LCALL TRIPLE30

D2: CJNE A,#'E',S ;LENH MO CUA LCALL MOTOR

S: CJNE A,#'S',D3 ;LENH SOS LCALL SOS

D3: LJMP MAIN

;####################READ########################## READ:

;Wait for Receive interrupt flag JNB RI,$

;If falg is set then clear it CLR RI

;Then read data from SBUF MOV A,SBUF

RET

;######################MOTOR################### MOTOR: MOV P0,#11111011B ;MO CUA MOV P1,#11111011B

LCALL DEL LCALL MOTOR1 (adsbygoogle = window.adsbygoogle || []).push({});

MOTOR1: MOV P0,#11111111B ;MO CUA XONG MOV P1,#11111111B

LCALL READ

CJNE A,#'F',MOTOR2 ;LENH DONG CUA LCALL MOTOR5

MOTOR2: CJNE A,#'A',MOTOR3 ;LENH MO DEN LCALL TRIPLE20

MOTOR3: CJNE A,#'C',MOTOR4 ;LENH MO QUAT LCALL TRIPLE40

MOTOR4: CJNE A,#'S',S1 ; LENH SOS LCALL SOS S1: LJMP MOTOR1 MOTOR5: MOV P0,#11110111B MOV P1,#11110111B LCALL DEL LJMP MAIN ;######################TRIPLE###################

TRIPLE1: MOV P0,#11110110B ;mo den va dong cua MOV P1,#11110110B

LCALL DEL LCALL TRIPLE10

TRIPLE10: MOV P0,#11111110B ;DONG CUA XONG, CON DEN DANG SANG MOV P1,#11111110B

LCALL READ

CJNE A,#'B',TRIPLE11 LJMP MAIN

TRIPLE11: CJNE A,#'C',TRIPLE12 LJMP TRIPLE60

TRIPLE12: CJNE A,#'E',S13 LCALL TRIPLE2

S13: CJNE A,#'S',TRIPLE13 LCALL SOS

TRIPLE13: LJMP TRIPLE10

TRIPLE2: MOV P0,#11111010B ;MO DEN, MO CUA MOV P1,#11111010B

LCALL DEL LCALL TRIPLE20

TRIPLE20: MOV P0,#11111110B ;MO CUA XONG, DEN VAN SANG MOV P1,#11111110B

LCALL READ

CJNE A,#'B',TRIPLE21 LJMP MOTOR1

TRIPLE21: CJNE A,#'C',TRIPLE22 LJMP TRIPLE50

TRIPLE22: CJNE A,#'F',S23 LCALL TRIPLE1

S23: CJNE A,#'S',TRIPLE23 LCALL SOS

TRIPLE23: LJMP TRIPLE20

TRIPLE3: MOV P0,#11110101B ;DONG CUA, MO QUAT MOV P1,#11110101B

LCALL DEL LCALL TRIPLE30

TRIPLE30: MOV P0,#11111101B ;DONG CUA XONG, QUAT VAN MO MOV P1,#11111101B

LCALL READ

CJNE A,#'D',TRIPLE31 LJMP MAIN

TRIPLE31: CJNE A,#'A',TRIPLE32 LJMP TRIPLE60 (adsbygoogle = window.adsbygoogle || []).push({});

TRIPLE32: CJNE A,#'E',S33 LCALL TRIPLE4

S33: CJNE A,#'S',TRIPLE33 LCALL SOS

TRIPLE4: MOV P0,#11111001B ;MO QUAT MO CUA MOV P1,#11111001B

LCALL DEL LCALL TRIPLE40

TRIPLE40: MOV P0,#11111101B ;MO CUA XONG, QUAT VAN MO MOV P1,#11111101B

LCALL READ

CJNE A,#'D',TRIPLE41 LJMP MOTOR1

TRIPLE41: CJNE A,#'A',TRIPLE42 LJMP TRIPLE50

TRIPLE42: CJNE A,#'F',S43 LCALL TRIPLE3

S43: CJNE A,#'S',TRIPLE43 LCALL SOS

TRIPLE43: LJMP TRIPLE40

TRIPLE5: MOV P0,#11111000B ;MO DEN, QUAT, CUA MOV P1,#11111000B

LCALL DEL LCALL TRIPLE50

TRIPLE50: MOV P0,#11111100B ; den quat van sang MOV P1,#11111100B

LCALL READ

CJNE A,#'D',TRIPLE51 ; TAT QUAT, DEN SANG LJMP TRIPLE20

TRIPLE51: CJNE A,#'B',TRIPLE52 ;TAT DEN, QUAT VAN CHAY LJMP TRIPLE40

TRIPLE52: CJNE A,#'F',S53 LCALL TRIPLE6

S53: CJNE A,#'S',TRIPLE53 LCALL SOS

TRIPLE53: LJMP TRIPLE50

TRIPLE6: MOV P0,#11110100B ; DONG CUA, DEN QUAT VAN SANG MOV P1,#11110100B

LCALL DEL LCALL TRIPLE60

TRIPLE60: MOV P0,#11111100B ; DONG CUA XONG,DEN QUAT VAN SANG MOV P1,#11111100B

LCALL READ

CJNE A,#'D',TRIPLE61 ; TAT QUAT, DEN SANG LJMP TRIPLE10

TRIPLE61: CJNE A,#'B',TRIPLE62 ;TAT DEN, QUAT VAN CHAY LJMP TRIPLE30

TRIPLE62: CJNE A,#'E',S63 LCALL TRIPLE5 S63: CJNE A,#'S',TRIPLE63 LCALL SOS TRIPLE63: LJMP TRIPLE60 ;################### SOS ##################### SOS: MOV P0,#11111111B

MOV P1,#11111111B LCALL READ CJNE A,#'O',SOS1 LJMP MAIN SOS1: LJMP SOS ;################### Delay 3s ##################### DEL: MOV R5,#150 DEL3: mov r6,#100 DEL1: mov r7,#120 DEL2: djnz r7,DEL2 djnz r6,DEL1 DJNZ R5,DEL3 RET END

3. Giới thiệu ngôn ngữ CCS:

- Chương trình CCS dùng cho tài liệu này là PCW COMPILER version 3.07 (2001 ) hoặc 3.222 (2004) , bao gồm : PCB , PCM và PCH . Phiên bản mới nhất là 3.227 có nhiều hàm mới và chức năng mới , cập nhật mới . Lập trình cho các họ PIC 12 bit , 14 bit và PIC 18 . (adsbygoogle = window.adsbygoogle || []).push({});

- Để viết 1 chương trình C mới : chạy CCS , vào New để tạo 1 file C mới . Trên thanh toolbar : - Chọn “Microchip 12 bit” để viết chương trình cho PIC 12 bit . “Microchip 14 bit” để viết chương trình cho PIC 14 bit . “Microchip PIC18” để viết chương trình cho PIC18 .

- Chọn “Compiler” để biên dịch chương trình bạn đang viết.

- CCS là trình biên dịch dùng ngôn ngữ C lập trình cho VĐK . Đây là ngôn ngữ lập trình đầy sức mạnh , giúp bạn nhanh chóng trong việc viết chương trình hơn so với ngôn ngữ Assembly .

- Mặt khác , nó sinh mã không theo ý muốn ( dù không sai , ví dụ như sinh nhiều mã lệnh không quan trọng khi thực thi hàm ngắt ) làm chậm tốc độ thực thi chương trình nếu bạn đòi hỏi chương trình xử lý với tốc độ cao , ví dụ như điều chế PWM .

- Nhưng CCS C cho phép bạn phối hợp ASSEMBLY cùnh với C , điều này cho phép chương trình của bạn sẽ trở nên rất uyển chuyển , kết hợp được sức mạnh của cả 2 ngôn ngữ , dù rằng việc phối hợp sẽ làm cho việc viết chương trình trở nên khó khăn hơn .

- CCS cung cấp các công cụ tiện ích giám sát hoạt động chương trình như : C/ASM list : cho phép xem mã ASM của file bạn biên dịch , giúp bạn quản lý mã và nắm được các thức mã sinh ra và nó chạy như thế nào , là công cụ rất quan trọng , bạn có thể gỡ rối chương trình và nắm được hoạt động của nó ; SYMBOL hiển thị bộ nhớ cấp phát cho từng biến , giúp quản lý bộ nhớ các biến chương trình ,. . . CallTree hiển thị phân bổ bộ nhớ .

Sau đây là chương trình nạp cho PIC:

#include <16f877a.h> //Device #fuses xt,nowdt,noprotect,noput,nolvp //Fuses #use delay (clock=4000000) //4.00 MHz

#include <mylcd.c> //LCD driver #include <1wire.h>

int i,read_ok; byte buffer[8]; float t,t1;

main() { lcd_init(); //LCD start while(true) { init_1wire();

write_1wire(0xcc); //skip ROM write_1wire(0x44); //convert T

init_1wire();

write_1wire(0xcc); //skip ROM write_1wire(0xbe); //read scratchpad for(i=0;i<8;i++)

{

buffer[i]=read_1wire(); read_ok=1;

}

t=make16(buffer[1],buffer[0]); //calculate temperature

t=(float)t/16.0; //Calculation 0.1 deg C resolution lcd_gotoxy(2,2); if(t>=20&&t<=30.0) printf(lcd_putc,"mat! "); else if(t<20) printf(lcd_putc,"lanh! "); else if(t>30.0&&t<40.0) printf(lcd_putc,"nong! "); else if(t>=40.0) printf(lcd_putc,"chay! "); if(t>=60) output_c(0b111111); else if(t>=20&&t<29.0) output_c(0b000000); else output_c(0b000000); lcd_gotoxy(1,1); printf(lcd_putc,"nhietdo=%3.1f\'C",t); delay_ms(1000); } }

4. Giới thiệu MATLAB:

MATLAB là một môi trường tính toán số và lập trình, được thiết kế bởi công ty MathWorks. Matlab cho phép tính toán số với ma trận, vẽ đồ thị hàm số hay biểu đồ thông tin, thực hiện thuật toán, tạo các giao diện người dùng và liên kết với những chương trình máy tính viết trên nhiều ngôn ngữ lập trình khác. Sau đây là chương trình lập trình xuất dự liệu cho MATLAB:

( http://www.picvietnam.com/forum/showthread.php?t=752 địa chỉ tham khảo) function varargout = buttonA(varargin)

% Begin initialization code - DO NOT EDIT gui_Singleton = 1;

gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ...

'gui_OpeningFcn', @buttonA_OpeningFcn, ... 'gui_OutputFcn', @buttonA_OutputFcn, ... 'gui_LayoutFcn', [] , ...

'gui_Callback', []); if nargin && ischar(varargin{1})

gui_State.gui_Callback = str2func(varargin{1}); end

if nargout

[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); else

gui_mainfcn(gui_State, varargin{:}); end (adsbygoogle = window.adsbygoogle || []).push({});

% End initialization code - DO NOT EDIT

% --- Executes just before buttonA is made visible.

function buttonA_OpeningFcn(hObject, eventdata, handles, varargin) % This function has no output args, see OutputFcn.

% hObject handle to figure

% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % varargin command line arguments to buttonA (see VARARGIN) % Choose default command line output for buttonA

handles.output = hObject; % Update handles structure guidata(hObject, handles);

% UIWAIT makes buttonA wait for user response (see UIRESUME) % uiwait(handles.figure1);

% --- Outputs from this function are returned to the command line. function varargout = buttonA_OutputFcn(hObject, eventdata, handles) % varargout cell array for returning output args (see VARARGOUT); % hObject handle to figure

% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Get default command line output from handles structure varargout{1} = handles.output;

% --- Executes on button press in pushbutton1.

cong=serial('COM5'); set(cong,'BaudRate',9600); fopen(cong);

fprintf(cong,'%c','A'); fclose(cong);

% hObject handle to pushbutton1 (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % --- Executes on button press in pushbutton2.

function pushbutton2_Callback(hObject, eventdata, handles) %function love1 cong=serial('COM5'); set(cong,'BaudRate',9600); fopen(cong); fprintf(cong,'%c','B'); fclose(cong);

% hObject handle to pushbutton2 (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % --- Executes on button press in pushbutton3.

function pushbutton3_Callback(hObject, eventdata, handles) %function love1 cong=serial('COM5'); set(cong,'BaudRate',9600); fopen(cong); fprintf(cong,'%c','C'); fclose(cong);

% hObject handle to pushbutton3 (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % --- Executes on button press in pushbutton4.

function pushbutton4_Callback(hObject, eventdata, handles) %function love1 cong=serial('COM5'); set(cong,'BaudRate',9600); fopen(cong); fprintf(cong,'%c','D'); fclose(cong);

% hObject handle to pushbutton4 (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % --- Executes on button press in pushbutton5.

function pushbutton5_Callback(hObject, eventdata, handles) cong=serial('COM5');

fopen(cong);

fprintf(cong,'%c','E'); fclose(cong);

% hObject handle to pushbutton5 (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % --- Executes on button press in pushbutton6.

function pushbutton6_Callback(hObject, eventdata, handles) cong=serial('COM5');

set(cong,'BaudRate',9600); fopen(cong); (adsbygoogle = window.adsbygoogle || []).push({});

fprintf(cong,'%c','F'); fclose(cong);

% hObject handle to pushbutton6 (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)

% --- Executes on button press in pushbutton8.

function pushbutton8_Callback(hObject, eventdata, handles) cong=serial('COM5');

set(cong,'BaudRate',9600); fopen(cong);

fprintf(cong,'%c','S'); fclose(cong);

% hObject handle to pushbutton8 (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % --- Executes on button press in pushbutton9.

function pushbutton9_Callback(hObject, eventdata, handles) cong=serial('COM5');

set(cong,'BaudRate',9600); fopen(cong);

fprintf(cong,'%c','O'); fclose(cong);

% hObject handle to pushbutton9 (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)

CHƯƠNG IV:

ĐIỀU KHIỂN

I/ Giao diện MATLAB điều khiển thông qua máy tính:

- Chú thích:

. Mô hình điều khiển bao gồm 3 thiết bị: đèn, quạt, cửa.

. Mô hình điều khiển có 2 chế độ : Enable (cho phép điều khiển) và Disable (không cho phép điều khiển).

. Các thành phần phụ trợ: Đèn cửa (tự động bật tắt), Nhiệt độ (cảnh báo cháy).

III/ Điều khiển thông qua mạng LAN:

. Máy Server:

- IP: 192.168.1.3 . Máy Client:

- IP: 192.168.1.4

1. Cấu hình trên máy Server:

- My computer >>> Propertise >>> Remote >>> Check : Allow user to connect remotely to this computer >>> Nhấn : Select Remote user

2. Cấu hình trên máy Client:

- Nhập địa chỉ IP máy cần điều khiển

IV/ Điều khiển thông qua mạng Internet: (adsbygoogle = window.adsbygoogle || []).push({});

- Ngoài những bước trên , cần cấu hình NAT Server trên Modem

- Tải phần mềm Client của No-ip

. Khi cần Request IP ta nhờ Server của NO-ip phân giải Host đã đăng kí

Phần C: Tổng Kết Đánh giá kết quả thi công

Với sự phát triển đến mức tiên tiến của KHKT như hiện nay, đặc biệt là lĩnh vực điện tử và vi tính đã làm tiền đề cho mọi ngành khoa học khác dễ dàng phát triển – sự phát triển vũ bão đó luôn đeo đuổi hoài bảo duy nhất – phục vụ con người. Kết quả, mỗi ứng dụng trong cuộc sống con người luôn sẵn sàng thừa hưởng những tinh hoa đó, nhằm nâng cao năng suất lao động, nâng cao cuộc sống con người, không ngừng thúc đẩy xã hội về mọi mặt.

Để tiếp cận với lĩnh vực tự động hoá, đặc biệt là lĩnh vực truyền dữ liệu nên em bắt đầu nghiên cứu lĩnh vực này và thực hiện đề tài : “Điều khiển thiết bị từ xa thông qua máy tính” với những thành quả nhất định trong thi công:

_ Viết chương trình giao tiếp giữa Vi Điều Khiển AT89C51 và Máy Vi Tính.

_ Mạch giao tiếp giữa Vi Điều Khiển AT89C51 và Máy Vi Tính thông qua port giao tiếp nối tiếp. Mặc dù đã cố gắng nhiều vẫn không tránh được những thiếu sót: chưa hoàn thành được chương trình truyền dữ liệu từ IC sang và chương trình giao diện điều khiển còn rất đơn giản.

Đây là lần đầu tiên tiến hành thi công với chương trình giao tiếp khá phức tạp, nên ý muốn hoàn chỉnh đến mức tối ưu nhưng vẫn chưa đạt được. Tuy nhiên, kết quả thi công vẫn đạt được những yêu cầu nhất định.

LỜI CẢM TẠ

Xin chân thành cám ơn tập thể thầy cô trường CĐKT Cao Thắng đã tận tình giảng dạy chúng em trong suốt những năm qua. Tuy đó chỉ là một khoảng thời gian ít ỏi nhưng chúng em đã tiếp thu được rất nhiều những kiến thức bổ ích góp phần làm hành trang vào đời cho chúng em sau này.

Một phần của tài liệu Đồ án tốt nghiệp lập trình điều khiển thiết bị bay bằng máy tính (Trang 81 - 98)