📄 main.lis
字号:
.module main.c
.area data(ram, con, rel)
0000 _unreceive_timer::
0000 .blkb 2
.area idata
0000 0000 .byte 0,0
.area data(ram, con, rel)
0002 _receive_flag::
0002 .blkb 2
.area idata
0002 0000 .byte 0,0
.area data(ram, con, rel)
.area text(rom, con, rel)
.even
0000 _port_init::
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 ;
0000 ; #define LEN_SEND_MSG 12
0000 ; #define SYNC_INTERVAL 500 //实际间隔为50ms 因为发送过程有30ms的延时
0000 ; #define CLUSTER_NUMBER 2
0000 ; #define NODE_NUMBER 2
0000 ;
0000 ; COMM_MSG_CMD SYNC_MSG, RADIO_ACK_MSG;
0000 ; unsigned char SyncSeqNo;
0000 ; unsigned char ask_seqno;
0000 ; unsigned char unreceive_timer[CLUSTER_NUMBER]= {0,0};
0000 ; unsigned char receive_flag[CLUSTER_NUMBER]= {0,0};
0000 ; unsigned int crc;
0000 ; static unsigned char Data[28]; //server-sink串口数据
0000 ;
0000 ;
0000 ; typedef struct NodeData{
0000 ; unsigned char ID;
0000 ; unsigned char temp;
0000 ; unsigned char vol;
0000 ; }NodeData;
0000 ; NodeData *Node[CLUSTER_NUMBER][NODE_NUMBER];
0000 ;
0000 ;
0000 ; //unsigned char len_COMM_MSG = (sizeof(COMM_MSG))-1;
0000 ;
0000 ; /**************************************************
0000 ; * port init
0000 ; *
0000 ; * cc1100
0000 ; * IN G1 o
0000 ; * GD0O D1 i
0000 ; * CSN C2 o
0000 ; * SCLK G0 o
0000 ; * OUT C1 i
0000 ; *
0000 ; * led
0000 ; * led0 C4 o
0000 ; * led1 C5 o
0000 ; * led2 C6 o
0000 ; ************************************************** */
0000 ; void port_init(void)
0000 ; {
0000 ; PORTA = 0x00;
0000 2224 clr R2
0002 2BBA out 0x1b,R2
0004 ; DDRA = 0x00;
0004 2ABA out 0x1a,R2
0006 ; PORTB = 0x00;
0006 28BA out 0x18,R2
0008 ; DDRB = 0x00;
0008 27BA out 0x17,R2
000A ; PORTC = 0x00; //m103 output only
000A 25BA out 0x15,R2
000C ; DDRC = 0x74;
000C 84E7 ldi R24,116
000E 84BB out 0x14,R24
0010 ; PORTD = 0x00;
0010 22BA out 0x12,R2
0012 ; DDRD = 0x00;
0012 21BA out 0x11,R2
0014 ; PORTE = 0x00;
0014 23B8 out 0x3,R2
0016 ; DDRE = 0x00;
0016 22B8 out 0x2,R2
0018 ; PORTF = 0x00;
0018 20926200 sts 98,R2
001C ; DDRF = 0x00;
001C 20926100 sts 97,R2
0020 ; PORTG = 0x00;
0020 20926500 sts 101,R2
0024 ; DDRG = 0x03;
0024 83E0 ldi R24,3
0026 80936400 sts 100,R24
002A L4:
002A .dbline 0 ; func end
002A 0895 ret
.even
002C _uart0_init::
002C ; }
002C ;
002C ;
002C ; /**************************************************
002C ; //UART0 initialize
002C ; // desired baud rate: 57600
002C ; // actual: baud rate:57600 (0.0%)
002C ; // char size: 8 bit
002C ; // parity: Disabled
002C ; **************************************************/
002C ; void uart0_init(void)
002C ; {
002C ; UCSR0B = 0x00; //disable while setting baud rate
002C 2224 clr R2
002E 2AB8 out 0xa,R2
0030 ; UCSR0A = 0x00;
0030 2BB8 out 0xb,R2
0032 ; UCSR0C = 0x06;
0032 86E0 ldi R24,6
0034 80939500 sts 149,R24
0038 ; UBRR0L = 0x07; //set baud rate lo
0038 87E0 ldi R24,7
003A 89B9 out 0x9,R24
003C ; UBRR0H = 0x00; //set baud rate hi
003C 20929000 sts 144,R2
0040 ; UCSR0B = 0xD8;
0040 88ED ldi R24,216
0042 8AB9 out 0xa,R24
0044 L5:
0044 .dbline 0 ; func end
0044 0895 ret
.even
0046 _init_devices::
0046 ; }
0046 ;
0046 ; //call this routine to initialize all peripherals
0046 ; void init_devices(void)
0046 ; {
0046 ; //stop errant interrupts until set up
0046 ; CLI(); //disable all interrupts
0046 F894 cli
0048 ; XDIV = 0x00; //xtal divider
0048 2224 clr R2
004A 2CBE out 0x3c,R2
004C ; XMCRA = 0x00; //external memory
004C 20926D00 sts 109,R2
0050 ; port_init(); //端口初始化
0050 D7DF xcall _port_init
0052 ; led_init(); //所有灯灭
0052 0E940000 xcall _led_init
0056 ; T0_init();
0056 0E940000 xcall _T0_init
005A ; T2_init();
005A 0E940000 xcall _T2_init
005E ; T1_init();
005E 0E940000 xcall _T1_init
0062 ; T3_init();
0062 0E940000 xcall _T3_init
0066 ; CC1100_init(); //RF初始化
0066 0E940000 xcall _CC1100_init
006A ; uart0_init(); //串口初始化
006A E0DF xcall _uart0_init
006C ;
006C ; MCUCR = 0x00;
006C 2224 clr R2
006E 25BE out 0x35,R2
0070 ; EICRA = 0x00; //extended ext ints
0070 20926A00 sts 106,R2
0074 ; EICRB = 0x00; //extended ext ints
0074 2ABE out 0x3a,R2
0076 ; EIMSK = 0x00;
0076 29BE out 0x39,R2
0078 ; TIMSK = 0x00; //timer interrupt sources
0078 27BE out 0x37,R2
007A ; ETIMSK = 0x00; //extended timer interrupt sources
007A 20927D00 sts 125,R2
007E ; SEI(); //re-enable interrupts
007E 7894 sei
0080 L6:
0080 .dbline 0 ; func end
0080 0895 ret
0082 ; i -> R20
0082 ; b -> R18
0082 ; intcrc -> R16,R17
.even
0082 _xcrc_byte::
0082 0E940000 xcall push_gset1
0086 ; //all peripherals are now initialized
0086 ; }
0086 ;
0086 ;
0086 ; /******************************************************
0086 ; * crc校验
0086 ; *
0086 ; *******************************************************/
0086 ; unsigned short int xcrc_byte(unsigned short intcrc, unsigned char b)
0086 ; {
0086 ; unsigned char i;
0086 ;
0086 ; crc = crc ^ b << 8;
0086 222E mov R2,R18
0088 3324 clr R3
008A 322C mov R3,R2
008C 2224 clr R2
008E 40902400 lds R4,_crc
0092 50902500 lds R5,_crc+1
0096 4224 eor R4,R2
0098 5324 eor R5,R3
009A 50922500 sts _crc+1,R5
009E 40922400 sts _crc,R4
00A2 ; i = 8;
00A2 48E0 ldi R20,8
00A4 L8:
00A4 ; do{
00A4 ; if (crc & 0x8000)
00A4 20902400 lds R2,_crc
00A8 30902500 lds R3,_crc+1
00AC 37FE sbrs R3,7
00AE 0BC0 rjmp L11
00B0 ; crc = crc << 1 ^ 0x1021;
00B0 81E2 ldi R24,4129
00B2 90E1 ldi R25,16
00B4 220C lsl R2
00B6 331C rol R3
00B8 2826 eor R2,R24
00BA 3926 eor R3,R25
00BC 30922500 sts _crc+1,R3
00C0 20922400 sts _crc,R2
00C4 0AC0 xjmp L12
00C6 L11:
00C6 ; else
00C6 ; crc = crc << 1;
00C6 20902400 lds R2,_crc
00CA 30902500 lds R3,_crc+1
00CE 220C lsl R2
00D0 331C rol R3
00D2 30922500 sts _crc+1,R3
00D6 20922400 sts _crc,R2
00DA L12:
00DA L9:
00DA ; }while (--i);
00DA 842F mov R24,R20
00DC 8150 subi R24,1
00DE 482F mov R20,R24
00E0 8823 tst R24
00E2 01F7 brne L8
00E4 ;
00E4 ; return crc;
00E4 00912400 lds R16,_crc
00E8 10912500 lds R17,_crc+1
00EC L7:
00EC 0E940000 xcall pop_gset1
00F0 .dbline 0 ; func end
00F0 0895 ret
00F2 ; crc -> R20,R21
00F2 ; count -> R22,R23
00F2 ; index -> R10,R11
00F2 ; packet -> R12,R13
.even
00F2 _xcrc_calc::
00F2 0E940000 xcall push_gset4
00F6 5901 movw R10,R18
00F8 6801 movw R12,R16
00FA 6885 ldd R22,y+8
00FC 7985 ldd R23,y+9
00FE ; }
00FE ;
00FE ; unsigned int xcrc_calc(char *packet, int index, int count)
00FE ; {
00FE ; int crc = 0;
00FE 4427 clr R20
0100 5527 clr R21
0102 0DC0 xjmp L15
0104 L14:
0104 1501 movw R2,R10
0106 C101 movw R24,R2
0108 0196 adiw R24,1
010A 5C01 movw R10,R24
010C F101 movw R30,R2
010E EC0D add R30,R12
0110 FD1D adc R31,R13
0112 2081 ldd R18,z+0
0114 8A01 movw R16,R20
0116 B5DF xcall _xcrc_byte
0118 A801 movw R20,R16
011A 6150 subi R22,1
011C 7040 sbci R23,0
011E L15:
011E ;
011E ; while (count > 0)
011E 2224 clr R2
0120 3324 clr R3
0122 2616 cp R2,R22
0124 3706 cpc R3,R23
0126 74F3 brlt L14
0128 ; {
0128 ; crc = xcrc_byte(crc, packet[index++]);
0128 ; count--;
0128 ; }
0128 ; return crc;
0128 8A01 movw R16,R20
012A L13:
012A 0E940000 xcall pop_gset4
012E .dbline 0 ; func end
012E 0895 ret
.even
0130 _T0_timeout::
0130 ; }
0130 ;
0130 ; /*
0130 ; * T0计时中断
0130 ; */
0130 ;
0130 ; void T0_timeout()
0130 ; {
0130 ;
0130 ; SyncSeqNo++;
0130 80912700 lds R24,_SyncSeqNo
0134 8F5F subi R24,255 ; addi 1
0136 80932700 sts _SyncSeqNo,R24
013A ; SYNC_MSG.data[0] = SyncSeqNo;
013A 282E mov R2,R24
013C 20923F00 sts _SYNC_MSG+6,R2
0140 ; CC1100_send(((char *)&SYNC_MSG),LEN_SEND_MSG+1);
0140 2DE0 ldi R18,13
0142 00E0 ldi R16,<_SYNC_MSG
0144 10E0 ldi R17,>_SYNC_MSG
0146 0E940000 xcall _CC1100_send
014A ; start_T0(0,SYNC_INTERVAL);
014A 24EF ldi R18,500
014C 31E0 ldi R19,1
014E 0027 clr R16
0150 0E940000 xcall _start_T0
0154 ;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -