📄 ptr8000.lst
字号:
148 BC2F OUT 0x2F,R2
(0079) TCCR1B = 0x02; //start Timer
149 E082 LDI R24,2
14A BD8E OUT 0x2E,R24
14B 9508 RET
_timer1_ovf_isr:
14C 938A ST R24,-Y
14D B78F IN R24,0x3F
14E 938A ST R24,-Y
(0080) }
(0081)
(0082) #pragma interrupt_handler timer1_ovf_isr:9
(0083) void timer1_ovf_isr(void)
(0084) {
(0085) //TIMER1 has overflowed
(0086) TCNT1H = 0xCA; //reload counter high value
14F EC8A LDI R24,0xCA
150 BD8D OUT 0x2D,R24
(0087) TCNT1L = 0x01; //reload counter low value
151 E081 LDI R24,1
152 BD8C OUT 0x2C,R24
153 9189 LD R24,Y+
154 BF8F OUT 0x3F,R24
155 9189 LD R24,Y+
156 9518 RETI
(0088) }
(0089)
(0090) //SPI initialize
(0091) void spi_init(void)
(0092) {uchar temp;
(0093)
(0094) //SPCR = 0xD1; //SPI中断允许,SPI允许,主机模式,MSB,极性方式00,1/16系统时钟速率
(0095) SPCR = 0x51; //不使用SPI中断,其它同上
_spi_init:
temp --> R16
157 E581 LDI R24,0x51
158 B98D OUT 0x0D,R24
(0096) SPSR = 0x00; //setup SPI
159 2422 CLR R2
15A B82E OUT 0x0E,R2
(0097)
(0098) temp = SPSR; //!!!
15B B10E IN R16,0x0E
(0099) temp = SPDR; //清空SPI,和中断标志,使SPI空闲
15C B10F IN R16,0x0F
15D 9508 RET
(0100) }
(0101)
(0102) #pragma interrupt_handler spi_stc_isr:11
(0103) void spi_stc_isr(void)
(0104) {uchar data;
_spi_stc_isr:
data --> Y,+1
15E 9518 RETI
(0105) //byte in SPDR has been sent/received
(0106) //data=SPDR;
(0107) //SPDR=0x66;
(0108) }
(0109)
(0110) //UART0 initialize
(0111) // desired baud rate: 19200
(0112) // actual: baud rate:19200 (0.0%)
(0113) // char size: 5 bits
(0114) // parity: Disabled
(0115) void uart0_init(void)
(0116) {
(0117) UCSRB = 0x00; //disable while setting baud rate
_uart0_init:
15F 2422 CLR R2
160 B82A OUT 0x0A,R2
(0118) UCSRA = 0x00;
161 B82B OUT 0x0B,R2
(0119) UCSRC = BIT(URSEL) | 0x00;
162 E880 LDI R24,0x80
163 BD80 OUT 0x20,R24
(0120) UBRRL = 0x23; //set baud rate lo
164 E283 LDI R24,0x23
165 B989 OUT 0x09,R24
(0121) UBRRH = 0x00; //set baud rate hi
166 BC20 OUT 0x20,R2
(0122) UCSRB = 0x18;
167 E188 LDI R24,0x18
168 B98A OUT 0x0A,R24
169 9508 RET
(0123) }
(0124)
(0125) //call this routine to initialize all peripherals
(0126) void init_devices(void)
(0127) {
(0128) //stop errant interrupts until set up
(0129) CLI(); //disable all interrupts
_init_devices:
16A 94F8 BCLR 7
(0130) port_init();
16B DF8A RCALL _port_init
(0131) timer0_init();
16C DF99 RCALL _timer0_init
(0132) timer1_init();
16D DFC8 RCALL _timer1_init
(0133) spi_init();
16E DFE8 RCALL _spi_init
(0134) uart0_init();
16F DFEF RCALL _uart0_init
(0135)
(0136) MCUCR = 0x00;
170 2422 CLR R2
171 BE25 OUT 0x35,R2
(0137) GICR = 0x00;
172 BE2B OUT 0x3B,R2
(0138) TIMSK = 0x05; //timer interrupt sources
173 E085 LDI R24,5
174 BF89 OUT 0x39,R24
(0139) SEI(); //re-enable interrupts
175 9478 BSET 7
176 9508 RET
(0140) //all peripherals are now initialized
(0141) }
(0142)
(0143) void main()
(0144) {
(0145) init_devices();
_main:
177 DFF2 RCALL _init_devices
(0146) SystemIni();
178 D053 RCALL _SystemIni
(0147) nrf905_Init();
179 940E 0096 CALL _nrf905_Init
17B C00E RJMP 0x018A
(0148)
(0149) while (1)
(0150) {
(0151) if (bTimer) TimerFunc();
17C 9020 00A3 LDS R2,bTimer
17E 2022 TST R2
17F F009 BEQ 0x0181
180 D040 RCALL _TimerFunc
(0152) #ifdef MASTER
(0153) if (bRfSend)
181 9020 00A2 LDS R2,bRfSend
183 2022 TST R2
184 F021 BEQ 0x0189
(0154) { bRfSend=0;
185 2422 CLR R2
186 9220 00A2 STS bRfSend,R2
(0155) RfSendProc();//发送测试
188 D023 RCALL _RfSendProc
(0156) }
(0157) #endif
(0158)
(0159) RfRecvProc();//接收处理
189 D002 RCALL _RfRecvProc
18A CFF1 RJMP 0x017C
18B 9508 RET
_RfRecvProc:
i --> R20
18C 934A ST R20,-Y
(0160) };
(0161) }
(0162)
(0163) //接收处理
(0164) void RfRecvProc()
(0165) {uchar i;
(0166)
(0167) //if ((PIND&(1<<AM))==0) return;//一般先AM=1指示地址匹配对
(0168)
(0169) if ((PIND&(1<<DR))==0) return;//DR=1时表示数据接收对而且Crc正确
18D 9984 SBIC 0x10,4
18E C001 RJMP 0x0190
18F C01A RJMP 0x01AA
(0170)
(0171) //已经接收到数据
(0172) nrf905_ReadData();//读出...
190 940E 00E1 CALL _nrf905_ReadData
(0173) for (i=0;i<32;i++)
192 2744 CLR R20
193 C00D RJMP 0x01A1
(0174) { if (RxBuf[i]!=(i+i))
194 2E24 MOV R2,R20
195 0E24 ADD R2,R20
196 E680 LDI R24,0x60
197 E090 LDI R25,0
198 2FE4 MOV R30,R20
199 27FF CLR R31
19A 0FE8 ADD R30,R24
19B 1FF9 ADC R31,R25
19C 8030 LDD R3,Z+0
19D 1432 CP R3,R2
19E F009 BEQ 0x01A0
(0175) return;
19F C00A RJMP 0x01AA
1A0 9543 INC R20
1A1 3240 CPI R20,0x20
1A2 F388 BCS 0x0194
(0176) }
(0177)
(0178) //数据接收正确...灯指示
(0179) CPL(PORTD,LED);
1A3 E880 LDI R24,0x80
1A4 E090 LDI R25,0
1A5 B222 IN R2,0x12
1A6 2433 CLR R3
1A7 2628 EOR R2,R24
1A8 2639 EOR R3,R25
1A9 BA22 OUT 0x12,R2
1AA 9149 LD R20,Y+
1AB 9508 RET
_RfSendProc:
i --> R20
1AC 934A ST R20,-Y
(0180)
(0181) //从机回送数据包,这样双方都能指示是否收到有效数据包
(0182) #ifndef MASTER
(0183) RfSendProc();
(0184) #endif
(0185) }
(0186)
(0187) //发送测试
(0188) void RfSendProc()
(0189) {uchar i;
(0190) for (i=0;i<32;i++) TxBuf[i]=i+i;
1AD 2744 CLR R20
1AE C00A RJMP 0x01B9
1AF 2E24 MOV R2,R20
1B0 0E24 ADD R2,R20
1B1 E880 LDI R24,0x80
1B2 E090 LDI R25,0
1B3 2FE4 MOV R30,R20
1B4 27FF CLR R31
1B5 0FE8 ADD R30,R24
1B6 1FF9 ADC R31,R25
1B7 8220 STD Z+0,R2
1B8 9543 INC R20
1B9 3240 CPI R20,0x20
1BA F3A0 BCS 0x01AF
(0191) nrf905_SendData();//发送测试数据
1BB 940E 00D7 CALL _nrf905_SendData
(0192) nrf905_RxOn();//重新回到接收状态
1BD 940E 0092 CALL _nrf905_RxOn
1BF 9149 LD R20,Y+
1C0 9508 RET
(0193) }
(0194)
(0195) void TimerFunc()
(0196) {
(0197) bTimer=0;
_TimerFunc:
1C1 2422 CLR R2
1C2 9220 00A3 STS bTimer,R2
(0198) //WDR();//clear WDT
(0199)
(0200) CPL(PORTD,LED);
1C4 E880 LDI R24,0x80
1C5 E090 LDI R25,0
1C6 B222 IN R2,0x12
1C7 2433 CLR R3
1C8 2628 EOR R2,R24
1C9 2639 EOR R3,R25
1CA BA22 OUT 0x12,R2
1CB 9508 RET
(0201) //SPDR=66;
(0202) }
(0203)
(0204) void SystemIni()
(0205) {
(0206) T0Cnt=T0N;
_SystemIni:
1CC E189 LDI R24,0x19
1CD 9380 00A1 STS T0Cnt,R24
(0207) RfCnt=RFTN;
1CF E08A LDI R24,0xA
1D0 9380 00A0 STS RfCnt,R24
1D2 9508 RET
_DelayMs:
i --> R10
ms --> R12
1D3 92AA ST R10,-Y
1D4 92CA ST R12,-Y
1D5 2EC0 MOV R12,R16
(0208) }
(0209)
(0210) void DelayMs(uchar ms)
(0211) {char i;
(0212) for (i=0;i<ms;i++)
1D6 24AA CLR R10
1D7 C004 RJMP 0x01DC
(0213) {DelayUs(1000);
1D8 EE08 LDI R16,0xE8
1D9 E013 LDI R17,3
1DA D006 RCALL _DelayUs
1DB 94A3 INC R10
1DC 14AC CP R10,R12
1DD F3D0 BCS 0x01D8
(0214) }
(0215) return;
1DE 90C9 LD R12,Y+
1DF 90A9 LD R10,Y+
1E0 9508 RET
_DelayUs:
i --> R20
us --> R16
1E1 934A ST R20,-Y
1E2 935A ST R21,-Y
(0216) }
(0217)
(0218) void DelayUs(uint us)
(0219) {uint i;
(0220) for (i=0;i<us;i++)
1E3 2744 CLR R20
1E4 2755 CLR R21
1E5 C008 RJMP 0x01EE
(0221) {NOP();NOP();NOP();NOP();NOP();NOP();
FILE: <library>
1E6 0000 NOP
1E7 0000 NOP
1E8 0000 NOP
1E9 0000 NOP
1EA 0000 NOP
1EB 0000 NOP
1EC 5F4F SUBI R20,0xFF
1ED 4F5F SBCI R21,0xFF
1EE 1740 CP R20,R16
1EF 0751 CPC R21,R17
1F0 F3A8 BCS 0x01E6
1F1 9159 LD R21,Y+
1F2 9149 LD R20,Y+
1F3 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -