📄 diy0816_08.lis
字号:
.module diy0816_08.c
.area text(rom, con, rel)
0000 .dbfile D:\SL-DIY~1\diy0208_16_8\diy0816_08.c
0000 .dbfunc e delay_us _delay_us fV
0000 ; time -> R16,R17
.even
0000 _delay_us::
0000 .dbline -1
0000 .dbline 15
0000 ; //8. I/O端口的进一步应用。
0000 ; //请你设计SL-DIY08-16主板上4个I/O口32个LED灯的变化多样的广告灯程序。
0000 ; // www.sl.com.cn
0000 ; // teny@sl.com.cn 05-11-12
0000 ; // Target : atmega16 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 pa_buf,pb_buf,pc_buf,pd_buf,loop_timers;
0000 ; //定义为字符型变量
0000 ; void delay_us(int time)
0000 ; { //微秒延时
0000 L2:
0000 .dbline 17
0000 ; do
0000 ; {
0000 .dbline 18
0000 ; time--;
0000 0150 subi R16,1
0002 1040 sbci R17,0
0004 .dbline 19
0004 ; }
0004 L3:
0004 .dbline 20
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 24
0016 ; }
0016 ;
0016 ; void delay_ms(unsigned int time)
0016 ; { //毫秒延时
0016 05C0 xjmp L7
0018 L6:
0018 .dbline 26
0018 .dbline 27
0018 08EE ldi R16,1000
001A 13E0 ldi R17,3
001C F1DF xcall _delay_us
001E .dbline 28
001E 4150 subi R20,1
0020 5040 sbci R21,0
0022 .dbline 29
0022 L7:
0022 .dbline 25
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 shiyan8 _shiyan8 fV
.even
002E _shiyan8::
002E .dbline -1
002E .dbline 33
002E ; {
002E ; delay_us(1000);
002E ; time--;
002E ; }
002E ; }
002E ;
002E ; void shiyan8()
002E ; { //PA口、PB口、PC口、PD口都为输出口
002E .dbline 34
002E ; DDRA=0xFF;PORTA=0xFF;
002E 8FEF ldi R24,255
0030 8ABB out 0x1a,R24
0032 .dbline 34
0032 8BBB out 0x1b,R24
0034 .dbline 35
0034 ; DDRB=0xFF;PORTB=0xFF;
0034 87BB out 0x17,R24
0036 .dbline 35
0036 88BB out 0x18,R24
0038 .dbline 36
0038 ; DDRC=0xFF;PORTC=0xFF;
0038 84BB out 0x14,R24
003A .dbline 36
003A 85BB out 0x15,R24
003C .dbline 37
003C ; DDRD=0xFF;PORTD=0xFF;
003C 81BB out 0x11,R24
003E .dbline 37
003E 82BB out 0x12,R24
0040 .dbline 38
0040 ; delay_ms(delay_time/2);
0040 0AEF ldi R16,250
0042 10E0 ldi R17,0
0044 E5DF xcall _delay_ms
0046 9CC0 xjmp L11
0048 L10:
0048 .dbline 40
0048 ; while(1)//循环运行
0048 ; {
0048 .dbline 41
0048 ; pa_buf=0x01;//PA0~PA7依次点亮
0048 81E0 ldi R24,1
004A 80930400 sts _pa_buf,R24
004E .dbline 42
004E ; for(loop_timers=0;loop_timers<8;loop_timers++)
004E 2224 clr R2
0050 20920000 sts _loop_timers,R2
0054 11C0 xjmp L16
0056 L13:
0056 .dbline 43
0056 .dbline 43
0056 20900400 lds R2,_pa_buf
005A 2094 com R2
005C 2BBA out 0x1b,R2
005E .dbline 43
005E 20900400 lds R2,_pa_buf
0062 220C lsl R2
0064 20920400 sts _pa_buf,R2
0068 .dbline 43
0068 06EA ldi R16,166
006A 10E0 ldi R17,0
006C D1DF xcall _delay_ms
006E .dbline 43
006E L14:
006E .dbline 42
006E 80910000 lds R24,_loop_timers
0072 8F5F subi R24,255 ; addi 1
0074 80930000 sts _loop_timers,R24
0078 L16:
0078 .dbline 42
0078 80910000 lds R24,_loop_timers
007C 8830 cpi R24,8
007E 58F3 brlo L13
0080 .dbline 44
0080 ; {PORTA=~pa_buf;pa_buf=pa_buf<<1;delay_ms(delay_time/3);}
0080 ; PORTA=0xff;//PA口熄灭
0080 8FEF ldi R24,255
0082 8BBB out 0x1b,R24
0084 .dbline 45
0084 ; pc_buf=0x80;//PC7~PC0一次点亮
0084 80E8 ldi R24,128
0086 80930200 sts _pc_buf,R24
008A .dbline 46
008A ; for(loop_timers=0;loop_timers<8;loop_timers++)
008A 2224 clr R2
008C 20920000 sts _loop_timers,R2
0090 11C0 xjmp L20
0092 L17:
0092 .dbline 47
0092 .dbline 47
0092 20900200 lds R2,_pc_buf
0096 2094 com R2
0098 25BA out 0x15,R2
009A .dbline 47
009A 20900200 lds R2,_pc_buf
009E 2694 lsr R2
00A0 20920200 sts _pc_buf,R2
00A4 .dbline 47
00A4 0DE7 ldi R16,125
00A6 10E0 ldi R17,0
00A8 B3DF xcall _delay_ms
00AA .dbline 47
00AA L18:
00AA .dbline 46
00AA 80910000 lds R24,_loop_timers
00AE 8F5F subi R24,255 ; addi 1
00B0 80930000 sts _loop_timers,R24
00B4 L20:
00B4 .dbline 46
00B4 80910000 lds R24,_loop_timers
00B8 8830 cpi R24,8
00BA 58F3 brlo L17
00BC .dbline 48
00BC ; {PORTC=~pc_buf;pc_buf=pc_buf>>1;delay_ms(delay_time/4);}
00BC ; PORTC=0xff;//PC口熄灭
00BC 8FEF ldi R24,255
00BE 85BB out 0x15,R24
00C0 .dbline 49
00C0 ; pb_buf=0x01;//PB0~PB7依次点亮
00C0 81E0 ldi R24,1
00C2 80930300 sts _pb_buf,R24
00C6 .dbline 50
00C6 ; for(loop_timers=0;loop_timers<8;loop_timers++)
00C6 2224 clr R2
00C8 20920000 sts _loop_timers,R2
00CC 11C0 xjmp L24
00CE L21:
00CE .dbline 51
00CE .dbline 51
00CE 20900300 lds R2,_pb_buf
00D2 2094 com R2
00D4 28BA out 0x18,R2
00D6 .dbline 51
00D6 20900300 lds R2,_pb_buf
00DA 220C lsl R2
00DC 20920300 sts _pb_buf,R2
00E0 .dbline 51
00E0 0DE7 ldi R16,125
00E2 10E0 ldi R17,0
00E4 95DF xcall _delay_ms
00E6 .dbline 51
00E6 L22:
00E6 .dbline 50
00E6 80910000 lds R24,_loop_timers
00EA 8F5F subi R24,255 ; addi 1
00EC 80930000 sts _loop_timers,R24
00F0 L24:
00F0 .dbline 50
00F0 80910000 lds R24,_loop_timers
00F4 8830 cpi R24,8
00F6 58F3 brlo L21
00F8 .dbline 52
00F8 ; {PORTB=~pb_buf;pb_buf=pb_buf<<1;delay_ms(delay_time/4);}
00F8 ; PORTB=0xff;//PB口熄灭
00F8 8FEF ldi R24,255
00FA 88BB out 0x18,R24
00FC .dbline 53
00FC ; pd_buf=0x01;//PD0~PD7依次点亮
00FC 81E0 ldi R24,1
00FE 80930100 sts _pd_buf,R24
0102 .dbline 54
0102 ; for(loop_timers=0;loop_timers<8;loop_timers++)
0102 2224 clr R2
0104 20920000 sts _loop_timers,R2
0108 11C0 xjmp L28
010A L25:
010A .dbline 55
010A .dbline 55
010A 20900100 lds R2,_pd_buf
010E 2094 com R2
0110 22BA out 0x12,R2
0112 .dbline 55
0112 20900100 lds R2,_pd_buf
0116 220C lsl R2
0118 20920100 sts _pd_buf,R2
011C .dbline 55
011C 0DE7 ldi R16,125
011E 10E0 ldi R17,0
0120 77DF xcall _delay_ms
0122 .dbline 55
0122 L26:
0122 .dbline 54
0122 80910000 lds R24,_loop_timers
0126 8F5F subi R24,255 ; addi 1
0128 80930000 sts _loop_timers,R24
012C L28:
012C .dbline 54
012C 80910000 lds R24,_loop_timers
0130 8830 cpi R24,8
0132 58F3 brlo L25
0134 .dbline 56
0134 ; {PORTD=~pd_buf;pd_buf=pd_buf<<1;delay_ms(delay_time/4);}
0134 ; PORTD=0xff;//PD口熄灭
0134 8FEF ldi R24,255
0136 82BB out 0x12,R24
0138 .dbline 57
0138 ; for(loop_timers=0;loop_timers<4;loop_timers++)
0138 2224 clr R2
013A 20920000 sts _loop_timers,R2
013E 17C0 xjmp L32
0140 L29:
0140 .dbline 58
0140 .dbline 59
0140 80EF ldi R24,240
0142 82BB out 0x12,R24
0144 8BBB out 0x1b,R24
0146 .dbline 59
0146 8FE0 ldi R24,15
0148 85BB out 0x15,R24
014A 88BB out 0x18,R24
014C .dbline 59
014C 0AEF ldi R16,250
014E 10E0 ldi R17,0
0150 5FDF xcall _delay_ms
0152 .dbline 60
0152 8FE0 ldi R24,15
0154 82BB out 0x12,R24
0156 8BBB out 0x1b,R24
0158 .dbline 60
0158 80EF ldi R24,240
015A 85BB out 0x15,R24
015C 88BB out 0x18,R24
015E .dbline 60
015E 0AEF ldi R16,250
0160 10E0 ldi R17,0
0162 56DF xcall _delay_ms
0164 .dbline 61
0164 L30:
0164 .dbline 57
0164 80910000 lds R24,_loop_timers
0168 8F5F subi R24,255 ; addi 1
016A 80930000 sts _loop_timers,R24
016E L32:
016E .dbline 57
016E 80910000 lds R24,_loop_timers
0172 8430 cpi R24,4
0174 28F3 brlo L29
0176 .dbline 62
0176 8FEF ldi R24,255
0178 82BB out 0x12,R24
017A 85BB out 0x15,R24
017C 88BB out 0x18,R24
017E 8BBB out 0x1b,R24
0180 .dbline 63
0180 L11:
0180 .dbline 39
0180 63CF xjmp L10
0182 X1:
0182 .dbline -2
0182 L9:
0182 .dbline 0 ; func end
0182 0895 ret
0184 .dbend
0184 .dbfunc e main _main fV
.even
0184 _main::
0184 .dbline -1
0184 .dbline 67
0184 ; {
0184 ; PORTA=PORTD=0xf0;PORTB=PORTC=0x0f;delay_ms(delay_time/2);
0184 ; PORTA=PORTD=0x0f;PORTB=PORTC=0xf0;delay_ms(delay_time/2);
0184 ; }//PA、PB、PC、PD对半交替闪烁
0184 ; PORTA=PORTB=PORTC=PORTD=0xFF;//熄灭四个口所有的LED
0184 ; }
0184 ; }
0184 ;
0184 ; void main()
0184 ; {
0184 .dbline 68
0184 ; shiyan8();//实验8函数
0184 54DF xcall _shiyan8
0186 .dbline -2
0186 L33:
0186 .dbline 0 ; func end
0186 0895 ret
0188 .dbend
.area bss(ram, con, rel)
0000 .dbfile D:\SL-DIY~1\diy0208_16_8\diy0816_08.c
0000 _loop_timers::
0000 .blkb 1
0001 .dbsym e loop_timers _loop_timers c
0001 _pd_buf::
0001 .blkb 1
0002 .dbsym e pd_buf _pd_buf c
0002 _pc_buf::
0002 .blkb 1
0003 .dbsym e pc_buf _pc_buf c
0003 _pb_buf::
0003 .blkb 1
0004 .dbsym e pb_buf _pb_buf c
0004 _pa_buf::
0004 .blkb 1
0005 .dbsym e pa_buf _pa_buf c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -