📄 lianjie.lst
字号:
9A 5F4F SUBI R20,0xFF
9B 4F5F SBCI R21,0xFF
9C 1740 CP R20,R16
9D 0751 CPC R21,R17
9E F350 BCS 0x0089
9F C4AD RJMP pop_xgsetF000
_ms:
i --> R20
j --> R22
n --> R16
A0 D4A7 RCALL push_xgsetF000
(0264) }
(0265)
(0266) void ms(WORD n)
(0267) { //延时n毫秒
(0268) WORD i,j;
(0269)
(0270) for(i=0; i<n; i++)
A1 2744 CLR R20
A2 2755 CLR R21
A3 C013 RJMP 0x00B7
(0271) for(j=0; j<MS_COUNT;j++);
A4 2766 CLR R22
A5 2777 CLR R23
A6 C002 RJMP 0x00A9
A7 5F6F SUBI R22,0xFF
A8 4F7F SBCI R23,0xFF
A9 EB81 LDI R24,0xB1
AA E091 LDI R25,1
AB E0A0 LDI R26,0
AC E0B0 LDI R27,0
AD 011B MOVW R2,R22
AE 2444 CLR R4
AF 2455 CLR R5
B0 1628 CP R2,R24
B1 0639 CPC R3,R25
B2 064A CPC R4,R26
B3 065B CPC R5,R27
B4 F394 BLT 0x00A7
B5 5F4F SUBI R20,0xFF
B6 4F5F SBCI R21,0xFF
B7 1740 CP R20,R16
B8 0751 CPC R21,R17
B9 F350 BCS 0x00A4
BA C492 RJMP pop_xgsetF000
_us:
i --> R20
j --> R22
n --> R16
BB D48C RCALL push_xgsetF000
(0272) }
(0273)
(0274) void us(WORD n)
(0275) { //延时n毫秒
(0276) WORD i,j;
(0277)
(0278) for(i=0; i<n; i++)
BC 2744 CLR R20
BD 2755 CLR R21
BE C013 RJMP 0x00D2
(0279) for(j=0; j<MS_COUNT/1000;j++);
BF 2766 CLR R22
C0 2777 CLR R23
C1 C002 RJMP 0x00C4
C2 5F6F SUBI R22,0xFF
C3 4F7F SBCI R23,0xFF
C4 E080 LDI R24,0
C5 E090 LDI R25,0
C6 E0A0 LDI R26,0
C7 E0B0 LDI R27,0
C8 011B MOVW R2,R22
C9 2444 CLR R4
CA 2455 CLR R5
CB 1628 CP R2,R24
CC 0639 CPC R3,R25
CD 064A CPC R4,R26
CE 065B CPC R5,R27
CF F394 BLT 0x00C2
D0 5F4F SUBI R20,0xFF
D1 4F5F SBCI R21,0xFF
D2 1740 CP R20,R16
D3 0751 CPC R21,R17
D4 F350 BCS 0x00BF
D5 C477 RJMP pop_xgsetF000
_delay_s:
i --> R20
n --> R10
D6 D467 RCALL push_xgset300C
D7 0158 MOVW R10,R16
(0280) }
(0281)
(0282) /////////////////////////////////////////////////////////////
(0283) void delay_s(WORD n)
(0284) {
(0285) WORD i;
(0286) for ( i=0; i<10*n; i++ ) ms(100);
D8 2744 CLR R20
D9 2755 CLR R21
DA C005 RJMP 0x00E0
DB E604 LDI R16,0x64
DC E010 LDI R17,0
DD DFC2 RCALL _ms
DE 5F4F SUBI R20,0xFF
DF 4F5F SBCI R21,0xFF
E0 E00A LDI R16,0xA
E1 E010 LDI R17,0
E2 0195 MOVW R18,R10
E3 D44A RCALL empy16s
E4 1740 CP R20,R16
E5 0751 CPC R21,R17
E6 F3A0 BCS 0x00DB
E7 C45B RJMP pop_xgset300C
(0287) }
(0288)
(0289) /////////////////////////////////////////////////////////////
(0290) //UART口
(0291) void uart_init(void)
(0292) {
(0293) UCSRB = 0x00; //设置波特率时关闭发送和接收
_uart_init:
E8 2422 CLR R2
E9 B82A OUT 0x0A,R2
(0294) UCSRA = 0x00;
EA B82B OUT 0x0B,R2
(0295) UCSRC = (1<<UCSZ1)|(1<<UCSZ0); //8位数据+1位STOP位
EB E086 LDI R24,6
EC BD80 OUT 0x20,R24
(0296) UBRRL=(fosc/16/baud-1)%256;
ED E083 LDI R24,3
EE B989 OUT 0x09,R24
(0297) UBRRH=(fosc/16/baud-1)/256; //设置波特率
EF BC20 OUT 0x20,R2
(0298) UCSRB =(1<<RXCIE)|(1<<RXEN)|(1<<TXEN); //允许发送和接收
F0 E988 LDI R24,0x98
F1 B98A OUT 0x0A,R24
F2 9508 RET
(0299) }
(0300)
(0301) /////////////////////////////////////////////////////////////
(0302) //URAT口
(0303) BYTE uart_RxChar(void)
(0304) {
(0305) while(!(UCSRA& (1<<RXC)));//判断是否接收到数据
_uart_RxChar:
F3 9B5F SBIS 0x0B,7
F4 CFFE RJMP _uart_RxChar
(0306) return UDR; //接收数据
F5 B10C IN R16,0x0C
F6 9508 RET
(0307) }
(0308)
(0309) /////////////////////////////////////////////////////////////
(0310) void uart_TxChar(BYTE c)
(0311) {
(0312) while (!(UCSRA&(1<<UDRE)));//判断上次发送是否完成
_uart_TxChar:
c --> R16
F7 9B5D SBIS 0x0B,5
F8 CFFE RJMP _uart_TxChar
(0313) UDR=c; //发送数据
F9 B90C OUT 0x0C,R16
FA 9508 RET
_put_bytes:
i --> R20
len --> R10
buf --> R12
FB D464 RCALL push_xgset303C
FC 0159 MOVW R10,R18
FD 0168 MOVW R12,R16
(0314) }
(0315)
(0316) /////////////////////////////////////////////////////////////////////////////////
(0317) void put_bytes(BYTE *buf,int len)
(0318) {
(0319) int i;
(0320) for ( i=0; i<len; i++ ) uart_TxChar(buf[i]);
FE 2744 CLR R20
FF 2755 CLR R21
100 C007 RJMP 0x0108
101 01FA MOVW R30,R20
102 0DEC ADD R30,R12
103 1DFD ADC R31,R13
104 8100 LDD R16,Z+0
105 DFF1 RCALL _uart_TxChar
106 5F4F SUBI R20,0xFF
107 4F5F SBCI R21,0xFF
108 154A CP R20,R10
109 055B CPC R21,R11
10A F3B4 BLT 0x0101
10B C45B RJMP pop_xgset303C
_GetLPC:
c --> R20
i --> R22
len --> R18
buf --> R16
10C D43B RCALL push_xgsetF000
(0321) }
(0322)
(0323) /////////////////////////////////////////////////////////////////////////////////
(0324) BYTE GetLPC(BYTE *buf,short len)
(0325) {
(0326) short i;
(0327) BYTE c = 0xff;
10D EF4F LDI R20,0xFF
(0328)
(0329) for ( i=0; i<len; i++ ) c ^= buf[i];
10E 2766 CLR R22
10F 2777 CLR R23
110 C007 RJMP 0x0118
111 01FB MOVW R30,R22
112 0FE0 ADD R30,R16
113 1FF1 ADC R31,R17
114 8020 LDD R2,Z+0
115 2542 EOR R20,R2
116 5F6F SUBI R22,0xFF
117 4F7F SBCI R23,0xFF
118 1762 CP R22,R18
119 0773 CPC R23,R19
11A F3B4 BLT 0x0111
(0330) return c;
11B 2F04 MOV R16,R20
11C C430 RJMP pop_xgsetF000
(0331) }
(0332)
(0333) /////////////////////////////////////////////////////////////
(0334) void SPI_MasterInit(void)
(0335) {
(0336) BYTE temp;
(0337)
(0338) // PD7(LED)PD6(TRX_CE),PD5(TX_EN) PD2(CD),PD3(DR),PD4(AM)
(0339) PORTD = 0x1C;
_SPI_MasterInit:
temp --> R16
11D E18C LDI R24,0x1C
11E BB82 OUT 0x12,R24
(0340) DDRD = 0x80|0x40|0x20;
11F EE80 LDI R24,0xE0
120 BB81 OUT 0x11,R24
(0341) TX_EN_L;
121 9895 CBI 0x12,5
(0342) TRX_CE_L;
122 9896 CBI 0x12,6
(0343) LED_L;
123 9897 CBI 0x12,7
(0344) // Set MOSI, SCK, SS, POWER_UP output,all others input
(0345) // PB3 PB5 PB2 PB0
(0346) CLI();
124 94F8 BCLR 7
(0347) DDRB = 0x08 |0x20| 0x04|0x01;
125 E28D LDI R24,0x2D
126 BB87 OUT 0x17,R24
(0348) MISO_H;
127 9AC4 SBI 0x18,4
(0349) CSN_H;
128 9AC2 SBI 0x18,2
(0350) // Enable SPI,Master,Set clock rate fck/16,interrupt enable
(0351) // SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0)|(1<<SPIE)|(1<<CPHA);
(0352) // SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0)|(1<<SPIE);
(0353) SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0);
129 E581 LDI R24,0x51
12A B98D OUT 0x0D,R24
(0354) // SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0)|(1<<CPHA);
(0355) SPSR = 0x00;
12B 2422 CLR R2
12C B82E OUT 0x0E,R2
(0356) temp = SPSR;
12D B10E IN R16,0x0E
(0357) temp = SPCR;
12E B10D IN R16,0x0D
(0358) SEI();
12F 9478 BSET 7
130 9508 RET
(0359) }
(0360)
(0361) /////////////////////////////////////////////////////////////
(0362) void SPI_Char(BYTE rxflag,char c)
(0363) {
(0364) SPDR = c;
_SPI_Char:
c --> R18
rxflag --> R16
131 B92F OUT 0x0F,R18
(0365) while(!(SPSR & (1<<SPIF)));
132 9B77 SBIS 0x0E,7
133 CFFE RJMP 0x0132
(0366)
(0367) if ( rxflag ) {
134 2300 TST R16
135 F079 BEQ 0x0145
(0368) spi_rxbuf[spi_rxpt] = SPDR;
136 E781 LDI R24,0x71
137 E090 LDI R25,0
138 91E0 0070 LDS R30,nrf905_JinJu.c:spi_rxpt
13A 27FF CLR R31
13B 0FE8 ADD R30,R24
13C 1FF9 ADC R31,R25
13D B02F IN R2,0x0F
13E 8220 STD Z+0,R2
(0369) spi_rxpt = (spi_rxpt+1)&SPI_BUF_LEN1;
13F 9180 0070 LDS R24,nrf905_JinJu.c:spi_rxpt
141 5F8F SUBI R24,0xFF
142 708F ANDI R24,0xF
143 9380 0070 STS nrf905_JinJu.c:spi_rxpt,R24
(0370) }
145 9508 RET
(0371) }
(0372)
(0373) /////////////////////////////////////////////////////////////
(0374) void nrF905_PowerOff_Mode()
(0375) {
(0376) PWR_UP_L;
_nrF905_PowerOff_Mode:
146 98C0 CBI 0x18,0
147 9508 RET
(0377) }
(0378)
(0379) /////////////////////////////////////////////////////////////
(0380) void nrF905_Standby_Mode()
(0381) {
(0382) PWR_UP_H;
_nrF905_Standby_Mode:
148 9AC0 SBI 0x18,0
(0383) TRX_CE_L;
149 9896 CBI 0x12,6
14A 9508 RET
(0384) }
(0385)
(0386) /////////////////////////////////////////////////////////////
(0387) void nrF905_TX_Mode()
(0388) {
(0389) PWR_UP_H;
_nrF905_TX_Mode:
14B 9AC0 SBI 0x18,0
(0390) TX_EN_H;
14C 9A95 SBI 0x12,5
(0391) TRX_CE_L;
14D 9896 CBI 0x12,6
14E 9508 RET
(0392) }
(0393)
(0394) /////////////////////////////////////////////////////////////
(0395) void nrF905_RX_Mode()
(0396) {
(0397) PWR_UP_H;
_nrF905_RX_Mode:
14F 9AC0 SBI 0x18,0
(0398) TX_EN_L;
150 9895 CBI 0x12,5
(0399) TRX_CE_H;
151 9A96 SBI 0x12,6
(0400) us(650);
152 E80A LDI R16,0x8A
153 E012 LDI R17,2
154 DF66 RCALL _us
155 9508 RET
_spi_handle:
len --> R22
i --> R20
cmd --> R10
156 D3FB RCALL push_xgsetF00C
157 2EA0 MOV R10,R16
(0401) }
(0402)
(0403) /////////////////////////////////////////////////////////////
(0404) BYTE spi_handle(BYTE cmd)
(0405) {
(0406) BYTE len,i;
(0407) switch(cmd) {
158 2D4A MOV R20,R10
159 2755 CLR R21
15A 3140 CPI R20,0x10
15B E0E0 LDI R30,0
15C 075E CPC R21,R30
15D F099 BEQ 0x0171
15E 3140 CPI R20,0x10
15F E0E0 LDI R30,0
160 075E CPC R21,R30
161 F40C BGE 0x0163
162 C06C RJMP 0x01CF
163 3241 CPI R20,0x21
164 E0E0 LDI R30,0
165 075E CPC R21,R30
166 F409 BNE 0x0168
167 C04D RJMP 0x01B5
168 3243 CPI R20,0x23
169 E0E0 LDI R30,0
16A 075E CPC R21,R30
16B F161 BEQ 0x0198
16C 3244 CPI R20,0x24
16D E0E0 LDI R30,0
16E 075E CPC R21,R30
16F F0D1 BEQ 0x018A
170 C05E RJMP 0x01CF
(0408) case R_CONFIG:
(0409) len = 10;
171 E06A LDI R22,0xA
(0410) for ( i=0; i<10; i++ ) {
172 2744 CLR R20
173 C013 RJMP 0x0187
(0411) if ( Register[i] != spi_rxbuf[i] ) return 1;
174 E781 LDI R24,0x71
175 E090 LDI R25,0
176 2FE4 MOV R30,R20
177 27FF CLR R31
178 0FE8 ADD R30,R24
179 1FF9 ADC R31,R25
17A 8020 LDD R2,Z+0
17B EE88 LDI R24,0xE8
17C E090 LDI R25,0
17D 2FE4 MOV R30,R20
17E 27FF CLR R31
17F 0FE8 ADD R30,R24
180 1FF9 ADC R31,R25
181 8030 LDD R3,Z+0
182 1432 CP R3,R2
183 F011 BEQ 0x0186
184 E001 LDI R16,1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -