|
Tài trợ cho PIC Vietnam |
Giao tiếp USB, CAN, I2C, SPI, USART... Những giao tiếp được tích hợp trên PIC |
|
Ðiều Chỉnh | Xếp Bài |
18-05-2011, 04:42 PM | #1 |
Đệ tử 3 túi
Tham gia ngày: Dec 2007
Bài gửi: 51
: |
gặp vấn đề khi dùng cả i2c và rs232
mong các bạn giúp đỡ.
mình viết chương trình giao tiếp rs232 giữa 16f877a với pc và giao tiếp i2c giữa 2 pic 16f877a. chương trình của mình như sau: pc gửi 1 giá trị xuống pic sau đó pic lấy giá trị đó cộng thêm 1 rùi gửi lại cho pc qua rs232. tuy nhiên vấn đề mình gặp fai là khi mình chỉ giao tiếp giữa pc và 16f877a thì ok, nhưng khi thêm khai báo #use i2c vào thì giao tiếp pic - pc lại không hoạt động nữa. đây là code của mình Code:
#include "16F877a.h" // PIC18F4550 header file #device 16F877a*=16 ADC=10 #include <defs_16F877a.h> //#include <stdlib.h> //#include <string.h> #fuses HS, NOWDT,PUT, NOPROTECT, NOLVP // for debug mode #use delay(clock=8000000) // for 4Mhz crystal //#use i2c(MASTER, SDA=PIN_C4, SCL=PIN_C3, FORCE_HW) #use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7, stream=PC) #use i2c(MASTER, SDA=PIN_C4, SCL=PIN_C3, FORCE_HW) #use fast_io(b) #use fast_io(c) #use fast_io(a) #use fast_io(d) #use fast_io(e) int1 Flag_DKDN,flag_adc,flag_recei1; int1 DTDC0; // Da tinh diem cat int8 k1; char kt; /////////////////////////////////////////////////////////////////// #INT_RDA void RECEIVER() { kt=fgetc(PC); flag_recei1=1; } void write_i2c(int8 address,int8 data) { i2c_start(); i2c_write(address); i2c_write(data); i2c_stop(); } int8 read_i2c(int8 slave_addr) { int8 value_re; i2c_start(); i2c_write(slave_addr + 1); value_re = i2c_read(0); i2c_stop(); return value_re; } ////////////////////////////////////////////////////////// void main(void) { set_tris_d(0); enable_interrupts(global); enable_interrupts(int_RDA); flag_recei1=0; while(true) { if (flag_recei1==1) { //kt=kt+1; //lcd_display_char(0, 1, kt); kt=kt+1; //lcd_display_int16(0, 5, kt, 0, 0 ); printf("%c",kt); flag_recei1=0; } } } |
|
|