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

📄 main.s

📁 mega128平台下
💻 S
📖 第 1 页 / 共 2 页
字号:
	out 0xb,R2
;  UCSR0C = 0x06;
	ldi R24,6
	sts 149,R24
;  UBRR0L = 0x07; //set baud rate lo
	ldi R24,7
	out 0x9,R24
;  UBRR0H = 0x00; //set baud rate hi
	sts 144,R2
;  UCSR0B = 0x18;
	ldi R24,24
	out 0xa,R24
L56:
	.dbline 0 ; func end
	ret
	.even
_init_devices::
; }
; 
; //call this routine to initialize all peripherals
; void init_devices(void)
; {
;  //stop errant interrupts until set up
;  CLI(); //disable all interrupts
	cli
;  XDIV  = 0x00; //xtal divider
	clr R2
	out 0x3c,R2
;  XMCRA = 0x00; //external memory
	sts 109,R2
;  port_init();                //端口初始化
	xcall _port_init
;  led_init();                 //所有灯灭
	xcall _led_init
;  T0_init();
	xcall _T0_init
;  T2_init();
	xcall _T2_init
;  T1_init();
	xcall _T1_init
;  T3_init();
	xcall _T3_init
;  CC1100_init();              //RF初始化
	xcall _CC1100_init
;  uart0_init();               //串口初始化
	xcall _uart0_init
;  
;  MCUCR = 0x00;
	clr R2
	out 0x35,R2
;  EICRA = 0x00; //extended ext ints
	sts 106,R2
;  EICRB = 0x00; //extended ext ints
	out 0x3a,R2
;  EIMSK = 0x00;
	out 0x39,R2
;  TIMSK = 0x00; //timer interrupt sources
	out 0x37,R2
;  ETIMSK = 0x00; //extended timer interrupt sources
	sts 125,R2
;  SEI(); //re-enable interrupts
	sei
L57:
	.dbline 0 ; func end
	ret
;              i -> R20
	.even
_T0_timeout::
	xcall push_gset1
;  //all peripherals are now initialized
; }
; 
; void T0_timeout()   
; {
;    unsigned char i;
;    //切换通道定时  
;    led1Toggle(); 
	xcall _led1Toggle
;    if(change_channel==0x0A)    
	lds R24,_change_channel
	cpi R24,10
	brne L59
;    {
;    	halSpiWriteReg(CCxxx0_CHANNR, 2*LOCAL_GID-1+0xa);   //切换到与node通信
	ldi R18,13
	ldi R16,10
	xcall _halSpiWriteReg
;    	change_channel=2*LOCAL_GID-1+0xa;
	ldi R24,13
	sts _change_channel,R24
;   // 	led1On();
;    	for(i=0;i<NODE_QUANTITY;i++)
	clr R20
	xjmp L64
L61:
	ldi R24,<_flag
	ldi R25,>_flag
	mov R2,R20
	clr R3
	add R2,R24
	adc R3,R25
	movw R30,R2
	ldd R24,z+0
	subi R24,255    ; addi 1
	std z+0,R24
L62:
	inc R20
L64:
	cpi R20,2
	brlo L61
;    	   flag[i]++;
;    }
	xjmp L60
L59:
;    else                  
;    {
;    	led0Toggle();
	xcall _led0Toggle
; 	halSpiWriteReg(CCxxx0_CHANNR, 0x0A);   //切换到与sink通信
	ldi R18,10
	ldi R16,10
	xcall _halSpiWriteReg
;    	change_channel=0x0A;
	ldi R24,10
	sts _change_channel,R24
;         //start_T3(0,3000*(LOCAL_GID-1)+3000);
;         start_T3(0,LOCAL_GID*CHANGE_CHAN_INTVL/(CLUSTER_QUANTITY+2));
	ldi R18,6000
	ldi R19,23
	clr R16
	xcall _start_T3
;    }
L60:
L58:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
;              p -> R20,R21
;              m -> R22,R23
; sync_cluster_node -> y+0
	.even
_T1_timeout::
	xcall push_gset2
	sbiw R28,32
;    //led2Toggle();
; }
; 
; void T1_timeout()     //负责同步
; {
;    COMM_MSG sync_cluster_node;
;    COMM_MSG *m;
;    unsigned char *p;
;    
;    //if(!sync_Nflag)
;    //{
;     if(counter_sync<3)
	lds R24,_counter_sync
	cpi R24,3
	brsh L66
;      {
;        counter_sync++;
	subi R24,255    ; addi 1
	sts _counter_sync,R24
;   
;        sync_cluster_node.len=COMM_MSG_LENGTH;
	ldi R24,31
	std y+0,R24
;      //sync_cluster_node.ID=LOCAL_ID;
;        sync_cluster_node.GID=LOCAL_GID;
	ldi R24,2
	std y+2,R24
;        sync_cluster_node.DA=0xFFFF;  //同步的目的地址
	ldi R24,65535
	ldi R25,255
	std y+4,R25
	std y+3,R24
;        sync_cluster_node.type=CLUSTER_NODE_SYNC;
	ldi R24,2
	std y+5,R24
;        sync_cluster_node.data[0]=counter_sync;
	lds R2,_counter_sync
	std y+6,R2
;        led0Toggle();
	xcall _led0Toggle
;      
; 	 m = &sync_cluster_node;
	movw R22,R28
; 	 p=(unsigned char*)m;
	movw R20,R22
; 	 
; 	 CC1100_send(p,COMM_MSG_LENGTH+1);
	ldi R18,32
	movw R16,R20
	xcall _CC1100_send
;        
;        start_T1(0,SYNC_INTVL); //500ms重发一次同步消息
	ldi R18,500
	ldi R19,1
	clr R16
	xcall _start_T1
;       }
	xjmp L67
L66:
;       
;       else    //簇内同步结束,启动timer1
;       {
;       //sync_Nflag=1;
; 	  counter_sync =0;
	clr R2
	sts _counter_sync,R2
;       change_channel=2*LOCAL_GID-1+0xa;
	ldi R24,13
	sts _change_channel,R24
;       start_T0(1,CHANGE_CHAN_INTVL);  //每CHANGE_CHAN_INTVL切换一次通道
	ldi R18,12000
	ldi R19,46
	ldi R16,1
	xcall _start_T0
;       //led0Toggle();
;    	  }
L67:
; 	  sync_count --;
	lds R24,_sync_count
	lds R25,_sync_count+1
	sbiw R24,1
	sts _sync_count+1,R25
	sts _sync_count,R24
; 	  if (sync_count ==0)
	cpi R24,0
	cpc R24,R25
	brne L72
X7:
; 	  {
; 	    counter_sync =0;
	clr R2
	sts _counter_sync,R2
; 		start_T1(0,SYNC_INTVL);
	ldi R18,500
	ldi R19,1
	clr R16
	xcall _start_T1
; 	  }
L72:
L65:
	adiw R28,32
	xcall pop_gset2
	.dbline 0 ; func end
	ret
;           recv -> R20,R21
	.even
_resend::
	xcall push_gset1
;      //} 
; }
; 
; void resend()
; {
;     unsigned char *recv;
;     recv=(unsigned char*)(&pre_trans.len);
	ldi R20,<_pre_trans
	ldi R21,>_pre_trans
;     counter_data++;
	lds R24,_counter_data
	subi R24,255    ; addi 1
	sts _counter_data,R24
;     pre_trans.data[0]=counter_data;
	mov R2,R24
	sts _pre_trans+6,R2
;     CC1100_send(recv,COMM_MSG_LENGTH+1);
	ldi R18,32
	movw R16,R20
	xcall _CC1100_send
L74:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.even
_T2_timeout::
; }
; 
; void T2_timeout()  //数据重发时钟
; {
; //   unsigned char *recv;
; //   recv=(unsigned char*)(&pre_trans.len);
;    if(counter_data<3)
	lds R24,_counter_data
	cpi R24,3
	brsh L77
;    {
; //        counter_data++;
; //        pre_trans.SeqNO=counter_data;
; //        CC1100_send(recv,COMM_MSG_LENGTH+1);	
;         post(resend);
	ldi R16,<PL_resend
	ldi R17,>PL_resend
	xcall _post
;         start_T2(0,DATA_TRANS_INTVL);
	ldi R18,500
	ldi R19,1
	clr R16
	xcall _start_T2
;    }
	xjmp L78
L77:
;    else
;      {counter_data=0; stop_T2();}
	clr R2
	sts _counter_data,R2
	xcall _stop_T2
L78:
L76:
	.dbline 0 ; func end
	ret
;           recv -> R22,R23
;              i -> R20
	.even
_T3_timeout::
	xcall push_gset2
; //   led0Toggle();
; }
; 
; void T3_timeout()     //发送簇内数据
; {
;    unsigned char *recv;
;    unsigned char i;
;    for(i=0;i<NODE_QUANTITY;i++)
	clr R20
	xjmp L83
L80:
;       {
;       if(flag[i]==3)
	ldi R24,<_flag
	ldi R25,>_flag
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	ldd R24,z+0
	cpi R24,3
	brne L84
;        {
;        	local_buff[4*i+1]=0;
	ldi R24,4
	mul R24,R20
	movw R30,R0
	ldi R24,<_local_buff+1
	ldi R25,>_local_buff+1
	add R30,R24
	adc R31,R25
	clr R2
	std z+0,R2
;         local_buff[4*i+2]=0;
	ldi R24,4
	mul R24,R20
	movw R30,R0
	ldi R24,<_local_buff+2
	ldi R25,>_local_buff+2
	add R30,R24
	adc R31,R25
	std z+0,R2
;         local_buff[4*i+3]=0;
	ldi R24,4
	mul R24,R20
	movw R30,R0
	ldi R24,<_local_buff+3
	ldi R25,>_local_buff+3
	add R30,R24
	adc R31,R25
	std z+0,R2
;         flag[i]=0;
	ldi R24,<_flag
	ldi R25,>_flag
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	std z+0,R2
;         }
L84:
L81:
	inc R20
L83:
	cpi R20,2
	brsh X8
	xjmp L80
X8:
;       }  
;    for(i=1;i<9;i++)
	ldi R20,1
	xjmp L92
L89:
	ldi R24,<_local_buff-1
	ldi R25,>_local_buff-1
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	ldi R24,<_pre_trans+6
	ldi R25,>_pre_trans+6
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	std z+0,R2
L90:
	inc R20
L92:
	cpi R20,9
	brlo L89
;       pre_trans.data[i]=local_buff[i-1];
;    //pre_trans.data[1]=test;
;    //test++;  
;    
;    counter_data++;
	lds R24,_counter_data
	subi R24,255    ; addi 1
	sts _counter_data,R24
;    pre_trans.data[0]=counter_data;
	mov R2,R24
	sts _pre_trans+6,R2
;    
;    recv=(unsigned char*)(&pre_trans.len);
	ldi R22,<_pre_trans
	ldi R23,>_pre_trans
;    
;    CC1100_send(recv,COMM_MSG_LENGTH+1);
	ldi R18,32
	movw R16,R22
	xcall _CC1100_send
;    //printf("%d",pre_trans.data[1]);
;    start_T2(0,DATA_TRANS_INTVL);//启动重发时钟,500ms未收到ack则重发
	ldi R18,500
	ldi R19,1
	clr R16
	xcall _start_T2
;    led2Toggle();
	xcall _led2Toggle
L79:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
;              i -> R20,R21
;           xtal -> R22,R23
	.even
_delay_1ms::
	xcall push_gset2
	movw R22,R16
; }
; 
; 
; void delay_1ms(unsigned int xtal)
; {
;  unsigned int i;
;  for(i=1;i<(unsigned int)(xtal*143-2);i++)
	ldi R20,1
	ldi R21,0
	xjmp L100
L97:
L98:
	subi R20,255  ; offset = 1
	sbci R21,255
L100:
	ldi R16,143
	ldi R17,0
	movw R18,R22
	xcall empy16s
	movw R24,R16
	sbiw R24,2
	cp R20,R24
	cpc R21,R25
	brlo L97
L96:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
;              i -> R20,R21
;              n -> R22,R23
	.even
_delay_x::
	xcall push_gset2
	movw R22,R16
;  ;
;  }
; 
; void delay_x(unsigned int n)
; {
;  unsigned int i=0;
	clr R20
	clr R21
;  for(i=0;i<n;i++)
	xjmp L105
L102:
	ldi R16,7
	ldi R17,0
	xcall _delay_1ms
L103:
	subi R20,255  ; offset = 1
	sbci R21,255
L105:
	cp R20,R22
	cpc R21,R23
	brlo L102
L101:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.even
_main::
;  delay_1ms(7);
;  }
; 
; 
; void main() 
;   {
; 
;     init_devices();
	xcall _init_devices
;     sched_init();
	xcall _sched_init
;     identifier_init();
	xcall _identifier_init
;     CC1100_setInterrupt(0x01);  //RF接收状态
	ldi R16,1
	xcall _CC1100_setInterrupt
	xjmp L108
L107:
	xcall _run_task
L108:
;     //start_T3(1,2000);
; 	/*
; 	led0Toggle();
; 	delay(100);
; 	led1Toggle();
; 	delay(100);
; 	led2Toggle();
; 	*/
; 	//halSpiWriteReg(CCxxx0_CHANNR, 0x0A);//初始化通道置为A
; 	
;     
;     /*my program*/
; 	
; 	//CC1100_send(a,4);
; 	//puts("hello\n");
; 	
; 	/*my program end*/
; 	
; 	/*schedule*/
; 	while(1) 
	xjmp L107
X9:
L106:
	.dbline 0 ; func end
	ret
	.area bss(ram, con, rel)
_ackack::
	.blkb 2
_change_channel::
	.blkb 1
_counter_data::
	.blkb 1
_counter_sync::
	.blkb 1
_sync_Nflag::
	.blkb 1
_sync_Cflag::
	.blkb 1
_local_buff::
	.blkb 8
_ack::
	.blkb 12
_pre_trans::
	.blkb 32
_recv::
	.blkb 32
	.area data(ram, con, rel)
L37:
	.blkb 4
	.area idata
	.byte 37,'d,10,0
	.area data(ram, con, rel)
L10:
	.blkb 6
	.area idata
	.byte 'd,'o,'n,'e,10,0
	.area data(ram, con, rel)
	.area func_lit
PL_resend:	.word `_resend

⌨️ 快捷键说明

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