![]() |
lỗi nhận RS232
mấy anh kiểm tra dùm em với. em muốn nhận một string từ máy lưu vào text[] không biết lỗi ở đâu mà nó không nhận đúng.
#include <18F4550.h> #device *=16 ADC=8 #fuses NOWDT,PUT,HS,NOPROTECT #use delay(clock=20M) #use rs232(baud=9600,xmit=PIN_C6,rcv=PIN_C7,bits=8) ... #int_rda void rcv_data() { char key; int8 ii=0; disable_interrupts(INT_RDA); disable_interrupts(INT_TIMER0); // gets(text); key = getc(); chedo = key;// phan tu dau tien cua goi tin la phan tu chon che do tt=2; do { //if(kbhit()) key = getc(); putc(key); text[ii]=key; ii++; if ( ii>text_max) break; }while (key !='\0'); enable_interrupts(INT_RDA); enable_interrupts(INT_TIMER0); } ... //ham main() void main() { int8 g,n,itext=0,ich=0,demp=0,k,kt=1; set_tris_b(0); set_tris_d(0); set_tris_c(0b10000001); setup_timer_0( RTCC_INTERNAL |RTCC_DIV_64|RTCC_8_BIT); set_timer0(0); enable_interrupts(INT_RDA); enable_interrupts(global); enable_interrupts(int_timer0); |
có ai giúp mình với. sắp die rồi!
|
code trên có chạy được đâu mà bạn bảo là nhận không đúng
bạn khai báo phần cứng như sau. thạch anh chạy 20M #include<18f4550.h> #fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CP UDIV1,VREGEN,NOBROWNOUT #device 18F4550*=16 ADC=10 #use delay(clock=48000000) #use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7) mỗi khi giao tiếp, PC chỉ truyền xuống 1 byte. khi có ngắt RDA chương trình (PIC) nhảy vào ngắt xử lý ctr ngắt (nhận 1 byte từ PC gửi xuống) sau đó nhảy về vị trí củ. khi có ngắt thì nhảy vào xử lý tiếp ctr ngắt để nhận 1 byte khác từ PC gửi xuống. chứ nó không nằm ở chương trình ngắt RDA để nhận toàn bộ chuỗi từ PC gửi xuống. dó đó phần do ... white() của bạn để lập lại cho đến khi nhận byte stop là không đúng. bạn xem lại lý thuyết về các ngắt nhé |
cám ơn bạn nhiều!
|
chương trình giao tiếp của mình truyền nhận đúng khi khai báo tần số thạch anh =tần số thạch anh thực . Nhưng khi khai báo ép xung lên (dùng hspll) thì nhận sai ký tự ??có khi nào phải tính lại baudrate ko nhi???.ai từng gặp tình huống này giúp mình!!! gấp gấp nhé
|
Sao bác không khai báo đúng đi cho nó chạy.
Sao tự dưng làm khó mình vậy ?? Hêhê Đây là một lỗi thường hay xảy ra khi giao tiếp với máy tính. Tần số thạch anh (trong chương trình)==== tần số thực của thạch anh trên mạch. |
Múi giờ GMT. Hiện tại là 12:08 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