📄 dl.lst
字号:
__text_start:
__start:
0013 E5CF LDI R28,0x5F
0014 E0D4 LDI R29,4
0015 BFCD OUT 0x3D,R28
0016 BFDE OUT 0x3E,R29
0017 51C0 SUBI R28,0x10
0018 40D0 SBCI R29,0
0019 EA0A LDI R16,0xAA
001A 8308 STD Y+0,R16
001B 2400 CLR R0
001C E6E0 LDI R30,0x60
001D E0F0 LDI R31,0
001E E010 LDI R17,0
001F 36E3 CPI R30,0x63
0020 07F1 CPC R31,R17
0021 F011 BEQ 0x0024
0022 9201 ST R0,Z+
0023 CFFB RJMP 0x001F
0024 8300 STD Z+0,R16
0025 E2E6 LDI R30,0x26
0026 E0F0 LDI R31,0
0027 E6A0 LDI R26,0x60
0028 E0B0 LDI R27,0
0029 E010 LDI R17,0
002A 32E6 CPI R30,0x26
002B 07F1 CPC R31,R17
002C F021 BEQ 0x0031
002D 95C8 LPM
002E 9631 ADIW R30,1
002F 920D ST R0,X+
0030 CFF9 RJMP 0x002A
0031 D029 RCALL _main
_exit:
0032 CFFF RJMP _exit
FILE: dl.c
(0001) #include<iom8v.h> //包含ATMEGA8的头文件
(0002) #include<macros.h> //包含一些常用宏的定义
(0003) //#define osccal 0xaa//内部RC 校正常数
(0004) #define fosc 8000000 //晶振8MHZ
(0005) #define baud 4800 //波特率
(0006) #define osccal_addr 0x1ff
(0007) //内部晶体震荡器校正字存放地址
(0008) #define uint unsigned int
(0009) #define uchar unsigned char
(0010)
(0011) uint j;
(0012) uchar t;
(0013) ///////////////延时
(0014) void delay(unsigned int x)
(0015)
(0016) {
_delay:
x --> R16
0033 C018 RJMP 0x004C
(0017) while(x-->0)
(0018) {
(0019) for(j=0;j<5;j++)
0034 2422 CLR R2
0035 2433 CLR R3
0036 92300062 STS _j+1,R3
0038 92200061 STS _j,R2
003A C009 RJMP 0x0044
003B 91800061 LDS R24,_j
003D 91900062 LDS R25,_j+1
003F 9601 ADIW R24,1
0040 93900062 STS _j+1,R25
0042 93800061 STS _j,R24
0044 91800061 LDS R24,_j
0046 91900062 LDS R25,_j+1
0048 3085 CPI R24,5
0049 E0E0 LDI R30,0
004A 079E CPC R25,R30
004B F378 BCS 0x003B
004C 0118 MOVW R2,R16
004D 5001 SUBI R16,1
004E 4010 SBCI R17,0
004F 2022 TST R2
0050 F719 BNE 0x0034
0051 2033 TST R3
0052 F709 BNE 0x0034
(0020) {;}
(0021) }
(0022) }
0053 9508 RET
(0023)
(0024) unsigned char EEPROM_read(unsigned int uiAddress)
(0025) {while(EECR&(1<<EEWE));
_EEPROM_read:
uiAddress --> R16
0054 99E1 SBIC 0x1C,1
0055 CFFE RJMP _EEPROM_read
(0026) EEAR=uiAddress;
0056 BB1F OUT 0x1F,R17
0057 BB0E OUT 0x1E,R16
(0027) EECR|=(1<<EERE);
0058 9AE0 SBI 0x1C,0
(0028) return EEDR;
0059 B30D IN R16,0x1D
005A 9508 RET
(0029) }
(0030)
(0031)
(0032) void main(void)
(0033) {
(0034) delay(200);
_main:
005B EC08 LDI R16,0xC8
005C E010 LDI R17,0
005D DFD5 RCALL _delay
(0035) OSCCAL=EEPROM_read(osccal_addr); //D£?y?ú2?RC??μ′μ??μ?ê
005E EF0F LDI R16,0xFF
005F E011 LDI R17,1
0060 DFF3 RCALL _EEPROM_read
0061 BF01 OUT 0x31,R16
(0036) DDRB=0xfe;
0062 EF8E LDI R24,0xFE
0063 BB87 OUT 0x17,R24
(0037) DDRC=0xff;
0064 EF8F LDI R24,0xFF
0065 BB84 OUT 0x14,R24
(0038)
(0039) PORTC&=~(1<<5);
0066 98AD CBI 0x15,5
0067 C00F RJMP 0x0077
(0040) while(1)
(0041) {
(0042) t=(PINB&0x01);
0068 B386 IN R24,0x16
0069 7081 ANDI R24,1
006A 93800060 STS _t,R24
(0043) if(t==0)
006C 2388 TST R24
006D F429 BNE 0x0073
(0044) {
(0045) PORTC|=(1<<5);
006E 9AAD SBI 0x15,5
(0046) delay(50000);
006F E500 LDI R16,0x50
0070 EC13 LDI R17,0xC3
0071 DFC1 RCALL _delay
(0047) }
0072 C004 RJMP 0x0077
(0048) else
(0049) {
(0050) PORTC&=~(1<<5);
0073 98AD CBI 0x15,5
(0051) delay(50000);
0074 E500 LDI R16,0x50
0075 EC13 LDI R17,0xC3
0076 DFBC RCALL _delay
0077 CFF0 RJMP 0x0068
(0052) }
(0053) }
(0054) }
FILE: <library>
0078 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -