PIC Vietnam

PIC Vietnam (http://www.picvietnam.com/forum/index.php)
-   Giao tiếp USB, CAN, I2C, SPI, USART... (http://www.picvietnam.com/forum/forumdisplay.php?f=45)
-   -   Cần tìm giúp lỗi lập trình kết nối với DS1307 (http://www.picvietnam.com/forum/showthread.php?t=31204)

dt03 16-11-2012 03:56 AM

Cần tìm giúp lỗi lập trình kết nối với DS1307
 
1 Attachment(s)
Chào các bác, em code cho DS1307 kết nối 16f877a với 3 nút bấm 3 chân rb4->rb6 để chọn chế độ setup, down, up và khi build nó mắc lỗi rất lại. Đây là code của em.

#define <16f877a.h>
#define <def_877a.h>
#include <LCD.c>
#device *=16 ADC=8
#include <DS1307.c>
#use delay(clock=20000000)
#FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT
#use i2c(Master, sda = PIN_C4, scl=PIN_C3)
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bi ts=8)
#use fast_io (B)
#define select rb4
#define up rb5
#define down rb6
int8 sec, min, hour, date, month, year;//Luu tru gia tri ngay, thang , nam
int8 count=0; //Bien luu tru trang thai set up
//Chuong trinh ngat
#int_RB
void ngat_RB()
{
if(rb4==0){
delay_ms(10);//chong nay phim
count++; //Bien luu tru trang thai setup
if(count=7) count=0;
}
if(rb5==0){
delay_ms(10);
switch(count){
case 0: update_time();
case 1: {sec++; if(sec==60) sec=0; break;}
case 2: {min++; if(min==60) min=0; break;}
case 3: {hour++; if(hour==24) hour=0; break;}
case 4: {date++; if(date==32) date=1; break;}
case 5: {month++; if(month==13) month=1; break;}
case 6: {year++; if(year==100) year=0;break;}
}
}
if(rb6==0){
delay_ms(10);
switch(count){
case 0: update_time();
case 1: {sec--; if(sec==-1) sec=59; break;}
case 2: {min--; if(min==-1) min=59; break;}
case 3: {hour--; if(hour==-1) hour=23; break;}
case 4: {date--; if(date==0) date=31; break;}
case 5: {month--; if(month==0) month=12; break;}
case 6: {year--; if(year==0) year=99;break;}
}
}
}
void update_time(){ //Ham cap nhat thoi gian
sec=read_ds1307(0);
min=read_ds1307(1);
hour=read_ds1307(2);
date=read_ds1307(4);
month=read_ds1307(5);
year=read_ds1307(6);
}
void show_LCD(){ //Ham hien thi len LCD
//Dua con tro ve vi tri cot 8 dong 1 va xuat ra giay, phut, gio
lcd_gotoxy(1,8);
prinft(lcd_puts,"%02D:%02D:%02D",sec,min,hour);
//Dua con tro ve vi tri cot 8 dong 2 va xuat ra ngay, thang, nam
lcd_gotoxy(2,8);
printf(lcd_puts,"%02D:%02D:%02D",date,month,hour);
}
void man(){ //Chuong trinh chinh
set_tris_d(0); //Tin hieu ra o Port D
set_tris_b(0xff); //tin hieu vai o Port B
portb=0xff; //Khoi tao tin hieu o port B la muc cao
enable_interrupts(global);//Cho phep ngat toan cuc
enable_interrupts(int_RB);//Cho phep ngat tu Rb4-Rb7
while(1){
update_time();
ext_int_edge(H_to_L);//Ngat xay ra khi tu high->low
show_LCD();
}
}

Còn lỗi em gửi ảnh đính kèm. Mong các bác giúp đỡ em đang cần gấp.:D

dt03 17-11-2012 04:32 PM

Ko ai giúp mình ah?


Múi giờ GMT. Hiện tại là 09:53 PM.

Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam