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