⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 project.lst

📁 AVR单片机C语言程序设计实例精粹
💻 LST
📖 第 1 页 / 共 3 页
字号:
__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 + -