📄 timer1leddisplay.lis
字号:
011E .dbline 121
011E ; }
011E L23:
011E .dbline 122
011E ; }
011E L21:
011E .dbline 124
011E ;
011E ; if(!(PIND&(1<<key_min)))//分钟调整键检测
011E 8199 sbic 0x10,1
0120 12C0 rjmp L30
0122 X9:
0122 .dbline 125
0122 ; {
0122 .dbline 126
0122 ; delay_ms(10);
0122 0AE0 ldi R16,10
0124 57D0 xcall _delay_ms
0126 .dbline 127
0126 ; if(!(PIND&(1<<key_min)))
0126 8199 sbic 0x10,1
0128 0EC0 rjmp L32
012A X10:
012A .dbline 128
012A ; {
012A 01C0 xjmp L35
012C L34:
012C .dbline 130
012C ; while(!(PIND&(1<<key_min)))
012C ; {
012C .dbline 131
012C ; display();
012C 31D0 xcall _display
012E .dbline 132
012E ; }
012E L35:
012E .dbline 129
012E 819B sbis 0x10,1
0130 FDCF rjmp L34
0132 X11:
0132 .dbline 133
0132 ; minute++;
0132 80910700 lds R24,_minute
0136 8F5F subi R24,255 ; addi 1
0138 80930700 sts _minute,R24
013C .dbline 134
013C ; if(minute==60)
013C 8C33 cpi R24,60
013E 19F4 brne L37
0140 X12:
0140 .dbline 135
0140 ; {
0140 .dbline 136
0140 ; minute=0;
0140 2224 clr R2
0142 20920700 sts _minute,R2
0146 .dbline 137
0146 ; }
0146 L37:
0146 .dbline 138
0146 ; }
0146 L32:
0146 .dbline 139
0146 ; }
0146 L30:
0146 .dbline 140
0146 ; if(!(PIND&(1<<key_sec)))//秒调整键检测
0146 8299 sbic 0x10,2
0148 12C0 rjmp L39
014A X13:
014A .dbline 141
014A ; {
014A .dbline 142
014A ; delay_ms(10);
014A 0AE0 ldi R16,10
014C 43D0 xcall _delay_ms
014E .dbline 143
014E ; if(!(PIND&(1<<key_sec)))
014E 8299 sbic 0x10,2
0150 0EC0 rjmp L41
0152 X14:
0152 .dbline 144
0152 ; {
0152 01C0 xjmp L44
0154 L43:
0154 .dbline 146
0154 ; while(!(PIND&(1<<key_sec)))
0154 ; {
0154 .dbline 147
0154 ; display();
0154 1DD0 xcall _display
0156 .dbline 148
0156 ; }
0156 L44:
0156 .dbline 145
0156 829B sbis 0x10,2
0158 FDCF rjmp L43
015A X15:
015A .dbline 149
015A ; second++;
015A 80910800 lds R24,_second
015E 8F5F subi R24,255 ; addi 1
0160 80930800 sts _second,R24
0164 .dbline 150
0164 ; if(second==60)
0164 8C33 cpi R24,60
0166 19F4 brne L46
0168 X16:
0168 .dbline 151
0168 ; {
0168 .dbline 152
0168 ; second=0;
0168 2224 clr R2
016A 20920800 sts _second,R2
016E .dbline 153
016E ; }
016E L46:
016E .dbline 154
016E ; }
016E L41:
016E .dbline 155
016E ; }
016E L39:
016E .dbline -2
016E L16:
016E .dbline 0 ; func end
016E 0895 ret
0170 .dbend
0170 .dbfunc e init_devices _init_devices fV
.even
0170 _init_devices::
0170 .dbline -1
0170 .dbline 160
0170 ; }
0170 ;
0170 ; //call this routine to initialize all peripherals
0170 ; void init_devices(void)
0170 ; {
0170 .dbline 162
0170 ; //stop errant interrupts until set up
0170 ; CLI(); //disable all interrupts
0170 F894 cli
0172 .dbline 163
0172 ; port_init();
0172 46DF xcall _port_init
0174 .dbline 164
0174 ; timer1_init();
0174 50DF xcall _timer1_init
0176 .dbline 165
0176 ; hour=0x00;
0176 2224 clr R2
0178 20920600 sts _hour,R2
017C .dbline 166
017C ; minute=0x00;
017C 20920700 sts _minute,R2
0180 .dbline 167
0180 ; second=0x00;
0180 20920800 sts _second,R2
0184 .dbline 168
0184 ; MCUCR = 0x00;
0184 25BE out 0x35,R2
0186 .dbline 169
0186 ; GICR = 0x00;
0186 2BBE out 0x3b,R2
0188 .dbline 170
0188 ; TIMSK = 0x04; //timer interrupt sources
0188 84E0 ldi R24,4
018A 89BF out 0x39,R24
018C .dbline 171
018C ; SEI(); //re-enable interrupts
018C 7894 sei
018E .dbline -2
018E L48:
018E .dbline 0 ; func end
018E 0895 ret
0190 .dbend
0190 .dbfunc e display _display fV
0190 ; led_sel -> R20
0190 ; i -> R22
.even
0190 _display::
0190 0E940000 xcall push_xgsetF000
0194 .dbline -1
0194 .dbline 177
0194 ; //all peripherals are now initialized
0194 ; }
0194 ;
0194 ; /*动态扫描显示程序*/
0194 ; void display()
0194 ; {
0194 .dbline 179
0194 ; unsigned char i,led_sel;
0194 ; led_sel=0xdf;
0194 4FED ldi R20,223
0196 .dbline 180
0196 ; for(i=0;i<6;i++)
0196 6627 clr R22
0198 19C0 xjmp L53
019A L50:
019A .dbline 181
019A ; {
019A .dbline 182
019A ; PORTA=led_tab[time_group[i]];
019A 80E0 ldi R24,<_time_group
019C 90E0 ldi R25,>_time_group
019E E62F mov R30,R22
01A0 FF27 clr R31
01A2 E80F add R30,R24
01A4 F91F adc R31,R25
01A6 E081 ldd R30,z+0
01A8 FF27 clr R31
01AA EE0F lsl R30
01AC FF1F rol R31
01AE 80E0 ldi R24,<_led_tab
01B0 90E0 ldi R25,>_led_tab
01B2 E80F add R30,R24
01B4 F91F adc R31,R25
01B6 2590 lpm R2,Z+
01B8 3490 lpm R3,Z
01BA 2BBA out 0x1b,R2
01BC .dbline 183
01BC ; PORTB=led_sel;
01BC 48BB out 0x18,R20
01BE .dbline 184
01BE ; led_sel=(led_sel>>1)+0x80;
01BE 4695 lsr R20
01C0 4058 subi R20,128 ; addi 128
01C2 .dbline 185
01C2 ; delay_ms(10);
01C2 0AE0 ldi R16,10
01C4 07D0 xcall _delay_ms
01C6 .dbline 186
01C6 ; PORTB=0xff;
01C6 8FEF ldi R24,255
01C8 88BB out 0x18,R24
01CA .dbline 187
01CA ; }
01CA L51:
01CA .dbline 180
01CA 6395 inc R22
01CC L53:
01CC .dbline 180
01CC 6630 cpi R22,6
01CE 28F3 brlo L50
01D0 X17:
01D0 .dbline -2
01D0 L49:
01D0 .dbline 0 ; func end
01D0 0C940000 xjmp pop_xgsetF000
01D4 .dbsym r led_sel 20 c
01D4 .dbsym r i 22 c
01D4 .dbend
01D4 .dbfunc e delay_ms _delay_ms fV
01D4 ; a -> R20
01D4 ; b -> R22
01D4 ; i -> R16
.even
01D4 _delay_ms::
01D4 4A93 st -y,R20
01D6 6A93 st -y,R22
01D8 .dbline -1
01D8 .dbline 192
01D8 ; }
01D8 ;
01D8 ; /*毫秒延时程序*/
01D8 ; void delay_ms(unsigned char i)
01D8 ; {
01D8 .dbline 194
01D8 ; unsigned char a, b;
01D8 ; for (a = 1; a < i; a++)
01D8 41E0 ldi R20,1
01DA 06C0 xjmp L58
01DC L55:
01DC .dbline 195
01DC ; {
01DC .dbline 196
01DC ; for (b = 1; b; b++)
01DC 61E0 ldi R22,1
01DE 01C0 xjmp L62
01E0 L59:
01E0 .dbline 197
01E0 ; {
01E0 .dbline 198
01E0 ; ;
01E0 .dbline 199
01E0 ; }
01E0 L60:
01E0 .dbline 196
01E0 6395 inc R22
01E2 L62:
01E2 .dbline 196
01E2 6623 tst R22
01E4 E9F7 brne L59
01E6 X18:
01E6 .dbline 200
01E6 ; }
01E6 L56:
01E6 .dbline 194
01E6 4395 inc R20
01E8 L58:
01E8 .dbline 194
01E8 4017 cp R20,R16
01EA C0F3 brlo L55
01EC X19:
01EC .dbline -2
01EC L54:
01EC .dbline 0 ; func end
01EC 6991 ld R22,y+
01EE 4991 ld R20,y+
01F0 0895 ret
01F2 .dbsym r a 20 c
01F2 .dbsym r b 22 c
01F2 .dbsym r i 16 c
01F2 .dbend
01F2 .dbfunc e main _main fV
.even
01F2 _main::
01F2 .dbline -1
01F2 .dbline 205
01F2 ; }
01F2 ;
01F2 ; /*主程序*/
01F2 ; void main(void)
01F2 ; {
01F2 .dbline 207
01F2 ;
01F2 ; init_devices();
01F2 BEDF xcall _init_devices
01F4 03C0 xjmp L65
01F6 L64:
01F6 .dbline 209
01F6 ; while(1)
01F6 ; {
01F6 .dbline 210
01F6 ; set_detect();
01F6 72DF xcall _set_detect
01F8 .dbline 211
01F8 ; data_split();
01F8 46DF xcall _data_split
01FA .dbline 212
01FA ; display();
01FA CADF xcall _display
01FC .dbline 213
01FC ; }
01FC L65:
01FC .dbline 208
01FC FCCF xjmp L64
01FE X20:
01FE .dbline -2
01FE L63:
01FE .dbline 0 ; func end
01FE 0895 ret
0200 .dbend
.area bss(ram, con, rel)
0000 .dbfile F:\avr单片机学习\我自编程序\定时器数码管显示\timer1leddisplay.c
0000 _time_group::
0000 .blkb 6
0006 .dbsym e time_group _time_group A[6:6]c
0006 _hour::
0006 .blkb 1
0007 .dbsym e hour _hour c
0007 _minute::
0007 .blkb 1
0008 .dbsym e minute _minute c
0008 _second::
0008 .blkb 1
0009 .dbsym e second _second c
0009 ; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -