main.lis

来自「mega128平台下」· LIS 代码 · 共 1,179 行 · 第 1/4 页

LIS
1,179
字号
                        .module main.c
                        .area data(ram, con, rel)
 0000           _flag::
 0000                   .blkb 1
                        .area idata
 0000 00                .byte 0
                        .area data(ram, con, rel)
 0001                   .blkb 1
                        .area idata
 0001 00                .byte 0
                        .area data(ram, con, rel)
 0002           _sync_count::
 0002                   .blkb 2
                        .area idata
 0002 3C00              .word 60
                        .area data(ram, con, rel)
                        .area text(rom, con, rel)
                        .even
 0000           _identifier_init::
 0000           ; /*簇头1
 0000           ; * main_frame:
 0000           ; *    init_device
 0000           ; *         init_port
 0000           ; *         init_led
 0000           ; *         init_timer
 0000           ; *         init_RF
 0000           ; *         init_uart
 0000           ; *    init_schedule
 0000           ; *    start_myprogram
 0000           ; *    main_schedule
 0000           ; */
 0000           ; //ICC-AVR application builder : 2006-9-26 20:14:28
 0000           ; // Target : M128
 0000           ; // Crystal: 7.3728Mhz
 0000           ; 
 0000           ; #include <iom128v.h>
 0000           ; #include <macros.h>
 0000           ; #include <stdio.h>
 0000           ; #include "../api/schedule.h"
 0000           ; #include "../api/cc1100.h"
 0000           ; #include "../api/led.h"
 0000           ; #include "../api/timer.h"
 0000           ; #include "../api/comm.h"
 0000           ; #include "../api/cc1100_reg.h"
 0000           ; 
 0000           ; #define SYNC_INTVL 500    //同步间隙50ms
 0000           ; #define DATA_TRANS_INTVL 500  //重发数据间隙50ms
 0000           ; #define CHANGE_CHAN_INTVL 12000  
 0000           ; #define COMM_MSG_LENGTH 31
 0000           ; #define NODE_MSG_LENGTH 11  //node发送的包长度,ack长度
 0000           ; #define LOCAL_GID 2
 0000           ; #define LOCAL_ID 0    //簇头节点号为0
 0000           ; #define CLUSTER_QUANTITY 2   //簇头总数
 0000           ; #define NODE_QUANTITY 2   //一个簇内node总数
 0000           ; 
 0000           ; 
 0000           ; //char a[4]={3,1,2,3};
 0000           ; //unsigned char recvBuff[128]; 
 0000           ; COMM_MSG recv,pre_trans;   //存放簇内节点的信息
 0000           ; NODE_MSG ack;
 0000           ; unsigned char local_buff[8];  //本地存放所有节点的信息,节点号1byte+温度1byte+电压2byte
 0000           ; unsigned char flag[NODE_QUANTITY]={0};
 0000           ; unsigned char sync_Cflag;    //cluster同步是否完成的标志
 0000           ; unsigned char sync_Nflag;    //cluster是否对本簇内node完成同步的标志
 0000           ; unsigned char counter_sync;      //cluster向node发送同步的次数
 0000           ; unsigned char counter_data;     //cluster向sink发送数据的次数
 0000           ; unsigned char change_channel;
 0000           ; 
 0000           ; unsigned int sync_count =60;
 0000           ; 
 0000           ; unsigned char *ackack;
 0000           ; 
 0000           ; //unsigned char test;
 0000           ; 
 0000           ; void identifier_init()
 0000           ; {
 0000           ;    sync_Cflag=0;
 0000 2224              clr R2
 0002 20920600          sts _sync_Cflag,R2
 0006           ;    sync_Nflag=0;
 0006 20920500          sts _sync_Nflag,R2
 000A           ;    counter_sync=0;
 000A 20920400          sts _counter_sync,R2
 000E           ;    counter_data=0;
 000E 20920300          sts _counter_data,R2
 0012           ;    change_channel=0x0A;
 0012 8AE0              ldi R24,10
 0014 80930200          sts _change_channel,R24
 0018           ;    pre_trans.len=COMM_MSG_LENGTH;
 0018 8FE1              ldi R24,31
 001A 80931B00          sts _pre_trans,R24
 001E           ;    pre_trans.ID=LOCAL_ID;
 001E 20921C00          sts _pre_trans+1,R2
 0022           ;    pre_trans.GID=LOCAL_GID;
 0022 82E0              ldi R24,2
 0024 80931D00          sts _pre_trans+2,R24
 0028           ;    pre_trans.DA=0;
 0028 3324              clr R3
 002A 30921F00          sts _pre_trans+3+1,R3
 002E 20921E00          sts _pre_trans+3,R2
 0032           ;    pre_trans.type=CLUSTER_DATA;
 0032 8CE3              ldi R24,60
 0034 80932000          sts _pre_trans+5,R24
 0038           L4:
 0038                   .dbline 0 ; func end
 0038 0895              ret
                        .even
 003A           _tras_ack::
 003A           ;    
 003A           ;    //test=0;
 003A           ;    //pre_trans.SeqNO=1;
 003A           ;   }
 003A           ;   
 003A           ; void tras_ack()
 003A           ; {
 003A           ;    CC1100_send(ackack,COMM_MSG_LENGTH+1); 
 003A 20E2              ldi R18,32
 003C 00910000          lds R16,_ackack
 0040 10910100          lds R17,_ackack+1
 0044 0E940000          xcall _CC1100_send
 0048           ;    printf("done\n");
 0048 00E0              ldi R16,<L10
 004A 10E0              ldi R17,>L10
 004C 0E940000          xcall _printf
 0050           L9:
 0050                   .dbline 0 ; func end
 0050 0895              ret
 0052           ;           data -> R18,R19
 0052           ;           addr -> R16,R17
                        .even
 0052           _eeprom_write::
 0052           ; }
 0052           ; 
 0052           ; void eeprom_write(unsigned  int addr,unsigned int data)
 0052           ; {
 0052           L12:
 0052           L13:
 0052           ; 	while(EECR&(1<<EEWE));
 0052 E199              sbic 0x1c,1
 0054 FECF              rjmp L12
 0056           ;       EEAR=addr;
 0056 1FBB              out 0x1f,R17
 0058 0EBB              out 0x1e,R16
 005A           ;       EEDR=data;
 005A 2DBB              out 0x1d,R18
 005C           ;       EECR|=(1<<EEMWE);
 005C E29A              sbi 0x1c,2
 005E           ;       EECR|=(1<<EEWE);
 005E E19A              sbi 0x1c,1
 0060           L11:
 0060                   .dbline 0 ; func end
 0060 0895              ret
 0062           ;           addr -> R16,R17
                        .even
 0062           _eeprom_read::
 0062           ; }
 0062           ; 
 0062           ; unsigned char eeprom_read(unsigned int addr)
 0062           ; {
 0062           L16:
 0062           L17:
 0062           ; 	while(EECR&(1<<EEWE));
 0062 E199              sbic 0x1c,1
 0064 FECF              rjmp L16
 0066           ;       EEAR=addr;
 0066 1FBB              out 0x1f,R17
 0068 0EBB              out 0x1e,R16
 006A           ;       EECR|=(1<<EERE);
 006A E09A              sbi 0x1c,0
 006C           ;       return EEDR;
 006C 0DB3              in R16,0x1d
 006E           L15:
 006E                   .dbline 0 ; func end
 006E 0895              ret
                        .even
 0070           _CC1100_sendDone::
 0070           ; }
 0070           ; 
 0070           ;   
 0070           ; unsigned char CC1100_sendDone()
 0070           ; {
 0070           L19:
 0070                   .dbline 0 ; func end
 0070 0895              ret
 0072           ;         nodeID -> R22
 0072           ;            msg -> R22,R23
 0072           ;              m -> R20,R21
                        .even
 0072           _CC1100_receive::
 0072 0E940000          xcall push_gset2
 0076           ;    //led0Toggle();
 0076           ;    //printf("send ack\n");
 0076           ;   }
 0076           ;   
 0076           ; extern unsigned char rxBuffer[32]; //接收缓冲区的大小  
 0076           ;  void CC1100_receive()
 0076           ; {
 0076           ;    unsigned char nodeID;
 0076           ;    unsigned char *msg = &rxBuffer[0];
 0076 60E0              ldi R22,<_rxBuffer
 0078 70E0              ldi R23,>_rxBuffer
 007A           ;    NODE_MSG *m;
 007A           ;    
 007A           ;    m=(NODE_MSG*)msg;  //转化为COMM_MSG类型
 007A AB01              movw R20,R22
 007C           ;    //printf("the received type is %d",m->type);
 007C           ;    switch(m->type)
 007C FA01              movw R30,R20
 007E 6581              ldd R22,z+5
 0080 7727              clr R23
 0082 6233              cpi R22,50
 0084 E0E0              ldi R30,0
 0086 7E07              cpc R23,R30
 0088 09F4              brne X2
 008A 5CC0              xjmp L36
 008C           X2:
 008C 82E3              ldi R24,50
 008E 90E0              ldi R25,0
 0090 8617              cp R24,R22
 0092 9707              cpc R25,R23
 0094 54F0              brlt L54
 0096           L53:
 0096 6130              cpi R22,1
 0098 E0E0              ldi R30,0
 009A 7E07              cpc R23,R30
 009C 61F0              breq L24
 009E 6330              cpi R22,3
 00A0 E0E0              ldi R30,0
 00A2 7E07              cpc R23,R30
 00A4 09F4              brne X3
 00A6 48C0              xjmp L35
 00A8           X3:
 00A8 C9C0              xjmp L20
 00AA           L54:
 00AA 6C33              cpi R22,60
 00AC E0E0              ldi R30,0
 00AE 7E07              cpc R23,R30
 00B0 09F4              brne X4
 00B2 A2C0              xjmp L50
 00B4           X4:
 00B4 C3C0              xjmp L20
 00B6           X0:
 00B6           ;    {
 00B6           L24:
 00B6           ;    	/*case(SINK_INIT_NODE):
 00B6           ; 	    LOCAL_ID = m->data[0];
 00B6           ; 	    eeprom_write(0,LOCAL_ID);
 00B6           ; 	    LOCAL_GID = m->data[1];
 00B6           ; 	    eeprom_write(0,LOCAL_GID);
 00B6           ; 	    T=m->data[2]; 
 00B6           ; 	    eeprom_write(0,T);
 00B6           ;             node_num =m->data[3];
 00B6           ;             eeprom_write(0,node_num);
 00B6           ;             ALARM_TMP = m->data[4];
 00B6           ;             eeprom_write(0,ALARM_TMP);
 00B6           ;            // work_channel = m->data[5];//根据节点组号判断就可以
 00B6           ; 	  		// 存储配置信息
 00B6           ; 	 	    break;*/
 00B6           ; 	
 00B6           ;    	case(SINK_CLUSTER_SYNC):
 00B6           ;    		{
 00B6           ;    			switch(m->data[0])
 00B6 FA01              movw R30,R20
 00B8 6681              ldd R22,z+6
 00BA 7727              clr R23
 00BC 6130              cpi R22,1
 00BE E0E0              ldi R30,0
 00C0 7E07              cpc R23,R30
 00C2 49F0              breq L28
 00C4 6230              cpi R22,2
 00C6 E0E0              ldi R30,0
 00C8 7E07              cpc R23,R30
 00CA 91F0              breq L29
 00CC 6330              cpi R22,3
 00CE E0E0              ldi R30,0
 00D0 7E07              cpc R23,R30
 00D2 01F1              breq L32
 00D4 B3C0              xjmp L20
 00D6           X1:
 00D6           ;    			{
 00D6           L28:
 00D6           ;    				case 1:  //第一次同步消息,时间同步,设定定时器,并置标志位
 00D6           ;    				   halSpiWriteReg(CCxxx0_CHANNR, 2*LOCAL_GID-1+0xa);
 00D6 2DE0              ldi R18,13
 00D8 0AE0              ldi R16,10
 00DA 0E940000          xcall _halSpiWriteReg
 00DE           ;                                  start_T1(0,3*SYNC_INTVL+1000); //设定计时器,等待sink三次同步发送完毕,1s后发送同步
 00DE 24EC              ldi R18,2500
 00E0 39E0              ldi R19,9
 00E2 0027              clr R16
 00E4 0E940000          xcall _start_T1
 00E8           ;                                  sync_Cflag=1;
 00E8 81E0              ldi R24,1
 00EA 80930600          sts _sync_Cflag,R24
 00EE           ;                                  break;

⌨️ 快捷键说明

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