Các bác xem giùm e đoạn code này.Em ráp mạch chạy OK hiển thị dc trên led7seg.Thế nhưng khi ngắt nguồn nuôi AVR thì lẽ ra khi bật lại con 1307 phải chạy tiếp theo thời gian thực,đằng này nó lại set về thời gian mặc định lúc khởi tạo là 12'38'00 .Chả biết code e có vấn đề gì các bác cho e ý kiến.Thks cac bác nhiều.
#include <mega16.h>
#include <delay.h>
// I2C Bus functions
#asm
.equ __i2c_port=0x15 ;PORTC
.equ __sda_bit=0
.equ __scl_bit=1
#endasm
#include <i2c.h>
// DS1307 Real Time Clock functions
#include <ds1307.h>
// Declare your global variables here
unsigned char hour, min, sec;
char const MAP[10] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90 };//Anode
char DIS1,DIS2,DIS3,DIS4,DIS5,DIS6;
void main(void)
{
// Declare your local variables here
// Input/Output Ports initialization
// Port A initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State7=1 State6=1 State5=1 State4=1 State3=1 State2=1 State1=1 State0=1
PORTA=0x00;
DDRA=0xFF;
// Port B initialization
// Func7=In Func6=In Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State7=T State6=T State5=1 State4=1 State3=1 State2=1 State1=1 State0=1
PORTB=0x00;
DDRB=0xFF;
// Port C initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x00;
// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0x00;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=FFh
// OC0 output: Disconnected
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer 1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
MCUCR=0x00;
MCUCSR=0x00;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;
// I2C Bus initialization
i2c_init();
// DS1307 Real Time Clock initialization
// Square wave output on pin SQW/OUT: Off
// SQW/OUT pin state: 0
rtc_init(0,0,0);
rtc_set_time(12,38,00);
while (1)
{
// Place your code here
rtc_get_time(&hour,&min,&sec);
DIS6=(MAP[sec%10]);
PORTA = DIS6;
PORTB.5=0;
delay_ms(1);
PORTB.5=1;
DIS5 =MAP[sec/10];
PORTA = DIS5;
PORTB.4=0;
delay_ms(1);
PORTB.4=1;
DIS4=(MAP[min%10]);
PORTA = DIS4;PORTA.7=0;
PORTB.3=0;
delay_ms(1);
PORTB.3=1;
DIS3 =MAP[min/10];
PORTA = DIS3;
PORTB.2=0;
delay_ms(1);
PORTB.2=1;
DIS2=(MAP[hour%10]);
PORTA = DIS2; PORTA.7=0;
PORTB.1=0;
delay_ms(1);
PORTB.1=1;
DIS1 =MAP[hour/10];
PORTA = DIS1;
PORTB.0=0;
delay_ms(1);
PORTB.0=1;
};
}
#include <mega16.h>
#include <delay.h>
// I2C Bus functions
#asm
.equ __i2c_port=0x15 ;PORTC
.equ __sda_bit=0
.equ __scl_bit=1
#endasm
#include <i2c.h>
// DS1307 Real Time Clock functions
#include <ds1307.h>
// Declare your global variables here
unsigned char hour, min, sec;
char const MAP[10] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90 };//Anode
char DIS1,DIS2,DIS3,DIS4,DIS5,DIS6;
void main(void)
{
// Declare your local variables here
// Input/Output Ports initialization
// Port A initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State7=1 State6=1 State5=1 State4=1 State3=1 State2=1 State1=1 State0=1
PORTA=0x00;
DDRA=0xFF;
// Port B initialization
// Func7=In Func6=In Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State7=T State6=T State5=1 State4=1 State3=1 State2=1 State1=1 State0=1
PORTB=0x00;
DDRB=0xFF;
// Port C initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x00;
// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0x00;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=FFh
// OC0 output: Disconnected
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer 1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
MCUCR=0x00;
MCUCSR=0x00;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;
// I2C Bus initialization
i2c_init();
// DS1307 Real Time Clock initialization
// Square wave output on pin SQW/OUT: Off
// SQW/OUT pin state: 0
rtc_init(0,0,0);
rtc_set_time(12,38,00);
while (1)
{
// Place your code here
rtc_get_time(&hour,&min,&sec);
DIS6=(MAP[sec%10]);
PORTA = DIS6;
PORTB.5=0;
delay_ms(1);
PORTB.5=1;
DIS5 =MAP[sec/10];
PORTA = DIS5;
PORTB.4=0;
delay_ms(1);
PORTB.4=1;
DIS4=(MAP[min%10]);
PORTA = DIS4;PORTA.7=0;
PORTB.3=0;
delay_ms(1);
PORTB.3=1;
DIS3 =MAP[min/10];
PORTA = DIS3;
PORTB.2=0;
delay_ms(1);
PORTB.2=1;
DIS2=(MAP[hour%10]);
PORTA = DIS2; PORTA.7=0;
PORTB.1=0;
delay_ms(1);
PORTB.1=1;
DIS1 =MAP[hour/10];
PORTA = DIS1;
PORTB.0=0;
delay_ms(1);
PORTB.0=1;
};
}
Comment