PIC Vietnam

PIC Vietnam (http://www.picvietnam.com/forum/index.php)
-   Cơ bản về vi điều khiển và PIC (http://www.picvietnam.com/forum/forumdisplay.php?f=8)
-   -   lỗi nhận RS232 (http://www.picvietnam.com/forum/showthread.php?t=4045)

mocdailam 02-05-2009 02:11 AM

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);

mocdailam 02-05-2009 11:26 PM

có ai giúp mình với. sắp die rồi!

tungtot_vl 04-05-2009 12:06 PM

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é

mocdailam 05-05-2009 05:45 PM

cám ơn bạn nhiều!

thienkien 28-05-2009 10:17 PM

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é

auduongphong 02-06-2009 12:58 PM

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