📄 oled.lst
字号:
__start:
__text_start:
3E EFCF LDI R28,0xFF
3F E0D2 LDI R29,2
40 BFCD OUT 0x3D,R28
41 BFDE OUT 0x3E,R29
42 51C0 SUBI R28,0x10
43 40D0 SBCI R29,0
44 EA0A LDI R16,0xAA
45 8308 STD Y+0,R16
46 2400 CLR R0
47 E4E8 LDI R30,0x48
48 E0F1 LDI R31,1
49 E011 LDI R17,1
4A 34E9 CPI R30,0x49
4B 07F1 CPC R31,R17
4C F011 BEQ 0x004F
4D 9201 ST R0,Z+
4E CFFB RJMP 0x004A
4F 8300 STD Z+0,R16
50 E3E4 LDI R30,0x34
51 E0F0 LDI R31,0
52 E0A0 LDI R26,0
53 E0B1 LDI R27,1
54 E010 LDI R17,0
55 37EC CPI R30,0x7C
56 07F1 CPC R31,R17
57 F021 BEQ 0x005C
58 95C8 LPM
59 9631 ADIW R30,1
5A 920D ST R0,X+
5B CFF9 RJMP 0x0055
5C D001 RCALL _main
_exit:
5D CFFF RJMP _exit
_main:
Get_SO --> R10
5E 9721 SBIW R28,1
FILE: E:\acceptavrnrf24l01\main.c
(0001) //ICC-AVR application builder : 2006-02-12 14:00:00
(0002) // Target : ATmega48
(0003) // Crystal: 8.000Mhz
(0004) // Author: jackyan
(0005) // Oled Type : white
(0006) //#define fosc 8000000
(0007) //#define baud 9600
(0008) #include "iom48v.h"
(0009) #include "macros.h"
(0010) #include "defs.h"
(0011) /*-----------------------------------------------------------------------------
(0012) Global Defines
(0013) ------------------------------------------------------------------------------*/
(0014) unsigned char key_debug;
(0015) unsigned char Buffer[]={
(0016) 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
(0017) 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
(0018) 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
(0019) 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
(0020) };
(0021) #define TX_ADR_WIDTH 5 // 5 bytes TX(RX) address width
(0022) #define TX_PLOAD_WIDTH 20 // 16 bytes TX payload
(0023) unsigned char TX_ADDRESS[TX_ADR_WIDTH] = {0x34,0x43,0x10,0x10,0x01}; // Define a static TX address
(0024) void init_CPU (void);
(0025) void delayms(unsigned short dly);//当dly=1时,延时的时间是1ms 4MHz晶震
(0026) void INIT_io(void);
(0027) void RX_Mode(void);
(0028) void TX_Mode(void);
(0029) void delay(void);
(0030) unsigned char SPI_Write_Buf(unsigned char reg, unsigned char *pBuf, unsigned char bytes);
(0031) unsigned char SPI_Read_Buf(unsigned char reg, unsigned char *pBuf, unsigned char bytes);
(0032) unsigned char SPI_RW_Reg(unsigned char reg, unsigned char value);
(0033) unsigned char SPI_Read(unsigned char reg);
(0034) void clear_buf(unsigned char *ptr,unsigned char number);
(0035) unsigned char accept_flag=0;
(0036) unsigned int accept_time=0;
(0037) //****************************************************************//
(0038) // SPI(nRF24L01) commands
(0039) #define READ_REG 0x00 // Define read command to register
(0040) #define WRITE_REG 0x20 // Define write command to register
(0041) #define RD_RX_PLOAD 0x61 // Define RX payload register address
(0042) #define WR_TX_PLOAD 0xA0 // Define TX payload register address
(0043) #define FLUSH_TX 0xE1 // Define flush TX register command
(0044) #define FLUSH_RX 0xE2 // Define flush RX register command
(0045) #define REUSE_TX_PL 0xE3 // Define reuse TX payload register command
(0046) //#define NOP 0xFF // Define No Operation, might be used to read status register
(0047) //***************************************************//
(0048) // SPI(nRF24L01) registers(addresses)
(0049) #define CONFIG 0x00 // 'Config' register address
(0050) #define EN_AA 0x01 // 'Enable Auto Acknowledgment' register address
(0051) #define EN_RXADDR 0x02 // 'Enabled RX addresses' register address
(0052) #define SETUP_AW 0x03 // 'Setup address width' register address
(0053) #define SETUP_RETR 0x04 // 'Setup Auto. Retrans' register address
(0054) #define RF_CH 0x05 // 'RF channel' register address
(0055) #define RF_SETUP 0x06 // 'RF setup' register address
(0056) #define STATUS 0x07 // 'Status' register address
(0057) #define OBSERVE_TX 0x08 // 'Observe TX' register address
(0058) #define CD 0x09 // 'Carrier Detect' register address
(0059) #define RX_ADDR_P0 0x0A // 'RX address pipe0' register address
(0060) #define RX_ADDR_P1 0x0B // 'RX address pipe1' register address
(0061) #define RX_ADDR_P2 0x0C // 'RX address pipe2' register address
(0062) #define RX_ADDR_P3 0x0D // 'RX address pipe3' register address
(0063) #define RX_ADDR_P4 0x0E // 'RX address pipe4' register address
(0064) #define RX_ADDR_P5 0x0F // 'RX address pipe5' register address
(0065) #define TX_ADDR 0x10 // 'TX address' register address
(0066) #define RX_PW_P0 0x11 // 'RX payload width, pipe0' register address
(0067) #define RX_PW_P1 0x12 // 'RX payload width, pipe1' register address
(0068) #define RX_PW_P2 0x13 // 'RX payload width, pipe2' register address
(0069) #define RX_PW_P3 0x14 // 'RX payload width, pipe3' register address
(0070) #define RX_PW_P4 0x15 // 'RX payload width, pipe4' register address
(0071) #define RX_PW_P5 0x16 // 'RX payload width, pipe5' register address
(0072) #define FIFO_STATUS 0x17 // 'FIFO Status Register' register address
(0073) #define MAX_RT 0x10 // Max #of TX retrans interrupt
(0074) #define TX_DS 0x20 // TX data sent interrupt
(0075) #define RX_DR 0x40 // RX data received
(0076) //-----------------------------------------------------------------------------
(0077) //------------------------------------------------------
(0078) #define BIT(x) (1 << (x))
(0079) #define SETBIT(x, y) (x |= y)
(0080) #define CLEARBIT(x, y) (x &= ~y)
(0081) #define CHECKBIT(x, y) (x & y)
(0082) #define BIT7 0x80
(0083) #define BIT6 0x40
(0084) #define BIT5 0x20
(0085) #define BIT4 0x10
(0086) #define BIT3 0x08
(0087) #define BIT2 0x04
(0088) #define BIT1 0x02
(0089) #define BIT0 0x01
(0090) /*#define nRF24L01_CSN BIT4
(0091) #define nRF24L01_SCK BIT5
(0092) #define nRF24L01_MOSI BIT6
(0093) #define nRF24L01_CE BIT3
(0094) #define nRF24L01_MISO BIT7
(0095) #define nRF24L01_IRQ BIT0
(0096) #define nRF24L01_CSNH SETBIT(PORTD, BIT4)
(0097) #define nRF24L01_CSNL CLEARBIT(PORTD, BIT4)
(0098)
(0099) #define nRF24L01_SCKH SETBIT(PORTD,BIT5)
(0100) #define nRF24L01_SCKL CLEARBIT(PORTD,BIT5)
(0101)
(0102) #define nRF24L01_MOSIH SETBIT(PORTD,BIT6)
(0103) #define nRF24L01_MOSIL CLEARBIT(PORTD,BIT6)
(0104)
(0105) #define nRF24L01_CEH SETBIT(PORTD,BIT3)
(0106) #define nRF24L01_CEL CLEARBIT(PORTD,BIT3) */
(0107) //-----------------------------------------------------------------------------
(0108) #define nRF24L01_CSN BIT6
(0109) #define nRF24L01_SCK BIT1
(0110) #define nRF24L01_MOSI BIT0
(0111) #define nRF24L01_CE BIT7
(0112) #define nRF24L01_MISO BIT3
(0113) #define nRF24L01_IRQ BIT2
(0114) #define nRF24L01_CSNH SETBIT(PORTD, BIT6)
(0115) #define nRF24L01_CSNL CLEARBIT(PORTD, BIT6)
(0116)
(0117) #define nRF24L01_SCKH SETBIT(PORTB,BIT1)
(0118) #define nRF24L01_SCKL CLEARBIT(PORTB,BIT1)
(0119)
(0120) #define nRF24L01_MOSIH SETBIT(PORTB,BIT0)
(0121) #define nRF24L01_MOSIL CLEARBIT(PORTB,BIT0)
(0122)
(0123) #define nRF24L01_CEH SETBIT(PORTD,BIT7)
(0124) #define nRF24L01_CEL CLEARBIT(PORTD,BIT7)
(0125) //-----------------------------------------------------------------------------
(0126) void main(void)
(0127) {
(0128) unsigned char Get_SO=0;
5F 24AA CLR R10
(0129) CLI(); /* global interrupt disable */
60 94F8 BCLR 7
(0130) init_CPU ();
61 D0A8 RCALL _init_CPU
(0131) delayms(100); //延时10ms*10=100ms
62 E604 LDI R16,0x64
63 E010 LDI R17,0
64 D0CD RCALL _delayms
(0132) delayms(100); //延时10ms*10=100ms
65 E604 LDI R16,0x64
66 E010 LDI R17,0
67 D0CA RCALL _delayms
(0133) RX_Mode();
68 D13F RCALL _RX_Mode
69 C09D RJMP 0x0107
(0134) while(1)
(0135) {
(0136) // if(!(PINB& 0x01))
(0137) if(!(PINB& 0x04))
6A 991A SBIC 0x03,2
6B C029 RJMP 0x0095
(0138) {//nRF24L01 接收数据
(0139) key_debug=SPI_Read(STATUS); // read register STATUS's value
6C E007 LDI R16,7
6D D0FA RCALL _SPI_Read
6E 9300 0148 STS key_debug,R16
(0140) if(key_debug&RX_DR) // if renRF24L01_CEive data ready (RX_DR) interrupt
70 FF06 SBRS R16,6
71 C006 RJMP 0x0078
(0141) SPI_Read_Buf(RD_RX_PLOAD,Buffer,TX_PLOAD_WIDTH);// read renRF24L01_CEive payload from RX_FIFO buffer
72 E184 LDI R24,0x14
73 8388 STD Y+0,R24
74 E020 LDI R18,0
75 E031 LDI R19,1
76 E601 LDI R16,0x61
77 D100 RCALL _SPI_Read_Buf
(0142) if(key_debug&MAX_RT) SPI_RW_Reg(FLUSH_TX,0);
78 9020 0148 LDS R2,key_debug
7A FE24 SBRS R2,4
7B C003 RJMP 0x007F
7C 2722 CLR R18
7D EE01 LDI R16,0xE1
7E D0DB RCALL _SPI_RW_Reg
(0143) SPI_RW_Reg(WRITE_REG+STATUS,0xff);// clear RX_DR or TX_DS or MAX_RT interrupt flag
7F EF2F LDI R18,0xFF
80 E207 LDI R16,0x27
81 D0D8 RCALL _SPI_RW_Reg
(0144) RX_Mode();
82 D125 RCALL _RX_Mode
(0145) if((Buffer[0]==80)&&(Buffer[1]==02))//data accept
83 9180 0100 LDS R24,Buffer
85 3580 CPI R24,0x50
86 F471 BNE 0x0095
87 9180 0101 LDS R24,Buffer+1
89 3082 CPI R24,2
8A F451 BNE 0x0095
(0146) {
(0147) accept_flag=1;
8B E081 LDI R24,1
8C 9380 0145 STS accept_flag,R24
(0148) PORTC = 0x02;
8E E082 LDI R24,2
8F B988 OUT 0x08,R24
(0149) delayms(5000); //延时10ms*10=100ms
90 E808 LDI R16,0x88
91 E113 LDI R17,0x13
92 D09F RCALL _delayms
(0150) PORTC = 0x00;
93 2422 CLR R2
94 B828 OUT 0x08,R2
(0151) }
(0152) }
(0153) if(accept_flag==0)//data send
95 9020 0145 LDS R2,accept_flag
97 2022 TST R2
98 F501 BNE 0x00B9
(0154) {
(0155) accept_flag=1;
99 E081 LDI R24,1
9A 9380 0145 STS accept_flag,R24
(0156) accept_time=0;
9C 2422 CLR R2
9D 2433 CLR R3
9E 9230 0147 STS accept_time+1,R3
A0 9220 0146 STS accept_time,R2
(0157) Buffer[0]=80;
A2 E580 LDI R24,0x50
A3 9380 0100 STS Buffer,R24
(0158) Buffer[1]=01;
A5 E081 LDI R24,1
A6 9380 0101 STS Buffer+1,R24
(0159) TX_Mode(); // set TX Mode and transmitting
A8 D11E RCALL _TX_Mode
(0160) Buffer[0]=80;
A9 E580 LDI R24,0x50
AA 9380 0100 STS Buffer,R24
(0161) Buffer[1]=01;
AC E081 LDI R24,1
AD 9380 0101 STS Buffer+1,R24
(0162) TX_Mode(); // set TX Mode and transmitting
AF D117 RCALL _TX_Mode
(0163) delayms(100);
B0 E604 LDI R16,0x64
B1 E010 LDI R17,0
B2 D07F RCALL _delayms
(0164) RX_Mode();
B3 D0F4 RCALL _RX_Mode
(0165) Buffer[0]=00;
B4 2422 CLR R2
B5 9220 0100 STS Buffer,R2
(0166) Buffer[1]=00;
B7 9220 0101 STS Buffer+1,R2
(0167) }
(0168) if(accept_flag=1)
B9 E081 LDI R24,1
BA 9380 0145 STS accept_flag,R24
BC 2388 TST R24
BD F409 BNE 0x00BF
BE C048 RJMP 0x0107
(0169) {
(0170) accept_time++;
BF 9180 0146 LDS R24,accept_time
C1 9190 0147 LDS R25,accept_time+1
C3 9601 ADIW R24,1
C4 9390 0147 STS accept_time+1,R25
C6 9380 0146 STS accept_time,R24
(0171) // delayms(100);
(0172) if(accept_time>10000)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -