📄 temperature.lst
字号:
__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 + -