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

📄 twi.lis

📁 用AVR单片机做的一些程序,包括跑马灯显示,PWM产生,ADC转换等
💻 LIS
📖 第 1 页 / 共 2 页
字号:
 0100 04C0              xjmp L12
 0102           L31:
 0102                   .dbline 79
 0102           ;               }
 0102           ;       
 0102           ;       /*stop 停止*/
 0102           ;       TWCR = (1 << TWINT) | (1 << TWEN) | (1 << TWSTO);
 0102 84E9              ldi R24,148
 0104 80937400          sts 116,R24
 0108                   .dbline 80
 0108           ;       return 1;
 0108 01E0              ldi R16,1
 010A                   .dbline -2
 010A           L12:
 010A 0E940000          xcall pop_gset2
 010E                   .dbline 0 ; func end
 010E 0895              ret
 0110                   .dbsym r dd 20 c
 0110                   .dbsym r addr 22 c
 0110                   .dbend
 0110                   .dbfunc e twi_read _twi_read fc
 0110           ;             dd -> R20,R21
 0110           ;           addr -> R22
                        .even
 0110           _twi_read::
 0110 0E940000          xcall push_gset2
 0114 A901              movw R20,R18
 0116 602F              mov R22,R16
 0118                   .dbline -1
 0118                   .dbline 84
 0118           ; }
 0118           ; 
 0118           ; /*I2C总线单字节读取*/
 0118           ; unsigned char twi_read(unsigned char addr, unsigned char *dd) {
 0118                   .dbline 86
 0118           ; 
 0118           ;       TWBR = 2;
 0118 82E0              ldi R24,2
 011A 80937000          sts 112,R24
 011E                   .dbline 89
 011E           ; 
 011E           ;       /*start 启动*/
 011E           ;       TWCR=(1<<TWINT)|(1<<TWSTA)|(1<<TWEN);
 011E 84EA              ldi R24,164
 0120 80937400          sts 116,R24
 0124           L34:
 0124                   .dbline 90
 0124           L35:
 0124                   .dbline 90
 0124           ;       while(!(TWCR&(1<<TWINT)));
 0124 20907400          lds R2,116
 0128 27FE              sbrs R2,7
 012A FCCF              rjmp L34
 012C                   .dbline 91
 012C           ;       if ((TWSR & 0xF8) != 0x08) {
 012C 80917100          lds R24,113
 0130 887F              andi R24,248
 0132 8830              cpi R24,8
 0134 29F0              breq L37
 0136                   .dbline 91
 0136                   .dbline 92
 0136           ;               error(TWSR);
 0136 00917100          lds R16,113
 013A 62DF              xcall _error
 013C                   .dbline 93
 013C           ;               return 0;
 013C 0027              clr R16
 013E 65C0              xjmp L33
 0140           L37:
 0140                   .dbline 97
 0140           ;               }
 0140           ; 
 0140           ;       /*SLA_W 芯片地址*/
 0140           ;       TWDR = 0xA0;
 0140 80EA              ldi R24,160
 0142 80937300          sts 115,R24
 0146                   .dbline 98
 0146           ;       TWCR = (1 << TWINT) | (1 << TWEN);
 0146 84E8              ldi R24,132
 0148 80937400          sts 116,R24
 014C           L39:
 014C                   .dbline 99
 014C           L40:
 014C                   .dbline 99
 014C           ;       while (!(TWCR & (1 << TWINT)));
 014C 20907400          lds R2,116
 0150 27FE              sbrs R2,7
 0152 FCCF              rjmp L39
 0154                   .dbline 100
 0154           ;       if ((TWSR & 0xF8) != 0x18) {
 0154 80917100          lds R24,113
 0158 887F              andi R24,248
 015A 8831              cpi R24,24
 015C 29F0              breq L42
 015E                   .dbline 100
 015E                   .dbline 101
 015E           ;               error(TWSR);
 015E 00917100          lds R16,113
 0162 4EDF              xcall _error
 0164                   .dbline 102
 0164           ;               return 0;
 0164 0027              clr R16
 0166 51C0              xjmp L33
 0168           L42:
 0168                   .dbline 106
 0168           ;               }
 0168           ; 
 0168           ;       /*addr 操作地址*/
 0168           ;       TWDR = addr;
 0168 60937300          sts 115,R22
 016C                   .dbline 107
 016C           ;       TWCR = (1 << TWINT) | (1 << TWEN);
 016C 84E8              ldi R24,132
 016E 80937400          sts 116,R24
 0172           L44:
 0172                   .dbline 108
 0172           L45:
 0172                   .dbline 108
 0172           ;       while (!(TWCR & (1 << TWINT)));
 0172 20907400          lds R2,116
 0176 27FE              sbrs R2,7
 0178 FCCF              rjmp L44
 017A                   .dbline 109
 017A           ;       if ((TWSR & 0xF8) != 0x28) {
 017A 80917100          lds R24,113
 017E 887F              andi R24,248
 0180 8832              cpi R24,40
 0182 29F0              breq L47
 0184                   .dbline 109
 0184                   .dbline 110
 0184           ;               error(TWSR);
 0184 00917100          lds R16,113
 0188 3BDF              xcall _error
 018A                   .dbline 111
 018A           ;               return 0;
 018A 0027              clr R16
 018C 3EC0              xjmp L33
 018E           L47:
 018E                   .dbline 115
 018E           ;               }
 018E           ;               
 018E           ;       /*start 启动*/
 018E           ;       TWCR = (1 << TWINT) | (1 << TWSTA) | (1 << TWEN);
 018E 84EA              ldi R24,164
 0190 80937400          sts 116,R24
 0194           L49:
 0194                   .dbline 116
 0194           L50:
 0194                   .dbline 116
 0194           ;       while (!(TWCR & (1 << TWINT)));
 0194 20907400          lds R2,116
 0198 27FE              sbrs R2,7
 019A FCCF              rjmp L49
 019C                   .dbline 117
 019C           ;       if ((TWSR & 0xF8) != 0x10) {
 019C 80917100          lds R24,113
 01A0 887F              andi R24,248
 01A2 8031              cpi R24,16
 01A4 29F0              breq L52
 01A6                   .dbline 117
 01A6                   .dbline 118
 01A6           ;               error(TWSR);
 01A6 00917100          lds R16,113
 01AA 2ADF              xcall _error
 01AC                   .dbline 119
 01AC           ;               return 0;
 01AC 0027              clr R16
 01AE 2DC0              xjmp L33
 01B0           L52:
 01B0                   .dbline 123
 01B0           ;               }
 01B0           ;       
 01B0           ;       /*SLA_R 芯片地址*/
 01B0           ;       TWDR = 0xA1;
 01B0 81EA              ldi R24,161
 01B2 80937300          sts 115,R24
 01B6                   .dbline 124
 01B6           ;       TWCR = (1 << TWINT) | (1 << TWEN);
 01B6 84E8              ldi R24,132
 01B8 80937400          sts 116,R24
 01BC           L54:
 01BC                   .dbline 125
 01BC           L55:
 01BC                   .dbline 125
 01BC           ;       while (!(TWCR & (1 << TWINT)));
 01BC 20907400          lds R2,116
 01C0 27FE              sbrs R2,7
 01C2 FCCF              rjmp L54
 01C4                   .dbline 126
 01C4           ;       if ((TWSR & 0xF8) != 0x40) {
 01C4 80917100          lds R24,113
 01C8 887F              andi R24,248
 01CA 8034              cpi R24,64
 01CC 29F0              breq L57
 01CE                   .dbline 126
 01CE                   .dbline 127
 01CE           ;               error(TWSR);
 01CE 00917100          lds R16,113
 01D2 16DF              xcall _error
 01D4                   .dbline 128
 01D4           ;               return 0;
 01D4 0027              clr R16
 01D6 19C0              xjmp L33
 01D8           L57:
 01D8                   .dbline 132
 01D8           ;               }
 01D8           ; 
 01D8           ;       /*读取数据*/
 01D8           ;       TWCR = (1 << TWINT) | (1 << TWEN);
 01D8 84E8              ldi R24,132
 01DA 80937400          sts 116,R24
 01DE           L59:
 01DE                   .dbline 133
 01DE           L60:
 01DE                   .dbline 133
 01DE           ;       while (!(TWCR & (1 << TWINT)));
 01DE 20907400          lds R2,116
 01E2 27FE              sbrs R2,7
 01E4 FCCF              rjmp L59
 01E6                   .dbline 134
 01E6           ;       if ((TWSR & 0xF8) != 0x58) {
 01E6 80917100          lds R24,113
 01EA 887F              andi R24,248
 01EC 8835              cpi R24,88
 01EE 29F0              breq L62
 01F0                   .dbline 134
 01F0                   .dbline 135
 01F0           ;               error(TWSR);
 01F0 00917100          lds R16,113
 01F4 05DF              xcall _error
 01F6                   .dbline 136
 01F6           ;               return 0;
 01F6 0027              clr R16
 01F8 08C0              xjmp L33
 01FA           L62:
 01FA                   .dbline 138
 01FA           ;               }
 01FA           ;       *dd = TWDR;
 01FA 20907300          lds R2,115
 01FE FA01              movw R30,R20
 0200 2082              std z+0,R2
 0202                   .dbline 141
 0202           ;               
 0202           ;       /*stop 停止*/
 0202           ;       TWCR = (1 << TWINT) | (1 << TWSTO) | (1 << TWEN);
 0202 84E9              ldi R24,148
 0204 80937400          sts 116,R24
 0208                   .dbline 142
 0208           ;       return 1;
 0208 01E0              ldi R16,1
 020A                   .dbline -2
 020A           L33:
 020A 0E940000          xcall pop_gset2
 020E                   .dbline 0 ; func end
 020E 0895              ret
 0210                   .dbsym r dd 20 pc
 0210                   .dbsym r addr 22 c
 0210                   .dbend

⌨️ 快捷键说明

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