nodeapp.lis

来自「mega128平台下」· LIS 代码 · 共 788 行 · 第 1/2 页

LIS
788
字号
                        .module nodeapp.c
                        .area data(ram, con, rel)
 0000           _LOCAL_ID::
 0000                   .blkb 1
                        .area idata
 0000 02                .byte 2
                        .area data(ram, con, rel)
 0001           _LOCAL_GID::
 0001                   .blkb 1
                        .area idata
 0001 01                .byte 1
                        .area data(ram, con, rel)
 0002           _slot_Tcluster::
 0002                   .blkb 1
                        .area idata
 0002 F4                .byte 244
                        .area data(ram, con, rel)
 0003           _SYNC_FLAG::
 0003                   .blkb 1
                        .area idata
 0003 00                .byte 0
                        .area data(ram, con, rel)
 0004           _ALARM_TMP::
 0004                   .blkb 1
                        .area idata
 0004 42                .byte 66
                        .area data(ram, con, rel)
 0005           _CYCLE_TIME::
 0005                   .blkb 1
                        .area idata
 0005 E0                .byte 224
                        .area data(ram, con, rel)
 0006           _OLD_CYCLE_TIME::
 0006                   .blkb 1
                        .area idata
 0006 E0                .byte 224
                        .area data(ram, con, rel)
 0007           _NEW_CYCLE_TIME::
 0007                   .blkb 1
                        .area idata
 0007 B8                .byte 184
                        .area data(ram, con, rel)
 0008           _T::
 0008                   .blkb 2
                        .area idata
 0008 C05D              .word 24000
                        .area data(ram, con, rel)
 000A           _node_num::
 000A                   .blkb 1
                        .area idata
 000A 04                .byte 4
                        .area data(ram, con, rel)
 000B           _timeout::
 000B                   .blkb 1
                        .area idata
 000B 00                .byte 0
                        .area data(ram, con, rel)
 000C           _send_seq::
 000C                   .blkb 1
                        .area idata
 000C 00                .byte 0
                        .area data(ram, con, rel)
 000D           _count::
 000D                   .blkb 2
                        .area idata
 000D 0000              .word 0
                        .area data(ram, con, rel)
 000F           _sync_count::
 000F                   .blkb 2
                        .area idata
 000F 1E00              .word 30
                        .area data(ram, con, rel)
                        .area text(rom, con, rel)
                        .even
 0000           _param_init::
 0000           L2:
 0000                   .dbline 0 ; func end
 0000 0895              ret
 0002           ;           data -> R18,R19
 0002           ;           addr -> R16,R17
                        .even
 0002           _eeprom_write::
 0002           ; #include<iom128v.h>
 0002           ; #include <macros.h>
 0002           ; #include "app.h"
 0002           ; #include "../api/timer.h"
 0002           ; #include "stdio.h"
 0002           ; extern int get_tmp(void);
 0002           ; 
 0002           ; COMM_MSG cluster_msg;
 0002           ; COMM_MSG node_data;
 0002           ; char timeout=0;
 0002           ; char send_seq=0;
 0002           ; int count =0;
 0002           ; unsigned char T_p_node;
 0002           ; unsigned int sync_count = SYNC_COUNT;
 0002           ; unsigned char sleep_flag;
 0002           ; /********
 0002           ; * param init
 0002           ; */
 0002           ; 
 0002           ; void param_init()
 0002           ; {
 0002           ;   /*  LOCAL_ID = m->data[0];
 0002           ; 	LOCAL_GID = m->data[1];	  		
 0002           ; 	T=m->data[2]; 
 0002           ;     node_num =m->data[3];
 0002           ;     ALARM_TMP = m->data[4];
 0002           ;   */
 0002           ; }
 0002           ; 
 0002           ; 
 0002           ; /*******************************************
 0002           ; * eeprom 存储
 0002           ; */
 0002           ; 
 0002           ; void eeprom_write(unsigned  int addr,unsigned int data)
 0002           ; {
 0002           L4:
 0002           L5:
 0002           ; 	while(EECR&(1<<EEWE));
 0002 E199              sbic 0x1c,1
 0004 FECF              rjmp L4
 0006           ;       EEAR=addr;
 0006 1FBB              out 0x1f,R17
 0008 0EBB              out 0x1e,R16
 000A           ;       EEDR=data;
 000A 2DBB              out 0x1d,R18
 000C           ;       EECR|=(1<<EEMWE);
 000C E29A              sbi 0x1c,2
 000E           ;       EECR|=(1<<EEWE);
 000E E19A              sbi 0x1c,1
 0010           L3:
 0010                   .dbline 0 ; func end
 0010 0895              ret
 0012           ;           addr -> R16,R17
                        .even
 0012           _eeprom_read::
 0012           ; }
 0012           ; 
 0012           ; unsigned char eeprom_read(unsigned int addr)
 0012           ; {
 0012           L8:
 0012           L9:
 0012           ; 	while(EECR&(1<<EEWE));
 0012 E199              sbic 0x1c,1
 0014 FECF              rjmp L8
 0016           ;       EEAR=addr;
 0016 1FBB              out 0x1f,R17
 0018 0EBB              out 0x1e,R16
 001A           ;       EECR|=(1<<EERE);
 001A E09A              sbi 0x1c,0
 001C           ;       return EEDR;
 001C 0DB3              in R16,0x1d
 001E           L7:
 001E                   .dbline 0 ; func end
 001E 0895              ret
                        .even
 0020           _T1_timeout::
 0020           ; }
 0020           ; 
 0020           ; /******************************************/
 0020           ; 
 0020           ; 
 0020           ; void T1_timeout(){
 0020           ; 
 0020           ;     led1Toggle();
 0020 0E940000          xcall _led1Toggle
 0024           ;       //sleep_flag =1;
 0024           ;     start_T0(1,T);
 0024 20910800          lds R18,_T
 0028 30910900          lds R19,_T+1
 002C 01E0              ldi R16,1
 002E 0E940000          xcall _start_T0
 0032           ;       CC1100_sleep();
 0032 0E940000          xcall _CC1100_sleep
 0036           L11:
 0036                   .dbline 0 ; func end
 0036 0895              ret
                        .even
 0038           _CC1100_sendDone::
 0038           ;    //sleep_flag =1;
 0038           ; }
 0038           ; 
 0038           ; unsigned char CC1100_sendDone()
 0038           ; {
 0038           ;    //led1Toggle();
 0038           ;    //printf("count %d\n",count);
 0038           ;    send_seq ++;
 0038 80910C00          lds R24,_send_seq
 003C 8F5F              subi R24,255    ; addi 1
 003E 80930C00          sts _send_seq,R24
 0042           L12:
 0042                   .dbline 0 ; func end
 0042 0895              ret
 0044           ;      source_id -> R12
 0044           ;          seqNO -> R10
 0044           ;           sreg -> R22
 0044           ;           type -> R22
 0044           ;            msg -> R22,R23
 0044           ;              m -> R20,R21
 0044           ;        node_id -> R10,R11
                        .even
 0044           _CC1100_receive::
 0044 0E940000          xcall push_gset4
 0048           ; }
 0048           ; 
 0048           ; extern void mcu_sleep();
 0048           ; extern unsigned char rxBuffer[32];
 0048           ; void  CC1100_receive()
 0048           ; {
 0048           ;   char type,seqNO;
 0048           ;   unsigned int node_id;
 0048           ;   unsigned char source_id;
 0048           ;   unsigned char *msg =(&rxBuffer[0]); 
 0048 60E0              ldi R22,<_rxBuffer
 004A 70E0              ldi R23,>_rxBuffer
 004C           ;   unsigned char sreg;
 004C           ;   
 004C           ;   
 004C           ;   
 004C           ;   COMM_MSG *m = (COMM_MSG *)(msg);
 004C AB01              movw R20,R22
 004E           ;   type = m->type;
 004E FA01              movw R30,R20
 0050 6581              ldd R22,z+5
 0052           ;   node_id = m->DA;
 0052 FA01              movw R30,R20
 0054 A380              ldd R10,z+3
 0056 B480              ldd R11,z+4
 0058           ;   if ((node_id == IP)||( node_id ==0xffff) ||(node_id == CLUSTER_IP))
 0058 20900100          lds R2,_LOCAL_GID
 005C 3324              clr R3
 005E 322C              mov R3,R2
 0060 2224              clr R2
 0062 40900000          lds R4,_LOCAL_ID
 0066 5524              clr R5
 0068 3101              movw R6,R2
 006A 640C              add R6,R4
 006C 751C              adc R7,R5
 006E A614              cp R10,R6
 0070 B704              cpc R11,R7
 0072 49F0              breq L17
 0074 C501              movw R24,R10
 0076 8F3F              cpi R24,255
 0078 EFEF              ldi R30,255
 007A 9E07              cpc R25,R30
 007C 21F0              breq L17
 007E 8215              cp R24,R2
 0080 9305              cpc R25,R3
 0082 09F0              breq X2
 0084 B4C0              xjmp L14
 0086           X2:
 0086           L17:
 0086           ;   {
 0086           ;    	switch(type)
 0086 7727              clr R23
 0088 6D31              cpi R22,29
 008A E0E0              ldi R30,0
 008C 7E07              cpc R23,R30
 008E 09F4              brne X3
 0090 7FC0              xjmp L31
 0092           X3:
 0092 8DE1              ldi R24,29
 0094 90E0              ldi R25,0
 0096 8617              cp R24,R22
 0098 9707              cpc R25,R23
 009A 74F0              brlt L33
 009C           L32:
 009C 6230              cpi R22,2
 009E E0E0              ldi R30,0
 00A0 7E07              cpc R23,R30
 00A2 79F0              breq L21
 00A4 6430              cpi R22,4
 00A6 E0E0              ldi R30,0
 00A8 7E07              cpc R23,R30
 00AA 39F1              breq L24
 00AC 6530              cpi R22,5
 00AE E0E0              ldi R30,0
 00B0 7E07              cpc R23,R30
 00B2 09F4              brne X4
 00B4 9CC0              xjmp L19
 00B6           X4:
 00B6 9BC0              xjmp L19
 00B8           L33:
 00B8 6233              cpi R22,50
 00BA E0E0              ldi R30,0
 00BC 7E07              cpc R23,R30
 00BE 39F1              breq L26
 00C0 96C0              xjmp L19
 00C2           X0:
 00C2           ; 	{
 00C2           L21:
 00C2           ;     	case CLUSTER_NODE_SYNC:
 00C2           ; 	 	{
 00C2           ; 	   		sreg = SREG;
 00C2 6FB7              in R22,0x3f
 00C4           ;                       CLI();
 00C4 F894              cli
 00C6           ;                       if (!SYNC_FLAG) //下一次重新同步前将syncflag置为0
 00C6 20900300          lds R2,_SYNC_FLAG
 00CA 2220              tst R2
 00CC A1F4              brne L22
 00CE           ;                       {
 00CE           ;                       led0Toggle();
 00CE 0E940000          xcall _led0Toggle
 00D2           ;                       SYNC_FLAG =1;
 00D2 81E0              ldi R24,1
 00D4 80930300          sts _SYNC_FLAG,R24
 00D8           ;                               seqNO = m->data[0];
 00D8 FA01              movw R30,R20
 00DA A680              ldd R10,z+6
 00DC           ;                               start_T1(0,(LOCAL_ID *3000));
 00DC 20910000          lds R18,_LOCAL_ID
 00E0 3327              clr R19
 00E2 08EB              ldi R16,3000
 00E4 1BE0              ldi R17,11
 00E6 0E940000          xcall empy16s
 00EA 9801              movw R18,R16
 00EC 0027              clr R16
 00EE 0E940000          xcall _start_T1
 00F2           ;                       //start_T1(0,((LOCAL_ID * T_p_node) - (seqNO*slot_Tcluster)));
 00F2           ;                               CC1100_sleep();
 00F2 0E940000          xcall _CC1100_sleep
 00F6           ;                       //start_T1(0,(LOCAL_ID *3000));
 00F6           ;                       }
 00F6           L22:
 00F6           ; 	   		SREG = sreg;
 00F6 6FBF              out 0x3f,R22
 00F8           ;                       break;
 00F8 7AC0              xjmp L19
 00FA           L24:
 00FA           ; 	 	}
 00FA           ; 	 
 00FA           ; 		case CLUSTER_NODE_ACK:
 00FA           ; 	 	{
 00FA           ; 	   		led0Toggle();
 00FA 0E940000          xcall _led0Toggle
 00FE           ;                       //printf("ack %d\n",m->data[0]);
 00FE           ;                       stop_T3();
 00FE 0E940000          xcall _stop_T3
 0102           ;                       CC1100_sleep();
 0102 0E940000          xcall _CC1100_sleep
 0106           ;                       send_seq = 1;
 0106 81E0              ldi R24,1
 0108 80930C00          sts _send_seq,R24
 010C           ;                       //post(mcu_sleep);
 010C           ;               break;
 010C 70C0              xjmp L19
 010E           X1:
 010E           ; 	 	} 
 010E           ; 	 	case NODE_CHECK_CMD:
 010E           ; 	 	{
 010E           ; 	   		break;
 010E           L26:
 010E           ; 	 	} 
 010E           ; 	 	case NODE_DATA:
 010E           ; 	 	{
 010E           ; 	 		sreg = SREG;
 010E 6FB7              in R22,0x3f
 0110           ;                       CLI();
 0110 F894              cli
 0112           ;                       if (!SYNC_FLAG) //下一次重新同步前将syncflag置为0
 0112 20900300          lds R2,_SYNC_FLAG
 0116 2220              tst R2
 0118 09F0              breq X5
 011A 38C0              xjmp L27
 011C           X5:
 011C           ; 	  		{
 011C           ; 	   			SYNC_FLAG =1;
 011C 81E0              ldi R24,1
 011E 80930300          sts _SYNC_FLAG,R24
 0122           ;                               seqNO =  m->data[0];
 0122 FA01              movw R30,R20
 0124 A680              ldd R10,z+6
 0126           ;                               source_id = m->ID;
 0126 FA01              movw R30,R20
 0128 C180              ldd R12,z+1
 012A           ;                               if (source_id >LOCAL_ID)
 012A 20900000          lds R2,_LOCAL_ID
 012E 2C14              cp R2,R12
 0130 C0F4              brsh L29
 0132           ;                               start_T1(0,(T -((source_id-LOCAL_ID) * T_p_node + seqNO*RE_SEND_DELAY))); 
 0132 3C2C              mov R3,R12
 0134 3218              sub R3,R2
 0136 20900100          lds R2,_T_p_node
 013A 329C              mul R3,R2
 013C 1001              movw R2,R0
 013E 2A2D              mov R18,R10
 0140 3327              clr R19
 0142 04EF              ldi R16,500
 0144 11E0              ldi R17,1
 0146 0E940000          xcall empy16s
 014A 200E              add R2,R16

⌨️ 快捷键说明

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