⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.lis

📁 mega128平台下
💻 LIS
📖 第 1 页 / 共 3 页
字号:
                        .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 + -