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

📄 atmegal16l.lst

📁 AVR16源代码 ICC编译器
💻 LST
📖 第 1 页 / 共 5 页
字号:
__start:
__text_start:
    0033 E5CF      LDI	R28,0x5F
    0034 E0D4      LDI	R29,4
    0035 BFCD      OUT	0x3D,R28
    0036 BFDE      OUT	0x3E,R29
    0037 55C6      SUBI	R28,0x56
    0038 40D0      SBCI	R29,0
    0039 EA0A      LDI	R16,0xAA
    003A 8308      STD	Y+0,R16
    003B 2400      CLR	R0
    003C E6EA      LDI	R30,0x6A
    003D E0F0      LDI	R31,0
    003E E012      LDI	R17,2
    003F 33E8      CPI	R30,0x38
    0040 07F1      CPC	R31,R17
    0041 F011      BEQ	0x0044
    0042 9201      ST	R0,Z+
    0043 CFFB      RJMP	0x003F
    0044 8300      STD	Z+0,R16
    0045 E5EC      LDI	R30,0x5C
    0046 E0F0      LDI	R31,0
    0047 E6A0      LDI	R26,0x60
    0048 E0B0      LDI	R27,0
    0049 E010      LDI	R17,0
    004A 36E6      CPI	R30,0x66
    004B 07F1      CPC	R31,R17
    004C F021      BEQ	0x0051
    004D 95C8      LPM
    004E 9631      ADIW	R30,1
    004F 920D      ST	R0,X+
    0050 CFF9      RJMP	0x004A
    0051 940E00E1  CALL	_main
_exit:
    0053 CFFF      RJMP	_exit
_uart0_rx_isr:
    0054 922A      ST	R2,-Y
    0055 B62F      IN	R2,0x3F
    0056 922A      ST	R2,-Y
FILE: D:\MY_COMPUTER\d\avr16\atmegal16\main.c
(0001) /**************************************
(0002) **工程名称:雪深探测
(0003) **编译器类型及版本:ICCAVR 6.31A
(0004) **日期:2006.2.13
(0005) **创建人:覃道堂
(0006) **所属公司:北京华创升达
(0007) **************************************/
(0008) #include    <iom16v.h>
(0009) #include    <macros.h>
(0010) #include	"init.h"
(0011) #include	"Uart.h"
(0012) #include	"crc.h"
(0013) #include	"Eeprom16.h"
(0014) #include    "DS18B20.H"
(0015) //============================================================
(0016) //定义串口缓冲,同时声明数据Buffer
(0017) unsigned char	SendData[100];       
(0018) unsigned char 	SendBuf[100];
(0019) unsigned char 	ReceiveBuf[150];
(0020) //============================================================
(0021) //申明外部温度变量
(0022) extern float temperature;
(0023) //============================================================
(0024) //定义EE缓冲变量
(0025) unsigned char EEBuffer[100];
(0026) extern a b;
(0027) //AT91S_PMC pAic1;
(0028) char JS=0,JC=0,JSM=0,mcount=0;
(0029) unsigned int TIMEL,TIMEH,TIMEHH=0;//超声波检测时间的低位字节和高位字节
(0030) long int LENGTH,jydata=0;
(0031) /**************************************
(0032) **芯片类型:ATmega16
(0033) **时钟频率:8M
(0034) **硬件接口说明:无
(0035) **函数功能说明:接收从串口接收到的数据
(0036) **函数输入参数及说明:无
(0037) **函数返回值:无
(0038) **在本函数以外定义的变量:字符型JSM
(0039) **调用的函数说明:无
(0040) **修改人:
(0041) **修改日期:
(0042) **修改说明:
(0043) **************************************/
(0044) #pragma interrupt_handler uart0_rx_isr:12
(0045) void uart0_rx_isr(void)
(0046) {
(0047)  JSM=UDR;
    0057 B02C      IN	R2,0x0C
    0058 92200062  STS	0x62,R2
(0048) }
    005A 9029      LD	R2,Y+
    005B BE2F      OUT	0x3F,R2
    005C 9029      LD	R2,Y+
    005D 9518      RETI
_timer0_ovf_isr:
    005E 922A      ST	R2,-Y
    005F 938A      ST	R24,-Y
    0060 939A      ST	R25,-Y
    0061 B62F      IN	R2,0x3F
    0062 922A      ST	R2,-Y
(0049) /**************************************
(0050) **芯片类型:ATmega16
(0051) **时钟频率:4M
(0052) **硬件接口说明:无
(0053) **函数功能说明:利用定时器0使检测标志5HZ变化一次
(0054) **函数输入参数及说明:无
(0055) **函数返回值:无
(0056) **在本函数以外定义的变量:无
(0057) **调用的函数说明:无
(0058) **修改人:
(0059) **修改日期:
(0060) **修改说明:
(0061) **************************************/
(0062) #pragma interrupt_handler timer0_ovf_isr:10
(0063) void timer0_ovf_isr(void)
(0064) {
(0065)  TCNT0 = 0x3D;//reload counter value
    0063 E38D      LDI	R24,0x3D
    0064 BF82      OUT	0x32,R24
(0066)  mcount++;
    0065 91800063  LDS	R24,0x63
    0067 5F8F      SUBI	R24,0xFF
    0068 93800063  STS	0x63,R24
(0067)  if(mcount==8)
    006A 3088      CPI	R24,0x8
    006B F431      BNE	0x0072
(0068)  {mcount=0;
    006C 2422      CLR	R2
    006D 92200063  STS	0x63,R2
(0069)  JC=0xFF;}
    006F EF8F      LDI	R24,0xFF
    0070 93800061  STS	0x61,R24
(0070) }
    0072 9029      LD	R2,Y+
    0073 BE2F      OUT	0x3F,R2
    0074 9199      LD	R25,Y+
    0075 9189      LD	R24,Y+
    0076 9029      LD	R2,Y+
    0077 9518      RETI
_int0_isr:
    0078 922A      ST	R2,-Y
    0079 923A      ST	R3,-Y
    007A 938A      ST	R24,-Y
    007B B62F      IN	R2,0x3F
    007C 922A      ST	R2,-Y
(0071) /**************************************
(0072) **芯片类型:ATmega16
(0073) **时钟频率:4M
(0074) **硬件接口说明:无
(0075) **函数功能说明:利用外部中断0来检测超声波传感器回波
(0076) 收到回波后将计数器的值保存,并置位回波标志
(0077) **函数输入参数及说明:无
(0078) **函数返回值:无
(0079) **在本函数以外定义的变量:TIMEL、TIMEH、JS
(0080) **调用的函数说明:无
(0081) **修改人:
(0082) **修改日期:
(0083) **修改说明:
(0084) **************************************/
(0085) #pragma interrupt_handler int0_isr:02
(0086) void int0_isr(void)
(0087) {
(0088) TCCR1B =0x00;
    007D 2422      CLR	R2
    007E BC2E      OUT	0x2E,R2
(0089) TIMEL  =TCNT1L;
    007F B42C      IN	R2,0x2C
    0080 2433      CLR	R3
    0081 92300071  STS	_TIMEL+1,R3
    0083 92200070  STS	_TIMEL,R2
(0090) TIMEH  =TCNT1H;
    0085 B42D      IN	R2,0x2D
    0086 2433      CLR	R3
    0087 9230006F  STS	_TIMEH+1,R3
    0089 9220006E  STS	_TIMEH,R2
(0091) JS =0xFF;
    008B EF8F      LDI	R24,0xFF
    008C 93800060  STS	0x60,R24
(0092) }
    008E 9029      LD	R2,Y+
    008F BE2F      OUT	0x3F,R2
    0090 9189      LD	R24,Y+
    0091 9039      LD	R3,Y+
    0092 9029      LD	R2,Y+
    0093 9518      RETI
_measure:
  i                    --> R16
    0094 940E0429  CALL	push_gset2
(0093) /**************************************
(0094) **芯片类型:ATmega16
(0095) **时钟频率:8M
(0096) **硬件接口说明:无
(0097) **函数功能说明:检测函数,向超声波传感器发送检测脉冲同时启动定时器1进行计时
(0098) **函数输入参数及说明:无
(0099) **函数返回值:LENGTH
(0100) **在本函数以外定义的变量:TIMEL、TIMEH、LENGTH、JS
(0101) **调用的函数说明:无
(0102) **修改人:
(0103) **修改日期:
(0104) **修改说明:
(0105) **************************************/
(0106) long int measure(void)
(0107) {unsigned char i;
(0108) DDRA|=0x20;
    0096 9AD5      SBI	0x1A,5
(0109) DDRD|=0x80;
    0097 9A8F      SBI	0x11,7
(0110) TCNT1H=0x00;
    0098 2422      CLR	R2
    0099 BC2D      OUT	0x2D,R2
(0111) TCNT1L=0x00;
    009A BC2C      OUT	0x2C,R2
(0112) LENGTH=0x00;
    009B E040      LDI	R20,0
    009C E050      LDI	R21,0
    009D E060      LDI	R22,0
    009E E070      LDI	R23,0
    009F 9350006B  STS	_LENGTH+1,R21
    00A1 9340006A  STS	_LENGTH,R20
    00A3 9370006D  STS	_LENGTH+3,R23
    00A5 9360006C  STS	_LENGTH+2,R22
(0113) PORTA&=0xdf;
    00A7 B38B      IN	R24,0x1B
    00A8 7D8F      ANDI	R24,0xDF
    00A9 BB8B      OUT	0x1B,R24
(0114) TCCR1B = 0x02;   //clk I/O/8(来自预分频器)  0.125us(微秒)
    00AA E082      LDI	R24,2
    00AB BD8E      OUT	0x2E,R24
(0115) for(i=0;i<50;i++);
    00AC 2700      CLR	R16
    00AD C001      RJMP	0x00AF
    00AE 9503      INC	R16
    00AF 3302      CPI	R16,0x32
    00B0 F3E8      BCS	0x00AE
(0116) PORTD&=0x7f;
    00B1 B382      IN	R24,0x12
    00B2 778F      ANDI	R24,0x7F
    00B3 BB82      OUT	0x12,R24
(0117) PORTD|=0x80;
    00B4 9A97      SBI	0x12,7
(0118) //for(i=0;i<50;i++);
(0119) //PORTA&=0xdf;
(0120) while(JS==0x00);
    00B5 90200060  LDS	R2,0x60
    00B7 2022      TST	R2
    00B8 F3E1      BEQ	0x00B5
(0121) //LENGTH=(TIMEH*16*16+(TIMEL>>4)*16+(TIMEL&0x0F));
(0122) LENGTH=((TIMEH<<8)|TIMEL);
    00B9 90200070  LDS	R2,_TIMEL
    00BB 90300071  LDS	R3,_TIMEL+1
    00BD 9040006E  LDS	R4,_TIMEH
    00BF 9050006F  LDS	R5,_TIMEH+1
    00C1 2C54      MOV	R5,R4
    00C2 2444      CLR	R4
    00C3 2842      OR	R4,R2
    00C4 2853      OR	R5,R3
    00C5 0112      MOVW	R2,R4
    00C6 2444      CLR	R4
    00C7 2455      CLR	R5
    00C8 9230006B  STS	_LENGTH+1,R3
    00CA 9220006A  STS	_LENGTH,R2
    00CC 9250006D  STS	_LENGTH+3,R5
    00CE 9240006C  STS	_LENGTH+2,R4
(0123) JS=0x00;
    00D0 2422      CLR	R2
    00D1 92200060  STS	0x60,R2
(0124) PORTA|=0x20;
    00D3 9ADD      SBI	0x1B,5
(0125) return(LENGTH);
    00D4 9120006C  LDS	R18,_LENGTH+2
    00D6 9130006D  LDS	R19,_LENGTH+3
    00D8 9100006A  LDS	R16,_LENGTH
    00DA 9110006B  LDS	R17,_LENGTH+1
    00DC 940E0406  CALL	pop_gset2
    00DE 9508      RET
(0126) }
(0127) void EN_init(void)
(0128) {
(0129) 
(0130) _asm("sei");
_EN_init:
    00DF 9478      BSET	7
(0131) 
(0132) }
    00E0 9508      RET
_main:
  t                    --> Y+6
  l                    --> R20
  h                    --> Y+2
  i                    --> R20
    00E1 972A      SBIW	R28,0xA
(0133) /**************************************
(0134) **芯片类型:ATmega16
(0135) **时钟频率:8M
(0136) **硬件接口说明:无
(0137) **函数功能说明:主函数,首先等待接收命令,接收到23H则进行数据检测,数据处理,
(0138) **函数输入参数及说明:jydata,JSM
(0139) **函数返回值:无
(0140) **在本函数以外定义的变量:无
(0141) **调用的函数说明:SHUJU();DATATEND()
(0142) **修改人:
(0143) **修改日期:
(0144) **修改说明:
(0145) **************************************/
(0146) void main(void)
(0147) {
(0148)  unsigned char l=0,i;
    00E2 2744      CLR	R20
(0149)  float t;
(0150)  long int h;
(0151)  
(0152) //a.k=0;
(0153) 
(0154) init_devices();
    00E3 940E03E1  CALL	_init_devices
(0155) ext_init();
    00E5 940E03DC  CALL	_ext_init
(0156) CLI();//读温度时关闭中断
    00E7 94F8      BCLR	7
(0157) Uart_PutChar(0x01);
    00E8 E001      LDI	R16,1
    00E9 940E034E  CALL	_Uart_PutChar
(0158) Uart_PutChar(0x02);
    00EB E002      LDI	R16,2
    00EC 940E034E  CALL	_Uart_PutChar
(0159)  
(0160) l=Read_Temperature();
    00EE 940E0270  CALL	_Read_Temperature
(0161) t=temperature;
    00F0 90400236  LDS	R4,_temperature+2
    00F2 90500237  LDS	R5,_temperature+3
    00F4 90200234  LDS	R2,_temperature
    00F6 90300235  LDS	R3,_temperature+1
    00F8 01FE      MOVW	R30,R28
    00F9 8226      STD	Z+6,R2
    00FA 8237      STD	Z+7,R3
    00FB 8640      STD	Z+8,R4
    00FC 8651      STD	Z+9,R5
(0162) 
(0163) Read_EEPROM(EEBuffer,10,10);
    00FD E08A      LDI	R24,0xA
    00FE E090      LDI	R25,0
    00FF 8399      STD	Y+1,R25
    0100 8388      STD	Y+0,R24
    0101 E02A      LDI	R18,0xA
    0102 E702      LDI	R16,0x72
    0103 E010      LDI	R17,0
    0104 940E01B7  CALL	_Read_EEPROM
(0164) Uart_PutChar(EEBuffer[0]);
    0106 91000072  LDS	R16,_EEBuffer
    0108 940E034E  CALL	_Uart_PutChar
(0165) Uart_PutChar(EEBuffer[1]);
    010A 91000073  LDS	R16,_EEBuffer+1
    010C 940E034E  CALL	_Uart_PutChar
(0166) for(i=0;i<10;i++)
    010E C009      RJMP	0x0118
(0167)    {
(0168)    EEBuffer[i]=0x0a;
    010F E782      LDI	R24,0x72
    0110 E090      LDI	R25,0
    0111 2FE4      MOV	R30,R20
    0112 27FF      CLR	R31
    0113 0FE8      ADD	R30,R24
    0114 1FF9      ADC	R31,R25
    0115 E08A      LDI	R24,0xA
    0116 8380      STD	Z+0,R24
    0117 9543      INC	R20
    0118 304A      CPI	R20,0xA
    0119 F3A8      BCS	0x010F
(0169)    }
(0170)  EEBuffer[1]=0x0b;  
    011A E08B      LDI	R24,0xB
    011B 93800073  STS	_EEBuffer+1,R24
(0171) Write_EEPROM(EEBuffer,10,10);
    011D E08A      LDI	R24,0xA
    011E E090      LDI	R25,0
    011F 8399      STD	Y+1,R25
    0120 8388      STD	Y+0,R24
    0121 E02A      LDI	R18,0xA
    0122 E702      LDI	R16,0x72
    0123 E010      LDI	R17,0
    0124 940E019D  CALL	_Write_EEPROM
(0172) 
(0173) for(i=0;i<10;i++)
    0126 2744      CLR	R20
    0127 C009      RJMP	0x0131
(0174)    EEBuffer[i]=0;  
    0128 E782      LDI	R24,0x72
    0129 E090      LDI	R25,0
    012A 2FE4      MOV	R30,R20
    012B 27FF      CLR	R31
    012C 0FE8      ADD	R30,R24
    012D 1FF9      ADC	R31,R25
    012E 2422      CLR	R2
    012F 8220      STD	Z+0,R2
    0130 9543      INC	R20
    0131 304A      CPI	R20,0xA
    0132 F3A8      BCS	0x0128
(0175) Read_EEPROM(EEBuffer,10,10);
    0133 E08A      LDI	R24,0xA
    0134 E090      LDI	R25,0
    0135 8399      STD	Y+1,R25
    0136 8388      STD	Y+0,R24
    0137 E02A      LDI	R18,0xA
    0138 E702      LDI	R16,0x72
    0139 E010      LDI	R17,0
    013A 940E01B7  CALL	_Read_EEPROM
(0176) SEI(); //开中断 
    013C 9478      BSET	7
(0177) PORTA=0x00;
    013D 2422      CLR	R2
    013E BA2B      OUT	0x1B,R2
(0178) DDRA=0x20;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -