📄 diy0816_07.s
字号:
.module diy0816_07.c
.area text(rom, con, rel)
.dbfile D:\SL-DIY~1\diy0208_16_7\diy0816_07.c
.dbfunc e delay_us _delay_us fV
; time -> R16,R17
.even
_delay_us::
.dbline -1
.dbline 17
; //7. I/O端口进一步应用。
; //用图6的ATmega16的PB.0端口开关(可用接插线接VCC或GND代替)
; //控制PA口8个LED灯作跑马灯控制;可作广告灯用。
; //请你编写出其它花样的广告灯程序!
; // www.sl.com.cn
; // teny@sl.com.cn 05-11-12
; // Target : mega16 Crystal: 8.0000Mhz
;
; #include <iom16v.h>
; #include <macros.h>
;
; #define delay_time 500
;
; unsigned char pa_buf,pb_buf,loop_timers;
; //定义为字符型变量
; void delay_us(int time)
; { //微秒延时
L2:
.dbline 19
; do
; {
.dbline 20
; time--;
subi R16,1
sbci R17,0
.dbline 21
; }
L3:
.dbline 22
; while (time>1);
ldi R24,1
ldi R25,0
cp R24,R16
cpc R25,R17
brlt L2
.dbline -2
L1:
.dbline 0 ; func end
ret
.dbsym r time 16 I
.dbend
.dbfunc e delay_ms _delay_ms fV
; time -> R20,R21
.even
_delay_ms::
xcall push_gset1
movw R20,R16
.dbline -1
.dbline 26
; }
;
; void delay_ms(unsigned int time)
; { //毫秒延时
xjmp L7
L6:
.dbline 28
.dbline 29
ldi R16,1000
ldi R17,3
xcall _delay_us
.dbline 30
subi R20,1
sbci R21,0
.dbline 31
L7:
.dbline 27
; while(time!=0)
cpi R20,0
cpc R20,R21
brne L6
X0:
.dbline -2
L5:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r time 20 i
.dbend
.dbfunc e shiyan7 _shiyan7 fV
.even
_shiyan7::
.dbline -1
.dbline 35
; {
; delay_us(1000);
; time--;
; }
; }
;
; void shiyan7()
; {
.dbline 36
; DDRB=0x00;PORTB=0xFF;//PB口输入,内部上拉
clr R2
out 0x17,R2
.dbline 36
ldi R24,255
out 0x18,R24
.dbline 37
; DDRA=0xFF;PORTA=0xFF;//PA口输出
out 0x1a,R24
.dbline 37
out 0x1b,R24
xjmp L11
L10:
.dbline 39
; while(1)//循环运行
; {
.dbline 40
; pb_buf=PINB & 0x01;//检测PINB0是否为0,为1重新检测
in R24,0x16
andi R24,1
sts _pb_buf,R24
.dbline 41
; if(pb_buf==0x00)//为0,运行跑马灯程序,PA口的LED依次点亮
tst R24
brne L13
.dbline 42
; {
.dbline 43
; pa_buf=0x01;//送初值
ldi R24,1
sts _pa_buf,R24
.dbline 44
; for(loop_timers=0;loop_timers<8;loop_timers++)//循环8次
clr R2
sts _loop_timers,R2
xjmp L18
L15:
.dbline 45
.dbline 45
lds R2,_pa_buf
com R2
out 0x1b,R2
.dbline 45
lds R2,_pa_buf
lsl R2
sts _pa_buf,R2
.dbline 45
ldi R16,250
ldi R17,0
xcall _delay_ms
.dbline 45
L16:
.dbline 44
lds R24,_loop_timers
subi R24,255 ; addi 1
sts _loop_timers,R24
L18:
.dbline 44
lds R24,_loop_timers
cpi R24,8
brlo L15
.dbline 47
; {PORTA=~pa_buf;pa_buf=pa_buf<<1;delay_ms(delay_time/2);}
; //取反输出,左移一位,延时
; }//循环检测
L13:
.dbline 48
ldi R24,255
out 0x1b,R24
.dbline 49
L11:
.dbline 38
xjmp L10
X1:
.dbline -2
L9:
.dbline 0 ; func end
ret
.dbend
.dbfunc e main _main fV
.even
_main::
.dbline -1
.dbline 53
; PORTA=0xff;//为1,熄灭PA口的LED
; }
; }
;
; void main()
; {
.dbline 54
; shiyan7();//实验7函数
xcall _shiyan7
.dbline -2
L19:
.dbline 0 ; func end
ret
.dbend
.area bss(ram, con, rel)
.dbfile D:\SL-DIY~1\diy0208_16_7\diy0816_07.c
_loop_timers::
.blkb 1
.dbsym e loop_timers _loop_timers c
_pb_buf::
.blkb 1
.dbsym e pb_buf _pb_buf c
_pa_buf::
.blkb 1
.dbsym e pa_buf _pa_buf c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -