📄 counter.lis
字号:
0058 L10:
0058 .dbline 0 ; func end
0058 00C0 rjmp pop_xgsetF00C
005A .dbsym r sel 22 c
005A .dbsym r i 20 c
005A .dbsym r p 10 pc
005A .dbend
005A .dbfunc e Process _Process fV
005A ; p -> R20,R21
005A ; i -> R10
.even
005A _Process::
005A 00D0 rcall push_xgset300C
005C A901 movw R20,R18
005E A02E mov R10,R16
0060 .dbline -1
0060 .dbline 32
0060 ; }
0060 ;
0060 ; //计数值处理函数。参数i:计数值;参数p:处理数据存放的数组名//
0060 ; //功能:此函数用于将计数值拆分为BCD码的千,百,十,一数据,用于查表显示//
0060 ; void Process(uchar i,uchar *p)
0060 ; {p[0]=i/1000;
0060 .dbline 32
0060 28EE ldi R18,1000
0062 33E0 ldi R19,3
0064 0A2D mov R16,R10
0066 1127 clr R17
0068 00D0 rcall div16s
006A FA01 movw R30,R20
006C 0083 std z+0,R16
006E .dbline 33
006E ; i=i%1000;
006E 28EE ldi R18,1000
0070 33E0 ldi R19,3
0072 0A2D mov R16,R10
0074 1127 clr R17
0076 00D0 rcall mod16s
0078 5801 movw R10,R16
007A .dbline 34
007A ; p[1]=i/100;
007A 14E6 ldi R17,100
007C 00D0 rcall div8u
007E FA01 movw R30,R20
0080 0183 std z+1,R16
0082 .dbline 35
0082 ; i=i%100;
0082 14E6 ldi R17,100
0084 0A2D mov R16,R10
0086 00D0 rcall mod8u
0088 A02E mov R10,R16
008A .dbline 36
008A ; p[2]=i/10;
008A 1AE0 ldi R17,10
008C 00D0 rcall div8u
008E FA01 movw R30,R20
0090 0283 std z+2,R16
0092 .dbline 37
0092 ; i=i%10;
0092 1AE0 ldi R17,10
0094 0A2D mov R16,R10
0096 00D0 rcall mod8u
0098 A02E mov R10,R16
009A .dbline 38
009A ; p[3]=i;
009A FA01 movw R30,R20
009C A382 std z+3,R10
009E .dbline -2
009E L15:
009E .dbline 0 ; func end
009E 00C0 rjmp pop_xgset300C
00A0 .dbsym r p 20 pc
00A0 .dbsym r i 10 c
00A0 .dbend
00A0 .dbfunc e Init_IO _Init_IO fV
.even
00A0 _Init_IO::
00A0 .dbline -1
00A0 .dbline 42
00A0 ; }
00A0 ;
00A0 ; void Init_IO(void) //初始化I/O口
00A0 ; {DDRA=0xff; //设置A口为推挽1输出
00A0 .dbline 42
00A0 8FEF ldi R24,255
00A2 8ABB out 0x1a,R24
00A4 .dbline 43
00A4 ; PORTA=0xff;
00A4 8BBB out 0x1b,R24
00A6 .dbline 44
00A6 ; DDRB=0x00; //设置B口为不带上拉电阻输入
00A6 2224 clr R2
00A8 27BA out 0x17,R2
00AA .dbline 45
00AA ; PORTB=0x00;
00AA 28BA out 0x18,R2
00AC .dbline 46
00AC ; DDRC=0xff; //设置C口为推挽1输出;
00AC 84BB out 0x14,R24
00AE .dbline 47
00AE ; PORTC=0xff;
00AE 85BB out 0x15,R24
00B0 .dbline -2
00B0 L16:
00B0 .dbline 0 ; func end
00B0 0895 ret
00B2 .dbend
00B2 .dbfunc e main _main fV
00B2 ; Load -> R10
.even
00B2 _main::
00B2 .dbline -1
00B2 .dbline 51
00B2 ; }
00B2 ;
00B2 ; void main(void)
00B2 ; {uchar Load;
00B2 .dbline 52
00B2 ; Init_IO(); //初始化I/O口
00B2 F6DF rcall _Init_IO
00B4 .dbline 53
00B4 ; PORTA=0xff; //点亮以测试所有的数码管
00B4 8FEF ldi R24,255
00B6 8BBB out 0x1b,R24
00B8 .dbline 54
00B8 ; PORTC=0x00;
00B8 2224 clr R2
00BA 25BA out 0x15,R2
00BC .dbline 55
00BC ; DelayMs(3000); //延时
00BC 08EB ldi R16,3000
00BE 1BE0 ldi R17,11
00C0 9FDF rcall _DelayMs
00C2 .dbline 56
00C2 ; PORTC=0xff; //熄灭所有的数码管
00C2 8FEF ldi R24,255
00C4 85BB out 0x15,R24
00C6 .dbline 57
00C6 ; TCCR0=0x06; //T/C0工作于计数方式,下降沿计数
00C6 86E0 ldi R24,6
00C8 83BF out 0x33,R24
00CA .dbline 58
00CA ; TCNT0=CNT; //计数初始值0
00CA 20900E00 lds R2,_CNT
00CE 30900F00 lds R3,_CNT+1
00D2 22BE out 0x32,R2
00D4 08C0 rjmp L19
00D6 L18:
00D6 .dbline 60
00D6 ; while(1)
00D6 ; {Load=TCNT0;
00D6 .dbline 60
00D6 A2B6 in R10,0x32
00D8 .dbline 61
00D8 ; Process(Load,Data); //计数值处理
00D8 20E0 ldi R18,<_Data
00DA 30E0 ldi R19,>_Data
00DC 0A2D mov R16,R10
00DE BDDF rcall _Process
00E0 .dbline 62
00E0 ; Display(Data); //动态扫描显示
00E0 00E0 ldi R16,<_Data
00E2 10E0 ldi R17,>_Data
00E4 A0DF rcall _Display
00E6 .dbline 63
00E6 ; }
00E6 L19:
00E6 .dbline 59
00E6 F7CF rjmp L18
00E8 X3:
00E8 .dbline -2
00E8 L17:
00E8 .dbline 0 ; func end
00E8 0895 ret
00EA .dbsym r Load 10 c
00EA .dbend
00EA ; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -