📄 main.lis
字号:
.module main.c
.area text(rom, con, rel)
0000 .dbfile E:\ICCAVR\project\AVRMEG~2\icc\012-WATCHDOG\main.c
0000 .dbfunc e delay_ms _delay_ms fV
0000 ; a -> R20
0000 ; b -> R22
0000 ; i -> R16
.even
0000 _delay_ms::
0000 0E940000 xcall push_gset2
0004 .dbline -1
0004 .dbline 18
0004 ; /*
0004 ; 实验十二:
0004 ; AVR内部看门口实验。
0004 ; 1、看门口实验。在主程序中周期喂狗,通过按下按键让程序无限循环,从而启动看门狗。
0004 ; 2、内部1 M晶振,程序采用单任务方式,软件延时。
0004 ; 3、进行此实验请插上JP1、JP3的所有8个短路块,JP7(LED_EN)短路块。
0004 ; 4、通过此实验可了解看门狗的设置及看门狗的喂狗等。
0004 ;
0004 ; AVR mega16学习板
0004 ; www.iccavr.com
0004 ; 16:20 2007-4-9
0004 ; */
0004 ;
0004 ; #include "iom16v.h"
0004 ; #include <macros.h>
0004 ;
0004 ; /*延时函数*/
0004 ; void delay_ms(unsigned char i) {
0004 .dbline 21
0004 41E0 ldi R20,1
0006 06C0 xjmp L5
0008 L2:
0008 .dbline 21
0008 ;
0008 ; unsigned char a, b;
0008 ; for (a = 1; a < i; a++) {
0008 .dbline 22
0008 61E0 ldi R22,1
000A 01C0 xjmp L9
000C L6:
000C .dbline 22
000C .dbline 23
000C .dbline 24
000C L7:
000C .dbline 22
000C 6395 inc R22
000E L9:
000E .dbline 22
000E 6623 tst R22
0010 E9F7 brne L6
0012 .dbline 25
0012 L3:
0012 .dbline 21
0012 4395 inc R20
0014 L5:
0014 .dbline 21
0014 4017 cp R20,R16
0016 C0F3 brlo L2
0018 .dbline -2
0018 L1:
0018 0E940000 xcall pop_gset2
001C .dbline 0 ; func end
001C 0895 ret
001E .dbsym r a 20 c
001E .dbsym r b 22 c
001E .dbsym r i 16 c
001E .dbend
001E .dbfunc e main _main fV
.even
001E _main::
001E .dbline -1
001E .dbline 28
001E ; for (b = 1; b; b++) {
001E ; ;
001E ; }
001E ; }
001E ; }
001E ;
001E ; void main(void) {
001E .dbline 30
001E ;
001E ; DDRA = 0x00; /*方向输入*/
001E 2224 clr R2
0020 2ABA out 0x1a,R2
0022 .dbline 31
0022 ; PORTA = 0xFF; /*打开上拉*/
0022 8FEF ldi R24,255
0024 8BBB out 0x1b,R24
0026 .dbline 32
0026 ; DDRB = 0xFF; /*方向输出*/
0026 87BB out 0x17,R24
0028 .dbline 33
0028 ; PORTB = 0xFF; /*电平设置*/
0028 88BB out 0x18,R24
002A .dbline 34
002A ; DDRC = 0x00;
002A 24BA out 0x14,R2
002C .dbline 35
002C ; PORTC = 0xFF;
002C 85BB out 0x15,R24
002E .dbline 36
002E ; DDRD = 0x00;
002E 21BA out 0x11,R2
0030 .dbline 37
0030 ; PORTD = 0xFF;
0030 82BB out 0x12,R24
0032 .dbline 39
0032 ;
0032 ; PORTB = 0x00;
0032 28BA out 0x18,R2
0034 .dbline 40
0034 ; WDR(); /*喂狗*/
0034 A895 wdr
0036 .dbline 41
0036 ; delay_ms(250);
0036 0AEF ldi R16,250
0038 E3DF xcall _delay_ms
003A .dbline 42
003A ; WDR(); /*喂狗*/
003A A895 wdr
003C .dbline 43
003C ; delay_ms(250);
003C 0AEF ldi R16,250
003E E0DF xcall _delay_ms
0040 .dbline 44
0040 ; PORTB = 0xFF;
0040 8FEF ldi R24,255
0042 88BB out 0x18,R24
0044 .dbline 46
0044 ;
0044 ; WDTCR |= ((1 << WDTOE) | (1 << WDE)); /*启动时序*/
0044 81B5 in R24,0x21
0046 8861 ori R24,24
0048 81BD out 0x21,R24
004A .dbline 47
004A ; WDTCR = ((1<< WDE) | (1 << WDP2) | (1 <<WDP1)); /*设定周期为1S*/
004A 8EE0 ldi R24,14
004C 81BD out 0x21,R24
004E 0AC0 xjmp L12
0050 L11:
0050 .dbline 49
0050 ;
0050 ; while (1) {
0050 .dbline 50
0050 ; delay_ms(250);
0050 0AEF ldi R16,250
0052 D6DF xcall _delay_ms
0054 .dbline 51
0054 ; WDR(); /*喂狗*/
0054 A895 wdr
0056 .dbline 52
0056 ; PORTB ^= (1 << 0); /*PB0电平取反*/
0056 81E0 ldi R24,1
0058 28B2 in R2,0x18
005A 2826 eor R2,R24
005C 28BA out 0x18,R2
005E L14:
005E .dbline 53
005E L15:
005E .dbline 53
005E 89B3 in R24,0x19
0060 8F3F cpi R24,255
0062 E9F7 brne L14
0064 .dbline 54
0064 L12:
0064 .dbline 49
0064 F5CF xjmp L11
0066 X0:
0066 .dbline -2
0066 L10:
0066 .dbline 0 ; func end
0066 0895 ret
0068 .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -