📄 watchdog.s
字号:
.module WatchDog.c
.area text(rom, con, rel)
.dbfile J:\AVRpractice\BOOK\WatchDog\WatchDog.c
.dbfunc e DelayMs _DelayMs fV
; j -> R20,R21
; i -> R16,R17
.even
_DelayMs::
rcall push_gset1
.dbline -1
.dbline 9
; //***************FileName:LED.C***************//
; //**************ICCAVR V6.30编译**************//
;
; #include<io8535v.h> //头文件,AT90S8535单片机的寄存器定义
; #define uchar unsigned char //数据类型说明
; #define uint unsigned int //数据类型说明
;
; void DelayMs(uint i) //Ms级延时函数,参数i:延时时间
; {uint j;
.dbline 10
; for(;i!=0;i--)
rjmp L5
L2:
.dbline 11
.dbline 11
ldi R20,2000
ldi R21,7
rjmp L9
L6:
.dbline 11
.dbline 11
.dbline 11
L7:
.dbline 11
subi R20,1
sbci R21,0
L9:
.dbline 11
cpi R20,0
cpc R20,R21
brne L6
X0:
.dbline 11
L3:
.dbline 10
subi R16,1
sbci R17,0
L5:
.dbline 10
cpi R16,0
cpc R16,R17
brne L2
X1:
.dbline -2
.dbline 12
; {for(j=2000;j!=0;j--) {;}}
; }
L1:
rcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r j 20 i
.dbsym r i 16 i
.dbend
.dbfunc e Horse _Horse fV
; i -> R16
.even
_Horse::
rcall push_gset1
.dbline -1
.dbline 15
;
; void Horse(uchar i) //跑马灯程序,通过步判断点亮相应的LED
; {switch(i) //高电平点亮LED
.dbline 15
mov R20,R16
clr R21
cpi R20,1
ldi R30,0
cpc R21,R30
breq L14
cpi R20,2
ldi R30,0
cpc R21,R30
breq L15
cpi R20,3
ldi R30,0
cpc R21,R30
breq L16
cpi R20,4
ldi R30,0
cpc R21,R30
breq L17
cpi R20,5
ldi R30,0
cpc R21,R30
breq L18
cpi R20,6
ldi R30,0
cpc R21,R30
breq L19
cpi R20,7
ldi R30,0
cpc R21,R30
breq L20
cpi R20,8
ldi R30,0
cpc R21,R30
breq L21
rjmp L12
X2:
.dbline 16
L14:
.dbline 16
; {case 1:PORTA=0xfe;break; //1111 1110B 点亮LED1
ldi R24,254
out 0x1b,R24
.dbline 16
rjmp L12
L15:
.dbline 17
; case 2:PORTA=0xfc;break; //1111 1100B 点亮LED1~LED2
ldi R24,252
out 0x1b,R24
.dbline 17
rjmp L12
L16:
.dbline 18
; case 3:PORTA=0xf8;break; //1111 1000B 点亮LED1~LED3
ldi R24,248
out 0x1b,R24
.dbline 18
rjmp L12
L17:
.dbline 19
; case 4:PORTA=0xf0;break; //1111 0000B 点亮LED1~LED4
ldi R24,240
out 0x1b,R24
.dbline 19
rjmp L12
L18:
.dbline 20
; case 5:PORTA=0xe0;break; //1110 0000B 点亮LED1~LED5
ldi R24,224
out 0x1b,R24
.dbline 20
rjmp L12
L19:
.dbline 21
; case 6:PORTA=0xc0;break; //1100 0000B 点亮LED1~LED6
ldi R24,192
out 0x1b,R24
.dbline 21
rjmp L12
L20:
.dbline 22
; case 7:PORTA=0x80;break; //1000 0000B 点亮LED1~LED7
ldi R24,128
out 0x1b,R24
.dbline 22
rjmp L12
L21:
.dbline 23
clr R2
out 0x1b,R2
.dbline 23
.dbline 24
L12:
.dbline -2
.dbline 25
; case 8:PORTA=0x00;break; //0000 0000B 点亮LED1~LED8
; default:break;}
; }
L10:
rcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r i 16 c
.dbend
.dbfunc e main _main fV
; i -> R20
.even
_main::
.dbline -1
.dbline 28
;
; void main(void)
; {uchar i;
.dbline 29
; DDRA=0xff; //端口设置:PA口设置为推挽1输出
ldi R24,255
out 0x1a,R24
.dbline 30
; PORTA=0xff;
out 0x1b,R24
.dbline 31
; PORTA=0x00; //PORTA初始值为0,灭掉所有的LED
clr R2
out 0x1b,R2
.dbline 32
; DelayMs(1000);
ldi R16,1000
ldi R17,3
rcall _DelayMs
.dbline 33
; WDTCR=0x0f;
ldi R24,15
out 0x21,R24
rjmp L24
L23:
.dbline 35
; while(1) //程序无条件执行
; { for(i=1;i<9;i++) //依次点亮LED1~LED8
.dbline 35
ldi R20,1
rjmp L29
L26:
.dbline 36
.dbline 36
mov R16,R20
rcall _Horse
.dbline 37
ldi R16,1000
ldi R17,3
rcall _DelayMs
.dbline 38
ldi R24,31
out 0x21,R24
.dbline 39
in R24,0x21
andi R24,247
out 0x21,R24
.dbline 39
L27:
.dbline 35
inc R20
L29:
.dbline 35
cpi R20,9
brlo L26
.dbline 40
; {Horse(i);
; DelayMs(1000);
; WDTCR=0x1f;
; WDTCR=WDTCR&0xf7;} //点亮时间约1秒
; for(i=9;i>0;i--) //依次熄灭LED8~LED1
ldi R20,9
rjmp L33
L30:
.dbline 41
.dbline 41
mov R16,R20
rcall _Horse
.dbline 42
ldi R16,1000
ldi R17,3
rcall _DelayMs
.dbline 42
L31:
.dbline 40
dec R20
L33:
.dbline 40
clr R2
cp R2,R20
brlo L30
.dbline 43
ldi R24,255
out 0x1b,R24
.dbline 44
ldi R16,1000
ldi R17,3
rcall _DelayMs
.dbline 45
L24:
.dbline 34
rjmp L23
X3:
.dbline -2
.dbline 46
; {Horse(i);
; DelayMs(1000);} //熄灭时间约1秒
; PORTA=0xff;
; DelayMs(1000);
; }
; }
L22:
.dbline 0 ; func end
ret
.dbsym r i 20 c
.dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -