📄 main.lis
字号:
0088 2BBA out 0x1b,R2
008A .dbline 86
008A ;
008A ; if(DISP_NUM==1)
008A 80910400 lds R24,_DISP_NUM
008E 8130 cpi R24,1
0090 09F4 brne L8
0092 .dbline 87
0092 ; PORTA|=0x80; //PA口接LED的段码
0092 DF9A sbi 0x1b,7
0094 L8:
0094 .dbline 89
0094 80910400 lds R24,_DISP_NUM
0098 8F5F subi R24,255 ; addi 1
009A 80930400 sts _DISP_NUM,R24
009E .dbline 90
009E 8430 cpi R24,4
00A0 19F4 brne L10
00A2 .dbline 91
00A2 2224 clr R2
00A4 20920400 sts _DISP_NUM,R2
00A8 L10:
00A8 .dbline -2
00A8 L7:
00A8 .dbline 0 ; func end
00A8 0895 ret
00AA .dbend
.area vector(rom, abs)
.org 76
004C 0C945500 jmp _timer0comp
.area text(rom, con, rel)
00AA .dbfile E:\MYWORK~1\开发设计\EasyAVR\程序范例\Mega16程序包\完成整理\数码管秒表系统\main.c
00AA .dbfunc e timer0comp _timer0comp fV
.even
00AA _timer0comp::
00AA 0E940000 xcall push_lset
00AE .dbline -1
00AE .dbline 96
00AE ;
00AE ; DISP_NUM++; //先显示低位,再显示高位
00AE ; if(DISP_NUM==4)
00AE ; DISP_NUM=0;
00AE ; }
00AE ;
00AE ; #pragma interrupt_handler timer0comp:20
00AE ; void timer0comp (void)
00AE ; {
00AE .dbline 97
00AE ; if(Nixie_State == START)
00AE 20900700 lds R2,_Nixie_State
00B2 2220 tst R2
00B4 69F4 brne L13
00B6 .dbline 98
00B6 ; {
00B6 .dbline 99
00B6 ; if(time_10ms<9999)
00B6 80910500 lds R24,_time_10ms
00BA 90910600 lds R25,_time_10ms+1
00BE 8F30 cpi R24,15
00C0 E7E2 ldi R30,39
00C2 9E07 cpc R25,R30
00C4 28F4 brsh L15
00C6 .dbline 100
00C6 ; {
00C6 .dbline 101
00C6 ; time_10ms++;
00C6 0196 adiw R24,1
00C8 90930600 sts _time_10ms+1,R25
00CC 80930500 sts _time_10ms,R24
00D0 .dbline 102
00D0 ; }
00D0 L15:
00D0 .dbline 103
00D0 ; }
00D0 L13:
00D0 .dbline 107
00D0 ;
00D0 ;
00D0 ;
00D0 ; DISP_DATA[0]=time_10ms/1000;
00D0 28EE ldi R18,1000
00D2 33E0 ldi R19,3
00D4 00910500 lds R16,_time_10ms
00D8 10910600 lds R17,_time_10ms+1
00DC 0E940000 xcall div16u
00E0 00930000 sts _DISP_DATA,R16
00E4 .dbline 108
00E4 ; DISP_DATA[1]=(time_10ms/100)-(DISP_DATA[0]*10);
00E4 202E mov R2,R16
00E6 8AE0 ldi R24,10
00E8 829D mul R24,R2
00EA 1001 movw R2,R0
00EC 24E6 ldi R18,100
00EE 30E0 ldi R19,0
00F0 00910500 lds R16,_time_10ms
00F4 10910600 lds R17,_time_10ms+1
00F8 0E940000 xcall div16u
00FC 2801 movw R4,R16
00FE 4218 sub R4,R2
0100 5308 sbc R5,R3
0102 40920100 sts _DISP_DATA+1,R4
0106 .dbline 109
0106 ; DISP_DATA[3]=time_10ms%10;
0106 2AE0 ldi R18,10
0108 30E0 ldi R19,0
010A 00910500 lds R16,_time_10ms
010E 10910600 lds R17,_time_10ms+1
0112 0E940000 xcall mod16u
0116 00930300 sts _DISP_DATA+3,R16
011A .dbline 110
011A ; DISP_DATA[2]=((time_10ms%100)-DISP_DATA[3])/10;
011A 24E6 ldi R18,100
011C 30E0 ldi R19,0
011E 00910500 lds R16,_time_10ms
0122 10910600 lds R17,_time_10ms+1
0126 0E940000 xcall mod16u
012A 1801 movw R2,R16
012C 40900300 lds R4,_DISP_DATA+3
0130 5524 clr R5
0132 2418 sub R2,R4
0134 3508 sbc R3,R5
0136 2AE0 ldi R18,10
0138 30E0 ldi R19,0
013A 8101 movw R16,R2
013C 0E940000 xcall div16u
0140 00930200 sts _DISP_DATA+2,R16
0144 .dbline 112
0144 ;
0144 ; Display();
0144 88DF xcall _Display
0146 .dbline -2
0146 L12:
0146 0E940000 xcall pop_lset
014A .dbline 0 ; func end
014A 1895 reti
014C .dbend
014C .dbfunc e main _main fV
.even
014C _main::
014C .dbline -1
014C .dbline 116
014C ; }
014C ;
014C ; void main(void)
014C ; {
014C .dbline 117
014C ; DDRA=0XFF;
014C 8FEF ldi R24,255
014E 8ABB out 0x1a,R24
0150 .dbline 118
0150 ; PORTA=0X00;
0150 2224 clr R2
0152 2BBA out 0x1b,R2
0154 .dbline 119
0154 ; DDRB=0X0F;
0154 8FE0 ldi R24,15
0156 87BB out 0x17,R24
0158 .dbline 120
0158 ; PORTB=0X00;
0158 28BA out 0x18,R2
015A .dbline 123
015A ;
015A ; //按键0端口初始化
015A ; DDRD &=~0x04; //设置PD2为输入
015A 8A98 cbi 0x11,2
015C .dbline 124
015C ; PORTD|=0x04; //设置PD2为上拉
015C 929A sbi 0x12,2
015E .dbline 126
015E ;
015E ; INT0_Init(); //TART初始化
015E 50DF xcall _INT0_Init
0160 .dbline 129
0160 ;
0160 ; //t/c0初始化(10ms)
0160 ; TCCR0=0X0d;
0160 8DE0 ldi R24,13
0162 83BF out 0x33,R24
0164 .dbline 130
0164 ; TCNT0=0X00;
0164 2224 clr R2
0166 22BE out 0x32,R2
0168 .dbline 131
0168 ; OCR0=0X48;
0168 88E4 ldi R24,72
016A 8CBF out 0x3c,R24
016C .dbline 132
016C ; TIMSK=0X02;
016C 82E0 ldi R24,2
016E 89BF out 0x39,R24
0170 .dbline 134
0170 ;
0170 ; time_10ms=0;
0170 3324 clr R3
0172 30920600 sts _time_10ms+1,R3
0176 20920500 sts _time_10ms,R2
017A .dbline 137
017A ;
017A ; //asm("sei");
017A ; SEI(); //全局中断使能
017A 7894 sei
017C .dbline 139
017C ;
017C ; Nixie_State = STOP;
017C 81E0 ldi R24,1
017E 80930700 sts _Nixie_State,R24
0182 .dbline 140
0182 ; for(;;)
0182 L22:
0182 .dbline 141
0182 .dbline 143
0182 .dbline 140
0182 .dbline 140
0182 FFCF xjmp L22
0184 X0:
0184 .dbline -2
0184 L21:
0184 .dbline 0 ; func end
0184 0895 ret
0186 .dbend
.area bss(ram, con, rel)
0000 .dbfile E:\MYWORK~1\开发设计\EasyAVR\程序范例\Mega16程序包\完成整理\数码管秒表系统\main.c
0000 _DISP_DATA::
0000 .blkb 4
0004 .dbsym e DISP_DATA _DISP_DATA A[4:4]c
0004 _DISP_NUM::
0004 .blkb 1
0005 .dbsym e DISP_NUM _DISP_NUM c
0005 _time_10ms::
0005 .blkb 2
0007 .dbsym e time_10ms _time_10ms i
0007 _Nixie_State::
0007 .blkb 1
0008 .dbsym e Nixie_State _Nixie_State c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -