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

📄 temperature.lst

📁 ADC采集温度数据通过nrf905发送出去
💻 LST
📖 第 1 页 / 共 5 页
字号:
__text_start:
__start:
      17 E5CF      LDI	R28,0x5F
      18 E0D4      LDI	R29,4
      19 BFCD      OUT	0x3D,R28
      1A BFDE      OUT	0x3E,R29
      1B 51CE      SUBI	R28,0x1E
      1C 40D0      SBCI	R29,0
      1D EA0A      LDI	R16,0xAA
      1E 8308      STD	Y+0,R16
      1F 2400      CLR	R0
      20 E6E7      LDI	R30,0x67
      21 E0F0      LDI	R31,0
      22 E011      LDI	R17,1
      23 34E3      CPI	R30,0x43
      24 07F1      CPC	R31,R17
      25 F011      BEQ	0x0028
      26 9201      ST	R0,Z+
      27 CFFB      RJMP	0x0023
      28 8300      STD	Z+0,R16
      29 E2E6      LDI	R30,0x26
      2A E0F0      LDI	R31,0
      2B E6A0      LDI	R26,0x60
      2C E0B0      LDI	R27,0
      2D E010      LDI	R17,0
      2E E000      LDI	R16,0
      2F BF0B      OUT	0x3B,R16
      30 32ED      CPI	R30,0x2D
      31 07F1      CPC	R31,R17
      32 F021      BEQ	0x0037
      33 95C8      LPM
      34 9631      ADIW	R30,1
      35 920D      ST	R0,X+
      36 CFF9      RJMP	0x0030
      37 D891      RCALL	_main
_exit:
      38 CFFF      RJMP	_exit
FILE: E:\变电站测温\测温模块\nrf905_temperature.c
(0001) 
(0002) /***********************************************************************************
(0003) Project:          uRF905 demo program (V2.1)
(0004) Filename:         uRF905_Sample_Code.c
(0005) Prozessor:        Mega8 family
(0006) Compiler:         ICCAVR Version 6.14
(0007) Autor:            YUAN
(0008) Copyrigth:        (c) Sensirion AG
(0009) ***********************************************************************************/
(0010) 
(0011) #include<iom8v.h>
(0012) #include <math.h>
(0013) #include<macros.h>
(0014) #include<eeprom.h>
(0015) #include<string.h>
(0016) #include<stdio.h>
(0017) 
(0018) #define CH_NO_FREQ_422_4MHz  0x000                     //工作频率422.4MHz(433MHz频段最低频率)
(0019) #define CH_NO_FREQ_422_5MHz  0x001                     //工作频率422.5MHz
(0020) #define CH_NO_FREQ_425_0MHz  0x01a                     //工作频率425.0MHz
(0021) #define CH_NO_FREQ_427_5MHz  0x033                     //工作频率427.5MHz
(0022) 
(0023) #define CH_NO_FREQ_430_0MHz  0x04c                     //工作频率430.0MHz
(0024) #define CH_NO_FREQ_433_0MHz  0x06a                     //工作频率433.0MHz(433MHz频段基准频率)
(0025) #define CH_NO_FREQ_433_1MHz  0x06b                     //工作频率433.1MHz
(0026) #define CH_NO_FREQ_433_2MHz  0x06c                     //工作频率433.2MHz
(0027) #define CH_NO_FREQ_434_7MHz  0x07b                     //工作频率434.7MHz
(0028) #define CH_NO_FREQ_473_5MHz  0x1ff                     //工作频率473.5MHz(433MHz频段最高频率)
(0029) 
(0030) #define CH_NO_FREQ_844_8MHz  0x000                     //工作频率844.8MHz(868MHz频段最低频率)
(0031) 
(0032) #define CH_NO_FREQ_862_0MHz  0x056                     //工作频率862.0MHz
(0033) #define CH_NO_FREQ_868_0MHz  0x074                     //工作频率868.0MHz(868MHz频段基准频率)
(0034) #define CH_NO_FREQ_868_2MHz  0x075                     //工作频率868.2MHz
(0035) #define CH_NO_FREQ_868_4MHz  0x076                     //工作频率868.4MHz
(0036) #define CH_NO_FREQ_869_8MHz  0x07d                     //工作频率869.8MHz
(0037) #define CH_NO_FREQ_895_8MHz  0x0ff                     //工作频率895.8MHz
(0038) #define CH_NO_FREQ_896_0MHz  0x100                     //工作频率896.0MHz
(0039) #define CH_NO_FREQ_900_0MHz  0x114                     //工作频率900.0MHz
(0040) #define CH_NO_FREQ_902_2MHz  0x11f                     //工作频率902.2MHz
(0041) #define CH_NO_FREQ_902_4MHz  0x120                     //工作频率902.4MHz
(0042) #define CH_NO_FREQ_915_0MHz  0x15f                     //工作频率915.0MHz(915MHz频段基准频率)
(0043) #define CH_NO_FREQ_927_8MHz  0x19f                     //工作频率927.8MHz
(0044) 
(0045) #define CH_NO_FREQ_947_0MHz  0x1ff                     //工作频率947.0MHz(915MHz频段最高频率)
(0046) 
(0047) #define CH_NO_FREQ           CH_NO_FREQ_430_0MHz       //工作频率433.0MHz
(0048) //#define CH_NO_FREQ           CH_NO_FREQ_915_0MHz       //工作频率915.0MHz
(0049) 
(0050) 
(0051) #define CH_NO_BYTE           CH_NO_FREQ & 0xff         //工作频率低8位       Byte0       01101100
(0052) 
(0053) #define AUTO_RETRAN          0x20                      //重发数据包          Byte1.5     0
(0054) #define RX_RED_PWR           0x10                      //接收低功耗模式      Byte1.4     0
(0055) #define PA_PWR__10dBm        0x00                      //输出功率-10dBm      Byte1.3~2   00
(0056) #define PA_PWR_2dBm          0x04                      //输出功率+2dBm       Byte1.3~2
(0057) #define PA_PWR_6dBm          0x08                      //输出功率+6dBm       Byte1.3~2
(0058) #define PA_PWR_10dBm         0x0c                      //输出功率+10dBm      Byte1.3~2
(0059) #define HFREQ_PLL_433MHz     0x00                      //工作在433MHz频段    Byte1.1     0
(0060) #define HFREQ_PLL_868MHz     0x02                      //工作在868MHz频段    Byte1.1
(0061) #define HFREQ_PLL_915MHz     0x02                      //工作在915MHz频段    Byte1.1
(0062) #define CH_NO_BIT8           CH_NO_FREQ >> 8           //工作频率第9位       Byte1.0     0
(0063) 
(0064) #define	ADDR_1				'G'
(0065) #define	ADDR_2				'W'
(0066) #define	ADDR_3				'Z'
(0067) #define	ADDR_4				'D'
(0068) 
(0069) #define CMD_ASKDATA					0x00
(0070) #define CMD_RETDATA					0x01
(0071) #define CMD_DOWNPARA				0x02
(0072) #define CMD_RETPARA					0x03
(0073) 
(0074) #define CMD_SETID                   0X05
(0075) #define CMD_SETID_OK                0X06
(0076) #define CMD_READID                    0x07
(0077) 
(0078) typedef unsigned char	BOOLEAN;
(0079) typedef unsigned char	INT8U;
(0080) typedef signed char		INT8S;
(0081) typedef unsigned int	INT16U;
(0082) typedef signed int		INT16S;
(0083) typedef unsigned long	INT32U;
(0084) typedef signed long		INT32S;
(0085) 
(0086) #define BIT_H(x)	(1<<x)
(0087) #define BIT_L(x)	(~(1<<x))
(0088) 
(0089) #define TX_STATUS	(PORTD |= BIT_H(PD2))
(0090) #define RX_STATUS	(PORTD &= BIT_L(PD2))
(0091) 
(0092) #define	PWR_UP_H	(PORTB |= BIT_H(PB0))
(0093) #define	PWR_UP_L	(PORTB &= BIT_L(PB0))
(0094) 
(0095) #define	CSN_H	 	(PORTB |= BIT_H(PB2))
(0096) #define	CSN_L	 	(PORTB &= BIT_L(PB2))
(0097) 
(0098) #define	MOSI_H	 	(PORTB |= BIT_H(PB3))
(0099) #define	MOSI_L	 	(PORTB &= BIT_L(PB3))
(0100) 
(0101) #define	MISO_H	 	(PORTB |= BIT_H(PB4))
(0102) #define	MISO_L	 	(PORTB &= BIT_L(PB4))
(0103) 
(0104) #define	SCK_H	 	(PORTB |= BIT_H(PB5))
(0105) #define	SCK_L	 	(PORTB &= BIT_L(PB5))
(0106) 
(0107) #define	CD			(PIND & BIT_H(PD2))
(0108) #define	DR			(PIND & BIT_H(PD3))
(0109) #define	AM			(PIND & BIT_H(PD4))
(0110) 
(0111) #define	TX_EN_H	 	(PORTD |= BIT_H(PD5))
(0112) #define	TX_EN_L	 	(PORTD &= BIT_L(PD5))
(0113) 
(0114) #define	TRX_CE_H	(PORTD |= BIT_H(PD6))
(0115) #define	TRX_CE_L	(PORTD &= BIT_L(PD6))
(0116) 
(0117) #define	LED_H	 	(PORTD |= BIT_H(PD7))
(0118) #define	LED_L	 	(PORTD &= BIT_L(PD7))
(0119) 
(0120) #define noACK 0
(0121) #define ACK   1
(0122) 
(0123) #define fosc		7372800
(0124) #define baud		115200
(0125) #define AD_NUM		30
(0126) 
(0127) #define MS_COUNT	fosc/1000/17		//延时计数
(0128) #define SR_NOP()	asm("nop")			//空指令
(0129) 
(0130) #define ID_L_ADDR			0x1fe				
(0131) #define ID_H_ADDR           	0x1fd	
(0132) 
(0133) #define LIMIT_START_ARRD    0x1c0
(0134) 
(0135) #define  num_ADDR   0x1b0
(0136) 
(0137) #define RXBUF_LEN	32
(0138) #define RXBUF_LEN1	RXBUF_LEN-1
(0139) 
(0140) #define SPI_BUF_LEN		16
(0141) #define SPI_BUF_LEN1	SPI_BUF_LEN-1
(0142) 
(0143) #define	BYTE	unsigned char
(0144) #define	WORD	unsigned int
(0145) 
(0146) static	WORD	adc_val;		//AD结果
(0147) 
(0148) WORD	adc_mux;		//AD通道
(0149) 
(0150) 
(0151) static	WORD	adc_mul;		//AD放大倍数,4--1倍,3-10倍,2--100倍,1--1000倍,0--10000倍
(0152) static	WORD	adc_num;
(0153) static	WORD	adc_num1;
(0154) static	WORD	adc_count;
(0155) 
(0156) BYTE	TxFlag[6];
(0157) 
(0158) BYTE	Mode;					//	运行模式	0 -- 正常,1 -- 测试
(0159) 
(0160) BYTE	SPI_Received;
(0161) BYTE	Register[10];
(0162) 
(0163) BYTE	StepCount=0;
(0164) BYTE    num = 1;
(0165) 
(0166) BYTE    data[16];
(0167) BYTE    startnum;
(0168) BYTE    no;
(0169) WORD    limit[8][3];
(0170) 
(0171) BYTE   alarmno;
(0172) 
(0173) static INT8U	rxbuf[RXBUF_LEN],LPCData=0xff;
(0174) static INT8U	rxpt;
(0175) static INT8U	handlept;
(0176) 
(0177) WORD	Alarm_flag_prev[8];			 
(0178) BYTE   alarm_flag[8];
(0179) 
(0180) 
(0181) static BYTE		tx_addr[4];
(0182) static BYTE		tx_buf[RXBUF_LEN];
(0183) static BYTE		tx_len;
(0184) static BYTE		lastcmd;
(0185) 
(0186) static INT8U	spi_rxbuf[SPI_BUF_LEN];
(0187) static INT8U	spi_rxpt;
(0188) static INT8U	spi_handlept;
(0189) //static INT8U	spi_txflag;
(0190) 
(0191) #define			W_CONFIG   			0x00
(0192) #define			R_CONFIG   			0x10
(0193) #define			W_TX_PAYLOAD		0x20
(0194) #define			R_TX_PAYLOAD		0x21
(0195) #define			W_TX_ADDRESS		0x22
(0196) #define			R_TX_ADDRESS		0x23
(0197) #define			R_RX_PAYLOAD		0x24
(0198) #define			CHANNEL_CONFIG		0x8c
(0199) #define			SPI_CMD_NUM			8
(0200) 
(0201) static	INT8U	ID_L;
(0202) static  INT8U   ID_H;
(0203) 	
(0204) WORD	TCNTData;
(0205) WORD	SecondCount=0;
(0206) WORD	Count=0;
(0207) 
(0208) BYTE	FlashFlag;		//灯闪烁标志
(0209) BYTE	SendDataFlag;
(0210) 
(0211) #define	SENDTIMER	3				//	每10秒钟发送一次数据
(0212) #define	NODATALIMIT	300				//	3分钟收不到命令则复位
(0213) #define	FLASHLIMIT	2				//	每收到一组数据闪烁1次
(0214) 
(0215) BYTE  temperature_L,temperature_H;
(0216) 
(0217) void handle(void);
(0218) void InitSPI(void);
(0219) void SendGram(BYTE cmd);
(0220) 
(0221) /////////////////////////////////////////////////////////////
(0222) BYTE EEPROM_read(WORD uiAddress)
(0223) {
(0224) 	while(EECR&(1<<EEWE));		//等待写入前一个字节
_EEPROM_read:
  uiAddress            --> R16
      39 99E1      SBIC	0x1C,1
      3A CFFE      RJMP	_EEPROM_read
(0225) 	EEAR=uiAddress;				//设置地址寄存器
      3B BB1F      OUT	0x1F,R17
      3C BB0E      OUT	0x1E,R16
(0226) 	EECR |= (1<<EERE);			//通过设置EERE,开始读EEPROM
      3D 9AE0      SBI	0x1C,0
(0227) 	return EEDR;				//返回数据寄存器
      3E B30D      IN	R16,0x1D
      3F 9508      RET
(0228) }
(0229) 
(0230) /////////////////////////////////////////////////////////////////////////////////
(0231) void EEPROM_write( WORD uiAddress, BYTE ucData)
(0232) {
(0233) 	while(EECR&(1<<EEWE));		//等待写入前一个字节
_EEPROM_write:
  ucData               --> R18
  uiAddress            --> R16
      40 99E1      SBIC	0x1C,1
      41 CFFE      RJMP	_EEPROM_write
(0234) 	EEAR=uiAddress;				//设置地址寄存器
      42 BB1F      OUT	0x1F,R17
      43 BB0E      OUT	0x1E,R16
(0235) 	EEDR=ucData;				//设置数据寄存器
      44 BB2D      OUT	0x1D,R18
(0236) 	EECR |= (1<<EEMWE);			//将EEMWE写入高
      45 9AE2      SBI	0x1C,2
(0237) 	EECR |= (1<<EEWE);			//通过设置EEWE,开始写EEPROM
      46 9AE1      SBI	0x1C,1
      47 9508      RET
(0238) }
(0239) //
(0240) void delay(WORD n)
(0241) {
(0242)     while(--n);
_delay:
  n                    --> R16
      48 01C8      MOVW	R24,R16
      49 9701      SBIW	R24,1
      4A 018C      MOVW	R16,R24
      4B 3000      CPI	R16,0
      4C 0701      CPC	R16,R17
      4D F7D1      BNE	0x0048
      4E 9508      RET
_sr_ms:
  i                    --> R20
  j                    --> R22
  n                    --> R16
      4F D92C      RCALL	push_xgsetF000
(0243) }
(0244) //延时n毫秒
(0245) void sr_ms(WORD n)
(0246) {	//延时n毫秒
(0247) 	WORD i,j;
(0248) 
(0249) 	for(i=0; i<n; i++)
      50 2744      CLR	R20
      51 2755      CLR	R21
      52 C013      RJMP	0x0066
(0250) 		for(j=0; j<MS_COUNT;j++);
      53 2766      CLR	R22
      54 2777      CLR	R23
      55 C002      RJMP	0x0058
      56 5F6F      SUBI	R22,0xFF
      57 4F7F      SBCI	R23,0xFF
      58 EB81      LDI	R24,0xB1
      59 E091      LDI	R25,1
      5A E0A0      LDI	R26,0
      5B E0B0      LDI	R27,0
      5C 011B      MOVW	R2,R22
      5D 2444      CLR	R4
      5E 2455      CLR	R5
      5F 1628      CP	R2,R24
      60 0639      CPC	R3,R25
      61 064A      CPC	R4,R26
      62 065B      CPC	R5,R27
      63 F394      BLT	0x0056
      64 5F4F      SUBI	R20,0xFF
      65 4F5F      SBCI	R21,0xFF
      66 1740      CP	R20,R16
      67 0751      CPC	R21,R17
      68 F350      BCS	0x0053
      69 C917      RJMP	pop_xgsetF000
_quarter_ms:
  i                    --> R20
  j                    --> R22
  n                    --> R16
      6A D911      RCALL	push_xgsetF000
(0251) }
(0252) 
(0253) /////////////////////////////////////////////////////////////
(0254) void quarter_ms(WORD n)
(0255) {	//延时n毫秒
(0256) 	WORD i,j;
(0257) 
(0258) 	for(i=0; i<n; i++)
      6B 2744      CLR	R20
      6C 2755      CLR	R21
      6D C013      RJMP	0x0081
(0259) 		for(j=0; j<MS_COUNT/4;j++);
      6E 2766      CLR	R22
      6F 2777      CLR	R23
      70 C002      RJMP	0x0073
      71 5F6F      SUBI	R22,0xFF
      72 4F7F      SBCI	R23,0xFF
      73 E68C      LDI	R24,0x6C
      74 E090      LDI	R25,0
      75 E0A0      LDI	R26,0
      76 E0B0      LDI	R27,0
      77 011B      MOVW	R2,R22
      78 2444      CLR	R4
      79 2455      CLR	R5
      7A 1628      CP	R2,R24
      7B 0639      CPC	R3,R25
      7C 064A      CPC	R4,R26
      7D 065B      CPC	R5,R27
      7E F394      BLT	0x0071
      7F 5F4F      SUBI	R20,0xFF
      80 4F5F      SBCI	R21,0xFF
      81 1740      CP	R20,R16
      82 0751      CPC	R21,R17
      83 F350      BCS	0x006E
      84 C8FC      RJMP	pop_xgsetF000
_half_ms:
  i                    --> R20
  j                    --> R22
  n                    --> R16
      85 D8F6      RCALL	push_xgsetF000
(0260) }
(0261) 
(0262) /////////////////////////////////////////////////////////////
(0263) void half_ms(WORD n)
(0264) {	//延时n毫秒
(0265) 	WORD i,j;
(0266) 
(0267) 	for(i=0; i<n; i++)
      86 2744      CLR	R20
      87 2755      CLR	R21
      88 C013      RJMP	0x009C
(0268) 		for(j=0; j<MS_COUNT/2;j++);
      89 2766      CLR	R22
      8A 2777      CLR	R23
      8B C002      RJMP	0x008E
      8C 5F6F      SUBI	R22,0xFF
      8D 4F7F      SBCI	R23,0xFF
      8E ED88      LDI	R24,0xD8
      8F E090      LDI	R25,0
      90 E0A0      LDI	R26,0
      91 E0B0      LDI	R27,0
      92 011B      MOVW	R2,R22

⌨️ 快捷键说明

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