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

📄 twi.lis

📁 数码管 按键芯片zlg7290的atmega128 的c语言程序
💻 LIS
📖 第 1 页 / 共 2 页
字号:
 00AE 7B85              ldd R23,y+11
 00B0                   .dbline -1
 00B0                   .dbline 106
 00B0           ; }
 00B0           ; 
 00B0           ; /*
 00B0           ; 函数:TWI_page_write()
 00B0           ; 功能:I2C总线综合发送函数,向从机发送多个字节的数据,整页发送
 00B0           ; 参数:
 00B0           ;       SlaveAddr:从机地址(7位纯地址,不含读写位)
 00B0           ;       addr:从机的子地址
 00B0           ;       *arr:要发送的数据
 00B0           ;          n:数据的字节数
 00B0           ; 返回:
 00B0           ;       1:发送成功
 00B0           ;       0:在发送过程中出现异常
 00B0           ; 说明:
 00B0           ;       本函数能够很好地适应所有常见的I2C器件,不论其是否有子地址
 00B0           ;       当从机没有子地址时,参数addr任意
 00B0           ; */
 00B0           ; uchar TWI_page_write(uchar devadd,uchar addr,uchar n,uchar *arr)//
 00B0           ; {
 00B0                   .dbline 108
 00B0           ;     uchar i;
 00B0           ;       TWI_start();
 00B0 C5DF              xcall _TWI_start
 00B2                   .dbline 109
 00B2           ;       TWI_writeB(devadd);
 00B2 0C2D              mov R16,R12
 00B4 D0DF              xcall _TWI_writeB
 00B6                   .dbline 110
 00B6           ;       TWI_writeB(addr);
 00B6 042F              mov R16,R20
 00B8 CEDF              xcall _TWI_writeB
 00BA                   .dbline 111
 00BA           ;       for(i=1;i<=n;i++)
 00BA 41E0              ldi R20,1
 00BC 06C0              xjmp L32
 00BE           L29:
 00BE                   .dbline 112
 00BE                   .dbline 115
 00BE FB01              movw R30,R22
 00C0 0081              ldd R16,z+0
 00C2 C9DF              xcall _TWI_writeB
 00C4                   .dbline 116
 00C4 6F5F              subi R22,255  ; offset = 1
 00C6 7F4F              sbci R23,255
 00C8                   .dbline 117
 00C8           L30:
 00C8                   .dbline 111
 00C8 4395              inc R20
 00CA           L32:
 00CA                   .dbline 111
 00CA A416              cp R10,R20
 00CC C0F7              brsh L29
 00CE                   .dbline 118
 00CE           ;        {
 00CE           ;          //TWI_writeB(i);
 00CE           ;          //table[i]=i;
 00CE           ;          TWI_writeB(*arr);
 00CE           ;          arr++;
 00CE           ;        }
 00CE           ;       TWI_stop();
 00CE BFDF              xcall _TWI_stop
 00D0                   .dbline 119
 00D0           ;       delay(80);
 00D0 00E5              ldi R16,80
 00D2 10E0              ldi R17,0
 00D4 95DF              xcall _delay
 00D6                   .dbline -2
 00D6                   .dbline 120
 00D6           ; }
 00D6           L28:
 00D6 0E940000          xcall pop_gset4
 00DA                   .dbline 0 ; func end
 00DA 0895              ret
 00DC                   .dbsym r i 20 c
 00DC                   .dbsym r arr 22 pc
 00DC                   .dbsym r n 10 c
 00DC                   .dbsym r addr 20 c
 00DC                   .dbsym r devadd 12 c
 00DC                   .dbend
 00DC                   .dbfunc e TWI_write _TWI_write fc
 00DC           ;          n_tmp -> R14
 00DC           ;            arr -> R20,R21
 00DC           ;              n -> R22
 00DC           ;           addr -> R10
 00DC           ;         devadd -> R12
                        .even
 00DC           _TWI_write::
 00DC 0E940000          xcall push_gset5
 00E0 A22E              mov R10,R18
 00E2 C02E              mov R12,R16
 00E4 2497              sbiw R28,4
 00E6 6E85              ldd R22,y+14
 00E8 4889              ldd R20,y+16
 00EA 5989              ldd R21,y+17
 00EC                   .dbline -1
 00EC                   .dbline 138
 00EC           ; 
 00EC           ; /*
 00EC           ; 函数:TWI_page_write()
 00EC           ; 功能:I2C总线综合发送函数,向从机发送多个字节的数据
 00EC           ; 参数:
 00EC           ;       SlaveAddr:从机地址(7位纯地址,不含读写位)
 00EC           ;       addr:从机的子地址
 00EC           ;       *arr:要发送的数据
 00EC           ;          n:数据的字节数
 00EC           ; 返回:
 00EC           ;       1:发送成功
 00EC           ;       0:在发送过程中出现异常
 00EC           ; 说明:
 00EC           ;       本函数能够很好地适应所有常见的I2C器件,不论其是否有子地址
 00EC           ;       当从机没有子地址时,参数addr任意
 00EC           ; */
 00EC           ; uchar TWI_write(uchar devadd,uchar addr,uchar n,uchar *arr)//
 00EC           ; {
 00EC                   .dbline 140
 00EC           ;     uchar n_tmp;
 00EC           ;       n_tmp=Page_size-(uchar)(addr&Page_mask);
 00EC 8A2D              mov R24,R10
 00EE 9927              clr R25
 00F0 8770              andi R24,7
 00F2 9070              andi R25,0
 00F4 98E0              ldi R25,8
 00F6 E92E              mov R14,R25
 00F8 E81A              sub R14,R24
 00FA                   .dbline 141
 00FA           ;       if((n>n_tmp)&&(n_tmp!=0))
 00FA E616              cp R14,R22
 00FC E0F4              brsh L37
 00FE EE20              tst R14
 0100 D1F0              breq L37
 0102                   .dbline 142
 0102           ;        {
 0102                   .dbline 143
 0102           ;          TWI_page_write(devadd,addr,n_tmp,arr);//
 0102 4A83              std y+2,R20
 0104 5B83              std y+3,R21
 0106 E882              std y+0,R14
 0108 2A2D              mov R18,R10
 010A 0C2D              mov R16,R12
 010C CADF              xcall _TWI_page_write
 010E                   .dbline 144
 010E           ;          addr+=n_tmp;
 010E AE0C              add R10,R14
 0110                   .dbline 145
 0110           ;          n-=n_tmp;
 0110 6E19              sub R22,R14
 0112                   .dbline 146
 0112           ;          arr+=n_tmp;
 0112 2E2C              mov R2,R14
 0114 3324              clr R3
 0116 420D              add R20,R2
 0118 531D              adc R21,R3
 011A                   .dbline 147
 011A           ;        }
 011A 0DC0              xjmp L37
 011C           L36:
 011C                   .dbline 149
 011C                   .dbline 150
 011C 4A83              std y+2,R20
 011E 5B83              std y+3,R21
 0120 88E0              ldi R24,8
 0122 8883              std y+0,R24
 0124 2A2D              mov R18,R10
 0126 0C2D              mov R16,R12
 0128 BCDF              xcall _TWI_page_write
 012A                   .dbline 151
 012A 8A2D              mov R24,R10
 012C 885F              subi R24,248    ; addi 8
 012E A82E              mov R10,R24
 0130                   .dbline 152
 0130 6850              subi R22,8
 0132                   .dbline 153
 0132 485F              subi R20,248  ; offset = 8
 0134 5F4F              sbci R21,255
 0136                   .dbline 154
 0136           L37:
 0136                   .dbline 148
 0136 6830              cpi R22,8
 0138 88F7              brsh L36
 013A                   .dbline 155
 013A 6623              tst R22
 013C 31F0              breq L39
 013E                   .dbline 156
 013E 4A83              std y+2,R20
 0140 5B83              std y+3,R21
 0142 6883              std y+0,R22
 0144 2A2D              mov R18,R10
 0146 0C2D              mov R16,R12
 0148 ACDF              xcall _TWI_page_write
 014A           L39:
 014A                   .dbline -2
 014A                   .dbline 157
 014A           ;       while(n>=Page_size)
 014A           ;        {
 014A           ;          TWI_page_write(devadd,addr,Page_size,arr);//
 014A           ;          addr+=Page_size;
 014A           ;          n-=Page_size;
 014A           ;          arr+=Page_size;
 014A           ;        }
 014A           ;       if(n!=0)
 014A           ;          TWI_page_write(devadd,addr,n,arr);//
 014A           ; }
 014A           L33:
 014A 2496              adiw R28,4
 014C 0E940000          xcall pop_gset5
 0150                   .dbline 0 ; func end
 0150 0895              ret
 0152                   .dbsym r n_tmp 14 c
 0152                   .dbsym r arr 20 pc
 0152                   .dbsym r n 22 c
 0152                   .dbsym r addr 10 c
 0152                   .dbsym r devadd 12 c
 0152                   .dbend
 0152                   .dbfunc e TWI_read _TWI_read fc
 0152           ;              i -> R20
 0152           ;            arr -> R22,R23
 0152           ;              n -> R10
 0152           ;           addr -> R12
 0152           ;         devadd -> R20
                        .even
 0152           _TWI_read::
 0152 0E940000          xcall push_gset4
 0156 C22E              mov R12,R18
 0158 402F              mov R20,R16
 015A A884              ldd R10,y+8
 015C 6A85              ldd R22,y+10
 015E 7B85              ldd R23,y+11
 0160                   .dbline -1
 0160                   .dbline 175
 0160           ; 
 0160           ; /*
 0160           ; 函数:TWI_read()
 0160           ; 功能:I2C总线综合接收函数,从从机接收多个字节的数据
 0160           ; 参数:
 0160           ;       SlaveAddr:从机地址(7位纯地址,不含读写位)
 0160           ;       addr:从机的子地址
 0160           ;       *arr:要发送的数据
 0160           ;          n:数据的字节数
 0160           ; 返回:
 0160           ;       1:接收成功
 0160           ;       0:在接收过程中出现异常
 0160           ; 说明:
 0160           ;       本函数能够很好地适应所有常见的I2C器件,不论其是否有子地址
 0160           ;       当从机没有子地址时,参数addr任意
 0160           ; */
 0160           ; uchar TWI_read(uchar devadd,uchar addr,uchar n,uchar *arr)
 0160           ; {
 0160                   .dbline 177
 0160           ;     uchar i;
 0160           ;       TWI_start();
 0160 6DDF              xcall _TWI_start
 0162                   .dbline 178
 0162           ;       TWI_writeB(devadd);
 0162 042F              mov R16,R20
 0164 78DF              xcall _TWI_writeB
 0166                   .dbline 179
 0166           ;       TWI_writeB(addr);
 0166 0C2D              mov R16,R12
 0168 76DF              xcall _TWI_writeB
 016A                   .dbline 180
 016A           ;       TWI_start();
 016A 68DF              xcall _TWI_start
 016C                   .dbline 181
 016C           ;       TWI_writeB(devadd|1);
 016C 042F              mov R16,R20
 016E 0160              ori R16,1
 0170 72DF              xcall _TWI_writeB
 0172                   .dbline 182
 0172           ;       for(i=1;i<=n-1;i++)
 0172 41E0              ldi R20,1
 0174 07C0              xjmp L45
 0176           L42:
 0176                   .dbline 183
 0176                   .dbline 184
 0176 01E0              ldi R16,1
 0178 84DF              xcall _TWI_readB
 017A FB01              movw R30,R22
 017C 0083              std z+0,R16
 017E                   .dbline 185
 017E 6F5F              subi R22,255  ; offset = 1
 0180 7F4F              sbci R23,255
 0182                   .dbline 186
 0182           L43:
 0182                   .dbline 182
 0182 4395              inc R20
 0184           L45:
 0184                   .dbline 182
 0184 8A2D              mov R24,R10
 0186 8150              subi R24,1
 0188 8417              cp R24,R20
 018A A8F7              brsh L42
 018C                   .dbline 187
 018C           ;        {
 018C           ;         *arr= TWI_readB(1);
 018C           ;          arr++;
 018C           ;        }
 018C           ;         *arr= TWI_readB(0);
 018C 0027              clr R16
 018E 79DF              xcall _TWI_readB
 0190 FB01              movw R30,R22
 0192 0083              std z+0,R16
 0194                   .dbline 188
 0194           ;         TWI_stop();
 0194 5CDF              xcall _TWI_stop
 0196                   .dbline -2
 0196                   .dbline 189
 0196           ; }
 0196           L41:
 0196 0E940000          xcall pop_gset4
 019A                   .dbline 0 ; func end
 019A 0895              ret
 019C                   .dbsym r i 20 c
 019C                   .dbsym r arr 22 pc
 019C                   .dbsym r n 10 c
 019C                   .dbsym r addr 12 c
 019C                   .dbsym r devadd 20 c
 019C                   .dbend

⌨️ 快捷键说明

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