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

📄 clock.lis

📁 AVR单片机用C语言编写的包括时钟
💻 LIS
字号:
                        .module clock.c
                        .area text(rom, con, rel)
 0000                   .dbfile C:\icc\examples.avr\zgs\clock.c
 0000                   .dbfunc e writeclock _writeclock fc
 0000           ;         wordad -> R20
 0000           ;          sla_w -> R22
 0000           ;              j -> R20
 0000           ;       clock_wb -> R16,R17
                        .even
 0000           _writeclock::
 0000 0E940000          xcall push_gset2
 0004                   .dbline -1
 0004                   .dbline 18
 0004           ; #include "iom64v.h"
 0004           ; #define uchar unsigned char
 0004           ; #define START 0x08
 0004           ; #define MT_SLA_ACK 0x18
 0004           ; #define MT_DATA_ACK 0x28
 0004           ; #define MR_SLA_ACK 0x40
 0004           ; #define MR_DATA_ACK 0x50
 0004           ; 
 0004           ; #define TINT 0x80
 0004           ; #define TEA  0x40
 0004           ; #define TSTA 0x20
 0004           ; #define TSTO 0x10
 0004           ; #define TWC  0x08
 0004           ; #define TEN  0x04
 0004           ; #define TIE  0x01
 0004           ; 
 0004           ; uchar writeclock(uchar *clock_wb )
 0004           ; {
 0004                   .dbline 21
 0004           ;   uchar  sla_w,wordad,j;
 0004           ;   
 0004           ;  sla_w=0xa0;
 0004 60EA              ldi R22,160
 0006                   .dbline 22
 0006           ;  wordad=0x00;
 0006 4427              clr R20
 0008                   .dbline 23
 0008           ;  TWCR = (TWCR)|(TINT)|(TSTA)|(TEN);
 0008 80917400          lds R24,116
 000C 846A              ori R24,164
 000E 80937400          sts 116,R24
 0012           L2:
 0012                   .dbline 24
 0012           L3:
 0012                   .dbline 24
 0012           ;  while (!(TWCR &(TINT)));
 0012 20907400          lds R2,116
 0016 27FE              sbrs R2,7
 0018 FCCF              rjmp L2
 001A                   .dbline 26
 001A           ;  
 001A           ;  if ((TWSR & 0xF8) != START)
 001A 80917100          lds R24,113
 001E 887F              andi R24,248
 0020 8830              cpi R24,8
 0022 11F0              breq L5
 0024                   .dbline 27
 0024           ;  return 0;
 0024 0027              clr R16
 0026 46C0              xjmp L1
 0028           L5:
 0028                   .dbline 29
 0028           ;  
 0028           ; TWDR = sla_w;
 0028 60937300          sts 115,R22
 002C                   .dbline 30
 002C           ; TWCR = (TWCR)|(TINT)|(TEN);
 002C 80917400          lds R24,116
 0030 8468              ori R24,132
 0032 80937400          sts 116,R24
 0036           L7:
 0036                   .dbline 31
 0036           L8:
 0036                   .dbline 31
 0036           ; while (!(TWCR & (TINT)));
 0036 20907400          lds R2,116
 003A 27FE              sbrs R2,7
 003C FCCF              rjmp L7
 003E                   .dbline 33
 003E           ; 
 003E           ; if ((TWSR & 0xF8) != MT_SLA_ACK)
 003E 80917100          lds R24,113
 0042 887F              andi R24,248
 0044 8831              cpi R24,24
 0046 11F0              breq L10
 0048                   .dbline 34
 0048           ;  return 0;
 0048 0027              clr R16
 004A 34C0              xjmp L1
 004C           L10:
 004C                   .dbline 36
 004C           ;  
 004C           ; TWDR = wordad;
 004C 40937300          sts 115,R20
 0050                   .dbline 37
 0050           ; TWCR = (TWCR)|(TINT)|(TEN);
 0050 80917400          lds R24,116
 0054 8468              ori R24,132
 0056 80937400          sts 116,R24
 005A           L12:
 005A                   .dbline 38
 005A           L13:
 005A                   .dbline 38
 005A           ; while (!(TWCR & (TINT)));
 005A 20907400          lds R2,116
 005E 27FE              sbrs R2,7
 0060 FCCF              rjmp L12
 0062                   .dbline 40
 0062           ; 
 0062           ; if ((TWSR & 0xF8) != MT_DATA_ACK)
 0062 80917100          lds R24,113
 0066 887F              andi R24,248
 0068 8832              cpi R24,40
 006A 11F0              breq L15
 006C                   .dbline 41
 006C           ;  return 0;
 006C 0027              clr R16
 006E 22C0              xjmp L1
 0070           L15:
 0070                   .dbline 42
 0070           ; for(j=0;j<8;j++)
 0070 4427              clr R20
 0072 18C0              xjmp L20
 0074           L17:
 0074                   .dbline 43
 0074           ; {
 0074                   .dbline 44
 0074           ;  TWDR = clock_wb[j];
 0074 E42F              mov R30,R20
 0076 FF27              clr R31
 0078 E00F              add R30,R16
 007A F11F              adc R31,R17
 007C 2080              ldd R2,z+0
 007E 20927300          sts 115,R2
 0082                   .dbline 45
 0082           ;  TWCR = (TWCR)|(TINT)|(TEN);
 0082 80917400          lds R24,116
 0086 8468              ori R24,132
 0088 80937400          sts 116,R24
 008C           L21:
 008C                   .dbline 46
 008C           L22:
 008C                   .dbline 46
 008C           ;  while (!(TWCR & (TINT)));
 008C 20907400          lds R2,116
 0090 27FE              sbrs R2,7
 0092 FCCF              rjmp L21
 0094                   .dbline 48
 0094           ; 
 0094           ;  if ((TWSR & 0xF8) != MT_DATA_ACK)
 0094 80917100          lds R24,113
 0098 887F              andi R24,248
 009A 8832              cpi R24,40
 009C 11F0              breq L24
 009E                   .dbline 49
 009E           ;  return 0;
 009E 0027              clr R16
 00A0 09C0              xjmp L1
 00A2           L24:
 00A2                   .dbline 50
 00A2           L18:
 00A2                   .dbline 42
 00A2 4395              inc R20
 00A4           L20:
 00A4                   .dbline 42
 00A4 4830              cpi R20,8
 00A6 30F3              brlo L17
 00A8                   .dbline 52
 00A8           ; } 
 00A8           ; 
 00A8           ;  TWCR = (TWCR)|(TINT)|(TEN)|(TSTO); 
 00A8 80917400          lds R24,116
 00AC 8469              ori R24,148
 00AE 80937400          sts 116,R24
 00B2                   .dbline 54
 00B2           ; 
 00B2           ;  return 1;
 00B2 01E0              ldi R16,1
 00B4                   .dbline -2
 00B4           L1:
 00B4 0E940000          xcall pop_gset2
 00B8                   .dbline 0 ; func end
 00B8 0895              ret
 00BA                   .dbsym r wordad 20 c
 00BA                   .dbsym r sla_w 22 c
 00BA                   .dbsym r j 20 c
 00BA                   .dbsym r clock_wb 16 pc
 00BA                   .dbend
 00BA                   .dbfunc e readclock _readclock fc
 00BA           ;          sla_r -> R20
 00BA           ;         wordad -> R20
 00BA           ;          sla_w -> R22
 00BA           ;              j -> R20
 00BA           ;       clock_rb -> R16,R17
                        .even
 00BA           _readclock::
 00BA 0E940000          xcall push_gset2
 00BE                   .dbline -1
 00BE                   .dbline 58
 00BE           ; }
 00BE           ; 
 00BE           ; uchar readclock(uchar *clock_rb )
 00BE           ; {
 00BE                   .dbline 62
 00BE           ;   uchar  sla_r,j;
 00BE           ;   uchar  sla_w,wordad;
 00BE           ;   
 00BE           ;   sla_w=0xa0;
 00BE 60EA              ldi R22,160
 00C0                   .dbline 63
 00C0           ;   wordad=0x00;
 00C0 4427              clr R20
 00C2                   .dbline 65
 00C2           ;   
 00C2           ;   TWCR = (TWCR)|(TINT)|(TSTA)|(TEN);
 00C2 80917400          lds R24,116
 00C6 846A              ori R24,164
 00C8 80937400          sts 116,R24
 00CC           L27:
 00CC                   .dbline 66
 00CC           L28:
 00CC                   .dbline 66
 00CC           ;   while (!(TWCR & (TINT)));
 00CC 20907400          lds R2,116
 00D0 27FE              sbrs R2,7
 00D2 FCCF              rjmp L27
 00D4                   .dbline 68
 00D4           ;  
 00D4           ;   if ((TWSR & 0xF8) != START)
 00D4 80917100          lds R24,113
 00D8 887F              andi R24,248
 00DA 8830              cpi R24,8
 00DC 11F0              breq L30
 00DE                   .dbline 69
 00DE           ;   return 0;
 00DE 0027              clr R16
 00E0 67C0              xjmp L26
 00E2           L30:
 00E2                   .dbline 71
 00E2           ;  
 00E2           ;  TWDR = sla_w;
 00E2 60937300          sts 115,R22
 00E6                   .dbline 72
 00E6           ;  TWCR = (TWCR)|(TINT)|(TEN);
 00E6 80917400          lds R24,116
 00EA 8468              ori R24,132
 00EC 80937400          sts 116,R24
 00F0           L32:
 00F0                   .dbline 73
 00F0           L33:
 00F0                   .dbline 73
 00F0           ;  while (!(TWCR & (TINT)));
 00F0 20907400          lds R2,116
 00F4 27FE              sbrs R2,7
 00F6 FCCF              rjmp L32
 00F8                   .dbline 75
 00F8           ; 
 00F8           ;  if ((TWSR & 0xF8) != MT_SLA_ACK)
 00F8 80917100          lds R24,113
 00FC 887F              andi R24,248
 00FE 8831              cpi R24,24
 0100 11F0              breq L35
 0102                   .dbline 76
 0102           ;  return 0;
 0102 0027              clr R16
 0104 55C0              xjmp L26
 0106           L35:
 0106                   .dbline 79
 0106           ;  
 0106           ;  
 0106           ;  TWDR = wordad;
 0106 40937300          sts 115,R20
 010A                   .dbline 80
 010A           ;  TWCR = (TWCR)|(TINT)|(TEN);
 010A 80917400          lds R24,116
 010E 8468              ori R24,132
 0110 80937400          sts 116,R24
 0114           L37:
 0114                   .dbline 81
 0114           L38:
 0114                   .dbline 81
 0114           ;  while (!(TWCR & (TINT)));
 0114 20907400          lds R2,116
 0118 27FE              sbrs R2,7
 011A FCCF              rjmp L37
 011C                   .dbline 83
 011C           ; 
 011C           ;  if ((TWSR & 0xF8) != MT_DATA_ACK)
 011C 80917100          lds R24,113
 0120 887F              andi R24,248
 0122 8832              cpi R24,40
 0124 11F0              breq L40
 0126                   .dbline 84
 0126           ;  return 0;
 0126 0027              clr R16
 0128 43C0              xjmp L26
 012A           L40:
 012A                   .dbline 86
 012A           ;  
 012A           ;  TWCR = (TWCR)|(TINT)|(TSTA)|(TEN);
 012A 80917400          lds R24,116
 012E 846A              ori R24,164
 0130 80937400          sts 116,R24
 0134           L42:
 0134                   .dbline 87
 0134           L43:
 0134                   .dbline 87
 0134           ;   while (!(TWCR & (TINT)));
 0134 20907400          lds R2,116
 0138 27FE              sbrs R2,7
 013A FCCF              rjmp L42
 013C                   .dbline 89
 013C           ;  
 013C           ;   if ((TWSR & 0xF8) != START)
 013C 80917100          lds R24,113
 0140 887F              andi R24,248
 0142 8830              cpi R24,8
 0144 11F0              breq L45
 0146                   .dbline 90
 0146           ;   return 0;
 0146 0027              clr R16
 0148 33C0              xjmp L26
 014A           L45:
 014A                   .dbline 92
 014A           ;   
 014A           ;   sla_r=0xa1;
 014A 41EA              ldi R20,161
 014C                   .dbline 93
 014C           ;  TWCR = (TWCR)|(TINT)|(TEN);
 014C 80917400          lds R24,116
 0150 8468              ori R24,132
 0152 80937400          sts 116,R24
 0156           L47:
 0156                   .dbline 94
 0156           L48:
 0156                   .dbline 94
 0156           ;  while (!(TWCR & (TINT)));
 0156 20907400          lds R2,116
 015A 27FE              sbrs R2,7
 015C FCCF              rjmp L47
 015E                   .dbline 96
 015E           ; 
 015E           ;  if ((TWSR & 0xF8) != MR_SLA_ACK)
 015E 80917100          lds R24,113
 0162 887F              andi R24,248
 0164 8034              cpi R24,64
 0166 11F0              breq L50
 0168                   .dbline 97
 0168           ;  return 0;
 0168 0027              clr R16
 016A 22C0              xjmp L26
 016C           L50:
 016C                   .dbline 99
 016C           ;   
 016C           ;  for(j=0;j<8;j++)
 016C 4427              clr R20
 016E 18C0              xjmp L55
 0170           L52:
 0170                   .dbline 100
 0170           ;  {
 0170                   .dbline 101
 0170           ;   TWCR = (TWCR)|(TINT)|(TEN)|(TEA);       
 0170 80917400          lds R24,116
 0174 846C              ori R24,196
 0176 80937400          sts 116,R24
 017A           L56:
 017A                   .dbline 102
 017A           L57:
 017A                   .dbline 102
 017A           ;   while (!(TWCR & (TINT)));
 017A 20907400          lds R2,116
 017E 27FE              sbrs R2,7
 0180 FCCF              rjmp L56
 0182                   .dbline 103
 0182           ;   if ((TWSR & 0xF8) != MR_DATA_ACK)
 0182 80917100          lds R24,113
 0186 887F              andi R24,248
 0188 8035              cpi R24,80
 018A 11F0              breq L59
 018C                   .dbline 104
 018C           ;   return 0;
 018C 0027              clr R16
 018E 10C0              xjmp L26
 0190           L59:
 0190                   .dbline 106
 0190 E42F              mov R30,R20
 0192 FF27              clr R31
 0194 E00F              add R30,R16
 0196 F11F              adc R31,R17
 0198 2080              ldd R2,z+0
 019A 20927300          sts 115,R2
 019E                   .dbline 108
 019E           L53:
 019E                   .dbline 99
 019E 4395              inc R20
 01A0           L55:
 01A0                   .dbline 99
 01A0 4830              cpi R20,8
 01A2 30F3              brlo L52
 01A4                   .dbline 110
 01A4           ;   
 01A4           ;   TWDR = clock_rb[j];
 01A4           ;   
 01A4           ;  } 
 01A4           ;   
 01A4           ;  TWCR = (TWCR)|(TINT)|(TEN)|(TSTO);                                                                                                                                                            
 01A4 80917400          lds R24,116
 01A8 8469              ori R24,148
 01AA 80937400          sts 116,R24
 01AE                   .dbline 111
 01AE           ;  return 1;
 01AE 01E0              ldi R16,1
 01B0                   .dbline -2
 01B0           L26:
 01B0 0E940000          xcall pop_gset2
 01B4                   .dbline 0 ; func end
 01B4 0895              ret
 01B6                   .dbsym r sla_r 20 c
 01B6                   .dbsym r wordad 20 c
 01B6                   .dbsym r sla_w 22 c
 01B6                   .dbsym r j 20 c
 01B6                   .dbsym r clock_rb 16 pc
 01B6                   .dbend

⌨️ 快捷键说明

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