📄 zuhe.lst
字号:
__start:
__text_start:
002B E5CF LDI R28,0x5F
002C E0D4 LDI R29,4
002D BFCD OUT 0x3D,R28
002E BFDE OUT 0x3E,R29
002F 51C0 SUBI R28,0x10
0030 40D0 SBCI R29,0
0031 EA0A LDI R16,0xAA
0032 8308 STD Y+0,R16
0033 2400 CLR R0
0034 E6E9 LDI R30,0x69
0035 E0F0 LDI R31,0
0036 E010 LDI R17,0
0037 37EF CPI R30,0x7F
0038 07F1 CPC R31,R17
0039 F011 BEQ 0x003C
003A 9201 ST R0,Z+
003B CFFB RJMP 0x0037
003C 8300 STD Z+0,R16
003D E4EC LDI R30,0x4C
003E E0F0 LDI R31,0
003F E6A0 LDI R26,0x60
0040 E0B0 LDI R27,0
0041 E010 LDI R17,0
0042 35E5 CPI R30,0x55
0043 07F1 CPC R31,R17
0044 F021 BEQ 0x0049
0045 95C8 LPM
0046 9631 ADIW R30,1
0047 920D ST R0,X+
0048 CFF9 RJMP 0x0042
0049 D08B RCALL _main
_exit:
004A CFFF RJMP _exit
_delay:
j --> R20
x --> R16
004B D2A8 RCALL push_gset1
FILE: zuhe.c
(0001) #include<iom8v.h> //??¨1o?ATMEGA8|ì?¨a?¤???t
(0002) #include<macros.h> //??¨1o?¨°?D?3?ê¨??o¨o|ì???§¨°?
(0003) #define uchar unsigned char
(0004) #define uint unsigned int
(0005) #define osccal_addr 0x1ff
(0006) #define fosc 8000000 //??ì??8MHZ
(0007) #define baud 9600 //2?§¨???¨o
(0008) #define LcdCmdPort PORTB
(0009) #define LcdDataPort PORTB
(0010) uint datax;
(0011) char d[9]={0x57,0x3d,0x11,0x2e,0x11,0x11,0x11,0x77,0x23};
(0012) uchar x,datah,K,datal,a[3],i,K,w1,w2,w3,w4;
(0013) float v,W;
(0014)
(0015) //?á?D??¨?¨o?à|죤???ê???16??é??
(0016) void delay(uint x)
(0017) { uchar j;
004C C005 RJMP 0x0052
(0018) while(x-->0)
(0019) {
(0020) for(j=0;j<5;j++)
004D 2744 CLR R20
004E C001 RJMP 0x0050
004F 9543 INC R20
0050 3045 CPI R20,5
0051 F3E8 BCS 0x004F
0052 0118 MOVW R2,R16
0053 5001 SUBI R16,1
0054 4010 SBCI R17,0
0055 2022 TST R2
0056 F7B1 BNE 0x004D
0057 2033 TST R3
0058 F7A1 BNE 0x004D
(0021) {;}
(0022) }
(0023) }
0059 D29D RCALL pop_gset1
005A 9508 RET
(0024)
(0025)
(0026)
(0027) unsigned char EEPROM_read(unsigned int uiAddress)
(0028) {while(EECR&(1<<EEWE));
_EEPROM_read:
uiAddress --> R16
005B 99E1 SBIC 0x1C,1
005C CFFE RJMP _EEPROM_read
(0029) EEAR=uiAddress;
005D BB1F OUT 0x1F,R17
005E BB0E OUT 0x1E,R16
(0030) EECR|=(1<<EERE);
005F 9AE0 SBI 0x1C,0
(0031) return EEDR;
0060 B30D IN R16,0x1D
0061 9508 RET
(0032) }
(0033)
(0034) void init_adc(void)
(0035) {ADMUX=(3<<REFS0); //ADC2???|ì??1?a?¨22?2.56V,??ê?a¨a?§|쨤????ADC0
_init_adc:
0062 EC80 LDI R24,0xC0
0063 B987 OUT 0x07,R24
(0036) ADCSRA=(1<<ADEN)|(1<<ADSC); //ADC¨o1?¨1?ê?2?é????¥¨°?????áa???ê?2?à??¤??|ì,
0064 B986 OUT 0x06,R24
(0037)
(0038) }
0065 9508 RET
(0039)
(0040) void readadc(void)
(0041) {datal=ADCL;
_readadc:
0066 B024 IN R2,0x04
0067 92200079 STS _datal,R2
(0042) datah=ADCH;
0069 B025 IN R2,0x05
006A 9220007B STS _datah,R2
(0043) //ADCSRA=(1<<ADSC); //|죤????áa??¥
(0044) //datax=(datah<<8)+datal;
(0045) }
006C 9508 RET
(0046)
(0047) void LcdBusy(void); /* LCD???ì?????? */
(0048)
(0049) void LcdBusy()
(0050) {
(0051)
(0052) PORTC &= ~(1<<PORTC4);
_LcdBusy:
006D 98AC CBI 0x15,4
(0053) PORTC |= (1<<PORTC5);
006E 9AAD SBI 0x15,5
(0054) LcdCmdPort = 0xff;
006F EF8F LDI R24,0xFF
0070 BB88 OUT 0x18,R24
(0055) DDRB=0x00;
0071 2422 CLR R2
0072 BA27 OUT 0x17,R2
(0056) PORTC |= (1<<PORTC3);
0073 9AAB SBI 0x15,3
(0057) PORTC &= ~(1<<PORTC3);
0074 98AB CBI 0x15,3
0075 C002 RJMP 0x0078
(0058) while ((PINB&0x80)!=0)
(0059) {
(0060)
(0061) PORTC &= ~(1<<PORTC3);
0076 98AB CBI 0x15,3
(0062) PORTC |= (1<<PORTC3);
0077 9AAB SBI 0x15,3
0078 99B7 SBIC 0x16,7
0079 CFFC RJMP 0x0076
(0063) }
(0064) PORTC |= (1<<PORTC3);
007A 9AAB SBI 0x15,3
(0065) DDRB=0xff;
007B EF8F LDI R24,0xFF
007C BB87 OUT 0x17,R24
(0066) //LcdDelay(500);
(0067) }
007D 9508 RET
_LcdXY:
y --> R22
x --> R20
007E D28C RCALL push_gset2
007F 2F62 MOV R22,R18
0080 2F40 MOV R20,R16
(0068)
(0069)
(0070)
(0071)
(0072) void LcdXY(char,char); /* LCD?????¨?????? */
(0073) void LcdXY(char x,char y)
(0074) {
(0075)
(0076) if ((y&0x01)!=0)LcdCmd(0x80|(x-1));
0081 FF60 SBRS R22,0
0082 C007 RJMP 0x008A
0083 2F04 MOV R16,R20
0084 2711 CLR R17
0085 5001 SUBI R16,1
0086 4010 SBCI R17,0
0087 6800 ORI R16,0x80
0088 D009 RCALL _LcdCmd
0089 C006 RJMP 0x0090
(0077) else LcdCmd(0xC0|(x-1));
008A 2F04 MOV R16,R20
008B 2711 CLR R17
008C 5001 SUBI R16,1
008D 4010 SBCI R17,0
008E 6C00 ORI R16,0xC0
008F D002 RCALL _LcdCmd
(0078)
(0079)
(0080) }
0090 D261 RCALL pop_gset2
0091 9508 RET
_LcdCmd:
c --> R20
0092 D261 RCALL push_gset1
0093 2F40 MOV R20,R16
(0081)
(0082) void LcdCmd(char); /* LCD?????ü?????? */
(0083) void LcdCmd(char c)
(0084) {
(0085)
(0086) LcdBusy();
0094 DFD8 RCALL _LcdBusy
(0087) PORTC |= (1<<PORTC3);
0095 9AAB SBI 0x15,3
(0088) PORTC &= ~(1<<PORTC4);
0096 98AC CBI 0x15,4
(0089) PORTC &= ~(1<<PORTC5);
0097 98AD CBI 0x15,5
(0090) //PORTC &= ~(1<<PORTC3);
(0091)
(0092) LcdCmdPort = c;
0098 BB48 OUT 0x18,R20
(0093) delay(500);
0099 EF04 LDI R16,0xF4
009A E011 LDI R17,1
009B DFAF RCALL _delay
(0094) PORTC &= ~(1<<PORTC3);
009C 98AB CBI 0x15,3
(0095)
(0096) }
009D D259 RCALL pop_gset1
009E 9508 RET
_LcdData:
c --> R20
009F D254 RCALL push_gset1
00A0 2F40 MOV R20,R16
(0097)
(0098)
(0099) void LcdData(char); /* LCD???????????? */
(0100) void LcdData(char c)
(0101) {
(0102)
(0103) LcdBusy();
00A1 DFCB RCALL _LcdBusy
(0104) PORTC |= (1<<PORTC3);
00A2 9AAB SBI 0x15,3
(0105) PORTC |= (1<<PORTC4);
00A3 9AAC SBI 0x15,4
(0106) PORTC &= ~(1<<PORTC5);
00A4 98AD CBI 0x15,5
(0107) //PORTC &= ~(1<<PORTC3);
(0108)
(0109) LcdDataPort = c;
00A5 BB48 OUT 0x18,R20
(0110) delay(500);
00A6 EF04 LDI R16,0xF4
00A7 E011 LDI R17,1
00A8 DFA2 RCALL _delay
(0111) PORTC &= ~(1<<PORTC3);
00A9 98AB CBI 0x15,3
(0112) }
00AA D24C RCALL pop_gset1
00AB 9508 RET
(0113)
(0114) void init_wdt(void)
(0115) {WDTCR=(1<<WDCE)|(1<<WDE);
_init_wdt:
00AC E188 LDI R24,0x18
00AD BD81 OUT 0x21,R24
(0116) WDTCR=(0<<WDCE)|(1<<WDE)|(1<<WDP2)|(1<<WDP1)|(1<<WDP0);
00AE E08F LDI R24,0xF
00AF BD81 OUT 0x21,R24
(0117) /*看门狗允许、溢出时间2.1s,p44*/
(0118) }
00B0 9508 RET
(0119)
(0120) void LcdInit(void); /* LCD?????????? */
(0121) void LcdInit()
(0122) {
(0123) PORTC |= (1<<PORTC4);
_LcdInit:
00B1 9AAC SBI 0x15,4
(0124) PORTC |= (1<<PORTC5);
00B2 9AAD SBI 0x15,5
(0125) PORTC |= (1<<PORTC3);
00B3 9AAB SBI 0x15,3
(0126) LcdCmd(0x38);
00B4 E308 LDI R16,0x38
00B5 DFDC RCALL _LcdCmd
(0127) LcdCmd(0x38);
00B6 E308 LDI R16,0x38
00B7 DFDA RCALL _LcdCmd
(0128) LcdCmd(0x06);
00B8 E006 LDI R16,6
00B9 DFD8 RCALL _LcdCmd
(0129) LcdCmd(0x0c);
00BA E00C LDI R16,0xC
00BB DFD6 RCALL _LcdCmd
(0130) LcdCmd(0x01);
00BC E001 LDI R16,1
(0131) }
00BD CFD4 RJMP _LcdCmd
(0132)
(0133)
(0134) void LcdClr(void); /* LCD???????? */
(0135) void LcdClr()
(0136) {
(0137) LcdCmd(0x01);
_LcdClr:
00BE E001 LDI R16,1
(0138) }
00BF CFD2 RJMP _LcdCmd
_LcdStr:
d --> R20
c --> R22
00C0 D24A RCALL push_gset2
00C1 01B8 MOVW R22,R16
(0139)
(0140)
(0141)
(0142)
(0143)
(0144) void LcdStr(char *); /* ????×?·??????? */
(0145) void LcdStr(char *c)
(0146) {
(0147) int d=0;
00C2 2744 CLR R20
00C3 2755 CLR R21
00C4 C008 RJMP 0x00CD
(0148) while (c[d]!=0)
(0149) LcdData(c[d++]); /* char of LCM */
00C5 011A MOVW R2,R20
00C6 5F4F SUBI R20,0xFF
00C7 4F5F SBCI R21,0xFF
00C8 01F1 MOVW R30,R2
00C9 0FE6 ADD R30,R22
00CA 1FF7 ADC R31,R23
00CB 8100 LDD R16,Z+0
00CC DFD2 RCALL _LcdData
00CD 01FA MOVW R30,R20
00CE 0FE6 ADD R30,R22
00CF 1FF7 ADC R31,R23
00D0 8020 LDD R2,Z+0
00D1 2022 TST R2
00D2 F791 BNE 0x00C5
(0150)
(0151) }
00D3 D21E RCALL pop_gset2
00D4 9508 RET
_main:
00D5 972C SBIW R28,0xC
(0152)
(0153)
(0154)
(0155) void main(void)
(0156) {
(0157) delay(2000);
00D6 ED00 LDI R16,0xD0
00D7 E017 LDI R17,7
00D8 DF72 RCALL _delay
(0158) OSCCAL=EEPROM_read(osccal_addr);
00D9 EF0F LDI R16,0xFF
00DA E011 LDI R17,1
00DB DF7F RCALL _EEPROM_read
00DC BF01 OUT 0x31,R16
(0159) DDRC=0xfe;
00DD EF8E LDI R24,0xFE
00DE BB84 OUT 0x14,R24
(0160) DDRB=0Xff;
00DF EF8F LDI R24,0xFF
00E0 BB87 OUT 0x17,R24
(0161) //init_wdt();
(0162) SEI();
00E1 9478 BSET 7
(0163) init_adc();
00E2 DF7F RCALL _init_adc
(0164) LcdInit();
00E3 DFCD RCALL _LcdInit
(0165) LcdClr();
00E4 DFD9 RCALL _LcdClr
00E5 C1CB RJMP 0x02B1
(0166)
(0167) while(1)
(0168) { delay(10000);
00E6 E100 LDI R16,0x10
00E7 E217 LDI R17,0x27
00E8 DF62 RCALL _delay
(0169) WDR();
00E9 95A8 WDR
(0170) init_adc();
00EA DF77 RCALL _init_adc
(0171) //LcdClr();
(0172) ADCSRA|=(1<<ADSC);
00EB 9A36 SBI 0x06,6
(0173) while(ADCSRA&(1<<ADIF));
00EC 9934 SBIC 0x06,4
00ED CFFE RJMP 0x00EC
(0174) readadc();
00EE DF77 RCALL _readadc
(0175) ADCSRA|=(1<<ADIF);
00EF 9A34 SBI 0x06,4
(0176) datax=(datah<<8)+datal;
00F0 90200079 LDS R2,_datal
00F2 9030007B LDS R3,_datah
00F4 9230007E STS _datax+1,R3
00F6 9220007D STS _datax,R2
(0177) ADCSRA&=~(1<<ADEN);
00F8 9837 CBI 0x06,7
(0178) v=(float)datax/0x3ff*2.56;
00F9 E30E LDI R16,0x3E
00FA E010 LDI R17,0
00FB D21B RCALL lpm32
00FC 933A ST R19,-Y
00FD 932A ST R18,-Y
00FE 931A ST R17,-Y
00FF 930A ST R16,-Y
0100 E30A LDI R16,0x3A
0101 E010 LDI R17,0
0102 D214 RCALL lpm32
0103 933A ST R19,-Y
0104 932A ST R18,-Y
0105 931A ST R17,-Y
0106 930A ST R16,-Y
0107 9100007D LDS R16,_datax
0109 9110007E LDS R17,_datax+1
010B 9516 LSR R17
010C 9507 ROR R16
010D D25B RCALL int2fp
010E 933A ST R19,-Y
010F 932A ST R18,-Y
0110 931A ST R17,-Y
0111 930A ST R16,-Y
0112 D386 RCALL empy32fs
0113 9100007D LDS R16,_datax
0115 9110007E LDS R17,_datax+1
0117 7001 ANDI R16,1
0118 7010 ANDI R17,0
0119 D24F RCALL int2fp
011A 933A ST R19,-Y
011B 932A ST R18,-Y
011C 931A ST R17,-Y
011D 930A ST R16,-Y
011E D29F RCALL add32fs
011F E306 LDI R16,0x36
0120 E010 LDI R17,0
0121 D1F5 RCALL lpm32
0122 933A ST R19,-Y
0123 932A ST R18,-Y
0124 931A ST R17,-Y
0125 930A ST R16,-Y
0126 D2EB RCALL div32fs
0127 D373 RCALL empy32f
0128 9310006E STS _v+1,R17
012A 9300006D STS _v,R16
012C 93300070 STS _v+3,R19
012E 9320006F STS _v+2,R18
(0179) W=(float)v*v;
0130 933A ST R19,-Y
0131 932A ST R18,-Y
0132 931A ST R17,-Y
0133 930A ST R16,-Y
0134 933A ST R19,-Y
0135 932A ST R18,-Y
0136 931A ST R17,-Y
0137 930A ST R16,-Y
0138 D362 RCALL empy32f
0139 9310006A STS _W+1,R17
013B 93000069 STS _W,R16
013D 9330006C STS _W+3,R19
013F 9320006B STS _W+2,R18
(0180) w1=(uint)W;
0141 933A ST R19,-Y
0142 932A ST R18,-Y
0143 931A ST R17,-Y
0144 930A ST R16,-Y
0145 E302 LDI R16,0x32
0146 E010 LDI R17,0
0147 D1CF RCALL lpm32
0148 933A ST R19,-Y
0149 932A ST R18,-Y
014A 931A ST R17,-Y
014B 930A ST R16,-Y
014C D31D RCALL cmp32f
014D F0D4 BLT 0x0168
014E 9040006B LDS R4,_W+2
0150 9050006C LDS R5,_W+3
0152 90200069 LDS R2,_W
0154 9030006A LDS R3,_W+1
0156 925A ST R5,-Y
0157 924A ST R4,-Y
0158 923A ST R3,-Y
0159 922A ST R2,-Y
015A E302 LDI R16,0x32
015B E010 LDI R17,0
015C D1BA RCALL lpm32
015D 933A ST R19,-Y
015E 932A ST R18,-Y
015F 931A ST R17,-Y
0160 930A ST R16,-Y
0161 D263 RCALL sub32f
0162 D1C8 RCALL fp2int
0163 01C8 MOVW R24,R16
0164 5080 SUBI R24,0
0165 4890 SBCI R25,0x80
0166 015C MOVW R10,R24
0167 C00A RJMP 0x0172
0168 9120006B LDS R18,_W+2
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -