;/*======================================================================================
;Project : I2CÅë½ÅÀ» ÀÌ¿ëÇÑ RTC(IN1307) Á¦¾îÇÏ±â
;Version : AVR2560D-V01
;Date    : 2011-07-28
;Author  : Kyung Nam Lee
;Company : LKEMBEDDED
;Compiler: CodevisionAVR + AVRStudio
;Comment: RTC(IN1307) ICÀÇ Á¤º¸¸¦ ÀÐ¾î ¿Í¼­ UART0Æ÷Æ®¿¡¼­  ASCII°ªÀ¸·Î Ãâ·ÂÇÏ´Â ÇÁ·Î±×·¥ÀÌ´Ù.
;
;¡Ø¡ØÁÖÀÇ»çÇ×¡Ø¡Ø
;RS232 TO USB ÄÁ¹öÅÍ¸¦ ÀÌ¿ëÇÏ¿© AVR2560DÈ®ÀåÇü °³¹ßº¸µå¿Í PC¸¦ ¼­·Î ¿¬°áÇØ¾ß ÇÑ´Ù.
;======================================================================================*/
;
;#include <mega2560.h>
;PCODE: $00000000 VOL: 0
	#ifndef __SLEEP_DEFINED__
;PCODE: $00000001 VOL: 0
	#define __SLEEP_DEFINED__
;PCODE: $00000002 VOL: 0
	.EQU __se_bit=0x01
;PCODE: $00000003 VOL: 0
	.EQU __sm_mask=0x0E
;PCODE: $00000004 VOL: 0
	.EQU __sm_powerdown=0x04
;PCODE: $00000005 VOL: 0
	.EQU __sm_powersave=0x06
;PCODE: $00000006 VOL: 0
	.EQU __sm_standby=0x0C
;PCODE: $00000007 VOL: 0
	.EQU __sm_ext_standby=0x0E
;PCODE: $00000008 VOL: 0
	.EQU __sm_adc_noise_red=0x02
;PCODE: $00000009 VOL: 0
	.SET power_ctrl_reg=smcr
;PCODE: $0000000A VOL: 0
	#endif
;PCODE: $0000000B VOL: 0
;PCODE: $0000000C VOL: 0
;#define MAINCLK     16000000 //¸ÞÀÎ Å©¸®½ºÅ» Å¬·°
;#define TWI_CLK      100000 //100khz
;
;#define TWBR_SET    (MAINCLK-(16*TWI_CLK))/(4*2*TWI_CLK) //ÀÚµ¿À¸·Î TWBRÀ» ±¸ÇÏ±â À§ÇÑ°ø½Ä
;
;char data[4]={0};
;
;// Standard Input/Output functions
;#include <stdio.h>
;#include <delay.h>
;#define TWIE    0
;#define TWEN    2
;#define TWWC    3
;#define TWSTO   4
;#define TWSTA   5
;#define TWEA    6
;#define TWINT   7
;
;
;void EEPROM_write(char WordAdress,char data)
; 0000 0023 {

	.CSEG
;PCODE: $0000000D VOL: 0
;PCODE: $0000000E VOL: 0
; 0000 0024     TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN);
;	WordAdress -> Y+1
;	data -> Y+0
;PCODE: $0000000F VOL: 0
;PCODE: $00000010 VOL: 0
; 0000 0025     /*
; 0000 0026     Send START condition
; 0000 0027     */
; 0000 0028     while (!(TWCR & (1<<TWINT)));
;PCODE: $00000011 VOL: 0
;PCODE: $00000012 VOL: 0
;PCODE: $00000013 VOL: 0
;PCODE: $00000014 VOL: 0
;PCODE: $00000015 VOL: 0
;PCODE: $00000016 VOL: 0
; 0000 0029     /* Wait for TWINT flag set. This indicates that the
; 0000 002A     START condition has been transmitted
; 0000 002B     */
; 0000 002C     TWDR = 0xd0;
;PCODE: $00000017 VOL: 0
;PCODE: $00000018 VOL: 0
; 0000 002D     /*Load 0xa0 into TWDR Register.Clear TWINT bit in
; 0000 002E     TWCR to start transmission of address
; 0000 002F     */
; 0000 0030     TWCR = (1<<TWINT) |(1<<TWEN);
;PCODE: $00000019 VOL: 0
;PCODE: $0000001A VOL: 0
; 0000 0031     while (!(TWCR & (1<<TWINT)));
;PCODE: $0000001B VOL: 0
;PCODE: $0000001C VOL: 0
;PCODE: $0000001D VOL: 0
;PCODE: $0000001E VOL: 0
;PCODE: $0000001F VOL: 0
;PCODE: $00000020 VOL: 0
; 0000 0032     /* Wait for TWINT flag set. This indicates that the
; 0000 0033     0xa0 has been transmitted, and
; 0000 0034     ACK/NACK has been received.
; 0000 0035     */
; 0000 0036     TWDR = WordAdress;
;PCODE: $00000021 VOL: 0
;PCODE: $00000022 VOL: 0
; 0000 0037     TWCR = (1<<TWINT) |(1<<TWEN);
;PCODE: $00000023 VOL: 0
;PCODE: $00000024 VOL: 0
; 0000 0038 
; 0000 0039     /*
; 0000 003A     Load low into TWDR Register. Clear TWINT
; 0000 003B     bit in TWCR to start transmission of data
; 0000 003C     */
; 0000 003D     while (!(TWCR & (1<<TWINT)));
;PCODE: $00000025 VOL: 0
;PCODE: $00000026 VOL: 0
;PCODE: $00000027 VOL: 0
;PCODE: $00000028 VOL: 0
;PCODE: $00000029 VOL: 0
;PCODE: $0000002A VOL: 0
; 0000 003E     /*
; 0000 003F     Wait for TWINT flag set. This indicates that the
; 0000 0040     low has been transmitted, and ACK/NACK
; 0000 0041     has been received.
; 0000 0042     */
; 0000 0043     TWDR = data;
;PCODE: $0000002B VOL: 0
;PCODE: $0000002C VOL: 0
; 0000 0044     TWCR = (1<<TWINT) |(1<<TWEN);
;PCODE: $0000002D VOL: 0
;PCODE: $0000002E VOL: 0
; 0000 0045     /*
; 0000 0046     Load low into TWDR Register. Clear TWINT
; 0000 0047     bit in TWCR to start transmission of data
; 0000 0048     */
; 0000 0049     while (!(TWCR & (1<<TWINT)));
;PCODE: $0000002F VOL: 0
;PCODE: $00000030 VOL: 0
;PCODE: $00000031 VOL: 0
;PCODE: $00000032 VOL: 0
;PCODE: $00000033 VOL: 0
;PCODE: $00000034 VOL: 0
; 0000 004A     /*
; 0000 004B     Wait for TWINT flag set. This indicates that the
; 0000 004C     low has been transmitted, and ACK/NACK
; 0000 004D     has been received.
; 0000 004E     */
; 0000 004F     TWCR = (1<<TWINT)|(1<<TWEN)|(1<<TWSTO);
;PCODE: $00000035 VOL: 0
;PCODE: $00000036 VOL: 0
; 0000 0050     /*
; 0000 0051     Transmit STOP condition
; 0000 0052     */
; 0000 0053 }
;PCODE: $00000037 VOL: 0
;PCODE: $00000038 VOL: 0
;PCODE: $00000039 VOL: 0
;char EEPROM_read(char high)
; 0000 0055 {
;PCODE: $0000003A VOL: 0
;PCODE: $0000003B VOL: 0
; 0000 0056     char data=0;
; 0000 0057     TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN);
;PCODE: $0000003C VOL: 0
;	high -> Y+1
;	data -> R17
;PCODE: $0000003D VOL: 0
;PCODE: $0000003E VOL: 0
;PCODE: $0000003F VOL: 0
;PCODE: $00000040 VOL: 0
; 0000 0058     /*
; 0000 0059     Send START condition
; 0000 005A     */
; 0000 005B     while (!(TWCR & (1<<TWINT)));
;PCODE: $00000041 VOL: 0
;PCODE: $00000042 VOL: 0
;PCODE: $00000043 VOL: 0
;PCODE: $00000044 VOL: 0
;PCODE: $00000045 VOL: 0
;PCODE: $00000046 VOL: 0
; 0000 005C     /*
; 0000 005D     Wait for TWINT flag set. This indicates that the
; 0000 005E     low has been transmitted, and ACK/NACK
; 0000 005F     has been received.
; 0000 0060     */
; 0000 0061     TWDR = 0xd0;
;PCODE: $00000047 VOL: 0
;PCODE: $00000048 VOL: 0
; 0000 0062     TWCR = (1<<TWINT) |(1<<TWEN);
;PCODE: $00000049 VOL: 0
;PCODE: $0000004A VOL: 0
; 0000 0063     /*
; 0000 0064     Load 0xa0 into TWDR Register. Clear TWINT
; 0000 0065     bit in TWCR to start transmission of data
; 0000 0066     */
; 0000 0067     while (!(TWCR & (1<<TWINT)));
;PCODE: $0000004B VOL: 0
;PCODE: $0000004C VOL: 0
;PCODE: $0000004D VOL: 0
;PCODE: $0000004E VOL: 0
;PCODE: $0000004F VOL: 0
;PCODE: $00000050 VOL: 0
; 0000 0068     /*
; 0000 0069     Wait for TWINT flag set. This indicates that the
; 0000 006A     low has been transmitted, and ACK/NACK
; 0000 006B     has been received.
; 0000 006C     */
; 0000 006D     TWDR = high;
;PCODE: $00000051 VOL: 0
;PCODE: $00000052 VOL: 0
; 0000 006E     TWCR = (1<<TWINT) |(1<<TWEN);
;PCODE: $00000053 VOL: 0
;PCODE: $00000054 VOL: 0
; 0000 006F     /*
; 0000 0070     Load high into TWDR Register. Clear TWINT
; 0000 0071     bit in TWCR to start transmission of data
; 0000 0072     */
; 0000 0073     while (!(TWCR & (1<<TWINT)));
;PCODE: $00000055 VOL: 0
;PCODE: $00000056 VOL: 0
;PCODE: $00000057 VOL: 0
;PCODE: $00000058 VOL: 0
;PCODE: $00000059 VOL: 0
;PCODE: $0000005A VOL: 0
; 0000 0074     /*
; 0000 0075     Wait for TWINT flag set. This indicates that the
; 0000 0076     low has been transmitted, and ACK/NACK
; 0000 0077     has been received.
; 0000 0078     */
; 0000 0079     TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN);
;PCODE: $0000005B VOL: 0
;PCODE: $0000005C VOL: 0
; 0000 007A     /*
; 0000 007B     Send RESTART condition
; 0000 007C     */
; 0000 007D     while (!(TWCR & (1<<TWINT)));
;PCODE: $0000005D VOL: 0
;PCODE: $0000005E VOL: 0
;PCODE: $0000005F VOL: 0
;PCODE: $00000060 VOL: 0
;PCODE: $00000061 VOL: 0
;PCODE: $00000062 VOL: 0
; 0000 007E     /*
; 0000 007F     Wait for TWINT flag set. This indicates that the
; 0000 0080     low has been transmitted, and ACK/NACK
; 0000 0081     has been received.
; 0000 0082     */
; 0000 0083     TWDR = 0xd1;
;PCODE: $00000063 VOL: 0
;PCODE: $00000064 VOL: 0
; 0000 0084     TWCR = (1<<TWINT) |(1<<TWEN);
;PCODE: $00000065 VOL: 0
;PCODE: $00000066 VOL: 0
; 0000 0085     /*
; 0000 0086     Load 0xa0|1 into TWDR Register. Clear TWINT
; 0000 0087     bit in TWCR to start transmission of data
; 0000 0088     */
; 0000 0089     while (!(TWCR & (1<<TWINT)));
;PCODE: $00000067 VOL: 0
;PCODE: $00000068 VOL: 0
;PCODE: $00000069 VOL: 0
;PCODE: $0000006A VOL: 0
;PCODE: $0000006B VOL: 0
;PCODE: $0000006C VOL: 0
; 0000 008A     /*
; 0000 008B     Wait for TWINT flag set. This indicates that the
; 0000 008C     low has been transmitted, and ACK/NACK
; 0000 008D     has been received.
; 0000 008E     */
; 0000 008F     TWCR = (1<<TWINT) |(1<<TWEN);
;PCODE: $0000006D VOL: 0
;PCODE: $0000006E VOL: 0
; 0000 0090     while (!(TWCR & (1<<TWINT)));
;PCODE: $0000006F VOL: 0
;PCODE: $00000070 VOL: 0
;PCODE: $00000071 VOL: 0
;PCODE: $00000072 VOL: 0
;PCODE: $00000073 VOL: 0
;PCODE: $00000074 VOL: 0
; 0000 0091     /*
; 0000 0092     Wait for TWINT flag set. This indicates that the
; 0000 0093     low has been transmitted, and ACK/NACK
; 0000 0094     has been received.
; 0000 0095     */
; 0000 0096     data=TWDR;
;PCODE: $00000075 VOL: 0
;PCODE: $00000076 VOL: 0
; 0000 0097     TWCR = (1<<TWINT)|(1<<TWEN)|(1<<TWSTO);
;PCODE: $00000077 VOL: 0
;PCODE: $00000078 VOL: 0
; 0000 0098     /*
; 0000 0099     Load TWDR into data. Clear TWINT
; 0000 009A     bit in TWCR to start transmission of data
; 0000 009B     */
; 0000 009C     return data;
;PCODE: $00000079 VOL: 0
;PCODE: $0000007A VOL: 0
;PCODE: $0000007B VOL: 0
;PCODE: $0000007C VOL: 0
;PCODE: $0000007D VOL: 0
; 0000 009D }
;PCODE: $0000007E VOL: 0
;
;void main(void)
; 0000 00A0 {
;PCODE: $0000007F VOL: 0
; 0000 00A1 
; 0000 00A2     // Crystal Oscillator division factor: 1
; 0000 00A3     #pragma optsize-
; 0000 00A4     CLKPR=0x80;
;PCODE: $00000080 VOL: 0
;PCODE: $00000081 VOL: 0
; 0000 00A5     CLKPR=0x00;
;PCODE: $00000082 VOL: 0
;PCODE: $00000083 VOL: 0
; 0000 00A6     #ifdef _OPTIMIZE_SIZE_
; 0000 00A7     #pragma optsize+
; 0000 00A8     #endif
; 0000 00A9 
; 0000 00AA     // USART0 initialization
; 0000 00AB     // Communication Parameters: 8 Data, 1 Stop, No Parity
; 0000 00AC     // USART0 Receiver: Off
; 0000 00AD     // USART0 Transmitter: On
; 0000 00AE     // USART0 Mode: Asynchronous
; 0000 00AF     // USART0 Baud Rate: 9600
; 0000 00B0     UCSR0A=0x00;
;PCODE: $00000084 VOL: 0
;PCODE: $00000085 VOL: 0
; 0000 00B1     UCSR0B=0x08;
;PCODE: $00000086 VOL: 0
;PCODE: $00000087 VOL: 0
; 0000 00B2     UCSR0C=0x06;
;PCODE: $00000088 VOL: 0
;PCODE: $00000089 VOL: 0
; 0000 00B3     UBRR0H=0x00;
;PCODE: $0000008A VOL: 0
;PCODE: $0000008B VOL: 0
; 0000 00B4     UBRR0L=0x67;
;PCODE: $0000008C VOL: 0
;PCODE: $0000008D VOL: 0
; 0000 00B5 
; 0000 00B6     // TWI initialization
; 0000 00B7     //TWBR = TWBR_SET;// 105, for 100kHz
; 0000 00B8     TWBR = TWBR_SET;
;PCODE: $0000008E VOL: 0
;PCODE: $0000008F VOL: 0
; 0000 00B9     TWSR=0;
;PCODE: $00000090 VOL: 0
;PCODE: $00000091 VOL: 0
; 0000 00BA     TWCR=0X04;
;PCODE: $00000092 VOL: 0
;PCODE: $00000093 VOL: 0
; 0000 00BB     //---RTC(IN1307) ÃÊ±â¼³Á¤(½Ã°£, ºÐ, ÃÊ)
; 0000 00BC     EEPROM_write(00,0);         //second
;PCODE: $00000094 VOL: 0
;PCODE: $00000095 VOL: 0
;PCODE: $00000096 VOL: 0
;PCODE: $00000097 VOL: 0
;PCODE: $00000098 VOL: 0
; 0000 00BD     EEPROM_write(01,0x03);      //minutes
;PCODE: $00000099 VOL: 0
;PCODE: $0000009A VOL: 0
;PCODE: $0000009B VOL: 0
;PCODE: $0000009C VOL: 0
;PCODE: $0000009D VOL: 0
; 0000 00BE     EEPROM_write(02,6);         //hour
;PCODE: $0000009E VOL: 0
;PCODE: $0000009F VOL: 0
;PCODE: $000000A0 VOL: 0
;PCODE: $000000A1 VOL: 0
;PCODE: $000000A2 VOL: 0
; 0000 00BF     EEPROM_write(07,0x03);      //control
;PCODE: $000000A3 VOL: 0
;PCODE: $000000A4 VOL: 0
;PCODE: $000000A5 VOL: 0
;PCODE: $000000A6 VOL: 0
;PCODE: $000000A7 VOL: 0
; 0000 00C0     //-------------------------------------
; 0000 00C1 while (1)
;PCODE: $000000A8 VOL: 0
; 0000 00C2       {
; 0000 00C3         static unsigned char data,data1,data2=0;
; 0000 00C4         static unsigned char h,m,s=0;
; 0000 00C5 
; 0000 00C6         data=EEPROM_read(0);
;PCODE: $000000A9 VOL: 0
;PCODE: $000000AA VOL: 0
;PCODE: $000000AB VOL: 0
;PCODE: $000000AC VOL: 0
; 0000 00C7         data1=(data&0x0f);  // 1ÀÇ ÀÚ¸® ÃÊ
;PCODE: $000000AD VOL: 0
;PCODE: $000000AE VOL: 0
;PCODE: $000000AF VOL: 0
; 0000 00C8         data2=(data&0x70);  // 10ÀÇ ÀÚ¸® ÃÊ
;PCODE: $000000B0 VOL: 0
;PCODE: $000000B1 VOL: 0
;PCODE: $000000B2 VOL: 0
; 0000 00C9         data2=(data2>>4)*10; //ÃÊ
;PCODE: $000000B3 VOL: 0
;PCODE: $000000B4 VOL: 0
;PCODE: $000000B5 VOL: 0
;PCODE: $000000B6 VOL: 0
;PCODE: $000000B7 VOL: 0
;PCODE: $000000B8 VOL: 0
; 0000 00CA 
; 0000 00CB         s=(data2+data1);
;PCODE: $000000B9 VOL: 0
;PCODE: $000000BA VOL: 0
;PCODE: $000000BB VOL: 0
;PCODE: $000000BC VOL: 0
; 0000 00CC 
; 0000 00CD         data=EEPROM_read(1);
;PCODE: $000000BD VOL: 0
;PCODE: $000000BE VOL: 0
;PCODE: $000000BF VOL: 0
;PCODE: $000000C0 VOL: 0
; 0000 00CE         data1=(data&0x0f);  // 1ÀÇ ÀÚ¸® ÃÊ
;PCODE: $000000C1 VOL: 0
;PCODE: $000000C2 VOL: 0
;PCODE: $000000C3 VOL: 0
; 0000 00CF         data2=(data&0x70);  // 10ÀÇ ÀÚ¸® ÃÊ
;PCODE: $000000C4 VOL: 0
;PCODE: $000000C5 VOL: 0
;PCODE: $000000C6 VOL: 0
; 0000 00D0         data2=(data2>>4)*10;
;PCODE: $000000C7 VOL: 0
;PCODE: $000000C8 VOL: 0
;PCODE: $000000C9 VOL: 0
;PCODE: $000000CA VOL: 0
;PCODE: $000000CB VOL: 0
;PCODE: $000000CC VOL: 0
; 0000 00D1         m=(data2+data1);    //ºÐ
;PCODE: $000000CD VOL: 0
;PCODE: $000000CE VOL: 0
;PCODE: $000000CF VOL: 0
;PCODE: $000000D0 VOL: 0
; 0000 00D2 
; 0000 00D3         data=EEPROM_read(2);
;PCODE: $000000D1 VOL: 0
;PCODE: $000000D2 VOL: 0
;PCODE: $000000D3 VOL: 0
;PCODE: $000000D4 VOL: 0
; 0000 00D4         data1=(data&0x0f);  // 1ÀÇ ÀÚ¸® ÃÊ
;PCODE: $000000D5 VOL: 0
;PCODE: $000000D6 VOL: 0
;PCODE: $000000D7 VOL: 0
; 0000 00D5         data2=(data&0x30);  // 10ÀÇ ÀÚ¸® ÃÊ
;PCODE: $000000D8 VOL: 0
;PCODE: $000000D9 VOL: 0
;PCODE: $000000DA VOL: 0
; 0000 00D6         data2=(data2>>4)*10;
;PCODE: $000000DB VOL: 0
;PCODE: $000000DC VOL: 0
;PCODE: $000000DD VOL: 0
;PCODE: $000000DE VOL: 0
;PCODE: $000000DF VOL: 0
;PCODE: $000000E0 VOL: 0
; 0000 00D7         h=(data2+data1);  //½Ã°£
;PCODE: $000000E1 VOL: 0
;PCODE: $000000E2 VOL: 0
;PCODE: $000000E3 VOL: 0
;PCODE: $000000E4 VOL: 0
; 0000 00D8 
; 0000 00D9         printf("hour: %d minute: %d second: %d\r\n",h,m,s);//½Ã°£, ºÐ, ÃÊ
;PCODE: $000000E5 VOL: 0
;PCODE: $000000E6 VOL: 0
;PCODE: $000000E7 VOL: 0
;PCODE: $000000E8 VOL: 0
;PCODE: $000000E9 VOL: 0
;PCODE: $000000EA VOL: 0
;PCODE: $000000EB VOL: 0
;PCODE: $000000EC VOL: 0
;PCODE: $000000ED VOL: 0
;PCODE: $000000EE VOL: 0
;PCODE: $000000EF VOL: 0
;PCODE: $000000F0 VOL: 0
;PCODE: $000000F1 VOL: 0
;PCODE: $000000F2 VOL: 0
;PCODE: $000000F3 VOL: 0
;PCODE: $000000F4 VOL: 0
; 0000 00DA       }
;PCODE: $000000F5 VOL: 0
;PCODE: $000000F6 VOL: 0
; 0000 00DB }
;PCODE: $000000F7 VOL: 0
;PCODE: $000000F8 VOL: 0
;PCODE: $000000F9 VOL: 0
