main.s

来自「mega128平台下」· S 代码 · 共 1,005 行 · 第 1/2 页

S
1,005
字号
_CC1100_receive::
	xcall push_gset3
; }
; 
; extern unsigned char rxBuffer[32];
; 
; void CC1100_receive()
; {
; 	COMM_MSG *receive_msg;
;   	unsigned char cluster;
;   	unsigned short int target;
;   	unsigned char *msg = (&rxBuffer[0]);
	ldi R22,<_rxBuffer
	ldi R23,>_rxBuffer
;   	//printf("recv\n");
; 	led1Toggle();
	xcall _led1Toggle
;   	receive_msg = (COMM_MSG *)msg;
	movw R20,R22
;   	cluster = receive_msg->GID;
	movw R30,R20
	ldd R10,z+2
;   	target = cluster;
	mov R22,R10
	clr R23
;   	target = ((target<<8) & 0xff00);
	mov R23,R22
	clr R22
	andi R22,0
;   	unreceive_timer[cluster-1] = 0;
	ldi R24,<_unreceive_timer-1
	ldi R25,>_unreceive_timer-1
	mov R30,R10
	clr R31
	add R30,R24
	adc R31,R25
	clr R2
	std z+0,R2
;   	receive_flag[cluster-1]= 1;
	ldi R24,<_receive_flag-1
	ldi R25,>_receive_flag-1
	mov R30,R10
	clr R31
	add R30,R24
	adc R31,R25
	ldi R24,1
	std z+0,R24
;   	switch(receive_msg->type)
	movw R30,R20
	ldd R10,z+5
	clr R11
	movw R24,R10
	cpi R24,29
	ldi R30,0
	cpc R25,R30
	brne X2
	xjmp L73
X2:
	cpi R24,29
	ldi R30,0
	cpc R25,R30
	brge X3
	xjmp L41
X3:
L79:
	movw R24,R10
	cpi R24,60
	ldi R30,0
	cpc R25,R30
	breq L43
	xjmp L41
X1:
;   	{
L43:
;   		int i;
;   		case CLUSTER_DATA:
;   		{ 		
;   			
; 			/*for(i=0;i<NODE_NUMBER;i++)  //NODE_NUMBER=2
;   			{
;   		  		Node[cluster-1][i]->ID = receive_msg->data[(i*3)+0];
;   				Node[cluster-1][i]->temp = receive_msg->data[(i*3)+1];
;   				Node[cluster-1][i]->vol = receive_msg->data[(i*3)+2];
;   				//              //
; 			*/
; 			Data[0]=29;
	ldi R24,29
	sts _Data,R24
; 			Data[1]=70;
	ldi R24,70
	sts _Data+1,R24
; 			Data[2]=receive_msg->GID;
	movw R30,R20
	ldd R2,z+2
	sts _Data+2,R2
; 			Data[3]=receive_msg->data[1];
	movw R30,R20
	ldd R2,z+7
	sts _Data+3,R2
; 			Data[4]=receive_msg->data[2];
	movw R30,R20
	ldd R2,z+8
	sts _Data+4,R2
; 			Data[5]=receive_msg->data[3];
	movw R30,R20
	ldd R2,z+9
	sts _Data+5,R2
; 			Data[6]=receive_msg->data[4];
	movw R30,R20
	ldd R2,z+10
	sts _Data+6,R2
; 		
; 			Data[7]=receive_msg->GID;
	movw R30,R20
	ldd R2,z+2
	sts _Data+7,R2
; 			Data[8]=receive_msg->data[5];
	movw R30,R20
	ldd R2,z+11
	sts _Data+8,R2
; 			Data[9]=receive_msg->data[6];
	movw R30,R20
	ldd R2,z+12
	sts _Data+9,R2
; 			Data[10]=receive_msg->data[7];
	movw R30,R20
	ldd R2,z+13
	sts _Data+10,R2
; 			Data[11]=receive_msg->data[8];
	movw R30,R20
	ldd R2,z+14
	sts _Data+11,R2
; 		
; 			Data[12]=receive_msg->GID;
	movw R30,R20
	ldd R2,z+2
	sts _Data+12,R2
; 			Data[13]=receive_msg->data[9];
	movw R30,R20
	ldd R2,z+15
	sts _Data+13,R2
; 			Data[14]=receive_msg->data[10];
	movw R30,R20
	ldd R2,z+16
	sts _Data+14,R2
; 			Data[15]=receive_msg->data[11];
	movw R30,R20
	ldd R2,z+17
	sts _Data+15,R2
; 			Data[16]=receive_msg->data[12];
	movw R30,R20
	ldd R2,z+18
	sts _Data+16,R2
; 			
; 			Data[17]=receive_msg->GID;
	movw R30,R20
	ldd R2,z+2
	sts _Data+17,R2
; 			Data[18]=receive_msg->data[13];
	movw R30,R20
	ldd R2,z+19
	sts _Data+18,R2
; 			Data[19]=receive_msg->data[14];
	movw R30,R20
	ldd R2,z+20
	sts _Data+19,R2
; 			Data[20]=receive_msg->data[15];
	movw R30,R20
	ldd R2,z+21
	sts _Data+20,R2
; 			Data[21]=receive_msg->data[16];
	movw R30,R20
	ldd R2,z+22
	sts _Data+21,R2
; 			
; 			Data[22]=receive_msg->GID;
	movw R30,R20
	ldd R2,z+2
	sts _Data+22,R2
; 			Data[23]=receive_msg->data[17];
	movw R30,R20
	ldd R2,z+23
	sts _Data+23,R2
; 			Data[24]=receive_msg->data[18];
	movw R30,R20
	ldd R2,z+24
	sts _Data+24,R2
; 			Data[25]=receive_msg->data[19];
	movw R30,R20
	ldd R2,z+25
	sts _Data+25,R2
; 			Data[26]=receive_msg->data[20];
	movw R30,R20
	ldd R2,z+26
	sts _Data+26,R2
; 		
; 			Data[27]=0;//crc  receive_msg->GID;
	clr R2
	sts _Data+27,R2
; 			Data[28]=0;//crc  receive_msg->data[5];
	sts _Data+28,R2
; 		
; 		    //printf("ko\n");
; 			serial_put(Data,Data[0]);
	lds R18,_Data
	clr R19
	ldi R16,<_Data
	ldi R17,>_Data
	xcall _serial_put
; 		    
; 		    RADIO_ACK_MSG.DA = target;
	sts _RADIO_ACK_MSG+3+1,R23
	sts _RADIO_ACK_MSG+3,R22
;   			radio_ack_task();
	xcall _radio_ack_task
; 			break;
	xjmp L41
L73:
; 		}	
;   		
; 		case INIT_NODE_PARAMEATER_ACK: //初始化节点响应
; 		{
; 		    Data[0]=6;
	ldi R24,6
	sts _Data,R24
; 			Data[1]=INIT_NODE_PARAMEATER_ACK;
	ldi R24,29
	sts _Data+1,R24
; 			Data[2]=receive_msg->GID;
	movw R30,R20
	ldd R2,z+2
	sts _Data+2,R2
; 			Data[3]=receive_msg->data[0];
	movw R30,R20
	ldd R2,z+6
	sts _Data+3,R2
; 			Data[4]=0;//crc
	clr R2
	sts _Data+4,R2
; 			Data[5]=0;//crc
	sts _Data+5,R2
; 			serial_put(Data,Data[0]);
	lds R18,_Data
	clr R19
	ldi R16,<_Data
	ldi R17,>_Data
	xcall _serial_put
; 			break;
; 		}
; 		
; 		default: break;							 				
L41:
L37:
	xcall pop_gset3
	.dbline 0 ; func end
	ret
;              n -> R20,R21
;     sync_seqno -> R20,R21
;        msg_crc -> <dead>
;  INIT_NODE_MSG -> <dead>
;        ASK_MSG -> <dead>
;     RTC_TIMER1 -> R20
;     RTC_TIMER0 -> R20
;       CMD_type -> R20
;        command -> R22,R23
	.even
_uart_receive_CMD::
	xcall push_gset2
	movw R22,R16
;  	}  //end of switch
; }
; 
; 
; int uart_receive_CMD(Uart_CMD *command)
; {
; 	Uart_server_MSG *ASK_MSG;
; 	COMM_MSG *INIT_NODE_MSG;
; 	
; 	unsigned char CMD_type;
; 	unsigned short int msg_crc;
; 	unsigned char RTC_TIMER0,RTC_TIMER1;
; 	CMD_type = command->type;
	movw R30,R22
	ldd R20,z+2
; 	switch(CMD_type)
	clr R21
	cpi R20,21
	ldi R30,0
	cpc R21,R30
	breq L84
	cpi R20,25
	ldi R30,0
	cpc R21,R30
	breq L85
	cpi R20,26
	ldi R30,0
	cpc R21,R30
	breq L91
	xjmp L82
X4:
; 	{
L84:
; 	 
; 		case SINK_SERVER_SYNC: //更改RTC时间
; 		{
; 			 RTC_TIMER0 = command->data[0];
	movw R30,R22
	ldd R20,z+3
; 			 RTC_TIMER1 = command->data[1];
	movw R30,R22
	ldd R20,z+4
; 			 break;			 
	xjmp L82
L85:
; 		}
; 		case SERVER_RESET :  //同步
; 		{
; 			unsigned sync_seqno = 0;
	clr R20
	clr R21
; 			SYNC_MSG.len = LEN_SEND_MSG;
	ldi R24,12
	sts _SYNC_MSG,R24
; 			SYNC_MSG.ID = 0;
	clr R2
	sts _SYNC_MSG+1,R2
; 			SYNC_MSG.GID = 0;
	sts _SYNC_MSG+2,R2
; 			SYNC_MSG.DA = 0xffff;
	ldi R24,65535
	ldi R25,255
	sts _SYNC_MSG+3+1,R25
	sts _SYNC_MSG+3,R24
; 			SYNC_MSG.type = SINK_CLUSTER_SYNC;
	ldi R24,1
	sts _SYNC_MSG+5,R24
; 			SYNC_MSG.data[0] = sync_seqno;
	sts _SYNC_MSG+6,R20
; 			//SYNC_MSG->crc = xcrc_calc(SYNC_MSG, 0, 18);
; 			CC1100_send( (char *)&SYNC_MSG, LEN_SEND_MSG+1);
	ldi R18,13
	ldi R16,<_SYNC_MSG
	ldi R17,>_SYNC_MSG
	xcall _CC1100_send
; 			start_T0(0,SYNC_INTERVAL);
	ldi R18,500
	ldi R19,1
	clr R16
	xcall _start_T0
; 			led0Toggle();	
	xcall _led0Toggle
; 			break;	 			 
	xjmp L82
L91:
; 		}
; 		
; 		/*
; 		case SERVER_ASK_SINKDATA:   //要数据
; 		{	
; 			int n=0;
; 			ASK_MSG->startbyte = 0x7e;
; 			ASK_MSG->len = 28;
; 			ASK_MSG->type = SINKDATA;
; 			ASK_MSG->data = CURRENT_DATA;
; 		
; 			for(n=0; n<=23; n++)
; 			{
; 				ASK_MSG->data[n] = 0;
; 			}
; 			ASK_MSG->CRC =  xcrc_calc(ASK_MSG, 1, 26);
; 			serial_put(ASK_MSG); 
; 			break;
; 		}
; 		*/
; 		
; 		case SERVER_INIT_NODE: //初始化节点参数
; 		{    
; 			int n=0;                  // 是否需要切换通道?
	clr R20
	clr R21
; 			SYNC_MSG.len = LEN_SEND_MSG;
	ldi R24,12
	sts _SYNC_MSG,R24
; 			SYNC_MSG.ID = 0;
	clr R2
	sts _SYNC_MSG+1,R2
; 			SYNC_MSG.GID = 0;
	sts _SYNC_MSG+2,R2
; 			SYNC_MSG.DA = 0x0000;
	clr R3
	sts _SYNC_MSG+3+1,R3
	sts _SYNC_MSG+3,R2
; 			SYNC_MSG.type = SINK_INIT_NODE;
	ldi R24,10
	sts _SYNC_MSG+5,R24
; 			 
; 			for(n=0; n <= 5; n++) //5个字节的长度
L96:
	movw R24,R22
	adiw R24,3
	movw R30,R20
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	ldi R24,<_SYNC_MSG+6
	ldi R25,>_SYNC_MSG+6
	movw R30,R20
	add R30,R24
	adc R31,R25
	std z+0,R2
L97:
	subi R20,255  ; offset = 1
	sbci R21,255
	ldi R24,5
	ldi R25,0
	cp R24,R20
	cpc R25,R21
	brge L96
; 			{
; 				SYNC_MSG.data[n] = command->data[n];
; 			}
; 			 //SYNC_MSG->data[0] = command->data[0] ;
; 			 //SYNC_MSG->crc = xcrc_calc(SYNC_MSG, 0, 18);
; 			CC1100_send((unsigned char *)&SYNC_MSG, LEN_SEND_MSG+1);
	ldi R18,13
	ldi R16,<_SYNC_MSG
	ldi R17,>_SYNC_MSG
	xcall _CC1100_send
; 			break;
; 		}
; 		
; 		default: break;
L82:
; 	}	
; 	return 1;
	ldi R16,1
	ldi R17,0
L80:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.even
_main::
; }
; 
; extern unsigned char put_done;
; 
; void main() 
; {
;     
;     init_devices();
	xcall _init_devices
;     put_done =1; //使能串口输出
	ldi R24,1
	sts _put_done,R24
; 	sched_init();
	xcall _sched_init
; 	CC1100_setInterrupt(0x01);  //RF接收状态
	ldi R16,1
	xcall _CC1100_setInterrupt
	xjmp L103
L102:
	xcall _run_task
L103:
;     // start_T0(0,2000);
;     // start_T1(1,12000);
;  
;     /*my program*/
; 	//led0Toggle();
; 	//start_T1(1,8000);
; 	//start_T3(1,1000);
; 	//start_T0(1,1000);
; 	//start_T2(1,1000);
; 	
; 	//CC1100_send(a,4);
; 	//puts("hello\n");
; 	
; 	/*my program end*/
; 	
; 	/*schedule*/
; 	while(1) 
	xjmp L102
X5:
L101:
	.dbline 0 ; func end
	ret
	.area bss(ram, con, rel)
_Node::
	.blkb 8
_Data:
	.blkb 28
_crc::
	.blkb 2
_ask_seqno::
	.blkb 1
_SyncSeqNo::
	.blkb 1
_RADIO_ACK_MSG::
	.blkb 17
_SYNC_MSG::
	.blkb 17

⌨️ 快捷键说明

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