PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > Cơ bản về vi điều khiển và PIC

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Bài Trong Ngày Vi điều khiển

Cơ bản về vi điều khiển và PIC Những bài hướng dẫn cơ bản nhất để làm quen với vi điều khiển PIC

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 26-02-2011, 03:49 PM   #1
toanhoi
Nhập môn đệ tử
 
Tham gia ngày: Jan 2010
Bài gửi: 6
:
Truyền dữ liệu qua Cổng RS232 theo từng byte

Em chào anh chị. Em đang viết chương trình truyền dữ liệu từ Pic 16f877a lên máy tính qua chuẩn RS232 theo kiểu truyền từng byte một nhueng em không biết làm như thế nào.Em ví dụ Pic em nhân được 5 byte từ bên ngoài và muốn truyền 5 byte đó lên máy tính thì code như thế nào ạ
toanhoi vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 03-03-2011, 09:20 PM   #2
hein_ts
Đệ tử 6 túi
 
Tham gia ngày: Feb 2011
Bài gửi: 156
:
Printf("%...%...",a,b,c...);
Hôm trước mình giao tiếp với máy tính như vậy đó bạn. Cho mỗi byte vào một biến, nếu không phải truyền ký tự thì phải định dạng khác, ví dụ như số HEX, %u,....
hein_ts vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 04-03-2011, 12:26 AM   #3
vietdien
Nhập môn đệ tử
 
Tham gia ngày: Nov 2006
Bài gửi: 6
:
vấn đề chính của truyền thông nối tiếp là phân biệt giữa các chuỗi byte với nhau. có một cách khá đơn giản và hiệu quả là dùng một khoảng thời gian để tách từng chuỗi byte.
Vd bạn muốn truyền 5byte 1 lần, với 9k6 thì mất khoảng 5ms, vậy bạn thử cứ 110ms truyền một lần, sẽ có 100ms để phân tách chuỗi byte. đơn giản là bạn cứ nhận được 1byte thì start lại timer, nếu timer out (khoảng 50ms không nhận được byte nào nữa) thì có nghĩa là hết bản tin.
vietdien vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 04-03-2011, 12:48 AM   #4
vienhanlam01
Đệ tử 1 túi
 
Tham gia ngày: Mar 2011
Bài gửi: 11
:
bạn có thể truyền theo dạng mã ascii như sau :

#use rs232(baud = 9600 , parity = n, xmit = pin_c6 , rcv = pin_c7 , bits = 9)
int16 giatri ;
#int_rda
void xulyngat()
{
getch() ;
putc(giatri / 1000 + 48) ;
putc(giatri % 1000 / 100 + 48) ;
putc(giatri % 1000 % 100 / 10 + 48) ;
putc(giatri % 1000 % 100 % 10 + 48) ;
}
void main()
{
while(true)
;

}


////////////////hoặc dùng printf("%3u", giatri) ; ////////////////////
vienhanlam01 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 04-03-2011, 11:01 PM   #5
dientuvienthong
Đệ tử 1 túi
 
Tham gia ngày: Mar 2011
Bài gửi: 17
:
bạn nào giúp mình thông suốt đoạn code của ban vienhanlam01 với:

bạn có thể truyền theo dạng mã ascii như sau :

#use rs232(baud = 9600 , parity = n, xmit = pin_c6 , rcv = pin_c7 , bits = 9)
int16 giatri ;
#int_rda
void xulyngat()
{
getch() ;
putc(giatri / 1000 + 48) ;
putc(giatri % 1000 / 100 + 48) ;
putc(giatri % 1000 % 100 / 10 + 48) ;
putc(giatri % 1000 % 100 % 10 + 48) ;
}
void main()
{
while(true)
;

}


////////////////hoặc dùng printf("%3u", giatri) ; ////////////////////
dientuvienthong vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 04-03-2011, 11:23 PM   #6
arm_cortex01
Đệ tử 1 túi
 
Tham gia ngày: Mar 2011
Bài gửi: 13
:
#use rs232(baud = 9600 , parity = n, xmit = pin_c6 , rcv = pin_c7 , bits = 9) / / khai báo giao tiếp rs232
int16 giatri ;
#int_rda // khai báo ngắt truyền thông
void xulyngat()
{
getch() ;
putc(giatri / 1000 + 48) ; // đẩy phần ngàn lên máy tính
putc(giatri % 1000 / 100 + 48) ; // đẩy phần trăm lên máy tính
putc(giatri % 1000 % 100 / 10 + 48) ; // đẩy phần chục
putc(giatri % 1000 % 100 % 10 + 48) ; // đẩy phần đơn vị _ + 48 là chuyển về ascii
}
void main()
{
while(true)
; // chờ ở đây

}
arm_cortex01 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Trả lời


Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến


Múi giờ GMT. Hiện tại là 06:31 AM.


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam