main.lis

来自「mega128平台下」· LIS 代码 · 共 1,179 行 · 第 1/4 页

LIS
1,179
字号
 0272 2BB8              out 0xb,R2
 0274           ;  UCSR0C = 0x06;
 0274 86E0              ldi R24,6
 0276 80939500          sts 149,R24
 027A           ;  UBRR0L = 0x07; //set baud rate lo
 027A 87E0              ldi R24,7
 027C 89B9              out 0x9,R24
 027E           ;  UBRR0H = 0x00; //set baud rate hi
 027E 20929000          sts 144,R2
 0282           ;  UCSR0B = 0x18;
 0282 88E1              ldi R24,24
 0284 8AB9              out 0xa,R24
 0286           L56:
 0286                   .dbline 0 ; func end
 0286 0895              ret
                        .even
 0288           _init_devices::
 0288           ; }
 0288           ; 
 0288           ; //call this routine to initialize all peripherals
 0288           ; void init_devices(void)
 0288           ; {
 0288           ;  //stop errant interrupts until set up
 0288           ;  CLI(); //disable all interrupts
 0288 F894              cli
 028A           ;  XDIV  = 0x00; //xtal divider
 028A 2224              clr R2
 028C 2CBE              out 0x3c,R2
 028E           ;  XMCRA = 0x00; //external memory
 028E 20926D00          sts 109,R2
 0292           ;  port_init();                //端口初始化
 0292 D7DF              xcall _port_init
 0294           ;  led_init();                 //所有灯灭
 0294 0E940000          xcall _led_init
 0298           ;  T0_init();
 0298 0E940000          xcall _T0_init
 029C           ;  T2_init();
 029C 0E940000          xcall _T2_init
 02A0           ;  T1_init();
 02A0 0E940000          xcall _T1_init
 02A4           ;  T3_init();
 02A4 0E940000          xcall _T3_init
 02A8           ;  CC1100_init();              //RF初始化
 02A8 0E940000          xcall _CC1100_init
 02AC           ;  uart0_init();               //串口初始化
 02AC E0DF              xcall _uart0_init
 02AE           ;  
 02AE           ;  MCUCR = 0x00;
 02AE 2224              clr R2
 02B0 25BE              out 0x35,R2
 02B2           ;  EICRA = 0x00; //extended ext ints
 02B2 20926A00          sts 106,R2
 02B6           ;  EICRB = 0x00; //extended ext ints
 02B6 2ABE              out 0x3a,R2
 02B8           ;  EIMSK = 0x00;
 02B8 29BE              out 0x39,R2
 02BA           ;  TIMSK = 0x00; //timer interrupt sources
 02BA 27BE              out 0x37,R2
 02BC           ;  ETIMSK = 0x00; //extended timer interrupt sources
 02BC 20927D00          sts 125,R2
 02C0           ;  SEI(); //re-enable interrupts
 02C0 7894              sei
 02C2           L57:
 02C2                   .dbline 0 ; func end
 02C2 0895              ret
 02C4           ;              i -> R20
                        .even
 02C4           _T0_timeout::
 02C4 0E940000          xcall push_gset1
 02C8           ;  //all peripherals are now initialized
 02C8           ; }
 02C8           ; 
 02C8           ; void T0_timeout()   
 02C8           ; {
 02C8           ;    unsigned char i;
 02C8           ;    //切换通道定时  
 02C8           ;    led1Toggle(); 
 02C8 0E940000          xcall _led1Toggle
 02CC           ;    if(change_channel==0x0A)    
 02CC 80910200          lds R24,_change_channel
 02D0 8A30              cpi R24,10
 02D2 B9F4              brne L59
 02D4           ;    {
 02D4           ;       halSpiWriteReg(CCxxx0_CHANNR, 2*LOCAL_GID-1+0xa);   //切换到与node通信
 02D4 2DE0              ldi R18,13
 02D6 0AE0              ldi R16,10
 02D8 0E940000          xcall _halSpiWriteReg
 02DC           ;       change_channel=2*LOCAL_GID-1+0xa;
 02DC 8DE0              ldi R24,13
 02DE 80930200          sts _change_channel,R24
 02E2           ;   //  led1On();
 02E2           ;       for(i=0;i<NODE_QUANTITY;i++)
 02E2 4427              clr R20
 02E4 0BC0              xjmp L64
 02E6           L61:
 02E6 80E0              ldi R24,<_flag
 02E8 90E0              ldi R25,>_flag
 02EA 242E              mov R2,R20
 02EC 3324              clr R3
 02EE 280E              add R2,R24
 02F0 391E              adc R3,R25
 02F2 F101              movw R30,R2
 02F4 8081              ldd R24,z+0
 02F6 8F5F              subi R24,255    ; addi 1
 02F8 8083              std z+0,R24
 02FA           L62:
 02FA 4395              inc R20
 02FC           L64:
 02FC 4230              cpi R20,2
 02FE 98F3              brlo L61
 0300           ;          flag[i]++;
 0300           ;    }
 0300 0EC0              xjmp L60
 0302           L59:
 0302           ;    else                  
 0302           ;    {
 0302           ;    	led0Toggle();
 0302 0E940000          xcall _led0Toggle
 0306           ;       halSpiWriteReg(CCxxx0_CHANNR, 0x0A);   //切换到与sink通信
 0306 2AE0              ldi R18,10
 0308 0AE0              ldi R16,10
 030A 0E940000          xcall _halSpiWriteReg
 030E           ;       change_channel=0x0A;
 030E 8AE0              ldi R24,10
 0310 80930200          sts _change_channel,R24
 0314           ;         //start_T3(0,3000*(LOCAL_GID-1)+3000);
 0314           ;         start_T3(0,LOCAL_GID*CHANGE_CHAN_INTVL/(CLUSTER_QUANTITY+2));
 0314 20E7              ldi R18,6000
 0316 37E1              ldi R19,23
 0318 0027              clr R16
 031A 0E940000          xcall _start_T3
 031E           ;    }
 031E           L60:
 031E           L58:
 031E 0E940000          xcall pop_gset1
 0322                   .dbline 0 ; func end
 0322 0895              ret
 0324           ;              p -> R20,R21
 0324           ;              m -> R22,R23
 0324           ; sync_cluster_node -> y+0
                        .even
 0324           _T1_timeout::
 0324 0E940000          xcall push_gset2
 0328 A097              sbiw R28,32
 032A           ;    //led2Toggle();
 032A           ; }
 032A           ; 
 032A           ; void T1_timeout()     //负责同步
 032A           ; {
 032A           ;    COMM_MSG sync_cluster_node;
 032A           ;    COMM_MSG *m;
 032A           ;    unsigned char *p;
 032A           ;    
 032A           ;    //if(!sync_Nflag)
 032A           ;    //{
 032A           ;     if(counter_sync<3)
 032A 80910400          lds R24,_counter_sync
 032E 8330              cpi R24,3
 0330 F0F4              brsh L66
 0332           ;      {
 0332           ;        counter_sync++;
 0332 8F5F              subi R24,255    ; addi 1
 0334 80930400          sts _counter_sync,R24
 0338           ;   
 0338           ;        sync_cluster_node.len=COMM_MSG_LENGTH;
 0338 8FE1              ldi R24,31
 033A 8883              std y+0,R24
 033C           ;      //sync_cluster_node.ID=LOCAL_ID;
 033C           ;        sync_cluster_node.GID=LOCAL_GID;
 033C 82E0              ldi R24,2
 033E 8A83              std y+2,R24
 0340           ;        sync_cluster_node.DA=0xFFFF;  //同步的目的地址
 0340 8FEF              ldi R24,65535
 0342 9FEF              ldi R25,255
 0344 9C83              std y+4,R25
 0346 8B83              std y+3,R24
 0348           ;        sync_cluster_node.type=CLUSTER_NODE_SYNC;
 0348 82E0              ldi R24,2
 034A 8D83              std y+5,R24
 034C           ;        sync_cluster_node.data[0]=counter_sync;
 034C 20900400          lds R2,_counter_sync
 0350 2E82              std y+6,R2
 0352           ;        led0Toggle();
 0352 0E940000          xcall _led0Toggle
 0356           ;      
 0356           ;        m = &sync_cluster_node;
 0356 BE01              movw R22,R28
 0358           ;        p=(unsigned char*)m;
 0358 AB01              movw R20,R22
 035A           ;        
 035A           ;        CC1100_send(p,COMM_MSG_LENGTH+1);
 035A 20E2              ldi R18,32
 035C 8A01              movw R16,R20
 035E 0E940000          xcall _CC1100_send
 0362           ;        
 0362           ;        start_T1(0,SYNC_INTVL); //500ms重发一次同步消息
 0362 24EF              ldi R18,500
 0364 31E0              ldi R19,1
 0366 0027              clr R16
 0368 0E940000          xcall _start_T1
 036C           ;       }
 036C 0BC0              xjmp L67
 036E           L66:
 036E           ;       
 036E           ;       else    //簇内同步结束,启动timer1
 036E           ;       {
 036E           ;       //sync_Nflag=1;
 036E           ; 	  counter_sync =0;
 036E 2224              clr R2
 0370 20920400          sts _counter_sync,R2
 0374           ;       change_channel=2*LOCAL_GID-1+0xa;
 0374 8DE0              ldi R24,13
 0376 80930200          sts _change_channel,R24
 037A           ;       start_T0(1,CHANGE_CHAN_INTVL);  //每CHANGE_CHAN_INTVL切换一次通道
 037A 20EE              ldi R18,12000
 037C 3EE2              ldi R19,46
 037E 01E0              ldi R16,1
 0380 0E940000          xcall _start_T0
 0384           ;       //led0Toggle();
 0384           ;         }
 0384           L67:
 0384           ; 	  sync_count --;
 0384 80910200          lds R24,_sync_count
 0388 90910300          lds R25,_sync_count+1
 038C 0197              sbiw R24,1
 038E 90930300          sts _sync_count+1,R25
 0392 80930200          sts _sync_count,R24
 0396           ;         if (sync_count ==0)
 0396 8030              cpi R24,0
 0398 8907              cpc R24,R25
 039A 41F4              brne L72
 039C           X7:
 039C           ; 	  {
 039C           ; 	    counter_sync =0;
 039C 2224              clr R2
 039E 20920400          sts _counter_sync,R2
 03A2           ;               start_T1(0,SYNC_INTVL);
 03A2 24EF              ldi R18,500
 03A4 31E0              ldi R19,1
 03A6 0027              clr R16
 03A8 0E940000          xcall _start_T1
 03AC           ;         }
 03AC           L72:
 03AC           L65:
 03AC A096              adiw R28,32
 03AE 0E940000          xcall pop_gset2
 03B2                   .dbline 0 ; func end
 03B2 0895              ret
 03B4           ;           recv -> R20,R21
                        .even
 03B4           _resend::
 03B4 0E940000          xcall push_gset1
 03B8           ;      //} 
 03B8           ; }
 03B8           ; 
 03B8           ; void resend()
 03B8           ; {
 03B8           ;     unsigned char *recv;
 03B8           ;     recv=(unsigned char*)(&pre_trans.len);
 03B8 40E0              ldi R20,<_pre_trans
 03BA 50E0              ldi R21,>_pre_trans
 03BC           ;     counter_data++;
 03BC 80910300          lds R24,_counter_data
 03C0 8F5F              subi R24,255    ; addi 1
 03C2 80930300          sts _counter_data,R24
 03C6           ;     pre_trans.data[0]=counter_data;
 03C6 282E              mov R2,R24
 03C8 20922100          sts _pre_trans+6,R2
 03CC           ;     CC1100_send(recv,COMM_MSG_LENGTH+1);
 03CC 20E2              ldi R18,32
 03CE 8A01              movw R16,R20
 03D0 0E940000          xcall _CC1100_send
 03D4           L74:
 03D4 0E940000          xcall pop_gset1
 03D8                   .dbline 0 ; func end
 03D8 0895              ret
                        .even
 03DA           _T2_timeout::
 03DA           ; }
 03DA           ; 
 03DA           ; void T2_timeout()  //数据重发时钟
 03DA           ; {
 03DA           ; //   unsigned char *recv;
 03DA           ; //   recv=(unsigned char*)(&pre_trans.len);
 03DA           ;    if(counter_data<3)
 03DA 80910300          lds R24,_counter_data
 03DE 8330              cpi R24,3
 03E0 50F4              brsh L77
 03E2           ;    {
 03E2           ; //        counter_data++;
 03E2           ; //        pre_trans.SeqNO=counter_data;
 03E2           ; //        CC1100_send(recv,COMM_MSG_LENGTH+1);        
 03E2           ;         post(resend);
 03E2 00E0              ldi R16,<PL_resend
 03E4 10E0              ldi R17,>PL_resend

⌨️ 快捷键说明

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