Thứ Năm, 19 tháng 5, 2011

PIC với 74595



include<16f877a.h>
#include<def_877a.h>                                                          // Khai bao cac files thu vien duoc su dung vi du LCD_lib_4bit.c
#device *=16 ADC=10                                                             // Khai bao dung con tro 8 bit hay 16 bit. bo ADC la 10 bit hay 8 bit
#FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT    // khai bao cau hinh cho PIC
#use delay(clock=20000000)                                                      // Tan so thach anh su dung
#define data Rb0
#define shift Rb1
#define latch Rb2
void dich_595(int8 x);
int8 M[8]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};
void main()
   {
   int8 i;
   trisb=0x00;
   portb=0x00;
   dich_595(0x00);
   latch=1;
   latch=0;
   while(true)
   { for(i=0;i<8;i++)
    {
     dich_595(M[i]);
     latch=1;
     latch=0;
   delay_ms(100);
   }
   }
   }
   void dich_595(int8 x)// ham dich
     {
     byte i;
     int8 j;           // byte tham chieu
      for(i=0;i<8;i++) // dich 8 bit
       {      
        j=x&0x80; // 'and' tung bit
        if(j==0x80) // dich bit co trong so max
         data=1;  // dich '1'
         else  
         data=0;  // dich '0'
         shift=1; // day du lieu ra ngoai
         shift=0; // du lieu duoc day
       rotate_left( &x, 1); // quay trai 1 byte '&x' la dia chi chua du lieu can quay khi quay du 1 byte thi du lieu tai dia chi do tro ve trang thai ( du lieu ) ban dau
       }
     return ;     // quay ve chuong trinh goi no
     }
**********************************************************************************