📄 atmegal16l.lst
字号:
__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 + -