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

📄 communication.lis

📁 基于PIC单片机
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 02C6 9707              cpc R25,R23
 02C8 44F4              brge L115
 02CA                   .dbline 226
 02CA           ;           {  
 02CA                   .dbline 227
 02CA           ;                    wdr();
 02CA 0E940000          xcall _wdr
 02CE                   .dbline 228
 02CE           ;                tcounter=0;
 02CE 6627              clr R22
 02D0 7727              clr R23
 02D2                   .dbline 229
 02D2           ;                errorflag=1;    //最多等待50s还没有数据传上来说明节点断开
 02D2 81E0              ldi R24,1
 02D4 80930000          sts _errorflag,R24
 02D8                   .dbline 230
 02D8           ;                break;          //errorflag 为未接受到数据 标识
 02D8 02C0              xjmp L112
 02DA           L115:
 02DA                   .dbline 232
 02DA           L111:
 02DA                   .dbline 216
 02DA 5F9B              sbis 0xb,7
 02DC E3CF              rjmp L110
 02DE           L112:
 02DE                   .dbline 233
 02DE           ;           }            
 02DE           ;      }         
 02DE           ;      j=UCSR0B;
 02DE 4AB1              in R20,0xa
 02E0                   .dbline 234
 02E0           ;      return UDR0;  
 02E0 0CB1              in R16,0xc
 02E2                   .dbline -2
 02E2           L109:
 02E2 0E940000          xcall pop_gset3
 02E6                   .dbline 0 ; func end
 02E6 0895              ret
 02E8                   .dbsym r j 20 c
 02E8                   .dbsym r tcounter 22 I
 02E8                   .dbsym r flag5 10 I
 02E8                   .dbend
 02E8                   .dbfunc e usart_transmit_char _usart_transmit_char fV
 02E8           ;              a -> R20
 02E8           ;              c -> R22
                        .even
 02E8           _usart_transmit_char::
 02E8 0E940000          xcall push_gset2
 02EC 602F              mov R22,R16
 02EE                   .dbline -1
 02EE                   .dbline 238
 02EE           ; }   
 02EE           ; //发送一个字节
 02EE           ; void usart_transmit_char(uchar c)            
 02EE           ; { 
 02EE                   .dbline 239
 02EE           ;   uchar a=0;
 02EE 4427              clr R20
 02F0                   .dbline 241
 02F0           ;   //delay_nus(6);     //很重要,有待思考
 02F0           ;   delay_nus(9);
 02F0 09E0              ldi R16,9
 02F2 10E0              ldi R17,0
 02F4 87DE              xcall _delay_nus
 02F6                   .dbline 242
 02F6           ;   a=PIND;
 02F6 40B3              in R20,0x10
 02F8 03C0              xjmp L119
 02FA           L118:
 02FA                   .dbline 244
 02FA                   .dbline 245
 02FA 40B3              in R20,0x10
 02FC                   .dbline 246
 02FC 0E940000          xcall _wdr
 0300                   .dbline 247
 0300           L119:
 0300                   .dbline 243
 0300           ;   while((a&0x20)==0x20)
 0300 242E              mov R2,R20
 0302 3324              clr R3
 0304 25FC              sbrc R2,5
 0306 F9CF              rjmp L118
 0308 02C0              xjmp L122
 030A           L121:
 030A                   .dbline 249
 030A                   .dbline 250
 030A 0E940000          xcall _wdr
 030E                   .dbline 251
 030E           L122:
 030E                   .dbline 248
 030E           ;   {
 030E           ;     a=PIND;
 030E           ;       wdr();
 030E           ;   }
 030E           ;   while(!(UCSR1A&(1<<UDRE1)))
 030E 20909B00          lds R2,155
 0312 25FE              sbrs R2,5
 0314 FACF              rjmp L121
 0316                   .dbline 253
 0316           ;   {
 0316           ;      wdr();
 0316           ;   }
 0316           ;   //;
 0316           ;   UDR1=c;
 0316 60939C00          sts 156,R22
 031A           L124:
 031A                   .dbline 255
 031A           L125:
 031A                   .dbline 254
 031A           ;   while(!(UCSR1A&(1<<TXC1)))    
 031A 20909B00          lds R2,155
 031E 26FE              sbrs R2,6
 0320 FCCF              rjmp L124
 0322                   .dbline 256
 0322           ;   ;
 0322           ;   UCSR1A|=1<<TXC1;
 0322 80919B00          lds R24,155
 0326 8064              ori R24,64
 0328 80939B00          sts 155,R24
 032C                   .dbline 257
 032C           ;   delay_nus(1);
 032C 01E0              ldi R16,1
 032E 10E0              ldi R17,0
 0330 69DE              xcall _delay_nus
 0332                   .dbline -2
 0332           L117:
 0332 0E940000          xcall pop_gset2
 0336                   .dbline 0 ; func end
 0336 0895              ret
 0338                   .dbsym r a 20 c
 0338                   .dbsym r c 22 c
 0338                   .dbend
 0338                   .dbfunc e byte_revert _byte_revert fc
 0338           ;              c -> R22
 0338           ;              b -> R10
 0338           ;              a -> R20
 0338           ;           data -> R16
                        .even
 0338           _byte_revert::
 0338 0E940000          xcall push_gset3
 033C                   .dbline -1
 033C                   .dbline 264
 033C           ; }
 033C           ; /**********************************************************************
 033C           ;                        TWI相关的函数开始
 033C           ;  **********************************************************************/
 033C           ;  //一个字节的高低位的翻转函数
 033C           ; uchar byte_revert(uchar data)
 033C           ; {
 033C                   .dbline 266
 033C           ;      unsigned char a, b, c;
 033C           ;      a = data;
 033C 402F              mov R20,R16
 033E                   .dbline 267
 033E           ;      if( ( b = a | 0x81 ) != a
 033E 842F              mov R24,R20
 0340 8168              ori R24,129
 0342 A82E              mov R10,R24
 0344 8417              cp R24,R20
 0346 51F0              breq L128
 0348 81E8              ldi R24,129
 034A 90E0              ldi R25,0
 034C 242E              mov R2,R20
 034E 3324              clr R3
 0350 2826              eor R2,R24
 0352 3926              eor R3,R25
 0354 622D              mov R22,R2
 0356 6A15              cp R22,R10
 0358 09F0              breq L128
 035A                   .dbline 269
 035A           ;      && ( c = a^0x81 ) != b )
 035A           ;            a = c;
 035A 422D              mov R20,R2
 035C           L128:
 035C                   .dbline 270
 035C           ;      if( ( b = a | 0x42 ) != a
 035C 842F              mov R24,R20
 035E 8264              ori R24,66
 0360 A82E              mov R10,R24
 0362 8417              cp R24,R20
 0364 39F0              breq L130
 0366 82E4              ldi R24,66
 0368 242E              mov R2,R20
 036A 2826              eor R2,R24
 036C 622D              mov R22,R2
 036E 6A15              cp R22,R10
 0370 09F0              breq L130
 0372                   .dbline 272
 0372           ;      && ( c = a^0x42 ) != b )
 0372           ;            a = c;
 0372 422D              mov R20,R2
 0374           L130:
 0374                   .dbline 273
 0374           ;      if( ( b = a | 0x24 ) != a
 0374 842F              mov R24,R20
 0376 8462              ori R24,36
 0378 A82E              mov R10,R24
 037A 8417              cp R24,R20
 037C 39F0              breq L132
 037E 84E2              ldi R24,36
 0380 242E              mov R2,R20
 0382 2826              eor R2,R24
 0384 622D              mov R22,R2
 0386 6A15              cp R22,R10
 0388 09F0              breq L132
 038A                   .dbline 275
 038A           ;      && ( c = a^0x24 ) != b )
 038A           ;            a = c;
 038A 422D              mov R20,R2
 038C           L132:
 038C                   .dbline 276
 038C           ;      if( ( b = a | 0x18 ) != a
 038C 842F              mov R24,R20
 038E 8861              ori R24,24
 0390 A82E              mov R10,R24
 0392 8417              cp R24,R20
 0394 39F0              breq L134
 0396 88E1              ldi R24,24
 0398 242E              mov R2,R20
 039A 2826              eor R2,R24
 039C 622D              mov R22,R2
 039E 6A15              cp R22,R10
 03A0 09F0              breq L134
 03A2                   .dbline 278
 03A2           ;      && ( c = a^0x18 ) != b )
 03A2           ;            a = c;
 03A2 422D              mov R20,R2
 03A4           L134:
 03A4                   .dbline 279
 03A4           ;      return a;
 03A4 042F              mov R16,R20
 03A6                   .dbline -2
 03A6           L127:
 03A6 0E940000          xcall pop_gset3
 03AA                   .dbline 0 ; func end
 03AA 0895              ret
 03AC                   .dbsym r c 22 c
 03AC                   .dbsym r b 10 c
 03AC                   .dbsym r a 20 c
 03AC                   .dbsym r data 16 c
 03AC                   .dbend
 03AC                   .dbfunc e TWI_Master_Initialise _TWI_Master_Initialise fV
                        .even
 03AC           _TWI_Master_Initialise::
 03AC                   .dbline -1
 03AC                   .dbline 286
 03AC           ; }
 03AC           ; /****************************************************************************
 03AC           ; Call this function to set up the TWI master to its initial standby state.
 03AC           ; Remember to enable interrupts from the main application after initializing the TWI.
 03AC           ; ****************************************************************************/
 03AC           ; void TWI_Master_Initialise(void)
 03AC           ; {
 03AC                   .dbline 287
 03AC           ;     TWBR = TWI_TWBR;     // Set bit rate register (Baudrate)4k. Defined in header file.
 03AC 8CE0              ldi R24,12
 03AE 80937000          sts 112,R24
 03B2                   .dbline 289
 03B2           ;     // TWSR = TWI_TWPS;         // Not used. Driver presumes prescaler to be 00.
 03B2           ;     TWDR = 0xFF;                // Default content = SDA released.
 03B2 8FEF              ldi R24,255
 03B4 80937300          sts 115,R24
 03B8                   .dbline 290
 03B8           ;     TWCR = (1<<TWEN)|           // Enable TWI-interface and release TWI pins.
 03B8 84E0              ldi R24,4
 03BA 80937400          sts 116,R24
 03BE                   .dbline -2
 03BE           L136:
 03BE                   .dbline 0 ; func end
 03BE 0895              ret
 03C0                   .dbend
 03C0                   .dbfunc e i2c_wt_8bit _i2c_wt_8bit fV
 03C0           ;           data -> R16
                        .even
 03C0           _i2c_wt_8bit::
 03C0                   .dbline -1
 03C0                   .dbline 298
 03C0           ;            (0<<TWIE)|(0<<TWINT)|                      // Disable Interupt.
 03C0           ;            (0<<TWEA)|(0<<TWSTA)|(0<<TWSTO)|           // No Signal requests.
 03C0           ;            (0<<TWWC);                                 //
 03C0           ; }       
 03C0           ; /***************************  TWI相关函数结束*****************************/
 03C0           ; //写数据到TWDR
 03C0           ; void i2c_wt_8bit(unsigned char data)
 03C0           ; {
 03C0                   .dbline 299
 03C0           ;     TWDR=data;
 03C0 00937300          sts 115,R16
 03C4                   .dbline 300
 03C4           ;       TWCR=(1<<TWINT)|(1<<TWEN)|(0<<TWEA)|
 03C4 84E8              ldi R24,132
 03C6 80937400          sts 116,R24
 03CA                   .dbline -2
 03CA           L137:
 03CA                   .dbline 0 ; func end
 03CA 0895              ret
 03CC                   .dbsym r data 16 c
 03CC                   .dbend
 03CC                   .dbfunc e I2cRead _I2cRead fc
 03CC           ;              j -> R22
 03CC           ;            num -> R20
 03CC           ;         addrlo -> y+10
 03CC           ;         addrhi -> y+8
 03CC           ;      device_rd -> R10
 03CC           ;      device_wt -> R12
                        .even
 03CC           _I2cRead::
 03CC 0E940000          xcall push_gset4
 03D0 A22E              mov R10,R18
 03D2 C02E              mov R12,R16
 03D4 4C85              ldd R20,y+12
 03D6                   .dbline -1
 03D6                   .dbline 306
 03D6           ;            (0<<TWSTA)|(0<<TWSTO)|(0<<TWWC); 
 03D6           ; }     
 03D6           ; //device_addr为器件地址,addrhi,addrlo为全地址,num 要连续读的个数
 03D6           ; //返回1:失败,0:成功 一次最多写32个字节
 03D6           ; uchar I2cRead(uchar device_wt,uchar device_rd, uchar addrhi,uchar addrlo,uchar num)
 03D6           ; {
 03D6                   .dbline 307
 03D6           ;     uchar j=0;
 03D6 6627              clr R22
 03D8                   .dbline 308

⌨️ 快捷键说明

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