📄 diy0816_04.lis
字号:
.module diy0816_04.c
.area text(rom, con, rel)
0000 .dbfile D:\SL-DIY~1\diy0208_16_4\diy0816_04.c
0000 .dbfunc e delay_us _delay_us fV
0000 ; time -> R16,R17
.even
0000 _delay_us::
0000 .dbline -1
0000 .dbline 17
0000 ; //4. I/O口LED灯闪烁应用。
0000 ; //ATMEGA16的PB.0端口开关(可用接插线接VCC或GND代替)控制PA.0端口LED灯闪烁;
0000 ; //LED灯闪烁可作灯塔,高建筑物,汽车转弯等警示灯用。
0000 ; //请你修改程序,改变LED灯闪烁快慢。
0000 ; //ICC-AVR : 05-11-12
0000 ; // Target : MEGA16
0000 ; // Crystal: 8.0000Mhz
0000 ;
0000 ; #include <iom16v.h>
0000 ; #include <macros.h>
0000 ;
0000 ; #define delay_time 500
0000 ; //delay_time=500,定义延时常量
0000 ; unsigned char pb_buf;
0000 ;
0000 ; void delay_us(int time)
0000 ; { //微秒延时
0000 L2:
0000 .dbline 19
0000 ; do
0000 ; {
0000 .dbline 20
0000 ; time--;
0000 0150 subi R16,1
0002 1040 sbci R17,0
0004 .dbline 21
0004 ; }
0004 L3:
0004 .dbline 22
0004 ; while (time>1);
0004 81E0 ldi R24,1
0006 90E0 ldi R25,0
0008 8017 cp R24,R16
000A 9107 cpc R25,R17
000C CCF3 brlt L2
000E .dbline -2
000E L1:
000E .dbline 0 ; func end
000E 0895 ret
0010 .dbsym r time 16 I
0010 .dbend
0010 .dbfunc e delay_ms _delay_ms fV
0010 ; time -> R20,R21
.even
0010 _delay_ms::
0010 0E940000 xcall push_gset1
0014 A801 movw R20,R16
0016 .dbline -1
0016 .dbline 26
0016 ; }
0016 ;
0016 ; void delay_ms(unsigned int time)
0016 ; { //毫秒延时
0016 05C0 xjmp L7
0018 L6:
0018 .dbline 28
0018 .dbline 29
0018 08EE ldi R16,1000
001A 13E0 ldi R17,3
001C F1DF xcall _delay_us
001E .dbline 30
001E 4150 subi R20,1
0020 5040 sbci R21,0
0022 .dbline 31
0022 L7:
0022 .dbline 27
0022 ; while(time!=0)
0022 4030 cpi R20,0
0024 4507 cpc R20,R21
0026 C1F7 brne L6
0028 X0:
0028 .dbline -2
0028 L5:
0028 0E940000 xcall pop_gset1
002C .dbline 0 ; func end
002C 0895 ret
002E .dbsym r time 20 i
002E .dbend
002E .dbfunc e shiyan4 _shiyan4 fV
.even
002E _shiyan4::
002E .dbline -1
002E .dbline 35
002E ; {
002E ; delay_us(1000);
002E ; time--;
002E ; }
002E ; }
002E ;
002E ; void shiyan4()
002E ; {
002E .dbline 36
002E ; DDRB=0x00;PORTB=0xFF;//PB口输入,内部上拉
002E 2224 clr R2
0030 27BA out 0x17,R2
0032 .dbline 36
0032 8FEF ldi R24,255
0034 88BB out 0x18,R24
0036 .dbline 37
0036 ; DDRA=0xFF;PORTA=0xFF;//PA口输出
0036 8ABB out 0x1a,R24
0038 .dbline 37
0038 8BBB out 0x1b,R24
003A 10C0 xjmp L11
003C L10:
003C .dbline 39
003C ; while(1)//循环运行
003C ; {
003C .dbline 40
003C ; pb_buf=PINB & 0x01;//检测PINB0是否为0,为1重新检测
003C 86B3 in R24,0x16
003E 8170 andi R24,1
0040 80930000 sts _pb_buf,R24
0044 .dbline 41
0044 ; if(pb_buf==0x00)//为0,PA0口的LED闪烁
0044 8823 tst R24
0046 51F4 brne L13
0048 .dbline 42
0048 ; {
0048 .dbline 43
0048 ; PORTA=0xfe;//点亮LED
0048 8EEF ldi R24,254
004A 8BBB out 0x1b,R24
004C .dbline 44
004C ; delay_ms(delay_time);//延时
004C 04EF ldi R16,500
004E 11E0 ldi R17,1
0050 DFDF xcall _delay_ms
0052 .dbline 45
0052 ; PORTA = 0xff;//熄灭LED
0052 8FEF ldi R24,255
0054 8BBB out 0x1b,R24
0056 .dbline 46
0056 ; delay_ms(delay_time);//延时
0056 04EF ldi R16,500
0058 11E0 ldi R17,1
005A DADF xcall _delay_ms
005C .dbline 47
005C ; }//重新检测,为1停止闪烁(熄灭)
005C L13:
005C .dbline 48
005C L11:
005C .dbline 38
005C EFCF xjmp L10
005E X1:
005E .dbline -2
005E L9:
005E .dbline 0 ; func end
005E 0895 ret
0060 .dbend
0060 .dbfunc e main _main fV
.even
0060 _main::
0060 .dbline -1
0060 .dbline 52
0060 ; }
0060 ; }
0060 ;
0060 ; void main()
0060 ; {
0060 .dbline 53
0060 ; shiyan4();//实验4函数
0060 E6DF xcall _shiyan4
0062 .dbline -2
0062 L15:
0062 .dbline 0 ; func end
0062 0895 ret
0064 .dbend
.area bss(ram, con, rel)
0000 .dbfile D:\SL-DIY~1\diy0208_16_4\diy0816_04.c
0000 _pb_buf::
0000 .blkb 1
0001 .dbsym e pb_buf _pb_buf c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -