📄 watchdog.lis
字号:
.module WatchDog.c
.area text(rom, con, rel)
0000 .dbfile J:\AVRpractice\BOOK\WatchDog\WatchDog.c
0000 .dbfunc e DelayMs _DelayMs fV
0000 ; j -> R20,R21
0000 ; i -> R16,R17
.even
0000 _DelayMs::
0000 00D0 rcall push_gset1
0002 .dbline -1
0002 .dbline 9
0002 ; //***************FileName:LED.C***************//
0002 ; //**************ICCAVR V6.30编译**************//
0002 ;
0002 ; #include<io8535v.h> //头文件,AT90S8535单片机的寄存器定义
0002 ; #define uchar unsigned char //数据类型说明
0002 ; #define uint unsigned int //数据类型说明
0002 ;
0002 ; void DelayMs(uint i) //Ms级延时函数,参数i:延时时间
0002 ; {uint j;
0002 .dbline 10
0002 ; for(;i!=0;i--)
0002 0AC0 rjmp L5
0004 L2:
0004 .dbline 11
0004 .dbline 11
0004 40ED ldi R20,2000
0006 57E0 ldi R21,7
0008 02C0 rjmp L9
000A L6:
000A .dbline 11
000A .dbline 11
000A .dbline 11
000A L7:
000A .dbline 11
000A 4150 subi R20,1
000C 5040 sbci R21,0
000E L9:
000E .dbline 11
000E 4030 cpi R20,0
0010 4507 cpc R20,R21
0012 D9F7 brne L6
0014 X0:
0014 .dbline 11
0014 L3:
0014 .dbline 10
0014 0150 subi R16,1
0016 1040 sbci R17,0
0018 L5:
0018 .dbline 10
0018 0030 cpi R16,0
001A 0107 cpc R16,R17
001C 99F7 brne L2
001E X1:
001E .dbline -2
001E .dbline 12
001E ; {for(j=2000;j!=0;j--) {;}}
001E ; }
001E L1:
001E 00D0 rcall pop_gset1
0020 .dbline 0 ; func end
0020 0895 ret
0022 .dbsym r j 20 i
0022 .dbsym r i 16 i
0022 .dbend
0022 .dbfunc e Horse _Horse fV
0022 ; i -> R16
.even
0022 _Horse::
0022 00D0 rcall push_gset1
0024 .dbline -1
0024 .dbline 15
0024 ;
0024 ; void Horse(uchar i) //跑马灯程序,通过步判断点亮相应的LED
0024 ; {switch(i) //高电平点亮LED
0024 .dbline 15
0024 402F mov R20,R16
0026 5527 clr R21
0028 4130 cpi R20,1
002A E0E0 ldi R30,0
002C 5E07 cpc R21,R30
002E E9F0 breq L14
0030 4230 cpi R20,2
0032 E0E0 ldi R30,0
0034 5E07 cpc R21,R30
0036 E1F0 breq L15
0038 4330 cpi R20,3
003A E0E0 ldi R30,0
003C 5E07 cpc R21,R30
003E D9F0 breq L16
0040 4430 cpi R20,4
0042 E0E0 ldi R30,0
0044 5E07 cpc R21,R30
0046 D1F0 breq L17
0048 4530 cpi R20,5
004A E0E0 ldi R30,0
004C 5E07 cpc R21,R30
004E C9F0 breq L18
0050 4630 cpi R20,6
0052 E0E0 ldi R30,0
0054 5E07 cpc R21,R30
0056 C1F0 breq L19
0058 4730 cpi R20,7
005A E0E0 ldi R30,0
005C 5E07 cpc R21,R30
005E B9F0 breq L20
0060 4830 cpi R20,8
0062 E0E0 ldi R30,0
0064 5E07 cpc R21,R30
0066 B1F0 breq L21
0068 17C0 rjmp L12
006A X2:
006A .dbline 16
006A L14:
006A .dbline 16
006A ; {case 1:PORTA=0xfe;break; //1111 1110B 点亮LED1
006A 8EEF ldi R24,254
006C 8BBB out 0x1b,R24
006E .dbline 16
006E 14C0 rjmp L12
0070 L15:
0070 .dbline 17
0070 ; case 2:PORTA=0xfc;break; //1111 1100B 点亮LED1~LED2
0070 8CEF ldi R24,252
0072 8BBB out 0x1b,R24
0074 .dbline 17
0074 11C0 rjmp L12
0076 L16:
0076 .dbline 18
0076 ; case 3:PORTA=0xf8;break; //1111 1000B 点亮LED1~LED3
0076 88EF ldi R24,248
0078 8BBB out 0x1b,R24
007A .dbline 18
007A 0EC0 rjmp L12
007C L17:
007C .dbline 19
007C ; case 4:PORTA=0xf0;break; //1111 0000B 点亮LED1~LED4
007C 80EF ldi R24,240
007E 8BBB out 0x1b,R24
0080 .dbline 19
0080 0BC0 rjmp L12
0082 L18:
0082 .dbline 20
0082 ; case 5:PORTA=0xe0;break; //1110 0000B 点亮LED1~LED5
0082 80EE ldi R24,224
0084 8BBB out 0x1b,R24
0086 .dbline 20
0086 08C0 rjmp L12
0088 L19:
0088 .dbline 21
0088 ; case 6:PORTA=0xc0;break; //1100 0000B 点亮LED1~LED6
0088 80EC ldi R24,192
008A 8BBB out 0x1b,R24
008C .dbline 21
008C 05C0 rjmp L12
008E L20:
008E .dbline 22
008E ; case 7:PORTA=0x80;break; //1000 0000B 点亮LED1~LED7
008E 80E8 ldi R24,128
0090 8BBB out 0x1b,R24
0092 .dbline 22
0092 02C0 rjmp L12
0094 L21:
0094 .dbline 23
0094 2224 clr R2
0096 2BBA out 0x1b,R2
0098 .dbline 23
0098 .dbline 24
0098 L12:
0098 .dbline -2
0098 .dbline 25
0098 ; case 8:PORTA=0x00;break; //0000 0000B 点亮LED1~LED8
0098 ; default:break;}
0098 ; }
0098 L10:
0098 00D0 rcall pop_gset1
009A .dbline 0 ; func end
009A 0895 ret
009C .dbsym r i 16 c
009C .dbend
009C .dbfunc e main _main fV
009C ; i -> R20
.even
009C _main::
009C .dbline -1
009C .dbline 28
009C ;
009C ; void main(void)
009C ; {uchar i;
009C .dbline 29
009C ; DDRA=0xff; //端口设置:PA口设置为推挽1输出
009C 8FEF ldi R24,255
009E 8ABB out 0x1a,R24
00A0 .dbline 30
00A0 ; PORTA=0xff;
00A0 8BBB out 0x1b,R24
00A2 .dbline 31
00A2 ; PORTA=0x00; //PORTA初始值为0,灭掉所有的LED
00A2 2224 clr R2
00A4 2BBA out 0x1b,R2
00A6 .dbline 32
00A6 ; DelayMs(1000);
00A6 08EE ldi R16,1000
00A8 13E0 ldi R17,3
00AA AADF rcall _DelayMs
00AC .dbline 33
00AC ; WDTCR=0x0f;
00AC 8FE0 ldi R24,15
00AE 81BD out 0x21,R24
00B0 1FC0 rjmp L24
00B2 L23:
00B2 .dbline 35
00B2 ; while(1) //程序无条件执行
00B2 ; { for(i=1;i<9;i++) //依次点亮LED1~LED8
00B2 .dbline 35
00B2 41E0 ldi R20,1
00B4 0BC0 rjmp L29
00B6 L26:
00B6 .dbline 36
00B6 .dbline 36
00B6 042F mov R16,R20
00B8 B4DF rcall _Horse
00BA .dbline 37
00BA 08EE ldi R16,1000
00BC 13E0 ldi R17,3
00BE A0DF rcall _DelayMs
00C0 .dbline 38
00C0 8FE1 ldi R24,31
00C2 81BD out 0x21,R24
00C4 .dbline 39
00C4 81B5 in R24,0x21
00C6 877F andi R24,247
00C8 81BD out 0x21,R24
00CA .dbline 39
00CA L27:
00CA .dbline 35
00CA 4395 inc R20
00CC L29:
00CC .dbline 35
00CC 4930 cpi R20,9
00CE 98F3 brlo L26
00D0 .dbline 40
00D0 ; {Horse(i);
00D0 ; DelayMs(1000);
00D0 ; WDTCR=0x1f;
00D0 ; WDTCR=WDTCR&0xf7;} //点亮时间约1秒
00D0 ; for(i=9;i>0;i--) //依次熄灭LED8~LED1
00D0 49E0 ldi R20,9
00D2 06C0 rjmp L33
00D4 L30:
00D4 .dbline 41
00D4 .dbline 41
00D4 042F mov R16,R20
00D6 A5DF rcall _Horse
00D8 .dbline 42
00D8 08EE ldi R16,1000
00DA 13E0 ldi R17,3
00DC 91DF rcall _DelayMs
00DE .dbline 42
00DE L31:
00DE .dbline 40
00DE 4A95 dec R20
00E0 L33:
00E0 .dbline 40
00E0 2224 clr R2
00E2 2416 cp R2,R20
00E4 B8F3 brlo L30
00E6 .dbline 43
00E6 8FEF ldi R24,255
00E8 8BBB out 0x1b,R24
00EA .dbline 44
00EA 08EE ldi R16,1000
00EC 13E0 ldi R17,3
00EE 88DF rcall _DelayMs
00F0 .dbline 45
00F0 L24:
00F0 .dbline 34
00F0 E0CF rjmp L23
00F2 X3:
00F2 .dbline -2
00F2 .dbline 46
00F2 ; {Horse(i);
00F2 ; DelayMs(1000);} //熄灭时间约1秒
00F2 ; PORTA=0xff;
00F2 ; DelayMs(1000);
00F2 ; }
00F2 ; }
00F2 L22:
00F2 .dbline 0 ; func end
00F2 0895 ret
00F4 .dbsym r i 20 c
00F4 .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -