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