📄 main.lis
字号:
.module main.c
.area data(ram, con, rel)
0000 _buf::
0000 .blkb 1
.area idata
0000 00 .byte 0
.area data(ram, con, rel)
0001 .blkb 8
.area idata
0001 0000000000000000 .byte 0,0,0,0,0,0,0,0
.area data(ram, con, rel)
0009 .dbfile E:\公司用\atmega8l\final\new\nrf905_receive\main.c
0009 .dbsym e buf _buf A[9:9]c
.area text(rom, con, rel)
0000 .dbfile E:\公司用\atmega8l\final\new\nrf905_receive\main.c
0000 .dbfunc e Get_CRC16 _Get_CRC16 fi
0000 ; low -> R20
0000 ; high -> R22
0000 ; i -> R10
0000 ; check -> R6
0000 ; j -> R14
0000 ; crc -> R12,R13
0000 ; len -> R18
0000 ; buf -> R4,R5
.even
0000 _Get_CRC16::
0000 00D0 rcall push_gset5
0002 2801 movw R4,R16
0004 .dbline -1
0004 .dbline 18
0004 ; /************************************
0004 ; 功能:nrf905接受函数主函数
0004 ; 时间:2008年8月30日
0004 ; 编写:陈锐
0004 ; 版本:1.2
0004 ; ************************************/
0004 ;
0004 ; #include "confg.h"
0004 ;
0004 ; //buf[0]:子机地址;buf[1]:命令参数0x03;
0004 ; //buf[2]:数据长度,长度为7;buf[3]和buf[4]:温度数据
0004 ; //buf[5]和buf[6]:子机电压数据;buf[7]和buf[8]:crc校检
0004 ; unsigned char buf[9]={0};//向主机发送的数据
0004 ;
0004 ; //crc校检函数
0004 ; //*buf数据缓冲区,len数据缓冲区长度,CRC 返回的16位校检码
0004 ; unsigned int Get_CRC16(unsigned char *buf,unsigned char len)
0004 ; {
0004 .dbline 23
0004 ; unsigned char high,low;
0004 ; unsigned char i,j;
0004 ; unsigned char check;
0004 ; unsigned int crc;
0004 ; crc=0xffff;
0004 8FEF ldi R24,65535
0006 9FEF ldi R25,255
0008 6C01 movw R12,R24
000A .dbline 24
000A ; for(i=0;i<len;i++)
000A AA24 clr R10
000C 1FC0 rjmp L5
000E L2:
000E .dbline 25
000E ; {
000E .dbline 26
000E ; crc=crc^buf[i];
000E EA2D mov R30,R10
0010 FF27 clr R31
0012 E40D add R30,R4
0014 F51D adc R31,R5
0016 2080 ldd R2,z+0
0018 3324 clr R3
001A C224 eor R12,R2
001C D324 eor R13,R3
001E .dbline 27
001E ; for(j=0;j<8;j++)
001E EE24 clr R14
0020 11C0 rjmp L9
0022 L6:
0022 .dbline 28
0022 ; {
0022 .dbline 29
0022 ; check=crc&1;
0022 C601 movw R24,R12
0024 8170 andi R24,1
0026 9070 andi R25,0
0028 682E mov R6,R24
002A .dbline 30
002A ; crc=crc>>1;
002A D694 lsr R13
002C C794 ror R12
002E .dbline 31
002E ; crc=crc&0x7fff;
002E C601 movw R24,R12
0030 9F77 andi R25,127
0032 6C01 movw R12,R24
0034 .dbline 32
0034 ; if(check==1)
0034 862D mov R24,R6
0036 8130 cpi R24,1
0038 21F4 brne L10
003A .dbline 33
003A ; {
003A .dbline 34
003A ; crc=crc^0xa001;
003A 81E0 ldi R24,40961
003C 90EA ldi R25,160
003E C826 eor R12,R24
0040 D926 eor R13,R25
0042 .dbline 35
0042 ; }
0042 L10:
0042 .dbline 36
0042 L7:
0042 .dbline 27
0042 E394 inc R14
0044 L9:
0044 .dbline 27
0044 8E2D mov R24,R14
0046 8830 cpi R24,8
0048 60F3 brlo L6
004A .dbline 37
004A L3:
004A .dbline 24
004A A394 inc R10
004C L5:
004C .dbline 24
004C A216 cp R10,R18
004E F8F2 brlo L2
0050 .dbline 38
0050 ; }
0050 ; }
0050 ; high=crc&0x00ff;
0050 6C2D mov R22,R12
0052 7070 andi R23,0
0054 .dbline 39
0054 ; low=crc>>8;
0054 A601 movw R20,R12
0056 452F mov R20,R21
0058 5527 clr R21
005A .dbline 40
005A ; crc=(high<<8)|low;
005A D62E mov R13,R22
005C C42E mov R12,R20
005E .dbline 41
005E ; return crc;
005E 8601 movw R16,R12
0060 .dbline -2
0060 L1:
0060 00D0 rcall pop_gset5
0062 .dbline 0 ; func end
0062 0895 ret
0064 .dbsym r low 20 c
0064 .dbsym r high 22 c
0064 .dbsym r i 10 c
0064 .dbsym r check 6 c
0064 .dbsym r j 14 c
0064 .dbsym r crc 12 i
0064 .dbsym r len 18 c
0064 .dbsym r buf 4 pc
0064 .dbend
0064 .dbfunc e port_init _port_init fV
.even
0064 _port_init::
0064 .dbline -1
0064 .dbline 46
0064 ; }
0064 ;
0064 ; //串口初始化
0064 ; void port_init(void)
0064 ; {
0064 .dbline 48
0064 ;
0064 ; PORTB = 0xD7;
0064 87ED ldi R24,215
0066 88BB out 0x18,R24
0068 .dbline 49
0068 ; DDRB = 0x2C;
0068 8CE2 ldi R24,44
006A 87BB out 0x17,R24
006C .dbline 50
006C ; PORTC = 0x00; //m103 output only
006C 2224 clr R2
006E 25BA out 0x15,R2
0070 .dbline 51
0070 ; DDRC = 0x00;
0070 24BA out 0x14,R2
0072 .dbline 52
0072 ; PORTD = 0x1f;
0072 8FE1 ldi R24,31
0074 82BB out 0x12,R24
0076 .dbline 53
0076 ; DDRD = 0xe0;
0076 80EE ldi R24,224
0078 81BB out 0x11,R24
007A .dbline -2
007A .dbline 54
007A ; }
007A L12:
007A .dbline 0 ; func end
007A 0895 ret
007C .dbend
007C .dbfunc e spi_init _spi_init fV
007C ; temp -> R16
.even
007C _spi_init::
007C .dbline -1
007C .dbline 59
007C ;
007C ;
007C ; //SPI initialize
007C ; void spi_init(void)
007C ; {uchar temp;
007C .dbline 62
007C ;
007C ; //SPCR = 0xD1; //SPI中断允许,SPI允许,主机模式,MSB,极性方式00,1/16系统时钟速率
007C ; SPCR = 0x51; //不使用SPI中断,其它同上
007C 81E5 ldi R24,81
007E 8DB9 out 0xd,R24
0080 .dbline 63
0080 ; SPSR = 0x00; //setup SPI
0080 2224 clr R2
0082 2EB8 out 0xe,R2
0084 .dbline 65
0084 ;
0084 ; temp = SPSR; //!!!
0084 0EB1 in R16,0xe
0086 .dbline 66
0086 ; temp = SPDR; //清空SPI,和中断标志,使SPI空闲
0086 0FB1 in R16,0xf
0088 .dbline -2
0088 .dbline 67
0088 ; }
0088 L13:
0088 .dbline 0 ; func end
0088 0895 ret
008A .dbsym r temp 16 c
008A .dbend
008A .dbfunc e init_devices _init_devices fV
.even
008A _init_devices::
008A .dbline -1
008A .dbline 71
008A ;
008A ; //call this routine to initialize all peripherals
008A ; void init_devices(void)
008A ; {
008A .dbline 73
008A ; //stop errant interrupts until set up
008A ; CLI(); //disable all interrupts
008A F894 cli
008C .dbline 74
008C ; port_init();
008C EBDF rcall _port_init
008E .dbline 75
008E ; spi_init();
008E F6DF rcall _spi_init
0090 .dbline 76
0090 ; uart_init();
0090 00D0 rcall _uart_init
0092 .dbline 78
0092 ;
0092 ; MCUCR = 0x0c;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -