View Single Post
Old 23-08-2008, 09:54 PM   #5
phamminhtuan
Super Moderator
 
phamminhtuan's Avatar
 
Tham gia ngày: Feb 2006
Bài gửi: 150
:
Trích:
Nguyên văn bởi tungtot_vl View Post
lâu rồi không lên mạng nên em không phản hồi lại anh nam được, thành thật xin lỗi. em đã khắc phục được lỗi trên rồi. nguyên nhân là có 1 số vdk em khai báo "set_tris_c(0x00);" nhưng vẫn giao tiếp nhận và truyền với pc bình thường. nhưng có một số khai báo "set_tris_c(0x80);" thì mới truyền được.
em có ý này muốn nhờ anh nam chỉ giáo thêm.
từ trước đến nay khi giao tiếp pic với pc. khi pc gởi xuống 1 chuỗi data, thì em lập trì cho pic mỗi lần ngắt chỉ nhận 1 byte sau đó nhảy về vị trí cũ, rồi lại nhảy vào ngắt nhận byte khác cho đến khi hết chuỗi data từ pc gởi xuống thì thôi. chuỗi từ pc gởi xuống có bao nhiêu byte thì ngắt bấy nhiêu lần.
không biết có cách nào để khi pc gởi xuống 1 chuổi có nhiều byte mà pic chỉ ngắt có 1 lần nhảy vào nhận toàn bộ data rồi mới nhảy ra không hả anh nam. nếu bác nào biết hoặc có ý kiến gì xin chỉ giúp luôn.
Có 1 giải thuật nhận dữ liệu từ UART thế này, bạn dùng bộ đệm 16 byte nhé
PHP Code:
unsigned char RxR=0RxW=0buffer[16];
#INT_RDA
void rda_isr() {
   
buffer[RxW] = getc();
   
RxW++;
   
RxW&=0x0F;
}

void main() {
   
//init UART, interrupt...
  
while(1) {
  if(
RxR != RxW) {
     
//xử lý byte nhận được ở đây
    
RxR++;
    
RxR&=0x0F;
  }
 }

Làm theo cách trên thì bạn sẽ không bỏ sót byte nào từ PC gởi xuống cả
phamminhtuan vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn