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 + -
显示快捷键?