📄 wdt.lst
字号:
__start:
__text_start:
0015 E5CF LDI R28,0x5F
0016 E0D2 LDI R29,2
0017 BFCD OUT 0x3D,R28
0018 BFDE OUT 0x3E,R29
0019 51C0 SUBI R28,0x10
001A 40D0 SBCI R29,0
001B EA0A LDI R16,0xAA
001C 8308 STD Y+0,R16
001D 2400 CLR R0
001E E6E0 LDI R30,0x60
001F E0F0 LDI R31,0
0020 E010 LDI R17,0
0021 36E0 CPI R30,0x60
0022 07F1 CPC R31,R17
0023 F011 BEQ 0x0026
0024 9201 ST R0,Z+
0025 CFFB RJMP 0x0021
0026 8300 STD Z+0,R16
0027 E2EA LDI R30,0x2A
0028 E0F0 LDI R31,0
0029 E6A0 LDI R26,0x60
002A E0B0 LDI R27,0
002B E010 LDI R17,0
002C 32EA CPI R30,0x2A
002D 07F1 CPC R31,R17
002E F021 BEQ 0x0033
002F 95C8 LPM
0030 9631 ADIW R30,1
0031 920D ST R0,X+
0032 CFF9 RJMP 0x002C
0033 D016 RCALL _main
_exit:
0034 CFFF RJMP _exit
_DelayS:
j --> R20
k --> R22
i --> R16
0035 D02C RCALL push_gset2
FILE: E:\iccavr代码\实验17_片内看门狗WDT的使用\wdt.c
(0001) //******************************************************************************
(0002) // *
(0003) // FileName : WDT.c ICCAVR V6.31A编译 *
(0004) // Function : 借助跑马灯实验片内看门狗WDT的功能 *
(0005) // Date : 2006-12-11 *
(0006) // Version : 1.0 *
(0007) // *
(0008) // Author : 开关电源 hongtusy@163.com *
(0009) // Company : 电子信息技术咨询网 http://www.itsn.cn *
(0010) // *
(0011) //***************************描述与记事*****************************************
(0012) //实验板的AVR程序,片内看门狗WDT的实验演示。
(0013) //说明:使用延迟程序,间歇轮点亮或关闭LED灯。
(0014) //具体电路可参照使用指南里的说明。PC口输出0,LED即点亮。
(0015) //实验板有两种方式使用条形LED,一种是配合LED,使用三极管驱动,
(0016) //这里使用后一种,LED公共阳极直接接电源正的驱动方式。
(0017) //使用器件:ATMEGA8535,可更换。 使用默认的片内RC振荡器,1MHz。
(0018) //使用的开关:SW1-1~8,SW6-2,SW2-6打开,SW3-8为系统复位端。
(0019) //记事:如果将喂狗程序关闭或超出需要喂狗的时间再喂,单片机就会复位。
(0020) //******************************************************************************
(0021) #include <iom8535v.h> //头文件,ATmega8535单片机的寄存器定义
(0022) #include "macros.h" //可以使用NOP()以及SEI()等指令.
(0023)
(0024) typedef unsigned char uchar; //宏
(0025) typedef unsigned int uint;
(0026)
(0027) /************************************************
(0028) 函 数 名: DelayS()
(0029) 功 能: 秒级延时函数
(0030) 输入参数: 延迟时间/系统晶体
(0031) 输出参数: 做相应的延迟处理
(0032) 描 述: /
(0033) ***********************************************/
(0034) void DelayS (uint i) //延时函数,参数i为延时时间
(0035) {
(0036) uint j,k; //双重延时
(0037) for (j=0;j<i;j++)
0036 2744 CLR R20
0037 2755 CLR R21
0038 C00C RJMP 0x0045
(0038) {
(0039) for (k=0;k<6000;k++)
0039 2766 CLR R22
003A 2777 CLR R23
003B C003 RJMP 0x003F
(0040) WDR(); //喂狗
003C 95A8 WDR
003D 5F6F SUBI R22,0xFF
003E 4F7F SBCI R23,0xFF
003F 3760 CPI R22,0x70
0040 E1E7 LDI R30,0x17
0041 077E CPC R23,R30
0042 F3C8 BCS 0x003C
0043 5F4F SUBI R20,0xFF
0044 4F5F SBCI R21,0xFF
0045 1740 CP R20,R16
0046 0751 CPC R21,R17
0047 F388 BCS 0x0039
0048 D011 RCALL pop_gset2
0049 9508 RET
(0041) //;
(0042) }
(0043) }
(0044) //***********************main***************
(0045) void main(void) //主程序
(0046) {
(0047) uchar i; //数据类型说明,无符号字符型常数
(0048)
(0049) WDTCR = 0b00001111; //设置看门狗定时器并打开。定时时间是2.1s。
_main:
i --> R20
004A E08F LDI R24,0xF
004B BD81 OUT 0x21,R24
(0050)
(0051) DDRC=0xff; //PC口为输出
004C EF8F LDI R24,0xFF
004D BB84 OUT 0x14,R24
(0052) i=255; //赋值语句
004E EF4F LDI R20,0xFF
004F C008 RJMP 0x0058
(0053) while(1) //如果条件为真,1=真,所以死循环执行嵌套部分。
(0054) {
(0055) if(i==0) //
0050 2344 TST R20
0051 F409 BNE 0x0053
(0056) {
(0057) i=255;
0052 EF4F LDI R20,0xFF
(0058) }
(0059) PORTC=i; //led输出
0053 BB45 OUT 0x15,R20
(0060) DelayS(2);
0054 E002 LDI R16,2
0055 E010 LDI R17,0
0056 DFDE RCALL _DelayS
(0061) i--; //led值递减
FILE: <library>
0057 954A DEC R20
0058 CFF7 RJMP 0x0050
0059 9508 RET
pop_gset2:
005A E0E2 LDI R30,2
005B C00C RJMP pop
push_gset5:
005C 92FA ST R15,-Y
005D 92EA ST R14,-Y
push_gset4:
005E 92DA ST R13,-Y
005F 92CA ST R12,-Y
push_gset3:
0060 92BA ST R11,-Y
0061 92AA ST R10,-Y
push_gset2:
0062 937A ST R23,-Y
0063 936A ST R22,-Y
push_gset1:
0064 935A ST R21,-Y
0065 934A ST R20,-Y
0066 9508 RET
pop_gset1:
0067 E0E1 LDI R30,1
pop:
0068 9149 LD R20,Y+
0069 9159 LD R21,Y+
006A FDE0 SBRC R30,0
006B 9508 RET
006C 9169 LD R22,Y+
006D 9179 LD R23,Y+
006E FDE1 SBRC R30,1
006F 9508 RET
0070 90A9 LD R10,Y+
0071 90B9 LD R11,Y+
0072 FDE2 SBRC R30,2
0073 9508 RET
0074 90C9 LD R12,Y+
0075 90D9 LD R13,Y+
0076 FDE3 SBRC R30,3
0077 9508 RET
0078 90E9 LD R14,Y+
0079 90F9 LD R15,Y+
007A 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -