![]() |
|
Tài trợ cho PIC Vietnam |
Giao tiếp cổng COM và LPT RS232, RS485 và LPT là những giao tiếp cơ bản và kinh điển khi mới học về vi điều khiển... |
![]() |
|
Ðiều Chỉnh | Xếp Bài |
![]() |
#1 |
Đệ tử 1 túi
Tham gia ngày: Feb 2009
Bài gửi: 19
: |
Cho em hỏi về Gets() và get_string() khi lập trình PIC.
Đoạn code như sau:
void main() { char str[20]; int8 i = 0; int8 len; lcd_init(); lcd_gotoxy(1,1); while(true) { strcpy(str, ""); gets(str); //get_string(str, 20); lcd_putc('\f'); len = strlen(str); for (i=0; i<len; i++) { lcd_putc(str[i]); } } } Mình dùng đoạn code trên để nhận chuỗi dữ liệu từ ứng dụng PC gởi xuống. Nhưng sao chỉ thực hiện nhận dữ liệu và hiển thị lên LCD chỉ một lần. Khi ứng dụng gởi dữ liệu lần đầu thì hàm gets() hoặc get_string (hàm này được định nghĩa trong input.c) nhận được chuỗi truyền xuống và xuất ra LCD. Khi truyền thêm một chuổi khác thì thấy nó dừng lại chổ hàm gets() hoặc get_string và không thực hiện tiếp nữa (chuỗi dữ liệu truyền từ ứng dụng đã có thêm ký tự kết thúc chuỗi trước khi truyền). Anh em nào chỉ giúp với. thanks. thay đổi nội dung bởi: ThaoBinh90, 10-03-2009 lúc 11:12 AM. |
![]() |
![]() |
![]() |
#2 |
Đệ tử 4 túi
Tham gia ngày: Mar 2009
Bài gửi: 64
: |
#include "C:\Program Files\PICC\Projects\main.h"
#include "def_877a.h" #use delay(clock=12000000) //dung thach anh 12Mhz #use rs232(baud=9600, xmit=PIN_c6, rcv=PIN_c7) //khoi tao truyen thong RS232) void main() { set_tris_b(0x00); set_tris_d(0x00); portb=0x55; //tại sao thêm đoạn code này thì pic lại đơ,portb=0x55, rồi chẳng làm gì nữa /* enable_interrupts(GLOBAL); // Cho phep tao ngat enable_interrupts(INT_EXT); // Cho phep ngat ngoai tai chan RB0/INT enable_interrupts(INT_RDA); // Cho phep ngat ngoai tai chan RB0/INT */ while(true) { portb=~portb; delay_ms(250); } } |
![]() |
![]() |
![]() |
#3 | |
Đệ tử 4 túi
Tham gia ngày: Aug 2008
Bài gửi: 89
: |
Trích:
Chưa định nghĩa #INT_EXT và #INT_RDA ^.^
__________________
Quang báo RG/RGB 6/8/12/16 bits màu Phone No: 0905.034.086 Email: lmquyen@gmail.com |
|
![]() |
![]() |
![]() |
#4 |
Đệ tử 4 túi
Tham gia ngày: Mar 2009
Bài gửi: 64
: |
#INT_RDA
xulynhan_usart() { // char s; if(j<max) { str[j]=getc(); portd=str[j]; if(str[j]==13) { j=max; ngat=1; } j++; } return 0; } định nghĩa đây và đồng thời bỏ int_ext đi , cũng ko được, mấy cái này mô phỏng bằng proteus vẫn chạy |
![]() |
![]() |
![]() |
#5 |
Đệ tử 4 túi
Tham gia ngày: Mar 2009
Bài gửi: 64
: |
cho em hỏi tiếp , cơ chế truyền dữ liệu ra cổng rs232 của hyper terminal là thế nào ạ,
trong proteus ,nếu dùng cái terminal để mô phỏng thì ấn phím nào thì nó nhận ngay phìm đó .. (nên khi muốn nhập 1 xâu, chỉ cần lập trình cho pic đọc từng ký tự , khi nào thấy thằng enter thì thôi ko nhập vào xâu ) còn trong hyper terminal, giả sử em muốn truyền một lệnh (hay 1 xâu) xuống pic, thì hyper terminal sẽ truyền như thế nào ...? giả sử chế độ chuyển baud 9600,8-N-1 giả sử đang vào xử lý ngắt rs232, mà lại có ngắt tiếp theo đến thì nó sẽ sử lý thế nào à .?? tiếp nữa,nếu sử dụng PIC WIZARD và chọn cấu hình RS232 rồi, cho phép ngắt RDA rồi , thì trong chương trình còn phải set các bit cần thiết lên nữa ko ?ví dụ CREN,RCIE,GIE,PEIE.....?? thay đổi nội dung bởi: tahi, 14-05-2009 lúc 12:12 AM. |
![]() |
![]() |
![]() |
|
|