📄 project.lst
字号:
__start:
__text_start:
002C E5CF LDI R28,0x5F
002D E0D4 LDI R29,4
002E BFCD OUT 0x3D,R28
002F BFDE OUT 0x3E,R29
0030 51C0 SUBI R28,0x10
0031 40D0 SBCI R29,0
0032 EA0A LDI R16,0xAA
0033 8308 STD Y+0,R16
0034 2400 CLR R0
0035 E6E3 LDI R30,0x63
0036 E0F0 LDI R31,0
0037 E010 LDI R17,0
0038 37E1 CPI R30,0x71
0039 07F1 CPC R31,R17
003A F011 BEQ 0x003D
003B 9201 ST R0,Z+
003C CFFB RJMP 0x0038
003D 8300 STD Z+0,R16
003E E5E4 LDI R30,0x54
003F E0F0 LDI R31,0
0040 E6A0 LDI R26,0x60
0041 E0B0 LDI R27,0
0042 E010 LDI R17,0
0043 35E7 CPI R30,0x57
0044 07F1 CPC R31,R17
0045 F021 BEQ 0x004A
0046 95C8 LPM
0047 9631 ADIW R30,1
0048 920D ST R0,X+
0049 CFF9 RJMP 0x0043
004A 940E0056 CALL _main
_exit:
004C CFFF RJMP _exit
FILE: E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\I2C总线应用设计\main.c
(0001) //***************************************************************
(0002) // File Name : LED.c
(0003) // Author : Steaven
(0004) // Created : 2008-07-26
(0005) // Modified :
(0006) // Revision : V0.0
(0007) //***************************************************************
(0008)
(0009) #include "includes.h"
(0010)
(0011) //global variables definition
(0012) INT8U bI2C_Event = 0;
(0013)
(0014) //***************************************************************
(0015) // Function : sSet_I2C_Event
(0016) // Input : event - i2c operation event
(0017) // Output : none
(0018) // Description : I2C Event Interface Function
(0019) //***************************************************************
(0020) void sSet_I2C_Event(INT8U event)
(0021) {
(0022) bI2C_Event = event;
_sSet_I2C_Event:
event --> R16
004D 93000060 STS 0x60,R16
(0023) }
004F 9508 RET
(0024)
(0025) //***************************************************************
(0026) // Function : sbGet_I2C_Event
(0027) // Input : none
(0028) // Output : i2c operation event
(0029) // Description : I2C Event Interface Function
(0030) //***************************************************************
(0031) INT8U sbGet_I2C_Event(void)
(0032) {
(0033) INT8U event;
(0034) event = bI2C_Event;
_sbGet_I2C_Event:
event --> R16
0050 91000060 LDS R16,0x60
(0035) bI2C_Event = 0;
0052 2422 CLR R2
0053 92200060 STS 0x60,R2
(0036) return(event);
0055 9508 RET
(0037) }
(0038)
(0039) void main(void)
(0040) {
(0041) Hardware_Init();
_main:
0056 940E007B CALL _Hardware_Init
(0042) Init_DS1337();
0058 940E00F2 CALL _Init_DS1337
005A C005 RJMP 0x0060
(0043)
(0044) while(1)
(0045) {
(0046) if(sbGet_I2C_Event() != 0)
005B DFF4 RCALL _sbGet_I2C_Event
005C 2300 TST R16
005D F011 BEQ 0x0060
(0047) {
(0048) Read_DS1337_Calendar();
005E 940E00D0 CALL _Read_DS1337_Calendar
0060 CFFA RJMP 0x005B
(0049) }
(0050) }
(0051) }
0061 9508 RET
_wTimeCountr0_Interrupt:
0062 940E0270 CALL push_lset
(0052)
(0053) //***************************************************************
(0054) // Function : wTimeCountr0_Interrupt
(0055) // Input : none
(0056) // Output : none
(0057) // Description : ATmega16 T/C0 ISR
(0058) //***************************************************************
(0059) #pragma interrupt_handler wTimeCountr0_Interrupt:20
(0060) void wTimeCountr0_Interrupt(void)
(0061) {
(0062) static INT8U int_count = 0;
(0063)
(0064) //Clear wTimeCountr0 OCIF Flag
(0065) TIFR |= 0x02;
0064 B788 IN R24,0x38
0065 6082 ORI R24,2
0066 BF88 OUT 0x38,R24
(0066) TCNT0 = 0x00;
0067 2422 CLR R2
0068 BE22 OUT 0x32,R2
(0067)
(0068) //Interrupt count,send I2C event every second
(0069) if(int_count++ == 100)
0069 90200061 LDS R2,0x61
006B 2433 CLR R3
006C 2D82 MOV R24,R2
006D 5F8F SUBI R24,0xFF
006E 93800061 STS 0x61,R24
0070 2D82 MOV R24,R2
0071 3684 CPI R24,0x64
0072 F429 BNE 0x0078
(0070) {
(0071) int_count = 0;
0073 2422 CLR R2
0074 92200061 STS 0x61,R2
(0072) sSet_I2C_Event(1);
0076 E001 LDI R16,1
0077 DFD5 RCALL _sSet_I2C_Event
(0073) }
(0074) }
0078 940E0287 CALL pop_lset
007A 9518 RETI
FILE: E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\I2C总线应用设计\app.c
(0001) //***************************************************************
(0002) // File Name : Gpio.c
(0003) // Author : Steaven
(0004) // Created : 2008-06-09
(0005) // Modified :
(0006) // Revision : V0.0
(0007) //***************************************************************
(0008)
(0009) #include "includes.h"
(0010)
(0011) //local function declaration
(0012) void Gpio_Init(void);
(0013) void Timer0_Init(void);
(0014) void Interrupt_Init(void);
(0015)
(0016) //***************************************************************
(0017) // Function : Hardware_Init
(0018) // Input : none
(0019) // Output : none
(0020) // Description : ATmega16 Hardware Initialization
(0021) //***************************************************************
(0022) void Hardware_Init(void)
(0023) {
(0024) Gpio_Init();
_Hardware_Init:
007B D002 RCALL _Gpio_Init
(0025) Timer0_Init();
007C D00C RCALL _Timer0_Init
(0026) Interrupt_Init();
(0027) }
007D C018 RJMP _Interrupt_Init
(0028)
(0029) //***************************************************************
(0030) // Function : Gpio_Init
(0031) // Input : none
(0032) // Output : none
(0033) // Description : ATmega16 GPIO Initialization
(0034) //***************************************************************
(0035) void Gpio_Init(void)
(0036) {
(0037) DDRA = 0x00; //PortA - Input with internal pull-up
_Gpio_Init:
007E 2422 CLR R2
007F BA2A OUT 0x1A,R2
(0038) PORTA = 0x00;
0080 BA2B OUT 0x1B,R2
(0039) DDRB = 0x00; //PortB - Input with internal pull-up
0081 BA27 OUT 0x17,R2
(0040) PORTB = 0x00;
0082 BA28 OUT 0x18,R2
(0041) DDRC = 0x03; //PortC - PC[0:1] Output,others inpupt
0083 E083 LDI R24,3
0084 BB84 OUT 0x14,R24
(0042) PORTC = 0x00;
0085 BA25 OUT 0x15,R2
(0043) DDRD = 0x00; //PortD - Input without Output
0086 BA21 OUT 0x11,R2
(0044) PORTD = 0x00;
0087 BA22 OUT 0x12,R2
(0045) }
0088 9508 RET
(0046)
(0047) //***************************************************************
(0048) // Function : Timer0_Init
(0049) // Input : none
(0050) // Output : none
(0051) // Description : ATmega16 Timer0 Initialization,10ms Interval
(0052) //***************************************************************
(0053) void Timer0_Init(void)
(0054) {
(0055) TCCR0 = 0x0D; //1024 division,8M/1024,CTC Mode
_Timer0_Init:
0089 E08D LDI R24,0xD
008A BF83 OUT 0x33,R24
(0056) TCNT0 = 0x00; //Clear Counter
008B 2422 CLR R2
008C BE22 OUT 0x32,R2
(0057) OCR0 = 78; //78 * 1024/8M = 10ms
008D E48E LDI R24,0x4E
008E BF8C OUT 0x3C,R24
(0058) TIMSK |= 0x02; //Enable OCIE0
008F B789 IN R24,0x39
0090 6082 ORI R24,2
0091 BF89 OUT 0x39,R24
(0059) TIFR |= 0x02; //Clear OCIF0
0092 B788 IN R24,0x38
0093 6082 ORI R24,2
0094 BF88 OUT 0x38,R24
(0060) }
0095 9508 RET
(0061)
(0062) //***************************************************************
(0063) // Function : Interrupt_Init
(0064) // Input : none
(0065) // Output : none
(0066) // Description : ATmega16 Interrupt Initialization
(0067) //***************************************************************
(0068) void Interrupt_Init(void)
(0069) {
(0070) SREG |= 0x80; //Enable Global Interrupt
_Interrupt_Init:
0096 9478 BSET 7
(0071) }
0097 9508 RET
FILE: E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\I2C总线应用设计\DS1337.c
(0001) //***************************************************************
(0002) // File Name : DS1337.c
(0003) // Author : Steaven
(0004) // Created : 2008-10-09
(0005) // Modified :
(0006) // Revision : V0.0
(0007) //***************************************************************
(0008)
(0009) #include "includes.h"
(0010)
(0011) struct Calendar_struct Calendar;
(0012) struct Calendar_struct Calendar_Read;
(0013)
(0014) //***************************************************************
(0015) // Function : Init_DS1337_Calendar
(0016) // Input : None
(0017) // Output : None
(0018) // Description : Init time with "2007-11-21,THU,21:32:00"
(0019) //***************************************************************
(0020) void Init_DS1337_Calendar(void)
(0021) {
(0022) Calendar.Second = 0x00;
_Init_DS1337_Calendar:
0098 2422 CLR R2
0099 9220006A STS _Calendar,R2
(0023) Calendar.Minute = 0x32;
009B E382 LDI R24,0x32
009C 9380006B STS _Calendar+1,R24
(0024) Calendar.Hour = 0x21;
009E E281 LDI R24,0x21
009F 9380006C STS _Calendar+2,R24
(0025) Calendar.Day = 0x03;
00A1 E083 LDI R24,3
00A2 9380006D STS _Calendar+3,R24
(0026) Calendar.Date = 0x21;
00A4 E281 LDI R24,0x21
00A5 9380006E STS 0x6E,R24
(0027) Calendar.Month = 0x11;
00A7 E181 LDI R24,0x11
00A8 9380006F STS 0x6F,R24
(0028) Calendar.Year = 0x07;
00AA E087 LDI R24,7
00AB 93800070 STS 0x70,R24
(0029) }
00AD 9508 RET
_Set_DS1337_Calendar:
data --> Y+3
00AE 972A SBIW R28,0xA
(0030)
(0031) //***************************************************************
(0032) // Function : Set_DS1337_Calendar
(0033) // Input : None
(0034) // Output : None
(0035) // Description : Write time to DS1337 Registers
(0036) //***************************************************************
(0037) void Set_DS1337_Calendar(void)
(0038) {
(0039) INT8U data[Calendar_LENGTH];
(0040) data[0] = Calendar.Second;
00AF 9020006A LDS R2,_Calendar
00B1 822B STD Y+3,R2
(0041) data[1] = Calendar.Minute;
00B2 9020006B LDS R2,_Calendar+1
00B4 822C STD Y+4,R2
(0042) data[2] = Calendar.Hour;
00B5 9020006C LDS R2,_Calendar+2
00B7 822D STD Y+5,R2
(0043) data[3] = Calendar.Day;
00B8 9020006D LDS R2,_Calendar+3
00BA 822E STD Y+6,R2
(0044) data[4] = Calendar.Date;
00BB 9020006E LDS R2,0x6E
00BD 822F STD Y+7,R2
(0045) data[5] = Calendar.Month;
00BE 9020006F LDS R2,0x6F
00C0 8628 STD Y+8,R2
(0046) data[6] = Calendar.Year;
00C1 90200070 LDS R2,0x70
00C3 8629 STD Y+9,R2
(0047) I2C_Send_String_with_SubAddress(DS1337,Calendar_ADDRESS,\
00C4 E087 LDI R24,7
00C5 838A STD Y+2,R24
00C6 01CE MOVW R24,R28
00C7 9603 ADIW R24,3
00C8 8399 STD Y+1,R25
00C9 8388 STD Y+0,R24
00CA 2722 CLR R18
00CB ED00 LDI R16,0xD0
00CC 940E01C2 CALL _I2C_Send_String_with_SubAddress
(0048) data,Calendar_LENGTH);
(0049) }
00CE 962A ADIW R28,0xA
00CF 9508 RET
_Read_DS1337_Calendar:
data --> Y+3
00D0 972A SBIW R28,0xA
(0050)
(0051) //***************************************************************
(0052) // Function : Read_DS1337_Calendar
(0053) // Input : None
(0054) // Output : None
(0055) // Description : Read real time from DS1337 Registers
(0056) //***************************************************************
(0057) void Read_DS1337_Calendar(void)
(0058) {
(0059) INT8U data[Calendar_LENGTH];
(0060) I2C_Recive_String_with_SubAddress(DS1337,Calendar_ADDRESS,\
00D1 E087 LDI R24,7
00D2 838A STD Y+2,R24
00D3 01CE MOVW R24,R28
00D4 9603 ADIW R24,3
00D5 8399 STD Y+1,R25
00D6 8388 STD Y+0,R24
00D7 2722 CLR R18
00D8 ED00 LDI R16,0xD0
00D9 940E0206 CALL _I2C_Recive_String_with_SubAddress
(0061) data,Calendar_LENGTH);
(0062) Calendar_Read.Second = data[0];
00DB 802B LDD R2,Y+3
00DC 92200063 STS _Calendar_Read,R2
(0063) Calendar_Read.Minute = data[1];
00DE 802C LDD R2,Y+4
00DF 92200064 STS _Calendar_Read+1,R2
(0064) Calendar_Read.Hour = data[2];
00E1 802D LDD R2,Y+5
00E2 92200065 STS _Calendar_Read+2,R2
(0065) Calendar_Read.Day = data[3];
00E4 802E LDD R2,Y+6
00E5 92200066 STS _Calendar_Read+3,R2
(0066) Calendar_Read.Date = data[4];
00E7 802F LDD R2,Y+7
00E8 92200067 STS 0x67,R2
(0067) Calendar_Read.Month = data[5];
00EA 8428 LDD R2,Y+8
00EB 92200068 STS 0x68,R2
(0068) Calendar_Read.Year = data[6];
00ED 8429 LDD R2,Y+9
00EE 92200069 STS 0x69,R2
(0069) }
00F0 962A ADIW R28,0xA
00F1 9508 RET
(0070)
(0071) //***************************************************************
(0072) // Function : Read_PCF8563_Calendar
(0073) // Input : None
(0074) // Output : None
(0075) // Description : Read real time from PCF8563 Registers
(0076) //***************************************************************
(0077) void Init_DS1337(void)
(0078) {
(0079) Init_DS1337_Calendar();
_Init_DS1337:
00F2 DFA5 RCALL _Init_DS1337_Calendar
(0080) Set_DS1337_Calendar();
(0081) }
00F3 CFBA RJMP _Set_DS1337_Calendar
(0082)
(0083) //***************************************************************
(0084) // Function : sbGet_Timer_Second
(0085) // Input : None
(0086) // Output : None
(0087) // Description : Interface Function : Get Second
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -