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

📄 twi.lis

📁 avr单片机atmage16驱动小灯的一些例程 并且包括一些收发数据的程序利用usb口
💻 LIS
📖 第 1 页 / 共 2 页
字号:
 00D2 03C0              xjmp L12
 00D4           L31:
 00D4                   .dbline 79
 00D4           ;               }
 00D4           ;       
 00D4           ;       /*stop 停止*/
 00D4           ;       TWCR = (1 << TWINT) | (1 << TWEN) | (1 << TWSTO);
 00D4 84E9              ldi R24,148
 00D6 86BF              out 0x36,R24
 00D8                   .dbline 80
 00D8           ;       return 1;
 00D8 01E0              ldi R16,1
 00DA                   .dbline -2
 00DA           L12:
 00DA 0E940000          xcall pop_gset2
 00DE                   .dbline 0 ; func end
 00DE 0895              ret
 00E0                   .dbsym r dd 20 c
 00E0                   .dbsym r addr 22 c
 00E0                   .dbend
 00E0                   .dbfunc e twi_read _twi_read fc
 00E0           ;             dd -> R20,R21
 00E0           ;           addr -> R22
                        .even
 00E0           _twi_read::
 00E0 0E940000          xcall push_gset2
 00E4 A901              movw R20,R18
 00E6 602F              mov R22,R16
 00E8                   .dbline -1
 00E8                   .dbline 84
 00E8           ; }
 00E8           ; 
 00E8           ; /*I2C总线单字节读取*/
 00E8           ; unsigned char twi_read(unsigned char addr, unsigned char *dd) {
 00E8                   .dbline 86
 00E8           ; 
 00E8           ;       TWBR = 2;
 00E8 82E0              ldi R24,2
 00EA 80B9              out 0x0,R24
 00EC                   .dbline 89
 00EC           ; 
 00EC           ;       /*start 启动*/
 00EC           ;       TWCR=(1<<TWINT)|(1<<TWSTA)|(1<<TWEN);
 00EC 84EA              ldi R24,164
 00EE 86BF              out 0x36,R24
 00F0           L34:
 00F0                   .dbline 90
 00F0           L35:
 00F0                   .dbline 90
 00F0           ;       while(!(TWCR&(1<<TWINT)));
 00F0 26B6              in R2,0x36
 00F2 27FE              sbrs R2,7
 00F4 FDCF              rjmp L34
 00F6                   .dbline 91
 00F6           ;       if ((TWSR & 0xF8) != 0x08) {
 00F6 81B1              in R24,0x1
 00F8 887F              andi R24,248
 00FA 8830              cpi R24,8
 00FC 21F0              breq L37
 00FE                   .dbline 91
 00FE                   .dbline 92
 00FE           ;               error(TWSR);
 00FE 01B1              in R16,0x1
 0100 7FDF              xcall _error
 0102                   .dbline 93
 0102           ;               return 0;
 0102 0027              clr R16
 0104 4CC0              xjmp L33
 0106           L37:
 0106                   .dbline 97
 0106           ;               }
 0106           ; 
 0106           ;       /*SLA_W 芯片地址*/
 0106           ;       TWDR = 0xA0;
 0106 80EA              ldi R24,160
 0108 83B9              out 0x3,R24
 010A                   .dbline 98
 010A           ;       TWCR = (1 << TWINT) | (1 << TWEN);
 010A 84E8              ldi R24,132
 010C 86BF              out 0x36,R24
 010E           L39:
 010E                   .dbline 99
 010E           L40:
 010E                   .dbline 99
 010E           ;       while (!(TWCR & (1 << TWINT)));
 010E 26B6              in R2,0x36
 0110 27FE              sbrs R2,7
 0112 FDCF              rjmp L39
 0114                   .dbline 100
 0114           ;       if ((TWSR & 0xF8) != 0x18) {
 0114 81B1              in R24,0x1
 0116 887F              andi R24,248
 0118 8831              cpi R24,24
 011A 21F0              breq L42
 011C                   .dbline 100
 011C                   .dbline 101
 011C           ;               error(TWSR);
 011C 01B1              in R16,0x1
 011E 70DF              xcall _error
 0120                   .dbline 102
 0120           ;               return 0;
 0120 0027              clr R16
 0122 3DC0              xjmp L33
 0124           L42:
 0124                   .dbline 106
 0124           ;               }
 0124           ; 
 0124           ;       /*addr 操作地址*/
 0124           ;       TWDR = addr;
 0124 63B9              out 0x3,R22
 0126                   .dbline 107
 0126           ;       TWCR = (1 << TWINT) | (1 << TWEN);
 0126 84E8              ldi R24,132
 0128 86BF              out 0x36,R24
 012A           L44:
 012A                   .dbline 108
 012A           L45:
 012A                   .dbline 108
 012A           ;       while (!(TWCR & (1 << TWINT)));
 012A 26B6              in R2,0x36
 012C 27FE              sbrs R2,7
 012E FDCF              rjmp L44
 0130                   .dbline 109
 0130           ;       if ((TWSR & 0xF8) != 0x28) {
 0130 81B1              in R24,0x1
 0132 887F              andi R24,248
 0134 8832              cpi R24,40
 0136 21F0              breq L47
 0138                   .dbline 109
 0138                   .dbline 110
 0138           ;               error(TWSR);
 0138 01B1              in R16,0x1
 013A 62DF              xcall _error
 013C                   .dbline 111
 013C           ;               return 0;
 013C 0027              clr R16
 013E 2FC0              xjmp L33
 0140           L47:
 0140                   .dbline 115
 0140           ;               }
 0140           ;               
 0140           ;       /*start 启动*/
 0140           ;       TWCR = (1 << TWINT) | (1 << TWSTA) | (1 << TWEN);
 0140 84EA              ldi R24,164
 0142 86BF              out 0x36,R24
 0144           L49:
 0144                   .dbline 116
 0144           L50:
 0144                   .dbline 116
 0144           ;       while (!(TWCR & (1 << TWINT)));
 0144 26B6              in R2,0x36
 0146 27FE              sbrs R2,7
 0148 FDCF              rjmp L49
 014A                   .dbline 117
 014A           ;       if ((TWSR & 0xF8) != 0x10) {
 014A 81B1              in R24,0x1
 014C 887F              andi R24,248
 014E 8031              cpi R24,16
 0150 21F0              breq L52
 0152                   .dbline 117
 0152                   .dbline 118
 0152           ;               error(TWSR);
 0152 01B1              in R16,0x1
 0154 55DF              xcall _error
 0156                   .dbline 119
 0156           ;               return 0;
 0156 0027              clr R16
 0158 22C0              xjmp L33
 015A           L52:
 015A                   .dbline 123
 015A           ;               }
 015A           ;       
 015A           ;       /*SLA_R 芯片地址*/
 015A           ;       TWDR = 0xA1;
 015A 81EA              ldi R24,161
 015C 83B9              out 0x3,R24
 015E                   .dbline 124
 015E           ;       TWCR = (1 << TWINT) | (1 << TWEN);
 015E 84E8              ldi R24,132
 0160 86BF              out 0x36,R24
 0162           L54:
 0162                   .dbline 125
 0162           L55:
 0162                   .dbline 125
 0162           ;       while (!(TWCR & (1 << TWINT)));
 0162 26B6              in R2,0x36
 0164 27FE              sbrs R2,7
 0166 FDCF              rjmp L54
 0168                   .dbline 126
 0168           ;       if ((TWSR & 0xF8) != 0x40) {
 0168 81B1              in R24,0x1
 016A 887F              andi R24,248
 016C 8034              cpi R24,64
 016E 21F0              breq L57
 0170                   .dbline 126
 0170                   .dbline 127
 0170           ;               error(TWSR);
 0170 01B1              in R16,0x1
 0172 46DF              xcall _error
 0174                   .dbline 128
 0174           ;               return 0;
 0174 0027              clr R16
 0176 13C0              xjmp L33
 0178           L57:
 0178                   .dbline 132
 0178           ;               }
 0178           ; 
 0178           ;       /*读取数据*/
 0178           ;       TWCR = (1 << TWINT) | (1 << TWEN);
 0178 84E8              ldi R24,132
 017A 86BF              out 0x36,R24
 017C           L59:
 017C                   .dbline 133
 017C           L60:
 017C                   .dbline 133
 017C           ;       while (!(TWCR & (1 << TWINT)));
 017C 26B6              in R2,0x36
 017E 27FE              sbrs R2,7
 0180 FDCF              rjmp L59
 0182                   .dbline 134
 0182           ;       if ((TWSR & 0xF8) != 0x58) {
 0182 81B1              in R24,0x1
 0184 887F              andi R24,248
 0186 8835              cpi R24,88
 0188 21F0              breq L62
 018A                   .dbline 134
 018A                   .dbline 135
 018A           ;               error(TWSR);
 018A 01B1              in R16,0x1
 018C 39DF              xcall _error
 018E                   .dbline 136
 018E           ;               return 0;
 018E 0027              clr R16
 0190 06C0              xjmp L33
 0192           L62:
 0192                   .dbline 138
 0192           ;               }
 0192           ;       *dd = TWDR;
 0192 23B0              in R2,0x3
 0194 FA01              movw R30,R20
 0196 2082              std z+0,R2
 0198                   .dbline 141
 0198           ;               
 0198           ;       /*stop 停止*/
 0198           ;       TWCR = (1 << TWINT) | (1 << TWSTO) | (1 << TWEN);
 0198 84E9              ldi R24,148
 019A 86BF              out 0x36,R24
 019C                   .dbline 142
 019C           ;       return 1;
 019C 01E0              ldi R16,1
 019E                   .dbline -2
 019E           L33:
 019E 0E940000          xcall pop_gset2
 01A2                   .dbline 0 ; func end
 01A2 0895              ret
 01A4                   .dbsym r dd 20 pc
 01A4                   .dbsym r addr 22 c
 01A4                   .dbend

⌨️ 快捷键说明

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