📄 temperature.lst
字号:
__start:
__text_start:
0030 E5CF LDI R28,0x5F
0031 E0D2 LDI R29,2
0032 BFCD OUT 0x3D,R28
0033 BFDE OUT 0x3E,R29
0034 51C0 SUBI R28,0x10
0035 40D0 SBCI R29,0
0036 EA0A LDI R16,0xAA
0037 8308 STD Y+0,R16
0038 2400 CLR R0
0039 E6E0 LDI R30,0x60
003A E0F0 LDI R31,0
003B E010 LDI R17,0
003C 36E1 CPI R30,0x61
003D 07F1 CPC R31,R17
003E F011 BEQ 0x0041
003F 9201 ST R0,Z+
0040 CFFB RJMP 0x003C
0041 8300 STD Z+0,R16
0042 E5EF LDI R30,0x5F
0043 E0F0 LDI R31,0
0044 E6A0 LDI R26,0x60
0045 E0B0 LDI R27,0
0046 E010 LDI R17,0
0047 35EF CPI R30,0x5F
0048 07F1 CPC R31,R17
0049 F021 BEQ 0x004E
004A 95C8 LPM
004B 9631 ADIW R30,1
004C 920D ST R0,X+
004D CFF9 RJMP 0x0047
004E D0DE RCALL _main
_exit:
004F CFFF RJMP _exit
_delay:
j --> R20
i --> R22
temp --> R16
0050 D132 RCALL push_gset2
FILE: D:\AVR调试\temperature\temperature.c
(0001) #include <io8535v.h>
(0002) #include<macros.h>
(0003) #define uchar unsigned char
(0004) #define uint unsigned int
(0005) #pragma interrupt_handler ad_handler:15
(0006)
(0007) #define Vref 5.0
(0008)
(0009) const unsigned char tabel[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,0x89,0xA3,0x8C,0xC8};
(0010) uchar addata;
(0011)
(0012)
(0013) void delay(uint temp)//10ms,16M晶振
(0014) {
0051 C00C RJMP 0x005E
(0015) uchar i,j;
(0016) while(temp--)
(0017) {
(0018) for(j=213;j>0;j--)//1ms,58
0052 ED45 LDI R20,0xD5
0053 C007 RJMP 0x005B
(0019) for(i=148;i>0;i--);//1ms,53
0054 E964 LDI R22,0x94
0055 C001 RJMP 0x0057
0056 956A DEC R22
0057 2422 CLR R2
0058 1626 CP R2,R22
0059 F3E0 BCS 0x0056
005A 954A DEC R20
005B 2422 CLR R2
005C 1624 CP R2,R20
005D F3B0 BCS 0x0054
005E 0118 MOVW R2,R16
005F 5001 SUBI R16,1
0060 4010 SBCI R17,0
0061 2022 TST R2
0062 F779 BNE 0x0052
0063 2033 TST R3
0064 F769 BNE 0x0052
0065 D115 RCALL pop_gset2
0066 9508 RET
_LEDSCAN:
disdata --> Y+0
temp --> R20
0067 D11D RCALL push_gset1
0068 01A8 MOVW R20,R16
0069 9723 SBIW R28,3
(0020) }
(0021) }
(0022)
(0023) void LEDSCAN(temp)//显示程序
(0024) {
(0025) uchar disdata[3] ={0};
006A E38E LDI R24,0x3E
006B E090 LDI R25,0
006C 01FE MOVW R30,R28
006D E003 LDI R16,3
006E E010 LDI R17,0
006F 93FA ST R31,-Y
0070 93EA ST R30,-Y
0071 939A ST R25,-Y
0072 938A ST R24,-Y
0073 D173 RCALL asgncblk
(0026)
(0027) disdata[0]=temp/1000;//取最高位
0074 EE28 LDI R18,0xE8
0075 E033 LDI R19,3
0076 018A MOVW R16,R20
0077 D0CE RCALL div16s
0078 8308 STD Y+0,R16
(0028) disdata[1]=temp%1000/100;//取最二位
0079 EE28 LDI R18,0xE8
007A E033 LDI R19,3
007B 018A MOVW R16,R20
007C D0C5 RCALL mod16s
007D E624 LDI R18,0x64
007E E030 LDI R19,0
007F D0C6 RCALL div16s
0080 8309 STD Y+1,R16
(0029) disdata[2]=temp%100/10;//取最三位
0081 E624 LDI R18,0x64
0082 E030 LDI R19,0
0083 018A MOVW R16,R20
0084 D0BD RCALL mod16s
0085 E02A LDI R18,0xA
0086 E030 LDI R19,0
0087 D0BE RCALL div16s
0088 830A STD Y+2,R16
(0030)
(0031) PORTC|=0x01;//显示第一位
0089 9AA8 SBI 0x15,0
(0032) PORTB=tabel[disdata[0]]&0x7f;
008A E28A LDI R24,0x2A
008B E090 LDI R25,0
008C 81E8 LDD R30,Y+0
008D 27FF CLR R31
008E 0FE8 ADD R30,R24
008F 1FF9 ADC R31,R25
0090 91E4 LPM R30,0(Z)
0091 77EF ANDI R30,0x7F
0092 BBE8 OUT 0x18,R30
(0033) delay(1);
0093 E001 LDI R16,1
0094 E010 LDI R17,0
0095 DFBA RCALL _delay
(0034) PORTC&=0X00;
0096 2422 CLR R2
0097 BA25 OUT 0x15,R2
(0035)
(0036) PORTC|=0x02;//显示第二位
0098 9AA9 SBI 0x15,1
(0037) PORTB=tabel[disdata[1]];
0099 E28A LDI R24,0x2A
009A E090 LDI R25,0
009B 81E9 LDD R30,Y+1
009C 27FF CLR R31
009D 0FE8 ADD R30,R24
009E 1FF9 ADC R31,R25
009F 91E4 LPM R30,0(Z)
00A0 BBE8 OUT 0x18,R30
(0038) delay(1);
00A1 E001 LDI R16,1
00A2 E010 LDI R17,0
00A3 DFAC RCALL _delay
(0039) PORTC&=0X00;
00A4 2422 CLR R2
00A5 BA25 OUT 0x15,R2
(0040)
(0041) PORTC|=0x04;//显示第三位
00A6 9AAA SBI 0x15,2
(0042) PORTB=tabel[disdata[2]];
00A7 E28A LDI R24,0x2A
00A8 E090 LDI R25,0
00A9 81EA LDD R30,Y+2
00AA 27FF CLR R31
00AB 0FE8 ADD R30,R24
00AC 1FF9 ADC R31,R25
00AD 91E4 LPM R30,0(Z)
00AE BBE8 OUT 0x18,R30
(0043) delay(1);
00AF E001 LDI R16,1
00B0 E010 LDI R17,0
00B1 DF9E RCALL _delay
(0044) PORTC&=0X00;
00B2 2422 CLR R2
00B3 BA25 OUT 0x15,R2
00B4 9623 ADIW R28,3
00B5 D0D2 RCALL pop_gset1
00B6 9508 RET
_ad_handler:
Vin --> R20
00B7 D101 RCALL push_lset
00B8 D0CA RCALL push_gset2
00B9 9724 SBIW R28,4
(0045) }
(0046)
(0047) void ad_handler(void)//中断进入
(0048) {
(0049) uint Vin;
(0050) // uint Vref;
(0051) addata=ADC;
00BA B024 IN R2,0x04
00BB B035 IN R3,0x05
00BC 92200060 STS addata,R2
(0052) Vin=((float)ADC*Vref/1024)*1000;
00BE B024 IN R2,0x04
00BF B035 IN R3,0x05
00C0 E501 LDI R16,0x51
00C1 E010 LDI R17,0
00C2 D0E2 RCALL lpm32
00C3 933A ST R19,-Y
00C4 932A ST R18,-Y
00C5 931A ST R17,-Y
00C6 930A ST R16,-Y
00C7 E40D LDI R16,0x4D
00C8 E010 LDI R17,0
00C9 D0DB RCALL lpm32
00CA 933A ST R19,-Y
00CB 932A ST R18,-Y
00CC 931A ST R17,-Y
00CD 930A ST R16,-Y
00CE E409 LDI R16,0x49
00CF E010 LDI R17,0
00D0 D0D4 RCALL lpm32
00D1 933A ST R19,-Y
00D2 932A ST R18,-Y
00D3 931A ST R17,-Y
00D4 930A ST R16,-Y
00D5 0181 MOVW R16,R2
00D6 9516 LSR R17
00D7 9507 ROR R16
00D8 D165 RCALL int2fp
00D9 933A ST R19,-Y
00DA 932A ST R18,-Y
00DB 931A ST R17,-Y
00DC 930A ST R16,-Y
00DD D290 RCALL empy32fs
00DE 0181 MOVW R16,R2
00DF 7001 ANDI R16,1
00E0 7010 ANDI R17,0
00E1 D15C RCALL int2fp
00E2 933A ST R19,-Y
00E3 932A ST R18,-Y
00E4 931A ST R17,-Y
00E5 930A ST R16,-Y
00E6 D1AC RCALL add32fs
00E7 D286 RCALL empy32fs
00E8 E405 LDI R16,0x45
00E9 E010 LDI R17,0
00EA D0BA RCALL lpm32
00EB 933A ST R19,-Y
00EC 932A ST R18,-Y
00ED 931A ST R17,-Y
00EE 930A ST R16,-Y
00EF D1F7 RCALL div32fs
00F0 D27F RCALL empy32f
00F1 01FE MOVW R30,R28
00F2 8300 STD Z+0,R16
00F3 8311 STD Z+1,R17
00F4 8322 STD Z+2,R18
00F5 8333 STD Z+3,R19
00F6 01FE MOVW R30,R28
00F7 8020 LDD R2,Z+0
00F8 8031 LDD R3,Z+1
00F9 8042 LDD R4,Z+2
00FA 8053 LDD R5,Z+3
00FB 925A ST R5,-Y
00FC 924A ST R4,-Y
00FD 923A ST R3,-Y
00FE 922A ST R2,-Y
00FF E401 LDI R16,0x41
0100 E010 LDI R17,0
0101 D0A3 RCALL lpm32
0102 933A ST R19,-Y
0103 932A ST R18,-Y
0104 931A ST R17,-Y
0105 930A ST R16,-Y
0106 D238 RCALL cmp32f
0107 F0B4 BLT 0x011E
0108 01FE MOVW R30,R28
0109 8020 LDD R2,Z+0
010A 8031 LDD R3,Z+1
010B 8042 LDD R4,Z+2
010C 8053 LDD R5,Z+3
010D 925A ST R5,-Y
010E 924A ST R4,-Y
010F 923A ST R3,-Y
0110 922A ST R2,-Y
0111 E401 LDI R16,0x41
0112 E010 LDI R17,0
0113 D091 RCALL lpm32
0114 933A ST R19,-Y
0115 932A ST R18,-Y
0116 931A ST R17,-Y
0117 930A ST R16,-Y
0118 D181 RCALL sub32f
0119 D0E6 RCALL fp2int
011A 01B8 MOVW R22,R16
011B 5060 SUBI R22,0
011C 4870 SBCI R23,0x80
011D C007 RJMP 0x0125
011E 01FE MOVW R30,R28
011F 8100 LDD R16,Z+0
0120 8111 LDD R17,Z+1
0121 8122 LDD R18,Z+2
0122 8133 LDD R19,Z+3
0123 D0DC RCALL fp2int
0124 01B8 MOVW R22,R16
0125 01AB MOVW R20,R22
(0053) LEDSCAN(Vin);
0126 018A MOVW R16,R20
0127 DF3F RCALL _LEDSCAN
(0054) ADCSR|=BIT(ADSC);
0128 9A36 SBI 0x06,6
0129 9624 ADIW R28,4
012A D050 RCALL pop_gset2
012B D0A4 RCALL pop_lset
012C 9518 RETI
(0055) }
(0056) void main()//主程序
(0057) {
(0058) PORTA=0;
_main:
012D 2422 CLR R2
012E BA2B OUT 0x1B,R2
(0059) DDRA=0;
012F BA2A OUT 0x1A,R2
(0060) PORTC=0x00;
0130 BA25 OUT 0x15,R2
(0061) DDRC=0xFF;
0131 EF8F LDI R24,0xFF
0132 BB84 OUT 0x14,R24
(0062) DDRB=0xFF;
0133 BB87 OUT 0x17,R24
(0063) PORTB=0xFF;
0134 BB88 OUT 0x18,R24
(0064) ADMUX=0x00;
0135 B827 OUT 0x07,R2
(0065) ADCSR=0x80;
0136 E880 LDI R24,0x80
0137 B986 OUT 0x06,R24
(0066) ADCSR|=BIT(ADIE);
0138 9A33 SBI 0x06,3
(0067) //SREG=0x80;
(0068) SEI();
0139 9478 BSET 7
(0069) ADCSR|=BIT(ADSC);
013A 9A36 SBI 0x06,6
(0070) while(1);
FILE: <library>
013B CFFF RJMP 0x013B
013C 9508 RET
push_arg4:
013D 933A ST R19,-Y
013E 932A ST R18,-Y
push_arg2:
013F 931A ST R17,-Y
0140 930A ST R16,-Y
0141 9508 RET
mod16s:
0142 9468 BSET 6
0143 92DA ST R13,-Y
0144 2ED1 MOV R13,R17
0145 C004 RJMP 0x014A
div16s:
0146 94E8 BCLR 6
0147 92DA ST R13,-Y
0148 2ED1 MOV R13,R17
0149 26D3 EOR R13,R19
014A FF17 SBRS R17,7
014B C004 RJMP 0x0150
014C 9510 COM R17
014D 9500 COM R16
014E 5F0F SUBI R16,0xFF
014F 4F1F SBCI R17,0xFF
0150 FF37 SBRS R19,7
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -