📄 counter.lis
字号:
00A4 .dbline 41
00A4 ; i=i%10;
00A4 .dbline 42
00A4 ; p[3]=i;
00A4 2AE0 ldi R18,10
00A6 30E0 ldi R19,0
00A8 062F mov R16,R22
00AA 172F mov R17,R23
00AC 00D0 rcall mod16u
00AE 602F mov R22,R16
00B0 712F mov R23,R17
00B2 E42F mov R30,R20
00B4 F52F mov R31,R21
00B6 6383 std z+3,R22
00B8 .dbline -2
00B8 .dbline 43
00B8 ; }
00B8 L15:
00B8 00D0 rcall pop_gset2
00BA .dbline 0 ; func end
00BA 0895 ret
00BC .dbsym r p 20 pc
00BC .dbsym r i 22 i
00BC .dbend
00BC .dbfunc e Init_IO _Init_IO fV
.even
00BC _Init_IO::
00BC .dbline -1
00BC .dbline 46
00BC ;
00BC ; void Init_IO(void) //初始化I/O口
00BC ; {DDRA=0xff; //设置A口为推挽1输出
00BC .dbline 46
00BC 8FEF ldi R24,255
00BE 8ABB out 0x1a,R24
00C0 .dbline 47
00C0 ; PORTA=0xff;
00C0 8BBB out 0x1b,R24
00C2 .dbline 48
00C2 ; DDRB=0x00; //设置B口为不带上拉电阻输入
00C2 2224 clr R2
00C4 27BA out 0x17,R2
00C6 .dbline 49
00C6 ; PORTB=0x00;
00C6 28BA out 0x18,R2
00C8 .dbline 50
00C8 ; DDRC=0xff; //设置C口为推挽1输出;
00C8 84BB out 0x14,R24
00CA .dbline 51
00CA ; PORTC=0xff;
00CA 85BB out 0x15,R24
00CC .dbline -2
00CC .dbline 52
00CC ; }
00CC L16:
00CC .dbline 0 ; func end
00CC 0895 ret
00CE .dbend
00CE .dbfunc e Get_Key _Get_Key fV
.even
00CE _Get_Key::
00CE .dbline -1
00CE .dbline 55
00CE ;
00CE ; void Get_Key(void) //按键扫描函数
00CE ; {while((PINB&0x01)==0) //若S1按下,置位加计数标志;
00CE 06C0 rjmp L19
00D0 L18:
00D0 .dbline 56
00D0 .dbline 56
00D0 .dbline 57
00D0 81E0 ldi R24,1
00D2 80930100 sts _Key_Up,R24
00D6 00E0 ldi R16,<_Data
00D8 10E0 ldi R17,>_Data
00DA A2DF rcall _Display
00DC .dbline 58
00DC L19:
00DC .dbline 55
00DC B09B sbis 0x16,0
00DE F8CF rjmp L18
00E0 06C0 rjmp L22
00E2 L21:
00E2 .dbline 60
00E2 .dbline 60
00E2 .dbline 61
00E2 81E0 ldi R24,1
00E4 80930000 sts _Key_Down,R24
00E8 00E0 ldi R16,<_Data
00EA 10E0 ldi R17,>_Data
00EC 99DF rcall _Display
00EE .dbline 62
00EE L22:
00EE .dbline 59
00EE ; {Key_Up=1;
00EE ; Display(Data);
00EE ; }
00EE ; while((PINB&0x02)==0) //若S2按下,置位减计数标志;
00EE B19B sbis 0x16,1
00F0 F8CF rjmp L21
00F2 .dbline -2
00F2 .dbline 63
00F2 ; {Key_Down=1;
00F2 ; Display(Data);
00F2 ; }
00F2 ; }
00F2 L17:
00F2 .dbline 0 ; func end
00F2 0895 ret
00F4 .dbend
00F4 .dbfunc e main _main fV
00F4 ; I -> <dead>
.even
00F4 _main::
00F4 .dbline -1
00F4 .dbline 66
00F4 ;
00F4 ; void main(void)
00F4 ; {uchar I;
00F4 .dbline 67
00F4 ; Init_IO(); //初始化I/O口
00F4 E3DF rcall _Init_IO
00F6 .dbline 68
00F6 ; PORTA=0xff; //点亮测试所有的数码管
00F6 8FEF ldi R24,255
00F8 8BBB out 0x1b,R24
00FA .dbline 69
00FA ; PORTC=0x00;
00FA 2224 clr R2
00FC 25BA out 0x15,R2
00FE .dbline 71
00FE ; //DelayMs(3000); //延时
00FE ; PORTC=0xff; //数码管熄灭,进入计数状态
00FE 85BB out 0x15,R24
0100 37C0 rjmp L26
0102 L25:
0102 .dbline 73
0102 ; while(1)
0102 ; {Get_Key(); //按键扫描
0102 .dbline 73
0102 E5DF rcall _Get_Key
0104 .dbline 74
0104 ; if(Key_Up==1) //加计数处理
0104 80910100 lds R24,_Key_Up
0108 8130 cpi R24,1
010A 81F4 brne L28
010C .dbline 75
010C ; {if(CNT!=9999) //条件判断是否计数到9999
010C .dbline 75
010C 80910E00 lds R24,_CNT
0110 90910F00 lds R25,_CNT+1
0114 8F30 cpi R24,15
0116 E7E2 ldi R30,39
0118 9E07 cpc R25,R30
011A 41F0 breq L30
011C .dbline 76
011C ; {CNT=CNT+1; //计数值加1
011C .dbline 76
011C .dbline 77
011C ; Key_Up=0;} //加计数标志复位
011C 0196 adiw R24,1
011E 90930F00 sts _CNT+1,R25
0122 80930E00 sts _CNT,R24
0126 2224 clr R2
0128 20920100 sts _Key_Up,R2
012C .dbline 77
012C L30:
012C .dbline 78
012C ; }
012C L28:
012C .dbline 79
012C ; if(Key_Down==1) //减计数处理
012C 80910000 lds R24,_Key_Down
0130 8130 cpi R24,1
0132 A1F4 brne L32
0134 .dbline 80
0134 ; {if(CNT!=0) //条件判断是否计数到0000
0134 .dbline 80
0134 20900E00 lds R2,_CNT
0138 30900F00 lds R3,_CNT+1
013C 2220 tst R2
013E 11F4 brne X0
0140 3320 tst R3
0142 61F0 breq L34
0144 X0:
0144 .dbline 81
0144 ; {CNT=CNT-1; //计数值减一
0144 .dbline 81
0144 .dbline 82
0144 ; Key_Down=0;} //减计数标志复位
0144 80910E00 lds R24,_CNT
0148 90910F00 lds R25,_CNT+1
014C 0197 sbiw R24,1
014E 90930F00 sts _CNT+1,R25
0152 80930E00 sts _CNT,R24
0156 2224 clr R2
0158 20920000 sts _Key_Down,R2
015C .dbline 82
015C L34:
015C .dbline 83
015C ; }
015C L32:
015C .dbline 84
015C 20E0 ldi R18,<_Data
015E 30E0 ldi R19,>_Data
0160 00910E00 lds R16,_CNT
0164 10910F00 lds R17,_CNT+1
0168 76DF rcall _Process
016A .dbline 85
016A 00E0 ldi R16,<_Data
016C 10E0 ldi R17,>_Data
016E 58DF rcall _Display
0170 .dbline 86
0170 L26:
0170 .dbline 72
0170 C8CF rjmp L25
0172 X1:
0172 .dbline -2
0172 .dbline 87
0172 ; Process(CNT,Data); //计数值处理
0172 ; Display(Data); //动态扫描显示
0172 ; }
0172 ; }
0172 L24:
0172 .dbline 0 ; func end
0172 0895 ret
0174 .dbsym l I 1 c
0174 .dbend
.area bss(ram, con, rel)
0000 .dbfile F:\myavr\mydesign\seg_time\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 + -