📄 diy0816_05.s
字号:
.module diy0816_05.c
.area text(rom, con, rel)
.dbfile D:\SL-DIY~1\diy0208_16_5\diy0816_05.c
.dbfunc e delay_us _delay_us fV
; time -> R16,R17
.even
_delay_us::
.dbline -1
.dbline 19
; //5. 用一个I/O端口控制二个I/O端口。
; //ATmega16的PB.0端口开关(可用接插线接VCC或GND代替)
; //控制PA.0,PA.1两端口LED灯轮流闪烁;
; //LED灯轮流闪烁可模拟动物的眼睛闪烁玩具使用。
; //如果用ATmega16的PA.0端口开关控制PB.0,PB.1两端口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
; //delay_time=500,定义延时常量
; unsigned char pb_buf;
;
; void delay_us(int time)
; { //微秒延时
L2:
.dbline 21
; do
; {
.dbline 22
; time--;
subi R16,1
sbci R17,0
.dbline 23
; }
L3:
.dbline 24
; 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 28
; }
;
; void delay_ms(unsigned int time)
; { //毫秒延时
xjmp L7
L6:
.dbline 30
.dbline 31
ldi R16,1000
ldi R17,3
xcall _delay_us
.dbline 32
subi R20,1
sbci R21,0
.dbline 33
L7:
.dbline 29
; 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 shiyan5 _shiyan5 fV
.even
_shiyan5::
.dbline -1
.dbline 37
; {
; delay_us(1000);
; time--;
; }
; }
;
; void shiyan5()
; {
.dbline 38
; DDRB=0x00;PORTB=0xFF;//PB口输入,内部上拉
clr R2
out 0x17,R2
.dbline 38
ldi R24,255
out 0x18,R24
.dbline 39
; DDRA=0xFF;PORTA=0xFF;//PA口输出
out 0x1a,R24
.dbline 39
out 0x1b,R24
xjmp L11
L10:
.dbline 41
; while(1)//循环运行
; {
.dbline 42
; pb_buf=PINB & 0x01;//检测PINB0是否为0,为1重新检测
in R24,0x16
andi R24,1
sts _pb_buf,R24
.dbline 43
; if(pb_buf==0x00)//为0,PA0和PA1的两LED交替闪烁
tst R24
brne L13
.dbline 44
; {
.dbline 45
; PORTA=0xfe;//只让PA0的LED亮
ldi R24,254
out 0x1b,R24
.dbline 46
; delay_ms(delay_time);//延时
ldi R16,500
ldi R17,1
xcall _delay_ms
.dbline 47
; PORTA = 0xfd;//只让PA1的LED亮
ldi R24,253
out 0x1b,R24
.dbline 48
; delay_ms(delay_time);//延时
ldi R16,500
ldi R17,1
xcall _delay_ms
.dbline 49
; }//重新检测
L13:
.dbline 50
ldi R24,255
out 0x1b,R24
.dbline 51
L11:
.dbline 40
xjmp L10
X1:
.dbline -2
L9:
.dbline 0 ; func end
ret
.dbend
.dbfunc e main _main fV
.even
_main::
.dbline -1
.dbline 55
; PORTA=0xff;//为1,熄灭PA口的所有LED
; }
; }
;
; void main()
; {
.dbline 56
; shiyan5();//实验5函数
xcall _shiyan5
.dbline -2
L15:
.dbline 0 ; func end
ret
.dbend
.area bss(ram, con, rel)
.dbfile D:\SL-DIY~1\diy0208_16_5\diy0816_05.c
_pb_buf::
.blkb 1
.dbsym e pb_buf _pb_buf c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -