📄 clock.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 + -