📄 diy0816_07.lis
字号:
.module diy0816_07.c
.area text(rom, con, rel)
0000 .dbfile D:\SL-DIY~1\diy0208_16_7\diy0816_07.c
0000 .dbfunc e delay_us _delay_us fV
0000 ; time -> R16,R17
.even
0000 _delay_us::
0000 .dbline -1
0000 .dbline 17
0000 ; //7. I/O端口进一步应用。
0000 ; //用图6的ATmega16的PB.0端口开关(可用接插线接VCC或GND代替)
0000 ; //控制PA口8个LED灯作跑马灯控制;可作广告灯用。
0000 ; //请你编写出其它花样的广告灯程序!
0000 ; // www.sl.com.cn
0000 ; // teny@sl.com.cn 05-11-12
0000 ; // Target : mega16 Crystal: 8.0000Mhz
0000 ;
0000 ; #include <iom16v.h>
0000 ; #include <macros.h>
0000 ;
0000 ; #define delay_time 500
0000 ;
0000 ; unsigned char pa_buf,pb_buf,loop_timers;
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 shiyan7 _shiyan7 fV
.even
002E _shiyan7::
002E .dbline -1
002E .dbline 35
002E ; {
002E ; delay_us(1000);
002E ; time--;
002E ; }
002E ; }
002E ;
002E ; void shiyan7()
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 24C0 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 80930100 sts _pb_buf,R24
0044 .dbline 41
0044 ; if(pb_buf==0x00)//为0,运行跑马灯程序,PA口的LED依次点亮
0044 8823 tst R24
0046 E1F4 brne L13
0048 .dbline 42
0048 ; {
0048 .dbline 43
0048 ; pa_buf=0x01;//送初值
0048 81E0 ldi R24,1
004A 80930200 sts _pa_buf,R24
004E .dbline 44
004E ; for(loop_timers=0;loop_timers<8;loop_timers++)//循环8次
004E 2224 clr R2
0050 20920000 sts _loop_timers,R2
0054 11C0 xjmp L18
0056 L15:
0056 .dbline 45
0056 .dbline 45
0056 20900200 lds R2,_pa_buf
005A 2094 com R2
005C 2BBA out 0x1b,R2
005E .dbline 45
005E 20900200 lds R2,_pa_buf
0062 220C lsl R2
0064 20920200 sts _pa_buf,R2
0068 .dbline 45
0068 0AEF ldi R16,250
006A 10E0 ldi R17,0
006C D1DF xcall _delay_ms
006E .dbline 45
006E L16:
006E .dbline 44
006E 80910000 lds R24,_loop_timers
0072 8F5F subi R24,255 ; addi 1
0074 80930000 sts _loop_timers,R24
0078 L18:
0078 .dbline 44
0078 80910000 lds R24,_loop_timers
007C 8830 cpi R24,8
007E 58F3 brlo L15
0080 .dbline 47
0080 ; {PORTA=~pa_buf;pa_buf=pa_buf<<1;delay_ms(delay_time/2);}
0080 ; //取反输出,左移一位,延时
0080 ; }//循环检测
0080 L13:
0080 .dbline 48
0080 8FEF ldi R24,255
0082 8BBB out 0x1b,R24
0084 .dbline 49
0084 L11:
0084 .dbline 38
0084 DBCF xjmp L10
0086 X1:
0086 .dbline -2
0086 L9:
0086 .dbline 0 ; func end
0086 0895 ret
0088 .dbend
0088 .dbfunc e main _main fV
.even
0088 _main::
0088 .dbline -1
0088 .dbline 53
0088 ; PORTA=0xff;//为1,熄灭PA口的LED
0088 ; }
0088 ; }
0088 ;
0088 ; void main()
0088 ; {
0088 .dbline 54
0088 ; shiyan7();//实验7函数
0088 D2DF xcall _shiyan7
008A .dbline -2
008A L19:
008A .dbline 0 ; func end
008A 0895 ret
008C .dbend
.area bss(ram, con, rel)
0000 .dbfile D:\SL-DIY~1\diy0208_16_7\diy0816_07.c
0000 _loop_timers::
0000 .blkb 1
0001 .dbsym e loop_timers _loop_timers c
0001 _pb_buf::
0001 .blkb 1
0002 .dbsym e pb_buf _pb_buf c
0002 _pa_buf::
0002 .blkb 1
0003 .dbsym e pa_buf _pa_buf c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -