📄 counter.lis
字号:
00A4 F52F mov R31,R21
00A6 0283 std z+2,R16
00A8 .dbline 41
00A8 ; i=i%10;
00A8 2AE0 ldi R18,10
00AA 30E0 ldi R19,0
00AC 062F mov R16,R22
00AE 172F mov R17,R23
00B0 00D0 rcall mod16u
00B2 602F mov R22,R16
00B4 712F mov R23,R17
00B6 .dbline 42
00B6 ; p[3]=i;
00B6 E42F mov R30,R20
00B8 F52F mov R31,R21
00BA 6383 std z+3,R22
00BC .dbline -2
00BC .dbline 43
00BC ; }
00BC L15:
00BC 00D0 rcall pop_gset2
00BE .dbline 0 ; func end
00BE 0895 ret
00C0 .dbsym r p 20 pc
00C0 .dbsym r i 22 i
00C0 .dbend
00C0 .dbfunc e Init_IO _Init_IO fV
.even
00C0 _Init_IO::
00C0 .dbline -1
00C0 .dbline 46
00C0 ;
00C0 ; void Init_IO(void) //初始化I/O口
00C0 ; {DDRA=0xff; //设置A口为推挽1输出
00C0 .dbline 46
00C0 8FEF ldi R24,255
00C2 8ABB out 0x1a,R24
00C4 .dbline 47
00C4 ; PORTA=0xff;
00C4 8BBB out 0x1b,R24
00C6 .dbline 48
00C6 ; DDRB=0x00; //设置B口为不带上拉电阻输入
00C6 2224 clr R2
00C8 27BA out 0x17,R2
00CA .dbline 49
00CA ; PORTB=0x00;
00CA 28BA out 0x18,R2
00CC .dbline 50
00CC ; DDRC=0xff; //设置C口为推挽1输出;
00CC 84BB out 0x14,R24
00CE .dbline 51
00CE ; PORTC=0xff;
00CE 85BB out 0x15,R24
00D0 .dbline -2
00D0 .dbline 52
00D0 ; }
00D0 L16:
00D0 .dbline 0 ; func end
00D0 0895 ret
00D2 .dbend
00D2 .dbfunc e Get_Key _Get_Key fV
.even
00D2 _Get_Key::
00D2 .dbline -1
00D2 .dbline 55
00D2 ;
00D2 ; void Get_Key(void) //按键扫描函数
00D2 ; {while((PINB&0x01)==0) //若S1按下,置位加计数标志;
00D2 06C0 rjmp L19
00D4 L18:
00D4 .dbline 56
00D4 .dbline 56
00D4 81E0 ldi R24,1
00D6 80930100 sts _Key_Up,R24
00DA .dbline 57
00DA 00E0 ldi R16,<_Data
00DC 10E0 ldi R17,>_Data
00DE A1DF rcall _Display
00E0 .dbline 57
00E0 L19:
00E0 .dbline 55
00E0 B09B sbis 0x16,0
00E2 F8CF rjmp L18
00E4 06C0 rjmp L22
00E6 L21:
00E6 .dbline 59
00E6 .dbline 59
00E6 81E0 ldi R24,1
00E8 80930000 sts _Key_Down,R24
00EC .dbline 60
00EC 00E0 ldi R16,<_Data
00EE 10E0 ldi R17,>_Data
00F0 98DF rcall _Display
00F2 .dbline 60
00F2 L22:
00F2 .dbline 58
00F2 ; {Key_Up=1;
00F2 ; Display(Data);}
00F2 ; while((PINB&0x02)==0) //若S2按下,置位减计数标志;
00F2 B19B sbis 0x16,1
00F4 F8CF rjmp L21
00F6 .dbline -2
00F6 .dbline 61
00F6 ; {Key_Down=1;
00F6 ; Display(Data);}
00F6 ; }
00F6 L17:
00F6 .dbline 0 ; func end
00F6 0895 ret
00F8 .dbend
00F8 .dbfunc e main _main fV
00F8 ; I -> <dead>
.even
00F8 _main::
00F8 .dbline -1
00F8 .dbline 64
00F8 ;
00F8 ; void main(void)
00F8 ; {uchar I;
00F8 .dbline 65
00F8 ; Init_IO(); //初始化I/O口
00F8 E3DF rcall _Init_IO
00FA .dbline 66
00FA ; PORTA=0xff; //点亮测试所有的数码管
00FA 8FEF ldi R24,255
00FC 8BBB out 0x1b,R24
00FE .dbline 67
00FE ; PORTC=0x00;
00FE 2224 clr R2
0100 25BA out 0x15,R2
0102 .dbline 68
0102 ; DelayMs(3000); //延时
0102 08EB ldi R16,3000
0104 1BE0 ldi R17,11
0106 7CDF rcall _DelayMs
0108 .dbline 69
0108 ; PORTC=0xff; //数码管熄灭,进入计数状态
0108 8FEF ldi R24,255
010A 85BB out 0x15,R24
010C 37C0 rjmp L26
010E L25:
010E .dbline 71
010E ; while(1)
010E ; {Get_Key(); //按键扫描
010E .dbline 71
010E E1DF rcall _Get_Key
0110 .dbline 72
0110 ; if(Key_Up==1) //加计数处理
0110 80910100 lds R24,_Key_Up
0114 8130 cpi R24,1
0116 81F4 brne L28
0118 .dbline 73
0118 ; {if(CNT!=9999) //条件判断是否计数到9999
0118 .dbline 73
0118 80910E00 lds R24,_CNT
011C 90910F00 lds R25,_CNT+1
0120 8F30 cpi R24,15
0122 E7E2 ldi R30,39
0124 9E07 cpc R25,R30
0126 41F0 breq L30
0128 .dbline 74
0128 ; {CNT=CNT+1; //计数值加1
0128 .dbline 74
0128 0196 adiw R24,1
012A 90930F00 sts _CNT+1,R25
012E 80930E00 sts _CNT,R24
0132 .dbline 75
0132 ; Key_Up=0;} //加计数标志复位
0132 2224 clr R2
0134 20920100 sts _Key_Up,R2
0138 .dbline 75
0138 L30:
0138 .dbline 76
0138 ; }
0138 L28:
0138 .dbline 77
0138 ; if(Key_Down==1) //减计数处理
0138 80910000 lds R24,_Key_Down
013C 8130 cpi R24,1
013E A1F4 brne L32
0140 .dbline 78
0140 ; {if(CNT!=0) //条件判断是否计数到0000
0140 .dbline 78
0140 20900E00 lds R2,_CNT
0144 30900F00 lds R3,_CNT+1
0148 2220 tst R2
014A 11F4 brne X2
014C 3320 tst R3
014E 61F0 breq L34
0150 X2:
0150 .dbline 79
0150 ; {CNT=CNT-1; //计数值减一
0150 .dbline 79
0150 80910E00 lds R24,_CNT
0154 90910F00 lds R25,_CNT+1
0158 0197 sbiw R24,1
015A 90930F00 sts _CNT+1,R25
015E 80930E00 sts _CNT,R24
0162 .dbline 80
0162 ; Key_Down=0;} //减计数标志复位
0162 2224 clr R2
0164 20920000 sts _Key_Down,R2
0168 .dbline 80
0168 L34:
0168 .dbline 81
0168 ; }
0168 L32:
0168 .dbline 82
0168 20E0 ldi R18,<_Data
016A 30E0 ldi R19,>_Data
016C 00910E00 lds R16,_CNT
0170 10910F00 lds R17,_CNT+1
0174 72DF rcall _Process
0176 .dbline 83
0176 00E0 ldi R16,<_Data
0178 10E0 ldi R17,>_Data
017A 53DF rcall _Display
017C .dbline 84
017C L26:
017C .dbline 70
017C C8CF rjmp L25
017E X3:
017E .dbline -2
017E .dbline 85
017E ; Process(CNT,Data); //计数值处理
017E ; Display(Data); //动态扫描显示
017E ; }
017E ; }
017E L24:
017E .dbline 0 ; func end
017E 0895 ret
0180 .dbsym l I 1 c
0180 .dbend
.area bss(ram, con, rel)
0000 .dbfile C:\DOCUME~1\Administrator\桌面\张军\AVR\AVR单片机系统开发实例稿\第二章\第二章程序\IO端口的C语言编程\数码管显示设计\Counter.C
0000 _Key_Down::
0000 .blkb 1
0001 .dbsym e Key_Down _Key_Down c
0001 _Key_Up::
0001 .blkb 1
0002 .dbsym e Key_Up _Key_Up c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -