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

📄 time.lis

📁 ATmegal128的混合中断编程
💻 LIS
📖 第 1 页 / 共 3 页
字号:
                        .module time.c
                        .area data(ram, con, rel)
 0000           _sound::
 0000                   .blkb 1
                        .area idata
 0000 00                .byte 0
                        .area data(ram, con, rel)
 0001                   .dbfile C:\work\mega128\mix_exp\time.c
 0001                   .dbsym e sound _sound c
                        .area text(rom, con, rel)
 0000                   .dbfile C:\work\mega128\mix_exp\time.c
 0000                   .dbfunc e timer0_init _timer0_init fV
                        .even
 0000           _timer0_init::
 0000                   .dbline -1
 0000                   .dbline 14
 0000           ; #include<iom128v.h>
 0000           ; unsigned char second;
 0000           ; unsigned char minute;
 0000           ; unsigned char hour;
 0000           ; unsigned char time[9];
 0000           ; unsigned char sound=0;
 0000           ; extern unsigned char keytime;
 0000           ; extern unsigned char keypad(void);
 0000           ; extern void cls(unsigned x,unsigned y,unsigned char high,unsigned char width);
 0000           ; extern void asc_tran(unsigned char x,unsigned char y,unsigned char *asc_p);
 0000           ; extern void ocmj_write(unsigned char data);
 0000           ; extern void hz_tran(unsigned char x,unsigned char y,unsigned char *hz_p);
 0000           ; void timer0_init(void)
 0000           ; {
 0000                   .dbline 15
 0000           ;  TCCR0 = 0x00; //stop
 0000 2224              clr R2
 0002 23BE              out 0x33,R2
 0004                   .dbline 16
 0004           ;  ASSR = 0x08; //set async mode
 0004 88E0              ldi R24,8
 0006 80BF              out 0x30,R24
 0008                   .dbline 17
 0008           ;  TCNT0 = 0x00; //set count
 0008 22BE              out 0x32,R2
 000A                   .dbline 18
 000A           ;  TCCR0 = 0x05; //start timer
 000A 85E0              ldi R24,5
 000C 83BF              out 0x33,R24
 000E                   .dbline -2
 000E                   .dbline 19
 000E           ; }
 000E           L1:
 000E                   .dbline 0 ; func end
 000E 0895              ret
 0010                   .dbend
                        .area vector(rom, abs)
                        .org 64
 0040 0C940800          jmp _timer0_ovf_isr
                        .area text(rom, con, rel)
 0010                   .dbfile C:\work\mega128\mix_exp\time.c
 0010                   .dbfunc e timer0_ovf_isr _timer0_ovf_isr fV
                        .even
 0010           _timer0_ovf_isr::
 0010 2A92              st -y,R2
 0012 8A93              st -y,R24
 0014 9A93              st -y,R25
 0016 2FB6              in R2,0x3f
 0018 2A92              st -y,R2
 001A                   .dbline -1
 001A                   .dbline 22
 001A           ; #pragma interrupt_handler timer0_ovf_isr:17
 001A           ; void timer0_ovf_isr(void)
 001A           ; {
 001A                   .dbline 23
 001A           ;  TCNT0 = 0x00; //reload counter value
 001A 2224              clr R2
 001C 22BE              out 0x32,R2
 001E                   .dbline 24
 001E           ;  keytime++;
 001E 80910000          lds R24,_keytime
 0022 8F5F              subi R24,255    ; addi 1
 0024 80930000          sts _keytime,R24
 0028                   .dbline 25
 0028           ;  if(second>=59)
 0028 80910D00          lds R24,_second
 002C 8B33              cpi R24,59
 002E D8F0              brlo L3
 0030                   .dbline 26
 0030           ;    {
 0030                   .dbline 27
 0030           ;     second=0;
 0030 20920D00          sts _second,R2
 0034                   .dbline 28
 0034           ;       if(minute>=59)
 0034 80910C00          lds R24,_minute
 0038 8B33              cpi R24,59
 003A 78F0              brlo L5
 003C                   .dbline 29
 003C           ;         {
 003C                   .dbline 30
 003C           ;          minute=0;
 003C 20920C00          sts _minute,R2
 0040                   .dbline 31
 0040           ;          if(hour>=23)
 0040 80910B00          lds R24,_hour
 0044 8731              cpi R24,23
 0046 18F0              brlo L7
 0048                   .dbline 32
 0048           ;            {
 0048                   .dbline 33
 0048           ;                 hour=0;
 0048 20920B00          sts _hour,R2
 004C                   .dbline 34
 004C           ;                }
 004C 11C0              xjmp L4
 004E           L7:
 004E                   .dbline 36
 004E           ;          else
 004E           ;            {
 004E                   .dbline 37
 004E           ;                 hour++;
 004E 80910B00          lds R24,_hour
 0052 8F5F              subi R24,255    ; addi 1
 0054 80930B00          sts _hour,R24
 0058                   .dbline 38
 0058           ;                }       
 0058                   .dbline 39
 0058           ;         }
 0058 0BC0              xjmp L4
 005A           L5:
 005A                   .dbline 41
 005A           ;       else
 005A           ;         {
 005A                   .dbline 42
 005A           ;          minute++; 
 005A 80910C00          lds R24,_minute
 005E 8F5F              subi R24,255    ; addi 1
 0060 80930C00          sts _minute,R24
 0064                   .dbline 43
 0064           ;         }  
 0064                   .dbline 44
 0064           ;    }
 0064 05C0              xjmp L4
 0066           L3:
 0066                   .dbline 46
 0066           ;  else
 0066           ;    {
 0066                   .dbline 47
 0066           ;     second++;
 0066 80910D00          lds R24,_second
 006A 8F5F              subi R24,255    ; addi 1
 006C 80930D00          sts _second,R24
 0070                   .dbline 48
 0070           ;    }  
 0070           L4:
 0070                   .dbline 49
 0070           ;  if((PIND&0b00100000)==0) sound=1;  
 0070 8599              sbic 0x10,5
 0072 03C0              rjmp L9
 0074                   .dbline 49
 0074 81E0              ldi R24,1
 0076 80930000          sts _sound,R24
 007A           L9:
 007A                   .dbline 50
 007A           ;  if (minute==0)
 007A 20900C00          lds R2,_minute
 007E 2220              tst R2
 0080 61F4              brne L11
 0082                   .dbline 51
 0082           ;      {
 0082                   .dbline 52
 0082           ;         if (sound==0)
 0082 20900000          lds R2,_sound
 0086 2220              tst R2
 0088 21F4              brne L13
 008A                   .dbline 53
 008A           ;             TIMSK|=0x40;
 008A 87B7              in R24,0x37
 008C 8064              ori R24,64
 008E 87BF              out 0x37,R24
 0090 0AC0              xjmp L12
 0092           L13:
 0092                   .dbline 55
 0092           ;         else
 0092           ;             TIMSK&=0xbf;        
 0092 87B7              in R24,0x37
 0094 8F7B              andi R24,191
 0096 87BF              out 0x37,R24
 0098                   .dbline 56
 0098           ;        } 
 0098 06C0              xjmp L12
 009A           L11:
 009A                   .dbline 58
 009A                   .dbline 59
 009A 87B7              in R24,0x37
 009C 8F7B              andi R24,191
 009E 87BF              out 0x37,R24
 00A0                   .dbline 60
 00A0 2224              clr R2
 00A2 20920000          sts _sound,R2
 00A6                   .dbline 61
 00A6           L12:
 00A6                   .dbline -2
 00A6                   .dbline 62
 00A6           ;  else
 00A6           ;      {
 00A6           ;         TIMSK&=0xbf;
 00A6           ;         sound=0;
 00A6           ;        }         
 00A6           ; }
 00A6           L2:
 00A6 2990              ld R2,y+
 00A8 2FBE              out 0x3f,R2
 00AA 9991              ld R25,y+
 00AC 8991              ld R24,y+
 00AE 2990              ld R2,y+
 00B0                   .dbline 0 ; func end
 00B0 1895              reti
 00B2                   .dbend
 00B2                   .dbfunc e timetoasc _timetoasc fV
 00B2           ;           temp -> R20
 00B2           ;              i -> R22
                        .even
 00B2           _timetoasc::
 00B2 0E940000          xcall push_gset2
 00B6 2397              sbiw R28,3
 00B8                   .dbline -1
 00B8                   .dbline 64
 00B8           ; void timetoasc(void)
 00B8           ;    {
 00B8                   .dbline 67
 00B8           ;     unsigned char i;
 00B8           ;       unsigned char temp;
 00B8           ;       temp=hour;
 00B8 40910B00          lds R20,_hour
 00BC                   .dbline 68
 00BC           ;     for(i=0;i<2;i++)
 00BC 6627              clr R22
 00BE 17C0              xjmp L19
 00C0           L16:
 00C0                   .dbline 69
 00C0                   .dbline 70
 00C0 262E              mov R2,R22
 00C2 3324              clr R3
 00C4 E1E0              ldi R30,1
 00C6 F0E0              ldi R31,0
 00C8 E219              sub R30,R2
 00CA F309              sbc R31,R3
 00CC 80E0              ldi R24,<_time
 00CE 90E0              ldi R25,>_time
 00D0 E80F              add R30,R24
 00D2 F91F              adc R31,R25
 00D4 1AE0              ldi R17,10
 00D6 042F              mov R16,R20
 00D8 0E940000          xcall mod8u
 00DC 802F              mov R24,R16
 00DE 805D              subi R24,208    ; addi 48
 00E0 8083              std z+0,R24
 00E2                   .dbline 71
 00E2 1AE0              ldi R17,10
 00E4 042F              mov R16,R20
 00E6 0E940000          xcall div8u
 00EA 402F              mov R20,R16
 00EC                   .dbline 72
 00EC           L17:
 00EC                   .dbline 68
 00EC 6395              inc R22
 00EE           L19:
 00EE                   .dbline 68
 00EE 6230              cpi R22,2
 00F0 38F3              brlo L16
 00F2                   .dbline 73
 00F2           ;          {
 00F2           ;           time[1-i]=temp%10+0x30;
 00F2           ;               temp=temp/10;
 00F2           ;          }
 00F2           ;       time[2]=':';   
 00F2 8AE3              ldi R24,58
 00F4 80930400          sts _time+2,R24
 00F8                   .dbline 74
 00F8           ;       temp=minute;
 00F8 40910C00          lds R20,_minute
 00FC                   .dbline 75
 00FC           ;     for(i=0;i<2;i++)
 00FC 6627              clr R22
 00FE 17C0              xjmp L24
 0100           L21:
 0100                   .dbline 76
 0100                   .dbline 77
 0100 262E              mov R2,R22
 0102 3324              clr R3
 0104 E4E0              ldi R30,4
 0106 F0E0              ldi R31,0
 0108 E219              sub R30,R2
 010A F309              sbc R31,R3
 010C 80E0              ldi R24,<_time
 010E 90E0              ldi R25,>_time
 0110 E80F              add R30,R24
 0112 F91F              adc R31,R25
 0114 1AE0              ldi R17,10
 0116 042F              mov R16,R20
 0118 0E940000          xcall mod8u
 011C 802F              mov R24,R16
 011E 805D              subi R24,208    ; addi 48
 0120 8083              std z+0,R24
 0122                   .dbline 78
 0122 1AE0              ldi R17,10
 0124 042F              mov R16,R20
 0126 0E940000          xcall div8u
 012A 402F              mov R20,R16
 012C                   .dbline 79
 012C           L22:
 012C                   .dbline 75
 012C 6395              inc R22
 012E           L24:
 012E                   .dbline 75
 012E 6230              cpi R22,2
 0130 38F3              brlo L21
 0132                   .dbline 80
 0132           ;          {
 0132           ;           time[4-i]=temp%10+0x30;
 0132           ;               temp=temp/10;
 0132           ;          }
 0132           ;       time[5]=':';
 0132 8AE3              ldi R24,58
 0134 80930700          sts _time+5,R24
 0138                   .dbline 81
 0138           ;       temp=second;
 0138 40910D00          lds R20,_second
 013C                   .dbline 82
 013C           ;     for(i=0;i<2;i++)
 013C 6627              clr R22
 013E 17C0              xjmp L29
 0140           L26:
 0140                   .dbline 83
 0140                   .dbline 84
 0140 262E              mov R2,R22
 0142 3324              clr R3
 0144 E7E0              ldi R30,7
 0146 F0E0              ldi R31,0
 0148 E219              sub R30,R2
 014A F309              sbc R31,R3
 014C 80E0              ldi R24,<_time
 014E 90E0              ldi R25,>_time
 0150 E80F              add R30,R24
 0152 F91F              adc R31,R25
 0154 1AE0              ldi R17,10
 0156 042F              mov R16,R20

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -