⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 timer1leddisplay.lis

📁 51单片机时钟程序
💻 LIS
📖 第 1 页 / 共 2 页
字号:
                        .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 + -