📄 watchdog.lst
字号:
__text_start:
__start:
002A E5CF LDI R28,0x5F
002B E0D4 LDI R29,4
002C BFCD OUT 0x3D,R28
002D BFDE OUT 0x3E,R29
002E 51C0 SUBI R28,0x10
002F 40D0 SBCI R29,0
0030 EA0A LDI R16,0xAA
0031 8308 STD Y+0,R16
0032 2400 CLR R0
0033 E6E0 LDI R30,0x60
0034 E0F0 LDI R31,0
0035 E010 LDI R17,0
0036 36E0 CPI R30,0x60
0037 07F1 CPC R31,R17
0038 F011 BEQ 0x003B
0039 9201 ST R0,Z+
003A CFFB RJMP 0x0036
003B 8300 STD Z+0,R16
003C E5E4 LDI R30,0x54
003D E0F0 LDI R31,0
003E E6A0 LDI R26,0x60
003F E0B0 LDI R27,0
0040 E010 LDI R17,0
0041 35E4 CPI R30,0x54
0042 07F1 CPC R31,R17
0043 F021 BEQ 0x0048
0044 95C8 LPM
0045 9631 ADIW R30,1
0046 920D ST R0,X+
0047 CFF9 RJMP 0x0041
0048 940E007D CALL _main
_exit:
004A CFFF RJMP _exit
_delay_ms:
i --> R20
time --> R16
004B 940E009A CALL push_gset1
FILE: D:\AVR\我的程序\开门狗实验\cfg.h
(0001) /****************************
(0002) *程序名称:功能函数集
(0003) *设 计:萧联珠
(0004) *日 期:2007-11-23
(0005) ********************************/
(0006) #include <iom16v.h>
(0007)
(0008) /*延时子程序*/
(0009) void delay_ms(int time)
(0010) {
(0011) int i;
(0012) for(;time>0;time--)
004D C00A RJMP 0x0058
(0013) for(i=0;i<1000;i++);
004E 2744 CLR R20
004F 2755 CLR R21
0050 5F4F SUBI R20,0xFF
0051 4F5F SBCI R21,0xFF
0052 3E48 CPI R20,0xE8
0053 E0E3 LDI R30,3
0054 075E CPC R21,R30
0055 F3D4 BLT 0x0050
0056 5001 SUBI R16,1
0057 4010 SBCI R17,0
0058 2422 CLR R2
0059 2433 CLR R3
005A 1620 CP R2,R16
005B 0631 CPC R3,R17
005C F38C BLT 0x004E
005D 940E009D CALL pop_gset1
005F 9508 RET
(0014) }
(0015)
(0016) /*端口初始化*/
(0017) void port_init()
(0018) {
(0019) DDRB=0xFF; //配置PB口为输出
_port_init:
0060 EF8F LDI R24,0xFF
0061 BB87 OUT 0x17,R24
(0020) PORTB=0xFF; //PB口的初始值为"1"
0062 BB88 OUT 0x18,R24
0063 9508 RET
_display:
index --> R20
0064 940E009A CALL push_gset1
(0021) }
(0022)
(0023) /*流水灯显示*/
(0024) void display()
(0025) {
(0026) int index;
(0027) for(index=0;index<8;index++)
0066 2744 CLR R20
0067 2755 CLR R21
(0028) {
(0029) PORTB=~(1<<index);
0068 E001 LDI R16,1
0069 E010 LDI R17,0
006A 019A MOVW R18,R20
006B 940E00B1 CALL lsl16
006D 0118 MOVW R2,R16
006E 9420 COM R2
006F 9430 COM R3
0070 BA28 OUT 0x18,R2
(0030) delay_ms(10);
0071 E00A LDI R16,0xA
0072 E010 LDI R17,0
0073 DFD7 RCALL _delay_ms
0074 5F4F SUBI R20,0xFF
0075 4F5F SBCI R21,0xFF
0076 3048 CPI R20,0x8
0077 E0E0 LDI R30,0
0078 075E CPC R21,R30
0079 F374 BLT 0x0068
007A 940E009D CALL pop_gset1
007C 9508 RET
FILE: D:\AVR\我的程序\开门狗实验\main.c
(0001) /*************************************************
(0002) *实验目的:熟悉开门狗编程
(0003) *设 计:萧联珠
(0004) *日 期:2007-11-23
(0005) *说 明:如果不及时喂狗,那么导致单片机不停复位。
(0006) **************************************************/
(0007) #include <iom16v.h>
(0008) #include "cfg.h"
(0009) #include <macros.h>
(0010)
(0011) void main()
(0012) {
(0013) port_init();
_main:
007D DFE2 RCALL _port_init
(0014) WDTCR|=(1<<WDTOE)|(1<<WDE); /* 置位 WDTOE 和 WDE*/
007E B581 IN R24,0x21
007F 6188 ORI R24,0x18
0080 BD81 OUT 0x21,R24
(0015) WDTCR=(1<<WDE)|(1<<WDP2)|(1<<WDP1); /*设定周期为1S*/
0081 E08E LDI R24,0xE
0082 BD81 OUT 0x21,R24
(0016)
(0017) display();
0083 DFE0 RCALL _display
0084 C00B RJMP 0x0090
(0018)
(0019) while(1)
(0020) {
(0021)
(0022) PORTB=0xFE;
0085 EF8E LDI R24,0xFE
0086 BB88 OUT 0x18,R24
(0023) WDR(); /*喂狗,通过注释这句可以区别是否喂狗的区别*/
0087 95A8 WDR
(0024) delay_ms(50);
0088 E302 LDI R16,0x32
0089 E010 LDI R17,0
008A DFC0 RCALL _delay_ms
(0025) PORTB=0xFF;
008B EF8F LDI R24,0xFF
008C BB88 OUT 0x18,R24
(0026) delay_ms(50);
FILE: <library>
008D E302 LDI R16,0x32
008E E010 LDI R17,0
008F DFBB RCALL _delay_ms
0090 CFF4 RJMP 0x0085
0091 9508 RET
push_gset5:
0092 92FA ST R15,-Y
0093 92EA ST R14,-Y
push_gset4:
0094 92DA ST R13,-Y
0095 92CA ST R12,-Y
push_gset3:
0096 92BA ST R11,-Y
0097 92AA ST R10,-Y
push_gset2:
0098 937A ST R23,-Y
0099 936A ST R22,-Y
push_gset1:
009A 935A ST R21,-Y
009B 934A ST R20,-Y
009C 9508 RET
pop_gset1:
009D E0E1 LDI R30,1
pop:
009E 9149 LD R20,Y+
009F 9159 LD R21,Y+
00A0 FDE0 SBRC R30,0
00A1 9508 RET
00A2 9169 LD R22,Y+
00A3 9179 LD R23,Y+
00A4 FDE1 SBRC R30,1
00A5 9508 RET
00A6 90A9 LD R10,Y+
00A7 90B9 LD R11,Y+
00A8 FDE2 SBRC R30,2
00A9 9508 RET
00AA 90C9 LD R12,Y+
00AB 90D9 LD R13,Y+
00AC FDE3 SBRC R30,3
00AD 9508 RET
00AE 90E9 LD R14,Y+
00AF 90F9 LD R15,Y+
00B0 9508 RET
lsl16:
00B1 2322 TST R18
00B2 F021 BEQ 0x00B7
00B3 0F00 LSL R16
00B4 1F11 ROL R17
00B5 952A DEC R18
00B6 CFFA RJMP lsl16
00B7 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -