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