thoai_phamkhac
29-04-2011, 01:45 PM
sau khi tham khảo một số vị dụ của các pro trên forum , mình cũng làm 1 mạch RTC như sau :
+) Con ds1307 nối (SDA,SCL,SQW)---->(RC4,RC3,RB0)
+) A[0..4] nối đến con 74HC195 xuất ra led
+) Port D nối đến led
mình cũng viết ra đoạn code dưới () nhưng hình như mình khi nạp thì chỉ thấy 2 chân SDA SCL nháy liên tục , các chân khác không thay đổi điện áp.
Mình không biết sữa ntn nên lên forum mong các pro chỉ giùm (đề tài mình đang làm đồ án nên mong đc hoàn thành sớm) :(
#include <16F877A.h>
#include <DEF_877A.h>
#include <DS1307.c>
#fuses NOWDT,PUT,HS,NOPROTECT,NOLVP
#use delay(clock=4000000)
#use fast_io(d)
#use fast_io(a)
int8 second,minute,hour,day,date,month,year;
int i,so;
int8 time[16]={};
int8 led7doan[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x9 0};
#int_ext
void ngat_RB0()
{
enable_interrupts(GLOBAL);
enable_interrupts(int_ext);
ext_int_edge(L_TO_H);
}
void ghivaoDS1307()
{
write_DS1307(0x00,1);
write_DS1307(0x01,1);
write_DS1307(0x02,1);
write_DS1307(0x03,1);
write_DS1307(0x04,1);
write_DS1307(0x05,1);
write_DS1307(0x06,1);
write_DS1307(0x07,11);
}
void docDS1307()
{
BYTE second,minute,hour,day,date,month,year;
second=read_DS1307(0x00);
minute=read_DS1307(0x01);
hour =read_DS1307(0x02);
day =read_DS1307(0x03);
date =read_DS1307(0x04);
month =read_DS1307(0x05);
year =read_DS1307(0x06);
}
void ghi_ra_led()
{
time[0]=(second & 0x0f)>>4; //Giay hang chuc
time[1]=second & 0x0f; //Giay don vi
time[2]=(minute & 0xf0)>>4; //Phut hang chuc
time[3]=minute & 0x0f; //Phut don vi
time[4]=(hour & 0xf0)>>4; //Gio hang chuc
time[5]=hour & 0x0f; //Gio don vi
time[4]=(hour & 0xf0)>>4; //Gio hang chuc
time[6]=day & 0x0f; //Thu
time[7]=0;
time[8]=(date & 0xf0)>>4;
time[9]=date & 0x0f; //Ngay don vi
time[10]=(month & 0xf0)>>4;
time[11]=month & 0x0f; //Thang hang don vi
time[12]=2; //Nam hang ngan
time[13]=0; //Nam hang tram
time[14]=(year & 0xf0)>>4; //Nam hang chuc
time[15]=year & 0x0f; //nam hang don vi
}
void main()
{
set_tris_a(0x00);
set_tris_d(0x00);
delay_ms(50);
init_DS1307();
ghivaoDS1307();
ngat_RB0();
while(true)
{
docDS1307();
ghi_ra_led();
for(i=0;i<=15;i++)
{
output_a(i);
so=time[i];
output_d(led7doan[so]);
delay_ms(10);
}
}
}
đoạn code mình sử dụng thêm file ds1307.c down twuf forum về
+) Con ds1307 nối (SDA,SCL,SQW)---->(RC4,RC3,RB0)
+) A[0..4] nối đến con 74HC195 xuất ra led
+) Port D nối đến led
mình cũng viết ra đoạn code dưới () nhưng hình như mình khi nạp thì chỉ thấy 2 chân SDA SCL nháy liên tục , các chân khác không thay đổi điện áp.
Mình không biết sữa ntn nên lên forum mong các pro chỉ giùm (đề tài mình đang làm đồ án nên mong đc hoàn thành sớm) :(
#include <16F877A.h>
#include <DEF_877A.h>
#include <DS1307.c>
#fuses NOWDT,PUT,HS,NOPROTECT,NOLVP
#use delay(clock=4000000)
#use fast_io(d)
#use fast_io(a)
int8 second,minute,hour,day,date,month,year;
int i,so;
int8 time[16]={};
int8 led7doan[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x9 0};
#int_ext
void ngat_RB0()
{
enable_interrupts(GLOBAL);
enable_interrupts(int_ext);
ext_int_edge(L_TO_H);
}
void ghivaoDS1307()
{
write_DS1307(0x00,1);
write_DS1307(0x01,1);
write_DS1307(0x02,1);
write_DS1307(0x03,1);
write_DS1307(0x04,1);
write_DS1307(0x05,1);
write_DS1307(0x06,1);
write_DS1307(0x07,11);
}
void docDS1307()
{
BYTE second,minute,hour,day,date,month,year;
second=read_DS1307(0x00);
minute=read_DS1307(0x01);
hour =read_DS1307(0x02);
day =read_DS1307(0x03);
date =read_DS1307(0x04);
month =read_DS1307(0x05);
year =read_DS1307(0x06);
}
void ghi_ra_led()
{
time[0]=(second & 0x0f)>>4; //Giay hang chuc
time[1]=second & 0x0f; //Giay don vi
time[2]=(minute & 0xf0)>>4; //Phut hang chuc
time[3]=minute & 0x0f; //Phut don vi
time[4]=(hour & 0xf0)>>4; //Gio hang chuc
time[5]=hour & 0x0f; //Gio don vi
time[4]=(hour & 0xf0)>>4; //Gio hang chuc
time[6]=day & 0x0f; //Thu
time[7]=0;
time[8]=(date & 0xf0)>>4;
time[9]=date & 0x0f; //Ngay don vi
time[10]=(month & 0xf0)>>4;
time[11]=month & 0x0f; //Thang hang don vi
time[12]=2; //Nam hang ngan
time[13]=0; //Nam hang tram
time[14]=(year & 0xf0)>>4; //Nam hang chuc
time[15]=year & 0x0f; //nam hang don vi
}
void main()
{
set_tris_a(0x00);
set_tris_d(0x00);
delay_ms(50);
init_DS1307();
ghivaoDS1307();
ngat_RB0();
while(true)
{
docDS1307();
ghi_ra_led();
for(i=0;i<=15;i++)
{
output_a(i);
so=time[i];
output_d(led7doan[so]);
delay_ms(10);
}
}
}
đoạn code mình sử dụng thêm file ds1307.c down twuf forum về