📄 jifeng_jieshou.lst
字号:
__text_start:
__start:
0132 E5CF LDI R28,0x5F
0133 E0D2 LDI R29,2
0134 BFCD OUT 0x3D,R28
0135 BFDE OUT 0x3E,R29
0136 51C0 SUBI R28,0x10
0137 40D0 SBCI R29,0
0138 EA0A LDI R16,0xAA
0139 8308 STD Y+0,R16
013A 2400 CLR R0
013B E6EF LDI R30,0x6F
013C E0F0 LDI R31,0
013D E010 LDI R17,0
013E 37E5 CPI R30,0x75
013F 07F1 CPC R31,R17
0140 F011 BEQ 0x0143
0141 9201 ST R0,Z+
0142 CFFB RJMP 0x013E
0143 8300 STD Z+0,R16
0144 E5E4 LDI R30,0x54
0145 E0F2 LDI R31,2
0146 E6A0 LDI R26,0x60
0147 E0B0 LDI R27,0
0148 E012 LDI R17,2
0149 36E3 CPI R30,0x63
014A 07F1 CPC R31,R17
014B F021 BEQ 0x0150
014C 95C8 LPM
014D 9631 ADIW R30,1
014E 920D ST R0,X+
014F CFF9 RJMP 0x0149
0150 D30B RCALL _main
_exit:
0151 CFFF RJMP _exit
_Delay:
i --> R20
x --> R16
0152 D340 RCALL push_gset1
FILE: F:\开发板配套资料\JASK3000软件开发包\遥控开关\NRF905_接收\jifeng_jieshou.c
(0001) //ICC-AVR application builder : 2007-8-11 20:37:32
(0002) // Target : M16
(0003) // Crystal: 8.0000Mhz
(0004) #include <iom16v.h>
(0005) #include <macros.h>
(0006) #define uint unsigned int
(0007) #define uchar unsigned char
(0008) //---------------------------------模式控制定义---------------------------------
(0009) //#define nrf905_TX_EN PB0 //输出1
(0010) #define Hign_nrf905_TX_EN PORTB |= (1 << PB0);
(0011) #define Low_nrf905_TX_EN PORTB &= ~(1 << PB0);
(0012) //#define nrf905_TRX_CE PD5 //输出1
(0013) #define Hign_nrf905_TRX_CE PORTD |= (1 << PD5);
(0014) #define Low_nrf905_TRX_CE PORTD &= ~(1 << PD5);
(0015) //#define nrf905_PWR PB1 //输出1
(0016) #define Hign_nrf905_PWR PORTB |= (1 << PB1);
(0017) #define Low_nrf905_PWR PORTB &= ~(1 << PB1);
(0018) //--------------------------------NRF905-SPI口接口定义--------------------------
(0019) //#define nrf905_MISO PB6 //输入0
(0020) //#define nrf905_MOSI PB5 //输出1
(0021) //#define nrf905_SCK PB7 //输出1
(0022) #define Low_nrf905_SCK PORTB &= ~(1 << PB7);
(0023) //#define nrf905_CSN PB4 //输出1
(0024) #define Hign_nrf905_CSN PORTB |= (1 << PB4);
(0025) #define Low_nrf905_CSN PORTB &= ~(1 << PB4);
(0026) //-------------------------------NRF905状态输出口-------------------------------
(0027) //#define nrf905_CD PD4 //输入0
(0028) #define Hign_nrf905_CD PORTD |= (1 << PD4);
(0029) #define Low_nrf905_CD PORTD &= ~(1 << PD4);
(0030) #define Read_nrf905_CD PINB & (1 << PD4);
(0031) //#define nrf905_AM PB3 //输入0
(0032) #define Hign_nrf905_AM PORTB |= (1 << PB3);
(0033) #define Low_nrf905_AM PORTB &= ~(1 << PB3);
(0034) #define Read_nrf905_AM PINB & (1 << PB3);
(0035) //#define nrf905_DR PB2 //输入0
(0036) #define Hign_nrf905_DR PORTB |= (1 << PB2);
(0037) #define Low_nrf905_DR PORTB &= ~(1 << PB2);
(0038) #define Read_nrf905_DR PINB & (1 << PB2);
(0039) //------------------------------LCD状态输出口-----------------------------------
(0040) //#define LCD_CS PC7 //1-out
(0041) //#define Out_LCD_CS DDRC |= (1 << PC7);
(0042) #define Hign_LCD_CS PORTC |= (1 << PC7);
(0043) #define Low_LCD_CS PORTC &= ~(1 << PC7);
(0044) //#define LCD_RESET PC6 //1-out
(0045) //#define Out_CD_RESET DDRC |= (1 << PC6);
(0046) #define Hign_LCD_RESET PORTC |= (1 << PC6);
(0047) #define Low_LCD_RESET PORTC &= ~(1 << PC6);
(0048) //#define LCD_RS PC5 //1-out
(0049) //#define Out_LCD_RS DDRC |= (1 << PC5);
(0050) #define Hign_LCD_RS PORTC |= (1 << PC5);
(0051) #define Low_LCD_RS PORTC &= ~(1 << PC5);
(0052) //#define LCD_SCL PC4 //1-out
(0053) //#define Out_LCD_SCL DDRC |= (1 << PC4);
(0054) #define Hign_LCD_SCL PORTC |= (1 << PC4);
(0055) #define Low_LCD_SCL PORTC &= ~(1 << PC4);
(0056) //#define LCD_SI PC3 //1-ou
(0057) //#define Out_LCD_SI DDRC |= (1 << PC3);
(0058) #define Hign_LCD_SI PORTC |= (1 << PC3);
(0059) #define Low_LCD_SI PORTC &= ~(1 << PC3);
(0060) //-------------------------------BELL蜂明器-------------------------------------
(0061) #define Hign_BELL PORTD |= (1 << PD6);
(0062) #define Low_BELL PORTD &= ~(1 << PD6);
(0063) //-------------------------------JDQ继电器--------------------------------------
(0064) #define Hign_JDQ PORTD |= (1 << PD7)
(0065) #define Low_JDQ PORTD &= ~(1 << PD7)
(0066) //------------------------LCD字库---------------------------------------------
(0067) const uchar ling16[16]=
(0068) {0x00,0xE0,0xF0,0x08,0x08,0x18,0xF0,0xC0,0x00,0x0F,0x1F,0x20,0x20,0x30,0x1F,0x07};//0
(0069) const uchar yi16[16]=
(0070) {0x00,0x00,0x10,0xF0,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x3F,0x3F,0x20,0x20,0x00};//1
(0071) const uchar er16[16]=
(0072) {0x00,0x70,0x78,0x08,0x08,0x98,0xF8,0x70,0x00,0x30,0x38,0x34,0x32,0x31,0x30,0x38};//2
(0073) const uchar san16[16]=
(0074) {0x00,0x30,0x38,0x88,0x88,0xF8,0x70,0x00,0x00,0x18,0x38,0x21,0x21,0x33,0x1E,0x0C};//3
(0075) const uchar si16[16]=
(0076) {0x00,0x00,0x80,0x60,0x30,0xF8,0xF8,0x00,0x00,0x06,0x05,0x24,0x24,0x3F,0x3F,0x24};//4
(0077) const uchar wu16[16]=
(0078) {0x00,0xF0,0xF8,0x88,0x88,0x88,0x08,0x00,0x00,0x19,0x39,0x20,0x20,0x31,0x1F,0x06};//5
(0079) const uchar liu16[16]=
(0080) {0x00,0xE0,0xF0,0x88,0x88,0x98,0x98,0x00,0x00,0x0F,0x3F,0x20,0x20,0x20,0x1F,0x0E};//6
(0081) const uchar qi16[16]=
(0082) {0x00,0x38,0x18,0x08,0x88,0xE8,0x38,0x08,0x00,0x00,0x00,0x3E,0x3F,0x00,0x00,0x00};//7
(0083) const uchar ba16[16]=
(0084) {0x00,0x70,0xF8,0x8C,0x8C,0x8C,0xF8,0x70,0x00,0x0E,0x1F,0x31,0x31,0x33,0x1F,0x0E};//8
(0085) const uchar jiu16[16]=
(0086) {0x00,0xF0,0xF8,0x08,0x08,0x18,0xF8,0xF0,0x00,0x19,0x33,0x32,0x32,0x3B,0x1F,0x0F};//9
(0087) const uchar xsdian[16]=
(0088) {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x30,0x00};//.
(0089)
(0090) //-------------------------------------------------------------------------------
(0091) const uchar wu[32]= //无
(0092) {0x00,0x40,0x42,0x42,0x42,0x42,0xFE,0x42,0xC2,0x42,0x43,0x42,0x60,0x40,0x00,0x00,
(0093) 0x00,0x80,0x40,0x20,0x18,0x06,0x01,0x00,0x3F,0x40,0x40,0x40,0x40,0x40,0x70,0x00};
(0094) const uchar xian[32]= //线
(0095) {0x00,0x20,0x30,0xAC,0x63,0x20,0x30,0x20,0x20,0xFF,0x90,0x92,0x94,0xD0,0x80,0x00,
(0096) 0x20,0x62,0x23,0x12,0x12,0x12,0x41,0x41,0x21,0x17,0x18,0x24,0x42,0x80,0xE0,0x00};
(0097) const uchar yao[32]= //遥
(0098) {0x40,0x42,0x44,0xCC,0x00,0x42,0x36,0x2A,0x22,0xFE,0x21,0x29,0x25,0x80,0x00,0x00,
(0099) 0x00,0x40,0x20,0x1F,0x21,0x41,0x5D,0x49,0x49,0x4F,0x49,0x49,0x5D,0x61,0x21,0x00};
(0100) const uchar kong[32]= //控
(0101) {0x10,0x10,0x10,0xFF,0x90,0x50,0x0C,0x44,0x24,0x15,0x06,0x14,0x24,0x54,0x0C,0x00,
(0102) 0x02,0x42,0x81,0x7F,0x00,0x40,0x42,0x42,0x42,0x42,0x7E,0x42,0x43,0x62,0x40,0x00};
(0103) const uchar xi[32]= //系
(0104) {0x00,0x02,0x22,0x22,0x32,0x2E,0xA2,0x62,0x22,0x22,0x91,0x09,0x01,0x00,0x00,0x00,
(0105) 0x00,0x00,0x42,0x22,0x1A,0x43,0x82,0x7E,0x02,0x02,0x0A,0x13,0x66,0x00,0x00,0x00};
(0106) const uchar tong[32]= //统
(0107) {0x20,0x30,0xAC,0x63,0x30,0x88,0xC8,0xA8,0x99,0x8E,0x88,0xA8,0xCC,0x88,0x00,0x00,
(0108) 0x22,0x67,0x22,0x12,0x92,0x40,0x30,0x0F,0x00,0x00,0x3F,0x40,0x40,0x41,0x70,0x00};
(0109) const uchar ji[32]= //继 //继
(0110) {0x20,0x30,0xAC,0x63,0x30,0x00,0xFE,0x88,0x90,0xA0,0xFF,0xA0,0x90,0x98,0x00,0x00,
(0111) 0x22,0x67,0x22,0x12,0x12,0x00,0x7F,0x48,0x44,0x42,0x7F,0x42,0x44,0x6C,0x40,0x00};
(0112) const uchar dian[32]= //电
(0113) {0x00,0xF8,0x48,0x48,0x48,0x48,0xFF,0x48,0x48,0x48,0x48,0xFC,0x08,0x00,0x00,0x00,
(0114) 0x00,0x07,0x02,0x02,0x02,0x02,0x3F,0x42,0x42,0x42,0x42,0x47,0x40,0x70,0x00,0x00};
(0115) const uchar qi[32]= //器
(0116) {0x80,0x80,0x9F,0x91,0x91,0x91,0x9F,0xE0,0x9F,0x91,0xB1,0xD1,0x9F,0xC0,0x80,0x00,
(0117) 0x08,0x08,0xFC,0x8C,0x8A,0x8A,0xF9,0x00,0xF9,0x8A,0x8A,0x8C,0xFC,0x08,0x08,0x00};
(0118) const uchar kai[32]= //开
(0119) {0x80,0x82,0x82,0x82,0xFE,0x82,0x82,0x82,0x82,0x82,0xFE,0x82,0x83,0xC2,0x80,0x00,
(0120) 0x00,0x80,0x40,0x30,0x0F,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00};
(0121) const uchar feng[32]= //蜂
(0122) {0x00,0xF0,0x10,0xFF,0x10,0xF8,0x90,0x88,0x4F,0x54,0xA4,0x54,0x4C,0xC4,0x40,0x00,
(0123) 0x20,0x67,0x22,0x1F,0x12,0x3B,0x00,0x14,0x15,0x15,0xFF,0x15,0x15,0x14,0x00,0x00};
(0124) const uchar ming[32]= //明
(0125) {0x00,0xFC,0x44,0x44,0x44,0xFE,0x04,0x00,0xFE,0x22,0x22,0x22,0x22,0xFF,0x02,0x00,
(0126) 0x00,0x0F,0x04,0x04,0x04,0x8F,0x40,0x30,0x0F,0x02,0x02,0x42,0x82,0x7F,0x00,0x00};
(0127) const uchar xiang[32]= //响
(0128) {0x00,0xFC,0x04,0x04,0xFE,0x04,0xF8,0x08,0xCC,0x4A,0x49,0xC8,0x08,0xFC,0x08,0x00,
(0129) 0x00,0x1F,0x08,0x08,0x1F,0x00,0xFF,0x00,0x0F,0x08,0x08,0x4F,0x80,0x7F,0x00,0x00};
(0130) //----------------------------------NRF905-SPI指令------------------------------
(0131) #define WC 0x00
(0132) #define RRC 0x10
(0133) #define WTP 0x20
(0134) #define RTP 0x21
(0135) #define WTA 0x22
(0136) #define RTA 0x23
(0137) #define RRP 0x24
(0138) //---------------------------------发送数据-------------------------------------
(0139) uchar TxRxBuffer[4];
(0140) //----------------------------------接收地址------------------------------------
(0141) uchar TxAddress[4]={0xcc,0xcc,0xcc,0xcc };
(0142) //------------------------------------------------------------------------------
(0143) uchar count1 ,count2;
(0144) //----------------------------------寄存器配置----------------------------------
(0145) uchar RFConf[11]=
(0146) {
(0147) 0x00, //配置命令//
(0148) 0x4c, //CH_NO,配置频段在430MHZ
(0149) 0x0C, //输出功率为10db,不重发,节电为正常模式
(0150) 0x44, //地址宽度设置,为4字节
(0151) 0x04,0x04, //接收发送有效数据长度为32字节
(0152) 0xCC,0xCC,0xCC,0xCC, //接收地址
(0153) 0x58, //CRC充许,8位CRC校验,外部时钟信号不使能,16M晶振
(0154) };
(0155) //----------------------------------NRF905函数申明------------------------------
(0156) void Delay(uint x); //延时子程序
(0157) void Spi_initial(); //SPI初始化
(0158) uchar SpiReadSpiWrite(unsigned char cData); //SPI读写子程序
(0159) void system_Init(void); //系统初始化
(0160) void Config905(void); //NRF905初始化子程序
(0161) void TxPacket(void);
(0162) void SetTxMode(void); //数据发送
(0163) void SetRxMode(void); //
(0164) void TX(void);
(0165) unsigned char CheckDR(void);
(0166) void RxPacket(void);
(0167) void RX(void);
(0168) //-------------------------------串口函数申明-----------------------------------
(0169) void StartUART(void);
(0170) void R_S_Byte(uchar R_Byte);
(0171) //-------------------------------LCD函数申明------------------------------------
(0172) void LCD_Delay(uint time);
(0173) void Lcd_init(void);
(0174) void Lcd_Write_Data(uchar DATA) ;
(0175) void Lcd_Write_command(uchar COMMAND);
(0176) void Lcd_CURSOR(uchar add_page,uchar add_col) ;
(0177) void Lcd_Clear(void) ;
(0178) void dis_1616hz(uchar x1,uchar x2,uchar row,const uchar hz[]);
(0179) void dis_168hz(uchar x1,uchar row,const uchar hz[]);
(0180) void LCDtime();
(0181) //----------------------------------100us延时子程序-----------------------------
(0182) void Delay(uint x)
(0183) {
0153 C009 RJMP 0x015D
(0184) uint i;
(0185) while(x--)
(0186) for(i=0;i<80;i++);
0154 2744 CLR R20
0155 2755 CLR R21
0156 C002 RJMP 0x0159
0157 5F4F SUBI R20,0xFF
0158 4F5F SBCI R21,0xFF
0159 3540 CPI R20,0x50
015A E0E0 LDI R30,0
015B 075E CPC R21,R30
015C F3D0 BCS 0x0157
015D 2E20 MOV R2,R16
015E 2E31 MOV R3,R17
015F 5001 SUBI R16,1
0160 4010 SBCI R17,0
0161 2022 TST R2
0162 F789 BNE 0x0154
0163 2033 TST R3
0164 F779 BNE 0x0154
0165 D330 RCALL pop_gset1
0166 9508 RET
(0187) }
(0188) //----------------------------------SPI初始化-----------------------------------
(0189) void Spi_initial()
(0190) {
(0191) SPCR = (1<<SPE)|(1<<MSTR)|(0<<CPOL)|(0<<SPR0);// 主机模式,fck/16, SPI方式0
_Spi_initial:
0167 E580 LDI R24,0x50
0168 B98D OUT 0x0D,R24
0169 9508 RET
(0192) }
(0193) //---------------------------------SPI读写程序----------------------------------
(0194) uchar SpiReadSpiWrite(unsigned char cData)
(0195) {
(0196) SPDR = cData;
_SpiReadSpiWrite:
cData --> R16
016A B90F OUT 0x0F,R16
(0197) while(!(SPSR & (1<<SPIF) )) // 等待SPI发送完毕
016B 9B77 SBIS 0x0E,7
016C CFFE RJMP 0x016B
(0198) {};
(0199) return SPDR;
016D B10F IN R16,0x0F
016E 9508 RET
(0200) }
(0201) //--------------------------------系统状态初始化--------------------------------
(0202) void system_Init(void)
(0203) {
(0204)
(0205) Hign_nrf905_CSN; // SPI使能
_system_Init:
016F 9AC4 SBI 0x18,4
(0206) Low_nrf905_SCK;
0170 98C7 CBI 0x18,7
(0207) Low_nrf905_DR; // DR=0
0171 98C2 CBI 0x18,2
(0208) Low_nrf905_AM; // AM=0
0172 98C3 CBI 0x18,3
(0209) Low_nrf905_CD; // CD=0
0173 9894 CBI 0x12,4
(0210) Hign_nrf905_PWR; // PWR=1
0174 9AC1 SBI 0x18,1
(0211) Low_nrf905_TRX_CE; // nrf905_TRX_CE=0
0175 9895 CBI 0x12,5
(0212) Low_nrf905_TX_EN ; // nrf905_TX_EN=0
0176 98C0 CBI 0x18,0
0177 9508 RET
_Config905:
i --> R20
0178 D31A RCALL push_gset1
(0213) }
(0214) //--------------------------------NRF905寄存器初始化函数------------------------
(0215) void Config905(void)
(0216) {
(0217) uchar i;
(0218) Low_nrf905_CSN; //SPI使能
0179 98C4 CBI 0x18,4
(0219) Delay(1);
017A E001 LDI R16,1
017B E010 LDI R17,0
017C DFD5 RCALL _Delay
(0220) for (i=0;i<11;i++) //碞RF905配置字
017D 2744 CLR R20
017E C009 RJMP 0x0188
(0221) {
(0222) SpiReadSpiWrite(RFConf[i]);
017F E684 LDI R24,0x64
0180 E090 LDI R25,0
0181 2FE4 MOV R30,R20
0182 27FF CLR R31
0183 0FE8 ADD R30,R24
0184 1FF9 ADC R31,R25
0185 8100 LDD R16,Z+0
0186 DFE3 RCALL _SpiReadSpiWrite
0187 9543 INC R20
0188 304B CPI R20,0xB
0189 F3A8 BCS 0x017F
(0223) }
(0224) Hign_nrf905_CSN; // Disable Spi
018A 9AC4 SBI 0x18,4
018B D30A RCALL pop_gset1
018C 9508 RET
_TxPacket:
i --> R20
018D D305 RCALL push_gset1
(0225) }
(0226) //--------------------------------NRF905待发数据打包----------------------------
(0227) void TxPacket(void)
(0228) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -