24-01-2008, 03:00 PM | #16 |
PIC Bang chủ
|
Lâu rồi không dùng, nhưng hình như dùng printf chứ không phải putc nhỉ?
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? |
24-01-2008, 03:34 PM | #17 |
Đệ tử 5 túi
Tham gia ngày: Sep 2006
Bài gửi: 100
: |
Để chương trình dễ theo dõi hơn tui đã làm như sau: Dùng phần mềm Com Master do minhcuong cung cấp ở link này: http://www.picvietnam.com/forum/show...p?t=274&page=4. Phần mềm này sẽ gửi các ký tự gõ vào từ bàn phím xuống cho vi điều khiển, vi điều khiển nhận ký tự trong ngắt nhận và truyền trở lại cho máy tính.
Code:
#include <16F877A.h> #include <def_877a.h> #device *=16 adc=10 #FUSES NOWDT, XT, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT #use delay(clock=4000000) #use fast_io (b) #use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=9) #include <lcd_lib_4bit.c> #INT_RDA Receive_isr() { char c; disable_interrupts(GLOBAL); c = getc(); // nhận ký tự putc(c); // truyền trả lại cho máy tính enable_interrupts(GLOBAL); } //----------------------------------------------------------------- void main(void) { output_b(0xC0); set_tris_a(0xC0); set_tris_b(0xC1); port_b_pullups (TRUE); set_tris_c(0xD0); LCD_init(); delay_ms(500); LCD_putcmd(0x80); enable_interrupts(INT_RDA); enable_interrupts (global); while (1) {} }
__________________
Do more than exist, LIVE |
24-01-2008, 03:38 PM | #18 |
Đệ tử 5 túi
Tham gia ngày: Sep 2006
Bài gửi: 100
: |
@falleaf:
- putc(): This function sends a character over the RS232 XMIT pin - printf(): Outputs a string of characters to either the standard RS-232 pins (first two forms) or to a specified function. (copy right from CCS C Help)
__________________
Do more than exist, LIVE |
24-01-2008, 03:55 PM | #19 |
Đệ tử 5 túi
Tham gia ngày: Sep 2006
Bài gửi: 100
: |
@picthanh: Nó gửi liên tục thì chắc do firmware viết cho vi điều khiển của bạn nó gửi liên tục lên thôi. Cái Serial Port Monitor dùng để giám sát các thông tin truyền nhận ở cổng COM của máy tính, nghĩa là ta gửi gì ra cổng COM, hoặc nhận gì về từ cổng COM, nó đều hiển thị lên màn hình máy tính hết. Không hiểu cái "phần mềm để nhận cái chuỗi or ký tự mà mình gửi lên" là bạn muốn đề cập đến phần mềm gì. Nếu ta chỉ cần quan sát việc truyền nhận thôi thì chỉ cần Serial Port Monitor là đủ. Còn khi cần xử lý dữ liệu nhận về thì mới cần phần mềm để xử lý.
__________________
Do more than exist, LIVE |
24-01-2008, 06:15 PM | #20 | |
Đệ tử 6 túi
Tham gia ngày: Mar 2007
Bài gửi: 150
: |
Trích:
__________________
_________________________________________________ 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 |
|
24-01-2008, 06:56 PM | #21 |
Đệ tử 4 túi
Tham gia ngày: Mar 2006
Bài gửi: 83
: |
Bạn đã thử debug chương trình chưa lỗi ở dòng nào
|
24-01-2008, 08:52 PM | #22 | |
Trưởng lão PIC bang
|
Trích:
Nên viết như sau: Code:
while (1) { while (!TXIF); //Wait until the transmit buffer is empty; putc(c); //Send one character delay_ms(500); //Wait for a while so human eye can see it }
__________________
Biển học mênh mông, sức người có hạn. Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau: http://www.picvietnam.com/forum/showthread.php?t=1263 |
|
24-01-2008, 11:05 PM | #23 |
Đệ tử 2 túi
Tham gia ngày: Jun 2007
Bài gửi: 44
: |
hehe ! các bác xem nè em đã gởi được ký tự lên máy tính và nhận ký tự từ trên máy tính gởi xuống vi diều khiển và hiện lên LCD
em xài con 16f877a Code:
#include "D:\PIC PROGRAM\RS232\goi ky tu.h" #include <LCD.C> #include <KBD.C> #include <stdio.h> #include <stdlib.h> char k,c; #int_RDA RDA_isr() { c=getch(); lcd_gotoxy(1,2); cd_putc(c); } void main() { port_b_pullups(TRUE); setup_adc_ports(NO_ANALOGS); setup_adc(ADC_OFF); setup_psp(PSP_DISABLED); setup_spi(FALSE); setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); setup_timer_1(T1_DISABLED); setup_timer_2(T2_DISABLED,0,1); setup_comparator(NC_NC_NC_NC); setup_vref(FALSE); lcd_init(); kbd_init(); enable_interrupts(INT_RDA); enable_interrupts(GLOBAL); while(1) { k=kbd_getc(); if (k!=0) { if(k!='*') { lcd_gotoxy(1,1); lcd_putc(k); printf("key = %c",k); } else lcd_putc('\f'); } } } bác Jerry ơi ! em thư dùng Serial Port Monitor of CCS nhưng nó ko hiện dc ký tự mà em gởi lên, chỉ nhận một dãy số kiểu hexa thôi.trong khi đó ComMaster thì chạy ngon lành.ai giải thích giùm em tại sao vậy. namqn: Bạn hãy học cách đặt code vào giữa hai tag [code] và [ /code] để định dạng. thay đổi nội dung bởi: namqn, 24-01-2008 lúc 11:12 PM. |
24-01-2008, 11:15 PM | #24 |
Đệ tử 2 túi
Tham gia ngày: Jun 2007
Bài gửi: 44
: |
các bác cho hỏi ComMaster có gửi một chuỗi ký qua cổng com dc ko nhỉ.em đã sữa chương trình lại một chút để VDK nhận một chuỗi ký tự từ cổng Com sau đó xuất ra LCD nhưng kết quả chăng thấy ký tự nào xuất hiện trên LCD cả.
Code:
char string[10]; #int_RDA RDA_isr() { char i; gets(string); lcd_gotoxy(1,2); for (i=0;i<strlen(string);i++) lcd_putc(string[i]); } thay đổi nội dung bởi: namqn, 24-01-2008 lúc 11:28 PM. |
25-01-2008, 07:57 AM | #25 |
Đệ tử 5 túi
Tham gia ngày: Sep 2006
Bài gửi: 100
: |
@picthanh:
- Com Master có cho phép gửi 1 chuỗi ký tự qua cổng COM - Bạn có thể kiểm tra bằng cách nối tắt chân 2 và chân 3 của cổng COM lại, rồi gõ 1 chuỗi dữ liệu vào cửa sổ transmit của Com Master, sau đó nhấn nút Send.
__________________
Do more than exist, LIVE |
25-01-2008, 09:51 AM | #26 |
Đệ tử 5 túi
Tham gia ngày: Oct 2005
Bài gửi: 117
: |
Các bạn vào trang web sau để download code PIC cho CCS. Đây là các chương trình tôi đã viết trước đây.
http://linhnc308.googlepages.com/ http://linhnc308.googlepages.com/myprojects Chúc thành công.
__________________
CallerID, Ethernet-RS232, PICWEB, Cảnh báo BTS Giải pháp toàn diện giám sát - điều khiển từ xa qua GSM/Internet 0988006696 http://linhnc308.blogspot.com linhnc308@gmail.com |
25-01-2008, 11:19 AM | #27 |
Đệ tử 2 túi
Tham gia ngày: Jun 2007
Bài gửi: 44
: |
các bác ơi,giúp em với .viết chương trình như đã up ở trên sao con pic 16f877a of em ko được nhận 1 chuỗi từ PC giống như trong phần help of CCS hướng dẫn .loay hoay từ hồi tối tới giờ mà nó vẫn ko chạy dc vậy.
|
25-01-2008, 11:47 AM | #28 |
Đệ tử 5 túi
Tham gia ngày: Sep 2006
Bài gửi: 100
: |
Trong cái link mà linhnc308 đưa không thấy có phần USART. Bạn xem lại giúp nhé.
__________________
Do more than exist, LIVE |
26-01-2008, 03:20 PM | #29 |
Đệ tử 5 túi
Tham gia ngày: Sep 2006
Bài gửi: 100
: |
Hi, đã làm xong phần truyền nhận RS232, nhưng mới chỉ truyền nhận được từng ký tự, chưa truyền nhận chuỗi được. Sau đây là chương trình nhận chuỗi gồm 10 ký tự, bắt đầu bằng ký tự '0', kết thúc bằng ký tự '9'. Mục tiêu là như vậy nhưng chạy thử thì chưa được. Các bạn giúp tớ 1 tay nhé:
Code:
#include <16F877A.h> #include <def_877a.h> #device *=16 adc=10 #FUSES NOWDT, XT, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT #use delay(clock=4000000) #use fast_io (b) #use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8) #define OK PIN_B6 #define Cancel PIN_B7 #define OK_PRESSED !input(OK) #include <lcd_lib_4bit.c> char mang[11]; int8 dem=0; int1 flag; char c; //----------------------------------------------------------------- void main(void) { int8 i; press=0; output_b(0xC0); set_tris_a(0xC0); set_tris_b(0xC1); port_b_pullups (TRUE); set_tris_c(0x90); LCD_putcmd(0x01); LCD_putcmd(0x80); while(1) { if(kbhit()) {c=getc(); if(c=='0') flag=1; if((c=='9')&&(flag==1)){flag=0; break;} if(flag==1) {dem++; mang[dem]=c;}} } mang[10]='\0'; // kết thúc xâu ký tự printf(LCD_putchar,"%s",mang); // Hiển thị lên LCD printf("%s",mang); // truyền lên máy tính }
__________________
Do more than exist, LIVE |
29-01-2008, 10:35 AM | #30 |
Đệ tử 5 túi
Tham gia ngày: Sep 2006
Bài gửi: 100
: |
Báo cáo, tớ đã làm xong phần truyền nhận chuỗi gồm 10 ký tự. Chuỗi này có ký tự bắt đầu là 0, ký tự kết thúc là 9. Có thể dễ dàng modify chương trình để có số ký tự truyền nhận hoặc thay đổi ký tự bắt đầu - kết thúc. Sau đây là chương trình post lên cho những người mới học như tớ tham khảo:
Code:
#include <16F877A.h> #include <def_877a.h> #device *=16 adc=10 #FUSES NOWDT, XT, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT #use delay(clock=4000000) #use fast_io (b) #use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8) #include <lcd_lib_4bit.c> char mang[11]; int8 dem=0; int1 flag, flag1; char c; #INT_RDA Receive_isr() { c=getc(); if(c=='0') flag=1; if((c=='9')&&(flag==1)){mang[dem]=c; dem++; flag=0; flag1=1;} if(flag==1) {mang[dem]=c; dem++;} } //----------------------------------------------------------------- void main(void) { output_b(0xC0); set_tris_a(0xC0); set_tris_b(0xC1); port_b_pullups (TRUE); set_tris_c(0x90); LCD_init(); delay_ms(500); LCD_putcmd(0x80); Printf(LCD_putchar,"Hi ev'body"); //Hien thi man hinh 1 LCD_putcmd(0xC0); Printf(LCD_putchar,__DATE__); enable_interrupts(INT_RDA); enable_interrupts (global); while(1) { if(flag1==1) { LCD_putcmd(0x01); //xoa man hinh LCD_putcmd(0x80); mang[10]='\0'; printf(LCD_putchar,"%s",mang); printf("%s",mang); } } }
__________________
Do more than exist, LIVE |
|
|