PIC Vietnam

Go Back   PIC Vietnam > Truyền thông > Giao tiếp USB, CAN, I2C, SPI, USART...

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

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
Prev Previous Post   Next Post Next
Old 18-05-2011, 04:42 PM   #1
bean984
Đệ 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;
      }
   }
}
mong các bạn giúp đỡ
bean984 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
 

Ðiều Chỉnh
Xếp Bà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à 07:56 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