📄 watchdog.lst
字号:
__start:
__text_start:
0011 E5CF LDI R28,0x5F
0012 E0D2 LDI R29,2
0013 BFCD OUT 0x3D,R28
0014 BFDE OUT 0x3E,R29
0015 51C0 SUBI R28,0x10
0016 40D0 SBCI R29,0
0017 EA0A LDI R16,0xAA
0018 8308 STD Y+0,R16
0019 2400 CLR R0
001A E6E0 LDI R30,0x60
001B E0F0 LDI R31,0
001C E010 LDI R17,0
001D 36E0 CPI R30,0x60
001E 07F1 CPC R31,R17
001F F011 BEQ 0x0022
0020 9201 ST R0,Z+
0021 CFFB RJMP 0x001D
0022 8300 STD Z+0,R16
0023 E2E2 LDI R30,0x22
0024 E0F0 LDI R31,0
0025 E6A0 LDI R26,0x60
0026 E0B0 LDI R27,0
0027 E010 LDI R17,0
0028 32E2 CPI R30,0x22
0029 07F1 CPC R31,R17
002A F021 BEQ 0x002F
002B 95C8 LPM
002C 9631 ADIW R30,1
002D 920D ST R0,X+
002E CFF9 RJMP 0x0028
002F D04F RCALL _main
_exit:
0030 CFFF RJMP _exit
_DelayMs:
j --> R20
i --> R16
0031 D079 RCALL push_gset1
FILE: J:\AVRpractice\BOOK\WatchDog\WatchDog.c
(0001) //***************FileName:LED.C***************//
(0002) //**************ICCAVR V6.30编译**************//
(0003)
(0004) #include<io8535v.h> //头文件,AT90S8535单片机的寄存器定义
(0005) #define uchar unsigned char //数据类型说明
(0006) #define uint unsigned int //数据类型说明
(0007)
(0008) void DelayMs(uint i) //Ms级延时函数,参数i:延时时间
(0009) {uint j;
(0010) for(;i!=0;i--)
0032 C00A RJMP 0x003D
(0011) {for(j=2000;j!=0;j--) {;}}
0033 ED40 LDI R20,0xD0
0034 E057 LDI R21,7
0035 C002 RJMP 0x0038
0036 5041 SUBI R20,1
0037 4050 SBCI R21,0
0038 3040 CPI R20,0
0039 0745 CPC R20,R21
003A F7D9 BNE 0x0036
003B 5001 SUBI R16,1
003C 4010 SBCI R17,0
003D 3000 CPI R16,0
003E 0701 CPC R16,R17
003F F799 BNE 0x0033
(0012) }
0040 D06D RCALL pop_gset1
0041 9508 RET
_Horse:
i --> R16
0042 D068 RCALL push_gset1
(0013)
(0014) void Horse(uchar i) //跑马灯程序,通过步判断点亮相应的LED
(0015) {switch(i) //高电平点亮LED
0043 2F40 MOV R20,R16
0044 2755 CLR R21
0045 3041 CPI R20,1
0046 E0E0 LDI R30,0
0047 075E CPC R21,R30
0048 F0E9 BEQ 0x0066
0049 3042 CPI R20,2
004A E0E0 LDI R30,0
004B 075E CPC R21,R30
004C F0E1 BEQ 0x0069
004D 3043 CPI R20,3
004E E0E0 LDI R30,0
004F 075E CPC R21,R30
0050 F0D9 BEQ 0x006C
0051 3044 CPI R20,4
0052 E0E0 LDI R30,0
0053 075E CPC R21,R30
0054 F0D1 BEQ 0x006F
0055 3045 CPI R20,5
0056 E0E0 LDI R30,0
0057 075E CPC R21,R30
0058 F0C9 BEQ 0x0072
0059 3046 CPI R20,6
005A E0E0 LDI R30,0
005B 075E CPC R21,R30
005C F0C1 BEQ 0x0075
005D 3047 CPI R20,7
005E E0E0 LDI R30,0
005F 075E CPC R21,R30
0060 F0B9 BEQ 0x0078
0061 3048 CPI R20,0x8
0062 E0E0 LDI R30,0
0063 075E CPC R21,R30
0064 F0B1 BEQ 0x007B
0065 C017 RJMP 0x007D
(0016) {case 1:PORTA=0xfe;break; //1111 1110B 点亮LED1
0066 EF8E LDI R24,0xFE
0067 BB8B OUT 0x1B,R24
0068 C014 RJMP 0x007D
(0017) case 2:PORTA=0xfc;break; //1111 1100B 点亮LED1~LED2
0069 EF8C LDI R24,0xFC
006A BB8B OUT 0x1B,R24
006B C011 RJMP 0x007D
(0018) case 3:PORTA=0xf8;break; //1111 1000B 点亮LED1~LED3
006C EF88 LDI R24,0xF8
006D BB8B OUT 0x1B,R24
006E C00E RJMP 0x007D
(0019) case 4:PORTA=0xf0;break; //1111 0000B 点亮LED1~LED4
006F EF80 LDI R24,0xF0
0070 BB8B OUT 0x1B,R24
0071 C00B RJMP 0x007D
(0020) case 5:PORTA=0xe0;break; //1110 0000B 点亮LED1~LED5
0072 EE80 LDI R24,0xE0
0073 BB8B OUT 0x1B,R24
0074 C008 RJMP 0x007D
(0021) case 6:PORTA=0xc0;break; //1100 0000B 点亮LED1~LED6
0075 EC80 LDI R24,0xC0
0076 BB8B OUT 0x1B,R24
0077 C005 RJMP 0x007D
(0022) case 7:PORTA=0x80;break; //1000 0000B 点亮LED1~LED7
0078 E880 LDI R24,0x80
0079 BB8B OUT 0x1B,R24
007A C002 RJMP 0x007D
(0023) case 8:PORTA=0x00;break; //0000 0000B 点亮LED1~LED8
007B 2422 CLR R2
007C BA2B OUT 0x1B,R2
(0024) default:break;}
(0025) }
007D D030 RCALL pop_gset1
007E 9508 RET
(0026)
(0027) void main(void)
(0028) {uchar i;
(0029) DDRA=0xff; //端口设置:PA口设置为推挽1输出
_main:
i --> R20
007F EF8F LDI R24,0xFF
0080 BB8A OUT 0x1A,R24
(0030) PORTA=0xff;
0081 BB8B OUT 0x1B,R24
(0031) PORTA=0x00; //PORTA初始值为0,灭掉所有的LED
0082 2422 CLR R2
0083 BA2B OUT 0x1B,R2
(0032) DelayMs(1000);
0084 EE08 LDI R16,0xE8
0085 E013 LDI R17,3
0086 DFAA RCALL _DelayMs
(0033) WDTCR=0x0f;
0087 E08F LDI R24,0xF
0088 BD81 OUT 0x21,R24
0089 C01F RJMP 0x00A9
(0034) while(1) //程序无条件执行
(0035) { for(i=1;i<9;i++) //依次点亮LED1~LED8
008A E041 LDI R20,1
008B C00B RJMP 0x0097
(0036) {Horse(i);
008C 2F04 MOV R16,R20
008D DFB4 RCALL _Horse
(0037) DelayMs(1000);
008E EE08 LDI R16,0xE8
008F E013 LDI R17,3
0090 DFA0 RCALL _DelayMs
(0038) WDTCR=0x1f;
0091 E18F LDI R24,0x1F
0092 BD81 OUT 0x21,R24
(0039) WDTCR=WDTCR&0xf7;} //点亮时间约1秒
0093 B581 IN R24,0x21
0094 7F87 ANDI R24,0xF7
0095 BD81 OUT 0x21,R24
0096 9543 INC R20
0097 3049 CPI R20,0x9
0098 F398 BCS 0x008C
(0040) for(i=9;i>0;i--) //依次熄灭LED8~LED1
0099 E049 LDI R20,0x9
009A C006 RJMP 0x00A1
(0041) {Horse(i);
009B 2F04 MOV R16,R20
009C DFA5 RCALL _Horse
(0042) DelayMs(1000);} //熄灭时间约1秒
009D EE08 LDI R16,0xE8
009E E013 LDI R17,3
009F DF91 RCALL _DelayMs
00A0 954A DEC R20
00A1 2422 CLR R2
00A2 1624 CP R2,R20
00A3 F3B8 BCS 0x009B
(0043) PORTA=0xff;
00A4 EF8F LDI R24,0xFF
00A5 BB8B OUT 0x1B,R24
(0044) DelayMs(1000);
00A6 EE08 LDI R16,0xE8
00A7 E013 LDI R17,3
00A8 DF88 RCALL _DelayMs
00A9 CFE0 RJMP 0x008A
(0045) }
(0046) }
FILE: <library>
00AA 9508 RET
push_gset1:
00AB 935A ST R21,-Y
00AC 934A ST R20,-Y
00AD 9508 RET
pop_gset1:
00AE E0E1 LDI R30,1
pop:
00AF 9149 LD R20,Y+
00B0 9159 LD R21,Y+
00B1 FDE0 SBRC R30,0
00B2 9508 RET
00B3 9169 LD R22,Y+
00B4 9179 LD R23,Y+
00B5 FDE1 SBRC R30,1
00B6 9508 RET
00B7 90A9 LD R10,Y+
00B8 90B9 LD R11,Y+
00B9 FDE2 SBRC R30,2
00BA 9508 RET
00BB 90C9 LD R12,Y+
00BC 90D9 LD R13,Y+
00BD FDE3 SBRC R30,3
00BE 9508 RET
00BF 90E9 LD R14,Y+
00C0 90F9 LD R15,Y+
00C1 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -