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 Bài Trong Ngày 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 22-12-2008, 09:33 PM   #11
minhminh17
Nhập môn đệ tử
 
Tham gia ngày: Apr 2008
Bài gửi: 4
:
chuong trinh ban lam minh co thu ma sao khi chi can nhan rb3 den rb7 deu xay ra ngat dong loat ma minh nho rb3 dau co ngat dau ma sao no cung thanh ngat luon la sao
va khi vao ngat no thuc hien tat ca cac ngat tu rb4 den rb7 khong chua cai nao roi thoat khoi ngat la sao vay??
mong ban giai thich dieu vo ly do.

ct của Master:
Code:
#include <16f877a.h>
#include <def_877a.h>
#use delay(clock = 20000000)
#fuses HS, NOPUT, NOWDT, NOBROWNOUT, NOLVP, NOPROTECT
#use i2c(MASTER, SDA=PIN_C4, SCL=PIN_C3, force_hw)

const unsigned int8 dulieu[]={1,2,4,8,16,32,64,128};
const unsigned int8 address_slave[]={0,0x10,0x20,0x30,0x40};
int8 a,i,kytu;

void ghi(int8 address,int8 data)
   {
      i2c_start();
      i2c_write(address);
      i2c_write(data);
      i2c_stop();
   }
   
#INT_RB
void ngat_RB()
   {
      if((RBIF)&&(RBIE))
         {
            if(RB4==0)
               {
                  a=1;
                  i=0;                
               }               
            else if(RB5==0)
               {
                  a=2;   
                  i=0;                 
               }               
            else if(RB6==0)
               {                  
                  a=3;   
                  i=0;                  
               }               
            else if(RB7==0)
               {                 
                  a=4;  
                  i=0;                  
               }
         }
      RBIF=0;
   }

void main()
   {
      enable_interrupts(GLOBAL);
      enable_interrupts(INT_RB);
      set_tris_d(0);
      portd=0;
                  
      while(TRUE)
         {          
            kytu=a;
            delay_ms(100);
            
            while(kytu==a)
               {
                  if(a!=0)
                     {
                        delay_ms(50);
                        ghi(address_slave[a],dulieu[i]);
                        i++;
                        if(i==8)
                           {
                              i=0;
                           }
                     }
               }            
           
         }
   }
ct của 4 Slave, chỉ khác nhau 4 address:
Code:
#include <16f877a.h>
#include <def_877a.h>
#use delay(clock = 20000000)
#fuses HS, NOPUT, NOWDT, NOBROWNOUT, NOLVP, NOPROTECT
#use i2c(SLAVE, SDA=PIN_C4, SCL=PIN_C3, address=0x10, force_hw)
   
int8 dulieu;
   
#INT_SSP
void ngat_i2c()
   {
      int8 state;
      state = i2c_isr_state();            
      if(state < 0x80)
         {
            dulieu = i2c_read();
            portd = dulieu;
            delay_ms(50);
         }
   }
   
void main()
   {
      enable_interrupts(GLOBAL);
      enable_interrupts(INT_SSP);
      set_tris_d(0);
            
      while(TRUE)
         {   
            portd = 0;
         }
   }
Mạch mình chạy mô phỏng bằng Proteus thấy có đặc điểm: nếu chỉ nối 1 M và 1 S thì quét led đúng thời gian delay 50ms, còn nối 4 S vào thì dường như led quét rất chậm không đúng 50 ms nữa, nhưng mình nghĩ Proteus chỉ mô phỏng thời gian thực, còn nếu là phần cứng thật thì sẽ chạy đúng yêu cầu như trong code...

Em muốn post sơ đồ mạch lên mà không biết chèn code như thế nào, mong Admin chỉ giùm em cách tải file từ máy...[/QUOTE]
minhminh17 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
 


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à 11:41 PM.


Đượ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