|
08-05-2006, 03:17 PM | #1 |
Đệ tử 2 túi
Tham gia ngày: Apr 2006
Bài gửi: 32
: |
Làm thế nào để timeout khi dùng hàm getc() của CCS sau một thời gian nhất định, định trước? GETC() là một hàm mà CCS đã có sẵn trong thư viện của nó, nhiệm vụ của getc() là chờ nhận một ký tự mà ký tự đó được truyền tới từ một đầu cuối khác thông qua công truyền thông nối tiếp UART. Khi dùng hàm này, chúng ta hết sức cẩn trọng bởi cái việc "chờ" một ký tự được coi là hợp lệ. Vấn đề này giải quyết thế nào đây? CCS đã mách rằng, hãy sử dụng hàm khbit(). Sau đây là một ví dụ mà CCS cung cấp để giải quyết vấn đề này:
Code:
short timeout_error; char timed_getc() { long timeout; timeout_error=FALSE; timeout=0; while(!kbhit&&(++timeout<50000)) // 1/2 second delay_us(10); if(kbhit()) return(getc()); else { timeout_error=TRUE; return(0); } } thay đổi nội dung bởi: falleaf, 11-05-2006 lúc 10:56 PM. |
08-05-2006, 03:29 PM | #2 |
Đệ tử 2 túi
Tham gia ngày: Apr 2006
Bài gửi: 32
: |
Cách sử dụng hàm timed_getc()
Code:
char temp; //... char timed_getc(){ //... } void main(void){ //... while(1){ //... temp=timed_getc(); //... } } thay đổi nội dung bởi: falleaf, 11-05-2006 lúc 10:56 PM. |
08-05-2006, 03:37 PM | #3 |
Đệ tử 2 túi
Tham gia ngày: Apr 2006
Bài gửi: 32
: |
Vấn đề kỳ tới, mời các bạn cùng tham gia: "Làm thế nào để truyền đi một số thực thông qua cổng truyền thông nối tiếp UART với CCS?"
Nguyen The Vinh. |
08-05-2006, 03:56 PM | #4 |
Đệ tử 2 túi
Tham gia ngày: Apr 2006
Bài gửi: 32
: |
Ví dụ:
Code:
//... float temp[32]; void main (void) { int8 i; for(i=0;i<32;i++)temp[i]=i; while(1) { //Bây giờ ta muốn truyền temp[0], temp[1],...,temp[i],...,temp[31] //cho PC. Phải làm thế nào đây. Xin mời các bạn! } } thay đổi nội dung bởi: falleaf, 11-05-2006 lúc 10:57 PM. |
09-05-2006, 01:34 AM | #5 |
PIC Bang chủ
|
Mình di chuyển bài của bạn ra đây, vì lý do bạn post bài không đúng luồng.
Rất cám ơn những bài viết của bạn, nếu được, bạn nên viết bài kèm theo các sơ đồ nguyên lý minh họa để người đọc dễ theo dõi. Chúc vui.
__________________
Công ty TNHH Thương mại và Giao nhận R&P store.hn@rpc.vn - store.hcm@rpc.vn Học PIC như thế nào? |
09-05-2006, 03:36 PM | #6 |
Đệ tử 2 túi
Tham gia ngày: Apr 2006
Bài gửi: 32
: |
Phương án giải quyết vấn đề truyền mảng số thực
Code:
#include <16F877.h> #fuses HS,NOWDT,NOPROTECT,NOLVP #use delay(clock=20000000) #use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7) float temp[32]; void main (void) { int8 i; for(i=0;i<32;i++)temp[i]=i; while(1) { //Bây giờ ta truyền temp[0], temp[1],...,temp[i],...,temp[31] cho PC như sau. for(i=0;i<128;i++) putc(*(&temp[0]+i)); } } thay đổi nội dung bởi: falleaf, 11-05-2006 lúc 10:58 PM. |
25-05-2006, 10:40 PM | #7 | |
Đệ tử 1 túi
Tham gia ngày: May 2005
Bài gửi: 14
: |
Mình có một số góp ý
Trích:
|
|
25-05-2006, 10:46 PM | #8 |
Đệ tử 1 túi
Tham gia ngày: May 2005
Bài gửi: 14
: |
Mình có một số góp ý !
putc(*(temp+i)); vì trong C temp là con trỏ của mảng.
*(temp+i)=getc(); thay đổi nội dung bởi: thancongbao, 25-05-2006 lúc 10:52 PM. |
16-11-2007, 01:01 AM | #9 |
Đệ tử 6 túi
Tham gia ngày: Mar 2007
Bài gửi: 150
: |
Cho mình hỏi vậy nếu ta truyền một dữ liệu 8bit qua cổng nối tiếp thì làm thế nào vậy?
[code/] #include <16F877.h> #device *=16 adc=8 #fuses HS,NOWDT,NOPROTECT,NOLVP #use delay(clock=20000000) #use fast_io(a) #use fast_io(d) #use rs232(baud=19200,parity=n,xmit=pin_C6,rcv=pin_c7,b its=8) int8 led[] ={0,1,2,3,4,5,6,7,8,9},k=0; int8 so[4]; int8 quet[]={128,64,32,16}; int32 a,b,value; #int_rtcc void rtcc() { set_timer0(99); b=a; so[0]=a%10; a/=10; so[1]=a%10;a/=10; so[2]=a%10; a/=10; so[3]=a; a=b; portd=led[so[k]]+ quet[k]; k++; if(k==4); k=0; } void main() { trisa=255; trisd=0; setup_adc(adc_clock_internal); setup_adc_ports(all_analog); set_adc_channel(0); set-timer_0(rtcc_internal|rtcc_div_128); enable_interrupts(int_rtcc); enable_interrupts(global); set_timer0(99); while(true) { delay_ms(10); value=read_adc(); a=value; } } [/code] Bây giờ để truyền dữ liệu qua cồng nối tiếp , mình phải làm sao đây ? Bình thường phải tốn hết 8 chân VDK ở port d , nếu truyền qua cổng nối tiếp thì chỉ cần tốn có 2 chân con VDK hà . Rất mong các huynh chi giáo giúp đệ... Thanks
__________________
_________________________________________________ Le Trung Duc Industry Research & Application Center NTT Institute of Hi_technolog ltduc@ntt.edu.vn leduc_cktd@yahoo.com.vn http://www.nttc.edu.vn CNC DIY : http://quangcaosanpham.com/shop/driverservo 0909300332 thay đổi nội dung bởi: LeDuc, 16-11-2007 lúc 01:11 AM. |
09-05-2006, 03:39 PM | #10 |
Đệ tử 2 túi
Tham gia ngày: Apr 2006
Bài gửi: 32
: |
Vấn đề kỳ tới, mời các bạn cùng tham gia: "Làm thế nào để nhận một mảng số thực thông qua cổng truyền thông nối tiếp UART với CCS?"
Nguyen The Vinh. |
10-05-2006, 11:19 PM | #11 |
Đệ tử 2 túi
Tham gia ngày: Jul 2005
Bài gửi: 35
: |
Theo mình bạn nên dùng thêm 1 hoặc 2 phím để định hướng cho việc truyền dử liệu.Ví dụ phím 1 truyền mảng dử liệu trên,phím 2 dùng cho mục đích khác của chương trình.Như vậy dể kiểm soát hoạt động của chương trình,Theo đoạn code của bạn Pic sẻ liên tục gởi số liệu về PC làm PC có thể chỉ nhận được số liệu đầu tiên.Bạn nên thêm lệnh Delay_ms(x); sau lệnh putc... để PC kịp nhận dữ liệu.
|
11-05-2006, 09:55 AM | #12 |
Đệ tử 2 túi
Tham gia ngày: Apr 2006
Bài gửi: 32
: |
Phương án giải quyết vấn đề nhận mảng số thực
Code:
#include <16F877.h> #device *=16 #fuses HS,NOWDT,NOPROTECT,NOLVP #use delay(clock=2000000) #use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7) // int8 i; float temp[32]; #int_rda void serial_isr() { *(&temp[0]+i)=getc(); i++;if(i==128)i=0; } void main() { i=0; do { //... } while (TRUE); } thay đổi nội dung bởi: falleaf, 11-05-2006 lúc 10:58 PM. |
06-06-2006, 10:36 AM | #13 | |
Đệ tử 2 túi
Tham gia ngày: Nov 2005
Bài gửi: 45
: |
Trích:
_ Tại sao anh khai báo mảng 32 phần tử mà khi sử dụng lại dùng tới 128 phần tử? _ Cú pháp &temp[0] có phải lấy địa chỉ của temp[0]? _ Và *(&temp[0]+i) là giá trị trong ô nhớ có địa chỉ (&temp[0]+i). _ Nếu khai báo biến và sử dụng biến như trên thì CCS sẽ xử lý như thế nào? vì trong trường hợp nào sẽ xảy ra lỗi? Cảm ơn anh rất nhiều! Mong anh. hpecom.
__________________
Biết thì nói là biết, Không biết thì nói là không biết, .. |
|
06-06-2006, 10:43 AM | #14 | |
Đệ tử 2 túi
Tham gia ngày: Nov 2005
Bài gửi: 45
: |
Trích:
_ Nếu em muốn truyền một số thực từ máy tính xuống PIC qua RS232 thì có được không? _ Nếu được mong anh cho em một ví dụ viết trên MS Comm của Visual Basic 6.0. Cảm ơn anh! Rất mong anh. hpecom.
__________________
Biết thì nói là biết, Không biết thì nói là không biết, .. |
|
08-06-2006, 09:20 AM | #15 |
Đệ tử 1 túi
Tham gia ngày: May 2005
Bài gửi: 14
: |
trang này hay phết !!!
http://www.modbus.pl/downloads.htm
Anh em dùng PIC load về nhé !!! Tham khảo được khối thứ !!! |
|
|
Similar Threads | ||||
Ðề tài | Người gửi | Chuyên mục | Trả lời | Bài mới |
Căn bản về xử lý ảnh? | falleaf | Xử lý ảnh | 26 | 21-08-2016 01:14 AM |
bài tập thực hành căn bản orcad | tanhot | Thực hành | 24 | 05-07-2011 09:26 AM |
Tự động hóa nguyên công chế tạo | tinhthanthep | PIC - Thiết kế và Ứng dụng | 1 | 17-01-2006 09:42 AM |