Xin hỏi về nhận và xử lý chuỗi trong Pic
Xin chào các anh, em đang làm về giao tiếp RS232 từ PC xuống Pic nhưng đang bị vướng mong các anh chỉ giúp. Yêu cầu là truyền một chuỗi lệnh từ PC xuống Pic , Pic sẽ lưu chuỗi này vào mảng st_nhan và xuất chuỗi đã nhận được ra LCD và lên PC để kiểm tra, sau đó nó sẽ so sánh chuỗi nhận được với chuỗi mặc định nếu giống nhau thì sẽ điều khiển đèn B.0 on/off .
Việc nhận và xuất chuỗi ra lcd và lên PC để kiểm tra thì em làm được rồi nhưng khi dùng các lệnh trong thư viện string.h để so sánh mang st_nhan và điều khiển đèn thì không được, không biết còn thiếu cái gì mong các anh chỉ giúp, Em dùng terminal 5.5 để truyền từ PC xuống. Đây là code của em. Rất mong nhận được hồi âm, cảm ơn các anh nhiều. #include <16f877a.h> #FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT #use delay(clock=8000000) #use rs232 (baud = 9600,parity = n,xmit=pin_c6,rcv=pin_c7) #include <LCD.C> #include <string.h> // thu vien xu ly chuoi //xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xx //char st_nhan[]="#123456On1."; // cu phap chuan-1. //char st_nhan[]="#123456 Off1."; // cu phap chuan-2. //xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxx char st_nhan[32]; char pass[]= "123456" ; // char mo_tb1[]= "on1" ; char tat_tb1[]= "off1" ; char *ptr1; char *ptr2; char *p ; char ss=0x00; char ss1=0x00; char ss2=0x00; char ss3=0x00; char ss4=0x00; int8 index,ngat; int8 i,n,m; //Ngat UART xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx // chuoi ti PC truyen xuong se la : #123456 on1. #INT_RDA RDA_isr() { ss= getc(); if (ss=='#') { ss1=ss; index= 0; st_nhan[index]= ss;} if(ss=='.') { ss2=ss; st_nhan[index]= ss; } if (ss2=='.'&&ss1=='#') { index= 0; ngat= 1; ss1=0;ss2=0; } else st_nhan[index]= ss; index++; if(index>=32){index=0;} } void xoa_st_nhan() { for(m=0;m<=32;++m) {st_nhan[m]=0;} } void main() { set_tris_b(0b00000000); set_tris_d(0b00000000); set_tris_e(0b000); set_tris_c(0b10000000); enable_interrupts(INT_RDA); enable_interrupts(GLOBAL); index=0; ngat=0; xoa_st_nhan(); output_low(PIN_B0); output_high(PIN_c0); LCD_Init(); lcd_gotoxy(0,1); lcd_putc("Test PC-->Pic"); delay_ms(1); lcd_gotoxy(0,2); lcd_putc(" in/out RS232"); delay_ms(1); while (1) { if(ngat==1) { output_low(pin_c0); output_high (pin_c1); // xuat chuoi nhan duoc len LCD lcd_send_byte(0,1); lcd_gotoxy(0,1); for(i=0;i<=15;i++) { lcd_putc(st_nhan[i]);} lcd_gotoxy(0,2); for(i=16;i<=31;i++) { lcd_putc(st_nhan[i]);} // xuat chuoi len PC for(n=0;n<=32;n++) { putc( st_nhan[n]); if(n>=32){putc(13);} } // xu ly chuoi bang string.c ptr1=strstr(st_nhan,pass); if(strncmp(ptr1,pass,6)==0) { ptr2=strstr(st_nhan,mo_tb1); if(strncmp(ptr2,mo_tb1,3)==0) {output_high(pin_b0);xoa_st_nhan();} else { ptr1=strstr(st_nhan,tat_tb1); if(strncmp(ptr1,tat_tb1,4)==0) {output_low(pin_b0);xoa_st_nhan();} } } delay_ms(3000); output_low(pin_c1); ngat=0; xoa_st_nhan(); } } } |
mọi người cho hỏi.cái lệnh này trong lập trình pic có tác dụng tn đấy
stream=MYPC trong khai báo #use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7, stream=MYPC) |
Múi giờ GMT. Hiện tại là 03:01 PM. |
Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam