📄 wdt.s
字号:
.module wdt.c
.area text(rom, con, rel)
.dbfile E:\iccavr代码\实验17_片内看门狗WDT的使用\wdt.c
.dbfunc e DelayS _DelayS fV
; j -> R20,R21
; k -> R22,R23
; i -> R16,R17
.even
_DelayS::
rcall push_gset2
.dbline -1
.dbline 35
; //******************************************************************************
; // *
; // FileName : WDT.c ICCAVR V6.31A编译 *
; // Function : 借助跑马灯实验片内看门狗WDT的功能 *
; // Date : 2006-12-11 *
; // Version : 1.0 *
; // *
; // Author : 开关电源 hongtusy@163.com *
; // Company : 电子信息技术咨询网 http://www.itsn.cn *
; // *
; //***************************描述与记事*****************************************
; //实验板的AVR程序,片内看门狗WDT的实验演示。
; //说明:使用延迟程序,间歇轮点亮或关闭LED灯。
; //具体电路可参照使用指南里的说明。PC口输出0,LED即点亮。
; //实验板有两种方式使用条形LED,一种是配合LED,使用三极管驱动,
; //这里使用后一种,LED公共阳极直接接电源正的驱动方式。
; //使用器件:ATMEGA8535,可更换。 使用默认的片内RC振荡器,1MHz。
; //使用的开关:SW1-1~8,SW6-2,SW2-6打开,SW3-8为系统复位端。
; //记事:如果将喂狗程序关闭或超出需要喂狗的时间再喂,单片机就会复位。
; //******************************************************************************
; #include <iom8535v.h> //头文件,ATmega8535单片机的寄存器定义
; #include "macros.h" //可以使用NOP()以及SEI()等指令.
;
; typedef unsigned char uchar; //宏
; typedef unsigned int uint;
;
; /************************************************
; 函 数 名: DelayS()
; 功 能: 秒级延时函数
; 输入参数: 延迟时间/系统晶体
; 输出参数: 做相应的延迟处理
; 描 述: /
; ***********************************************/
; void DelayS (uint i) //延时函数,参数i为延时时间
; {
.dbline 37
; uint j,k; //双重延时
; for (j=0;j<i;j++)
clr R20
clr R21
rjmp L5
L2:
.dbline 38
; {
.dbline 39
; for (k=0;k<6000;k++)
clr R22
clr R23
rjmp L9
L6:
.dbline 40
wdr
L7:
.dbline 39
subi R22,255 ; offset = 1
sbci R23,255
L9:
.dbline 39
cpi R22,112
ldi R30,23
cpc R23,R30
brlo L6
.dbline 42
L3:
.dbline 37
subi R20,255 ; offset = 1
sbci R21,255
L5:
.dbline 37
cp R20,R16
cpc R21,R17
brlo L2
.dbline -2
L1:
rcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r j 20 i
.dbsym r k 22 i
.dbsym r i 16 i
.dbend
.dbfunc e main _main fV
; i -> R20
.even
_main::
.dbline -1
.dbline 46
; WDR(); //喂狗
; //;
; }
; }
; //***********************main***************
; void main(void) //主程序
; {
.dbline 49
; uchar i; //数据类型说明,无符号字符型常数
;
; WDTCR = 0b00001111; //设置看门狗定时器并打开。定时时间是2.1s。
ldi R24,15
out 0x21,R24
.dbline 51
;
; DDRC=0xff; //PC口为输出
ldi R24,255
out 0x14,R24
.dbline 52
; i=255; //赋值语句
ldi R20,255
rjmp L12
L11:
.dbline 54
; while(1) //如果条件为真,1=真,所以死循环执行嵌套部分。
; {
.dbline 55
; if(i==0) //
tst R20
brne L14
.dbline 56
; {
.dbline 57
; i=255;
ldi R20,255
.dbline 58
; }
L14:
.dbline 59
out 0x15,R20
.dbline 60
ldi R16,2
ldi R17,0
rcall _DelayS
.dbline 61
dec R20
.dbline 62
L12:
.dbline 53
rjmp L11
X0:
.dbline -2
L10:
.dbline 0 ; func end
ret
.dbsym r i 20 c
.dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -