📄 timer1leddisplay.lis
字号:
.module timer1leddisplay.c
.area text(rom, con, rel)
0000 .dbfile F:\avr单片机学习\我自编程序\定时器数码管显示\timer1leddisplay.c
.area lit(rom, con, rel)
0000 _led_tab::
0000 3F00 .word 63
0002 0600 .word 6
0004 5B00 .word 91
0006 4F00 .word 79
0008 6600 .word 102
000A 6D00 .word 109
000C 7D00 .word 125
000E 0700 .word 7
0010 7F00 .word 127
0012 6F00 .word 111
0014 .dbsym e led_tab _led_tab A[20:10]kI
.area text(rom, con, rel)
0000 .dbfile F:\avr单片机学习\我自编程序\定时器数码管显示\timer1leddisplay.c
0000 .dbfunc e port_init _port_init fV
.even
0000 _port_init::
0000 .dbline -1
0000 .dbline 33
0000 ; //ICC-AVR application builder : 2007-8-1 21:29:13
0000 ; // Target : M16
0000 ; // Crystal: 4.0000Mhz
0000 ;
0000 ; #include <iom16v.h>
0000 ; #include <macros.h>
0000 ;
0000 ; #define key_hour PD0
0000 ; #define key_min PD1
0000 ; #define key_sec PD2
0000 ; #define key_clr PD3
0000 ; /*共阴数码管七段码*/
0000 ; const led_tab[10]={
0000 ; 0x3F,/*0*/
0000 ; 0x06,/*1*/
0000 ; 0x5B,/*2*/
0000 ; 0x4F,/*3*/
0000 ; 0x66,/*4*/
0000 ; 0x6D,/*5*/
0000 ; 0x7D,/*6*/
0000 ; 0x07,/*7*/
0000 ; 0x7F,/*8*/
0000 ; 0x6F,/*9*/
0000 ; };
0000 ; unsigned char second,minute,hour;
0000 ; unsigned char time_group[6];
0000 ;
0000 ; void delay_ms(unsigned char);
0000 ; void display(void);
0000 ; void set_detect(void);
0000 ;
0000 ; void port_init(void)
0000 ; {
0000 .dbline 34
0000 ; PORTA = 0x00;
0000 2224 clr R2
0002 2BBA out 0x1b,R2
0004 .dbline 35
0004 ; DDRA = 0xFF;
0004 8FEF ldi R24,255
0006 8ABB out 0x1a,R24
0008 .dbline 36
0008 ; PORTB = 0x00;
0008 28BA out 0x18,R2
000A .dbline 37
000A ; DDRB = 0xFF;
000A 87BB out 0x17,R24
000C .dbline 38
000C ; PORTC = 0x00; //m103 output only
000C 25BA out 0x15,R2
000E .dbline 39
000E ; DDRC = 0x00;
000E 24BA out 0x14,R2
0010 .dbline 40
0010 ; PORTD = 0xff;
0010 82BB out 0x12,R24
0012 .dbline 41
0012 ; DDRD = 0x00;
0012 21BA out 0x11,R2
0014 .dbline -2
0014 L1:
0014 .dbline 0 ; func end
0014 0895 ret
0016 .dbend
0016 .dbfunc e timer1_init _timer1_init fV
.even
0016 _timer1_init::
0016 .dbline -1
0016 .dbline 49
0016 ; }
0016 ;
0016 ; //TIMER1 initialize - prescale:64
0016 ; // WGM: 0) Normal, TOP=0xFFFF
0016 ; // desired value: 1Hz
0016 ; // actual value: 1.000Hz (0.0%)
0016 ; void timer1_init(void)
0016 ; {
0016 .dbline 50
0016 ; TCCR1B = 0x00; //stop
0016 2224 clr R2
0018 2EBC out 0x2e,R2
001A .dbline 51
001A ; TCNT1H = 0x0B; //setup
001A 8BE0 ldi R24,11
001C 8DBD out 0x2d,R24
001E .dbline 52
001E ; TCNT1L = 0xDC;
001E 8CED ldi R24,220
0020 8CBD out 0x2c,R24
0022 .dbline 54
0022 ;
0022 ; TCCR1A = 0x00;
0022 2FBC out 0x2f,R2
0024 .dbline 55
0024 ; TCCR1B = 0x03; //start Timer
0024 83E0 ldi R24,3
0026 8EBD out 0x2e,R24
0028 .dbline -2
0028 L2:
0028 .dbline 0 ; func end
0028 0895 ret
002A .dbend
.area vector(rom, abs)
.org 32
0020 0C941500 jmp _timer1_ovf_isr
.area text(rom, con, rel)
002A .dbfile F:\avr单片机学习\我自编程序\定时器数码管显示\timer1leddisplay.c
002A .dbfunc e timer1_ovf_isr _timer1_ovf_isr fV
.even
002A _timer1_ovf_isr::
002A 2A92 st -y,R2
002C 8A93 st -y,R24
002E 9A93 st -y,R25
0030 2FB6 in R2,0x3f
0032 2A92 st -y,R2
0034 .dbline -1
0034 .dbline 60
0034 ; }
0034 ;
0034 ; #pragma interrupt_handler timer1_ovf_isr:iv_TIM1_OVF
0034 ; void timer1_ovf_isr(void)
0034 ; {
0034 .dbline 62
0034 ; //TIMER1 has overflowed
0034 ; TCNT1H = 0x0B; //reload counter high value
0034 8BE0 ldi R24,11
0036 8DBD out 0x2d,R24
0038 .dbline 63
0038 ; TCNT1L = 0xDC; //reload counter low value
0038 8CED ldi R24,220
003A 8CBD out 0x2c,R24
003C .dbline 64
003C ; second++;
003C 80910800 lds R24,_second
0040 8F5F subi R24,255 ; addi 1
0042 80930800 sts _second,R24
0046 .dbline 65
0046 ; if(second==60)
0046 8C33 cpi R24,60
0048 C1F4 brne L4
004A X0:
004A .dbline 66
004A ; {
004A .dbline 67
004A ; second=0x00;
004A 2224 clr R2
004C 20920800 sts _second,R2
0050 .dbline 68
0050 ; minute++;
0050 80910700 lds R24,_minute
0054 8F5F subi R24,255 ; addi 1
0056 80930700 sts _minute,R24
005A .dbline 69
005A ; if(minute==60)
005A 8C33 cpi R24,60
005C 71F4 brne L6
005E X1:
005E .dbline 70
005E ; {
005E .dbline 71
005E ; minute=0x00;
005E 20920700 sts _minute,R2
0062 .dbline 72
0062 ; hour++;
0062 80910600 lds R24,_hour
0066 8F5F subi R24,255 ; addi 1
0068 80930600 sts _hour,R24
006C .dbline 73
006C ; if(hour=24)
006C 88E1 ldi R24,24
006E 80930600 sts _hour,R24
0072 8823 tst R24
0074 11F0 breq L8
0076 X2:
0076 .dbline 74
0076 ; {
0076 .dbline 75
0076 ; hour=0x00;
0076 20920600 sts _hour,R2
007A .dbline 76
007A ; }
007A L8:
007A .dbline 77
007A ; }
007A L6:
007A .dbline 78
007A ; }
007A L4:
007A .dbline -2
007A L3:
007A .dbline 0 ; func end
007A 2990 ld R2,y+
007C 2FBE out 0x3f,R2
007E 9991 ld R25,y+
0080 8991 ld R24,y+
0082 2990 ld R2,y+
0084 1895 reti
0086 .dbend
0086 .dbfunc e data_split _data_split fV
.even
0086 _data_split::
0086 .dbline -1
0086 .dbline 83
0086 ; }
0086 ;
0086 ; /*数据拆分程序*/
0086 ; void data_split(void)
0086 ; {
0086 .dbline 84
0086 ; time_group[0]=second%10;
0086 1AE0 ldi R17,10
0088 00910800 lds R16,_second
008C 0E940000 xcall mod8u
0090 00930000 sts _time_group,R16
0094 .dbline 85
0094 ; time_group[1]=second/10;
0094 1AE0 ldi R17,10
0096 00910800 lds R16,_second
009A 0E940000 xcall div8u
009E 00930100 sts _time_group+1,R16
00A2 .dbline 86
00A2 ; time_group[2]=minute%10;
00A2 1AE0 ldi R17,10
00A4 00910700 lds R16,_minute
00A8 0E940000 xcall mod8u
00AC 00930200 sts _time_group+2,R16
00B0 .dbline 87
00B0 ; time_group[3]=minute/10;
00B0 1AE0 ldi R17,10
00B2 00910700 lds R16,_minute
00B6 0E940000 xcall div8u
00BA 00930300 sts _time_group+3,R16
00BE .dbline 88
00BE ; time_group[4]=hour%10;
00BE 1AE0 ldi R17,10
00C0 00910600 lds R16,_hour
00C4 0E940000 xcall mod8u
00C8 00930400 sts _time_group+4,R16
00CC .dbline 89
00CC ; time_group[5]=hour/10;
00CC 1AE0 ldi R17,10
00CE 00910600 lds R16,_hour
00D2 0E940000 xcall div8u
00D6 00930500 sts _time_group+5,R16
00DA .dbline -2
00DA L10:
00DA .dbline 0 ; func end
00DA 0895 ret
00DC .dbend
00DC .dbfunc e set_detect _set_detect fV
.even
00DC _set_detect::
00DC .dbline -1
00DC .dbline 94
00DC ; }
00DC ;
00DC ; /*时间设置检测*/
00DC ; void set_detect(void)
00DC ; {
00DC .dbline 95
00DC ; if(!(PIND&(1<<key_clr))) //清零键检测
00DC 8399 sbic 0x10,3
00DE 0BC0 rjmp L17
00E0 X3:
00E0 .dbline 96
00E0 ; {
00E0 .dbline 97
00E0 ; delay_ms(10);
00E0 0AE0 ldi R16,10
00E2 78D0 xcall _delay_ms
00E4 .dbline 98
00E4 ; if(!(PIND&(1<<key_clr)))
00E4 8399 sbic 0x10,3
00E6 07C0 rjmp L19
00E8 X4:
00E8 .dbline 99
00E8 ; {
00E8 .dbline 100
00E8 ; hour=0x00;
00E8 2224 clr R2
00EA 20920600 sts _hour,R2
00EE .dbline 101
00EE ; minute=0x00;
00EE 20920700 sts _minute,R2
00F2 .dbline 102
00F2 ; second=0x00;
00F2 20920800 sts _second,R2
00F6 .dbline 103
00F6 ; }
00F6 L19:
00F6 .dbline 104
00F6 ; }
00F6 L17:
00F6 .dbline 107
00F6 ;
00F6 ;
00F6 ; if(!(PIND&(1<<key_hour))) //小时调整键检测
00F6 8099 sbic 0x10,0
00F8 12C0 rjmp L21
00FA X5:
00FA .dbline 108
00FA ; {
00FA .dbline 109
00FA ; delay_ms(10);
00FA 0AE0 ldi R16,10
00FC 6BD0 xcall _delay_ms
00FE .dbline 110
00FE ; if(!(PIND&(1<<key_hour)))
00FE 8099 sbic 0x10,0
0100 0EC0 rjmp L23
0102 X6:
0102 .dbline 111
0102 ; {
0102 01C0 xjmp L26
0104 L25:
0104 .dbline 113
0104 ; while(!(PIND&(1<<key_hour)))
0104 ; {
0104 .dbline 114
0104 ; display();
0104 45D0 xcall _display
0106 .dbline 115
0106 ; }
0106 L26:
0106 .dbline 112
0106 809B sbis 0x10,0
0108 FDCF rjmp L25
010A X7:
010A .dbline 116
010A ; hour++;
010A 80910600 lds R24,_hour
010E 8F5F subi R24,255 ; addi 1
0110 80930600 sts _hour,R24
0114 .dbline 117
0114 ; if(hour==24)
0114 8831 cpi R24,24
0116 19F4 brne L28
0118 X8:
0118 .dbline 118
0118 ; {
0118 .dbline 119
0118 ; hour=0;
0118 2224 clr R2
011A 20920600 sts _hour,R2
011E .dbline 120
011E ; }
011E L28:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -