📄 diy0816_04.s
字号:
.module diy0816_04.c
.area text(rom, con, rel)
.dbfile D:\SL-DIY~1\diy0208_16_4\diy0816_04.c
.dbfunc e delay_us _delay_us fV
; time -> R16,R17
.even
_delay_us::
.dbline -1
.dbline 17
; //4. I/O口LED灯闪烁应用。
; //ATMEGA16的PB.0端口开关(可用接插线接VCC或GND代替)控制PA.0端口LED灯闪烁;
; //LED灯闪烁可作灯塔,高建筑物,汽车转弯等警示灯用。
; //请你修改程序,改变LED灯闪烁快慢。
; //ICC-AVR : 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 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 shiyan4 _shiyan4 fV
.even
_shiyan4::
.dbline -1
.dbline 35
; {
; delay_us(1000);
; time--;
; }
; }
;
; void shiyan4()
; {
.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,PA0口的LED闪烁
tst R24
brne L13
.dbline 42
; {
.dbline 43
; PORTA=0xfe;//点亮LED
ldi R24,254
out 0x1b,R24
.dbline 44
; delay_ms(delay_time);//延时
ldi R16,500
ldi R17,1
xcall _delay_ms
.dbline 45
; PORTA = 0xff;//熄灭LED
ldi R24,255
out 0x1b,R24
.dbline 46
; delay_ms(delay_time);//延时
ldi R16,500
ldi R17,1
xcall _delay_ms
.dbline 47
; }//重新检测,为1停止闪烁(熄灭)
L13:
.dbline 48
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 52
; }
; }
;
; void main()
; {
.dbline 53
; shiyan4();//实验4函数
xcall _shiyan4
.dbline -2
L15:
.dbline 0 ; func end
ret
.dbend
.area bss(ram, con, rel)
.dbfile D:\SL-DIY~1\diy0208_16_4\diy0816_04.c
_pb_buf::
.blkb 1
.dbsym e pb_buf _pb_buf c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -