PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > Cơ bản về vi điều khiển và PIC

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

Cơ bản về vi điều khiển và PIC Những bài hướng dẫn cơ bản nhất để làm quen với vi điều khiển PIC

 
 
Ðiều Chỉnh Xếp Bài
Prev Previous Post   Next Post Next
Old 15-06-2008, 12:02 PM   #13
Mr.Bi
Đệ tử 7 túi
 
Tham gia ngày: Jul 2007
Nơi Cư Ngụ: Đà Nẵng
Bài gửi: 188
:
Trích:
Nguyên văn bởi nguyendungdt12 View Post
làm mãi mà vẫn khong thiết lập được chán ghê, có bác nào giúp cho tiểu đệ 1 đoạn code để khởi taịo cho ds1307 giá trị đầu và nó chạy luôn mà không cần nút chỉnh bên ngoài không nhỉ? Em dung pic 16F877a và CCS
nè u ! làm gì mà than vãn ghê z thế
Code:
#include    <16F877A.h>
#fuses      NOPROTECT,HS,NOWDT,NOLVP,NODEBUG,NOPUT
#use        delay(clock =20000000)
#use        i2c(master,fast,sda=PIN_C4,scl=PIN_C3)

#define mode   RE0 
#define change RE1
#define IR     RE2
//                                0     1    2    3    4   5    6    7    8    9
unsigned char const maled[10] = {0x01,0xCF,0x92,0x86,0xCC,0xA4,0xA0,0x8F,0x80,0x04};
unsigned char sec,min,hour,dow,date,month,year; // bien data trong RTC
unsigned char day1,day2,month1,month2,year1,year2,hour1,hour2,min1,min2,sec1,sec2; // bien xuat data
unsigned char hour_wait1,hour_wait2,min_wait1,min_wait2;
unsigned char i=0;
unsigned int  var_IR=0;

//------------ham thu tin hieu Sony------------------------
void scan_IR()
{ if (!IR) { delay_ms(1);
             if(!IR){ RB1= RB2 = 1 ; // tat 2 led
                      while(!IR) continue ; // trong khi IR van muc 0 thi wait de doi sang muc 1
                      while(IR) continue ;  // neu IR chuyen sang muc 1 thi wait tiep
                      delay_us(750);
                      for(i=1;i<=12;i++)
                             { //if(IR==0){ bit_set(var_IR,i)  ; };
                               //if(IR!=0){ bit_clear(var_IR,i); };
                               if(IR==0){ (var_IR ||0x01)<<i; };
                               if(IR!=0){ (var_IR ||0x01)<<i; };
                               while(!IR) continue ; 
                               while(IR) continue ;  
                               delay_us(750);
                             };
                    };
           };
}  


void test_IR()  
{  for(i=0;i<=12;i++)
        {
          if(bit_test(var_IR,i)==1) 
               {RB1 = 0 ;delay_ms(1000); // bat led day1
                RB1 = 1 ;delay_ms(1000);
               };
          if(bit_test(var_IR,i)==0) 
               {RB2 = 0;delay_ms(1000); // bat led day2
                RB2 = 1;delay_ms(1000); 
               };
        };
}
//++++++++++++++++++++++++++++++++++++++++++++++++++++  


//------------ cac ham lien quan den RTC--------------------
void init_time()
{ I2C_start();       // gui bit start
  I2C_write(0xD0);   // gui lenh write
  I2C_write(0x07);   // den dia chi 07H de
  I2C_write(0x10);   // cau hinh cho thanh ghi 07H
  I2C_stop();
  
  I2C_start();
  I2C_write(0xD0);
  I2C_write(0x00);   // dia chi 00h
  I2C_write(0x00);   // nap gia tri cho thanh ghi giay = 0 , dong thoi xoa bit CH
  I2C_write(0x01);   // cho thanh ghi phut = 1
  I2C_write(0x11);   // chon mode 24h cho thanh ghi gio & nap gia tri la 11h
  I2C_write(0x02);   // thu 2
  I2C_write(0x15);   // ngay 15
  I2C_write(0x06);   // thang 6
  I2C_write(0x08);   // nam 2008 , nhap gia tri 2 so cuoi cua nam
  i2c_read(0);
  I2C_stop();
}
void up_date1307()
{ 
}

void update_time()
{I2C_start();
 I2C_write(0xD0); // gui lenh ghi
 I2C_write(0x00); // dia chi bat dau
 I2C_start();
 I2C_write(0xD1); // gui lenh doc
 sec=i2c_read(1);
 min=i2c_read(2);
 hour=i2c_read(3);
 dow =i2c_read(4);
 date=i2c_read(5);
 month=i2c_read(6);
 year=i2c_read(7);
 i2c_read(0);
 i2c_stop();

 sec1  = sec & 0x0F;
 sec2  = (sec & 0xF0)>>4;
 min1  = min & 0x0F;
 min2  = (min & 0xF0)>>4;
 hour1 = hour & 0x0F;
 hour2 = (hour & 0xF0)>>4;
 day1  = date & 0x0F ; 
 day2  = (date & 0xF0)>>4;
 month1= month & 0x0F ; 
 month2= (month & 0xF0)>>4;
 year1 = year & 0x0F ; 
 year2 = (year & 0xF0)>>4;
}


#int_ext
void read_time()
{ I2C_start();
  I2C_write(0xD0);
  I2C_write(0x00);   // xoa bit CH
  I2C_start();
  I2C_write(0xD1);
  sec = I2C_read(0x00);
  I2C_stop();
  if(sec==0) update_time();
  sec1 = sec & 0x0F;// lay 4 bit thap
  sec2 = (sec & 0xF0) >> 4 ;
}


void display()
{ PORTD = maled[sec1] ;RC6=0 ; delay_us(50); RC6=1 ;
  PORTD = maled[sec2] ;RC5=0 ; delay_us(50); RC5=1 ; 
  PORTD = maled[min1] ;RC2=0 ; delay_us(50); RC2=1 ; 
  PORTD = maled[min2] ;RC1=0 ; delay_us(50); RC1=1 ; 
  PORTD = maled[hour1];RB7=0 ; delay_us(50); RB7=1 ; 
  PORTD = maled[hour2];RC0=0 ; delay_us(50); RC0=1 ; 
  PORTD = maled[day1]; RB2=0 ; delay_us(50); RB2=1 ; 
  PORTD = maled[day2]; RB1=0 ; delay_us(50); RB1=1 ; 
  PORTD = maled[month1];RB4=0; delay_us(50); RB4=1 ; 
  PORTD = maled[month2];RB3=0; delay_us(50); RB3=1 ; 
  PORTD = maled[year1];RB6=0 ; delay_us(50); RB6=1 ; 
  PORTD = maled[year2];RB5=0 ; delay_us(50); RB5=1 ; 
}

main()
{ set_tris_A(0b0000000);  PORTA = 0b00001111;
  set_tris_B(0b00000001); PORTB = 0b11111111; // tat led 1-9
  set_tris_C(0b00011000); PORTC = 0b11100111;
  set_tris_D(0x00); PORTD = 0xFF;
  set_tris_E(0xFF); PORTE = 0xFF;
  
  delay_ms(500);
  init_time();
  
  GIE = 1; // cho phep ngat xay ra
  enable_interrupts(int_ext);
  ext_int_edge(H_to_L);

  while(1)
  {display();
  };
}
code chạy rùi đóa , nhưng ko hỉu sao khi giây về 00 thì tất cả các led đều nháy nháy ( khó chịu chỗ này lám , giống như ta quét led với tốc độ chậm í) wa 3s thì nó mới quét lại đúng thời gian 50ms . Tui cũng ko hỉu làm sao nữa . Nhưng nói chung thỏa mãn kì vọng khởi tạo DS1307 rùi đóa

thay đổi nội dung bởi: Mr.Bi, 15-06-2008 lúc 12:07 PM.
Mr.Bi 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à 02:20 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