Ứng dụng vi điều khiển trong bài toán điều khiển động cơ 1 chiều

Một phần của tài liệu giáo trình học vi điều khiển (Trang 123 - 155)

CHƯƠNG 7. MỘT SỐ ỨNG DỤNG

7.2 Ứng dụng vi điều khiển trong bài toán điều khiển động cơ 1 chiều

Điều khiển tốc độ động cơ của động cơ điện 1 chiều, thông số tốc độ nhập từ bàn phím và tốc độ hiện tại hiển thị lên LCD.

Hình 7.3: Sơ đồ mạch nguyên lý điều khiển động cơ DC 7.2.2 Sử dụng mô đun PWM điều khiển tốc độ động cơ 1 chiều

124

7.2.2.1 Nguyên lý hoạt động môđun PWM

Hình 7.4: Nguyên lý hoạt động của mô đun PWM

Bộ điều chế độ rộng xung tạo xung hình chữ nhật trên 2 chân RC1/CCP2 và RC2/CCP1- giá trị xung ở 2 chân là ngƣợc nhau (bù nhau). Thực ra đây là một chức năng của modun CCP gồm 3 chức năng: Comparation, Capture, PWM.

Nguyên lý tạo xung nhƣ sau:

Khi Thanh ghi bộ đếm của bộ định thời Timer 2 đạt giá trị bằng giá trị của thanh ghi PR2, đầu ra xung RC2/CCP1 đƣợc set lên mức cao. TMR2 đƣợc reset về 0, sau đó đếm lên, khi TMR2 đạt giá trị bằng độ rộng xung, chân RC2/CCP1 đƣợc reset về 0. TMR2 tiếp tục đếm lên cho đến khi bằng giá trị PR2 thì chu trình sẽ lặp lại nhƣ lúc đầu. Xung ra ở chân RC1/CC21 là bù của xung trên chân RC2/CCP1 .

7.2.3 Chu kỳ xung

Để xác định chu kỳ xung ta đƣa ra phân tích nhƣ sau:

Nhƣ đã tìm hiểu về cách làm việc của các bộ timer, ta biết: sau mỗi chu kì lệnh giá trị của TMR2 sẽ tăng lên 1 đơn vị. Nếu dùng bộ chia tần số, giả sử là 1: N thì sau N chu kì lệnh giá trị của TMR2 mới tăng lên 1 đơn vị.

Mỗi chu kì lệnh gồm 4 chu kì xung.

Chu kì xung chính là khoảng thời gian từ lúc TMR2=0 cho đến khi TMR2=PR2. Suy ra, để tăng PR2 đơn vị, hay chính là chu kì xung sẽ bằng:

𝑇𝑝𝑤𝑚 = 𝑃𝑅2 + 1 ∗ 4 ∗ 𝑇𝑜𝑠𝑐 ∗ 𝑁

Ở đây, Tosc là chu kì xung của vi điều khiển hay chu kì của thạch anh

125

N là tỉ lệ chia tần số.

Ví dụ: với thạch anh Fosc=4Mhz, N=4, ta có chu kì xung tối đa đạt đƣợc là khi PR2=255 (PR2 là thanh ghi 8 bit)

T=(255+1)*4*(1/4Mhz)*4=1024às

Tức tần số xung là: F=1/T=976Hz= 1KHz.

7.2.4 Độ rộng xung

Độ rộng xung là giá trị 10 bit : trong đó 8 bit cao đƣợc ghi vào thanh ghi CCPR1L, và 2 bit thấp ghi vào 2 bit 5 và 4 của thanh ghi CCP1CON :

Độ rộng xung PWM đƣợc xác định theo công thức:

PWM Duty Cycle= (CCPR1L:CCP1CON<5:4>)*Tosc*N

Trong đó, CCPR1L là thanh ghi 8 bit, CCP1CON<5:4> là 2 bit 5 và 4 của thanh ghi điều khiển CCP1CON. N là tỉ lệ chia tần số.

7.2.5 Qui trình thực hiện xuất xung PWM Gồm các bước:

- Cài đăt modun CCP chức năng PWM: setup_CCP1(CCP_PWM) - Cài đặt Timer 2: setup_timer_2 (mode, period, 1)

Trong đó, mode có thể là: T2_DISABLED, T2_DIV_BY_1, T2_DIV_BY_4, T2_DIV_BY_16, nghĩa là tắt Timer2 hoặc định tỉ lệ bộ chia tần số

Period chính là giá trị của thanh ghi PR2 để xác định chu kì của xung - Cài đặt độ rộng xung: set_pwm1_duty(value);

Trong đó, value là giá trị CCPR1L:CCP1CON<5:4>

Và độ rộng xung đƣợc tính theo công thức:

PWM Duty Cycle= value*Tosc*N Chương trình

#include <16f877a.h>

/#include <defs_16f877a.h>

#device *=16 adc=10

#fuses hs,nolvp,nowdt,put

126

#use delay(clock=4000000) //#include <lcd_lib_4bit.c>

//==============================================================

#bit sw5=0x06.4

#bit sw6=0x06.5

#bit sw7=0x06.6

#bit sw8=0x06.7

#bit chonchedo=0x09.0 //#define sw6 RB5 //#define sw7 RB6

byte const maled[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};

//khai bao bien toan cuc int32 temp;

int32 count255;

int16 value=300;

int32 SOLANLAP=0;

int32 tocdodc_1phut=0;

int32 tocdo_caidat=2000;

int16 soxung_encoder=200;

int8 nghin,tram,chuc,donvi;

void checkSW5(void);

void checkSW6(void);

void checkSW7(void);

void checkSW8(void);

void checkSW5() {

DELAY_MS(5);

if (!sw5) {

tocdo_caidat=1000;

while(!sw5);

DELAY_MS(5);

}}

void checkSW6() {

delay_ms(5);

if (!sw6) {

tocdo_caidat=2000;

while(!sw6);

DELAY_MS(5);

}}

127

void checkSW7() {

delay_ms(5);

if (!sw7) {

tocdo_caidat=3000;

while(!sw7);

DELAY_MS(5);

}}

void checkSW8() {

DELAY_MS(5);

if (!sw8) {

tocdo_caidat=4000;

while(!sw8);

DELAY_MS(5);

} }

//==============================================================

=======

#INT_TIMER0 void RTCC_isr() {

COUNT255++;

}

#int_TIMER1

void TIMER1_isr() {

solanlap=solanlap+1;

if (solanlap==10) {

tocdodc_1phut=(count255*255+get_timer0())*30/200;

if (chonchedo) {

if (tocdodc_1phut>tocdo_caidat) {

value=value-5;

}

else value =value+5;

//CAI DAT LAI DO RONG XUNG

128

set_pwm1_duty(value);

}

SOLANLAP=0;

SET_TIMER0(0);

COUNT255=0;

}

SET_TIMER1(15535);

}

//==========================================================

void tinhtoan_hienthi(int16 x) {

int16 nghin,tram,chuc,donvi;

nghin=x/1000;

x=x%1000;

tram=x/100;

x=x%100;

chuc=x/10;

donvi=x%10;

output_d(maled[nghin]);

output_low(pin_b0);

delay_ms(5);

output_high(pin_b0);

output_d(maled[tram]);

output_low(pin_b1);

delay_ms(5);

output_high(pin_b1);

output_d(maled[chuc]);

output_low(pin_b2);

delay_ms(5);

output_high(pin_b2);

output_d(maled[donvi]);

output_low(pin_b3);

delay_ms(5);

output_high(pin_b3);

}

//==============================================================

=======

void main()

129

{

set_tris_c(0);

set_tris_b(0b11110000);

set_tris_d(0);

setup_adc_ports(AN0_AN1_AN2_AN3_AN4);

setup_adc(ADC_CLOCK_INTERNAL);

set_adc_channel(0);

DELAY_MS(100);

setup_timer_0(RTCC_DIV_1|RTCC_EXT_H_TO_L);

set_timer0(0);

//2 LENH NAY DE DINH THOI CHO TIMer1 LA 200MS set_timer1(15535);

setup_timer_1(t1_internal|t1_div_by_4);

//CAC LENH CHO PHEP NGAT enable_interrupts(INT_RTCC);

enable_interrupts(INT_TIMER1);

enable_interrupts(GLOBAL);

//CAI DAT CHO PwM setup_ccp1(ccp_pwm);

//CHU KI XUN=1KHZ

setup_timer_2(T2_div_by_4,255,1);

//SET DO RONG XUNG set_pwm1_duty(value);

delay_ms(10);

chonchedo=1;

while(true) {

//HIEN THI TOC DO CUA DONG CO:DON VI: SOVONG/1S tinhtoan_hienthi(tocdodc_1phut);

//NEU CHON CHE DO =1 TOC DO CAI //=0 ADC

if (chonchedo) {

if (!sw5) checkSW5();

if (!sw6) checkSW6();

if (!sw7) checkSW7();

if (!sw8) checkSW8();

} ELSE {

130

value=read_adc();

set_pwm1_duty(value);

}

}//endwhile

}//endmain

7.4 Ứng dụng vi điều khiển trong bài toán điều khiển theo đồng hồ thời gian thực 7.4.1 Chuẩn giao tiếp I2C

a. Sơ đồ chuẩn giao tiếp I2C

Chuẩn giao tiếp I2C là chuẩn giao tiếp 2 dây: gồm tín hiệu SDA(tín hiệu dữ liệu) và tín hiệu xung Clock SCL.

Chuẩn giao tiếp I2C có giao thức kiểu Master/Slaver. Trong đó, thiết bị chủ điều khiển mọi hoạt động của quá trình giao tiếp.

Các ưu điểm:

- Đơn giản, tốc độ truyền nhanh - Giao diện nối tiếp

- Đồng bộ - Hai chiều

I2C là giao tiếp đồng bộ:

- Dữ liệu đƣợc truyền theo tín hiệu xung clock (SCL)

- Tín hiệu SCL điều khiển khi nào thì dữ liệu thay đổi và khi nào thì dữ liệu đƣợc đọc

I2C là giao tiếp master/slaver:

- Master sẽ là nơi phát xung clock (SCL), do đó nó sẽ điều khiển quá trình truyền nhận

- Tín hiệu xung clock (SCL) là chung cho tấc cả các Slaver

- Slaver chỉ có thể đƣa tín hiệu SCL xuống mức thấp để ngăn chặn cuộc truyền I2C là giao tiếp 2 chiều:

- Cùng một thời điểm, cả hai thiết bị có thể truyền và nhận dữ liệu. Tuy nhiên, Master sẽ qui định luồng dữ liệu truyền.

b. Mức tín hiệu:

Chuẩn giao tiếp I2C sử dụng 2 dây tín hiệu :

- SDA: Serial DAta, tín hiệu dữ liệu nối tiếp, truyền dữ liệu đến hoặc đi từ Master.

- SCL: Serial Clock, tín hiệu xung đồng hồ qui định khi nào thì dữ liệu đƣợc đọc hoặc khi nào dữ liệu đƣợc ghi. Tín hiệu này do Master điều khiển

Các trạng thái đặc biệt tạo nên 1 giao tiếp I2C là:

- Start: kí hiệu là S

131

Hình 7.5: Dạng tín hiệu Start - stop: kí hiệu là P

Hình 7.6: Dạng tín hiệu Stop - Data: dữ liệu:

132

Hình 7.7: Dạng tín hiệu data

- Kết thúc trạng thái stop, SCL và SDA lên mức cao cho biết trạng thái của đường truyền là đang rỗi.

c. Khung truyền:

- Ghi dữ liệu từ Master đến Slaver:

- Đọc dữ liệu từ Slaver:

Hình 7.8: Khung truyền dữ liệu

133

1. Chip đồng hồ thời gian thực:

Hình dáng:

Sơ đồ kết nối

Hình 7.9: Sơ đồ kết nối DS1307 Các thanh ghi chức năng:

134

Hình 7.10: Các thanh ghi chức năng của chip DS1307 Qui trình gửi lệnh để ghi 1 byte từ vi điều khiển đến DS1307:

- Tạo trạng thái Start: i2c_start();

- Gửi địa chỉ của DS1307: địa chỉ mặc định là 0xd0 cùng với bit qui đinh hướng truyền dữ liệu, 0: i2c_write(0xd0);

- Gửi địa chỉ byte nhớ trên DS1307 cần ghi: i2c_write(address);

- Gửi dữ liệu đến DS1307: i2c_write(data);

- Tạo trạng thái Stop: i2c_stop();

Qui trình gửi lệnh để đọc 1 byte dữ liệu từ DS1307 lên vi điều khiển:

- Tạo trạng thái Start: i2c_start();

- Gửi địa chỉ của DS1307: địa chỉ mặc định là 0xd0: i2c_write(0xd0);

- Gửi địa chỉ byte nhớ trên DS1307 cần ghi: i2c_write(address);

- Tạo lại trạng thái Start: i2c_start();

- Gửi địa chỉ của DS1307: địa chỉ mặc định là 0xd0 cùng với bit qui đinh hướng truyền dữ liệu, 1: i2c_write(0xd1);

- Dùng lệnh đọc dữ liệu: data=i2c_read(0);

- Tạo trạng thái Stop: i2c_stop();

3. Chương trình mẫu:

Chương trình chính:

#include <16F877A.h>

#use delay(clock=8000000)

#fuses HS,NOWDT,NOPROTECT,NOLVP

#include "ds1307.c"

#include <lcd_lib_4bit.c>

void main(void) {

int8 sec,min,hour,day,date,month,year;

char second_digit1, second_digit2, min_digit1, min_digit2,hour_digit1,hour_digit2;

write_ds1307(0,sec & 0x7F); // enable oscillator(bit 7 =0)

135

lcd_init();

//write_ds1307(2,0x15);

while(true) {

sec=read_ds1307(0); // read second min=read_ds1307(1); // read minute hour=read_ds1307(2); // read hour second_digit2 = (sec / 0x10) ; second_digit1 = (sec % 0x10) ; min_digit2 = (min / 0x10) ; min_digit1 = (min % 0x10);

hour_digit2= (hour/0x10);

hour_digit1=hour%0x10;

lcd_putcmd(0x80);

printf(lcd_putchar,"RTC: ");

printf(lcd_putchar,"%u",hour_digit2);

printf(lcd_putchar,"%u",hour_digit1);

printf(lcd_putchar," : ");

printf(lcd_putchar,"%u",min_digit2);

printf(lcd_putchar,"%u",min_digit1);

printf(lcd_putchar,": ");

printf(lcd_putchar,"%u",second_digit2);

printf(lcd_putchar,"%u",second_digit1);

delay_ms(500);

} }

Chương trình con DS1307.c

#define DS1307_SDA PIN_C4

#define DS1307_SCL PIN_C3

#use i2c(master, sda=DS1307_SDA, scl=DS1307_SCL) //==========================

// KHOI TAO DS1307

//==========================

void init_DS1307() {

136

output_float(DS1307_SCL);

output_float(DS1307_SDA);

}

//==========================

// GHI 1 BYTE ĐẾN DS1307

//==========================

void write_DS1307(byte address, BYTE data) {

short int status;

i2c_start();

i2c_write(0xd0);

i2c_write(address);

i2c_write(data);

i2c_stop();

i2c_start();

status=i2c_write(0xd0);

while(status==1) {

i2c_start();

status=i2c_write(0xd0);

} }

//==========================

//DOC 1 BYTE TU DS1307

//==========================

BYTE read_DS1307(byte address) {

BYTE data;

i2c_start();

i2c_write(0xd0);

i2c_write(address);

i2c_start();

i2c_write(0xd1);

data=i2c_read(0);

i2c_stop();

return(data);}

}

7.5 Ứng dụng vi điều khiển trong bài toán điều khiển và giám sát qua máy tính 7.5.1 Chuẩn giao tiếp RS232

137

Chuẩn giao tiếp nối tiếp RS232 là chuẩn phần cứng, qui định các chân nối và mức điện áp đƣợc sử dụng bởi một số các thiết bị giao tiếp nối tiếp với nhau. Ngày nay, chuẩn này trở nên thông dụng trong việc ghép nối máy tính với thiết bị ngoại vi.

Các loại vi điều khiển, vi xử lý cũng sử dụng chuẩn này trong việc truyền thông mạng vi điều khiển hoặc giữa vi điều khiển với máy tính.

Vì vậy, chuẩn RS232 thường được dùng để máy tính điều khiển và giám sát hệ thống vi điều khiển trong các ứng dụng công nghiệp.

Một số ƣu điểm của chuẩn:

- Sơ đồ kết nối đơn giản - Tiết kiệm đƣợc dây dẫn

- Có thể dùng để kết nối với vi điều khiển và PLC

Tính năng Plug-in Plug-out, nghĩa là có thể lắp đặt thiết bị truyền khi máy tính đang hoạt động

Chuẩn điện áp:

Bit có 2 logic 0 và 1.

Theo chuẩn RS232, logic 0 (SPACE) tương ứng với điện áp -25 đến -3n V Logic 1 (Mark) tương ứng với điện áp 3 đến 25 V

Khoảng điện áp từ -3 đến 3 là không xác định

138

Hình 7.11: Dạng tín hiệu trong chuẩn RS232 Chuẩn giao thức:

Giao thức RS232 qui định truyền 1 frame tại một thời điểm.

Một Frame truyền bao gồm: 1 bit start, 7 hoặc 8 bit dữ liệu ASCII của kí tự, bit Parity (kiểm tra chẵn lẻ) và kết thúc bởi 1 bit Stop.

Ví dụ sau đây là frame truyền 1 kí tự „A‟, mã ASCII của „A‟ là 41h, nếu truyền trong 7 bit dữ liệu sẽ là 100 0001.

Hình 7.12: Một khung truyền dữ liệu RS232 Các qui định khác của chuẩn RS232:

139

Hình 7.13: Các qui định về khoảng cách và đặc tính điện Tốc độ truyền:

Các tốc độ truyền thông dụng là: 1200bps, 4800bps, 9600bps, 19200bps Sơ đồ chân:

Chuẩn RS232 qui định sử dụng 2 loại đầu nối chuẩn DB25 (25 chân) và DB9 (9 chân)

Vi điều khiển thường dùng đầu nối 9 chân DB9

Hình 7.14: Các chân chức năng trên cổng DB9

140

Phương thức truyền Sơ đồ kết nối qua modem:

Hình 7.15: Phương thức truyền qua modem

DTE- Data Terminal Equipment: Thiết bị đầu cuối dữ liệu, có thể là máy tính, vi điều khiển, PLC

DCE- Data Communication Equipment: Thiết bị truyền dữ liệu, ví dụ Modem Sơ đồ kết nối không qua modem:

Đây là sơ đồ hay dùng cho việc truyền dữ liệu giữa máy tính và vi điều khiển Kết nối không bắt tay:

Hình 7.16: Phương thức truyền không bắt tay

Trường hợp này phải đảm bảo cài đặt cho cả hai DTE cùng tốc độ truyền, số bit dữ liệu, dạng kiểm tra lỗi Parity và Số bit STOP.

Chú ý: Do chuẩn RS232 trên máy tính qui định mức điện áp cho logic 0 là 3 đến 25V, logic 1 là -25 đến -3V, trong khi mức điện áp tương ứng trên vi điều khiển là 0 và 5V nên cần có bộ chuyển đổi đồng bộ điện áp là MAX232 làm trung gian cho kết nối này

Kết nối Có bắt tay:

DTE DCE DCE DTE

141

Hình 7.17: Phương thức truyền không bắt tay

Đây là hình thức truyền có bắt tay, có quá trình thăm dò hỏi đáp trước khi bắt đầu truyền.

Giả sử DTE1 muốn truyền dữ liệu đến DTE2. Trước hết DTE1 phải đưa chân RTS (Request to send) lên mức tích cực và bắt đầu thăm dò tín hiệu từ chân CTS (Clear to Send) của mình. Nếu DTE2 đã sẵn sàng để nhận dữ liệu, DTE2 sẽ đƣa chân RTS của mình lên mức tích cực. Chân này nối với chân CTS của DTE1. Vì vậy, DTE1 sẽ nhận đƣợc tín hiệu tích cực thông qua chân CTS và biết rằng DTE2 đã sẵn sàng nhận dữ liệu. DTE1 bắt đầu truyền dữ liệu.

Nếu DTE1 chủ động muốn nhận dữ liệu từ DTE2. DTE1 đƣa chân DTR (Data terminal Ready) lên mức tích cực để báo với với DTE2 rằng nó đã sẵn sàng và muốn nhận dữ liệu. Nếu DTE2 cũng sẵn sàng để truyền dữ liệu, nó sẽ đƣa chân DSR (Data Set Ready) để báo với DTE1 là nó cũng đã chuẩn bị dữ liệu sẵn sàng để gửi đến DTE1. Và sau đó, DTE2 bắt đầu truyền dữ liệu cho DTE1.

Kết nối giao tiếp máy tính và vi điều khiển PIC 16F877A qua chuẩn RS232:

Sơ đồ phần cứng:

Vi điều khiển PIC 16F877A hỗ trợ giao tiếp nối tiếp theo chuẩn RS232.

Cứng thức truyền theo kiểu không bắt tay: Gồm 2 đường truyền, đường truyền dữ liệu từ PIC đến máy tính thông qua chân RC6, đường nhận dữ liệu từ máy tính truyền đến thông qua chân RC7. Do qui định mức điện áp cho các logic 0 và 1 trên PIC là 0 và

142

5V, trong khi mức điện áp cho 2 logic đó ở máy tính là 3 đến 25V và -25 đến -3V, nên cần có một bộ chuyển đổi điện áp cho đồng bộ. Người ta hay sử dụng chip MAX232 để làm nhiệm vụ này.

Hình 7.18: Sơ đồ mạch nguyên lý kết nối Vi điều khiển- máy tính

Ở 2 đầu của dây nối ta sử dụng 2 đầu nối DB9. Có chân RX( chân số 2) của đầu nối này nối với TX (chân số 3) của đầu nối kia và ngƣợc lại. 2 max của 2 đầu nối đƣợc nối với nhau.

Sơ đồ nối từ vi điều khiển PIC ra chip MAX232 nhƣ sau:

143

Hình 7.19: Cách kết nối trên Max232

Chân nhận dữ liệu trên vi điều khiển PIC RC6 đƣợc nối với chân 12 trên MAX232.

Chân truyền dữ liệu trên vi điều khiển PIC RC7 đƣợc nối với chân 12 trên MAX232.

Chân 13,14 trên MAX232 đƣợc nối với chân 3 (truyền dữ liệu đến máy tinh) và chân 2 (nhận dữ liệu từ máy tính).

Giái trị các tụ dùng là theo datasheet.

Phần mềm trên máy tính:

- Có thể sử dụng Visual Basic, Visual C, MatLab, LabView, Delphi v.v Phần mềm dùng Visual Basic:

Visual Basic sử dụng một ActiveX MSCOMM, là một component trong thƣ viện Visual Basic để dùng để giúp máy tính giao tiếp với thiết bị ngoại vi.

Các bước để sử dụng MSCOM

144

Lấy component MSCOMM từ thƣ viện ra ToolBox Bước 1: Kích chuột phải lên ToolBox, chọn Components

Hình 7.20: Các bước tạo giao diện kết nối bước 1

145

Hình 7.20: Các bước tạo giao diện kết nối bước 2

Bước 2: Hiện ra thư viện Components, chọn Microsoft Comm Control 6.0 , nhấn Apply, Hình chiếc điện thoại sẽ hiện ra trên thanh ToolBox. Đây chính là MSCOMM, Cách để đưa đối tượng này vào ứng dụng tương tự như các đối tượng khác trong ToolBox.

Các thuộc tính quan trọng của MSCOMM:

- Setting:

Cú pháp: MSCOMM1.Setting= “BBBB,P,D,S”

BBBB: Tốc độ truyền, chọn 9600 hoặc 19200 P: Dạng của bit kiểm tra lỗi chẵn lẻ

D: Số bit dữ liệu 7 hoặc 8, mặc định là 8.

146

S: số bit STOP, 1,1.5 hoặc 2

Ví dụ: MSCOMM1.Setting= “9600,O,8,1”

+ CommPort: dạng object.CommPort = value. Value là chỉ số của cổng Com có giá trị từ 1 ‐> 16 và mặc định có giá trị =1. Các bạn cần phải thiết lập thông số này trước khi mở cổng. Sẽ có lỗi error 68 (Device unavailable) nếu như

không mở đƣợc cổng này.

+ InBuferSize: thiết lập hoặc trả lại kích thước của bộ đệm nhận, tính = byte.

Mặc định là 1024 byte. Các bạn không đƣợc nhầm lẫn với đặc tính InBufferCount là số byte đang chờ trong bộ đệm nhận.

+ InputLen : object.InputLen [ = value ] thiết lập hoặc trả lại số byte mỗi lần thuộc tính Input đọc trong bộ đệm nhận. Mặc định giá trị Value=0 tức là thuộc tính Input sẽ đọc hết nội dung của bộ đệm nhận khi thuộc tính này đƣợc gọi.

Nếu số kí tự trong bộ đệm nhận không = InputLen thì thuộc tính Input sẽ trả lại kí tự rỗng “”. Ví thế bạn cần phải chọn cách kiểm tra InBufferCount để chắc chắn số kí tự yêu cầu đã có đủ trước khi dùng lệnh .Input. Tính chất này rất là có ích khi đọc dữ liệu một máy mà dữ liệu ra đƣợc định dạng bằng các khối có

kích thước cố định.

+ InputMode: object.InputMode [ = value ] . Value = 0 hay = comInputModeText dữ liệu nhận đƣợc dạng văn bản kiểu kí tự theo chuẩn ANSI. Dữ liệu nhận đƣợc sẽ là một sâu. Value=1 hay = comInputModeBinary dùng nhận mọi kiểu dữ liệu nhƣ kí tự điều khiển nhúng, kí tự NULL,.. Giá trị nhận đƣợc từ Input sẽ là một mảng kiểu Byte.

+ OutBuferSize: giống nhƣ InBuferSize, mặc định là 512.

+ ParityReplace: thiết lập và trả lại kí tự thay thế kí tự không đúng trong lỗi

giống nhau.

+ PortOpen: thiết lập và trả lại tính trạng của cổng(đóng hoặc mở).

Một phần của tài liệu giáo trình học vi điều khiển (Trang 123 - 155)

Tải bản đầy đủ (PDF)

(155 trang)