📄 slave.lst
字号:
(0088) MCUCR = 0x00; //下降沿触发
028F 2422 CLR R2
0290 BE25 OUT 0x35,R2
(0089) GICR = 0x00;
0291 BE2B OUT 0x3B,R2
(0090) TIMSK = 0x05; //timer interrupt sources
0292 E085 LDI R24,5
0293 BF89 OUT 0x39,R24
(0091) SEI(); //re-enable interrupts
0294 9478 BSET 7
0295 9508 RET
_RfRecvProc:
i --> R20
0296 940E040C CALL push_gset1
(0092) //all peripherals are now initialized
(0093) }
(0094)
(0095)
(0096)
(0097)
(0098) //接收处理
(0099) void RfRecvProc()
(0100) {uchar i;
(0101)
(0102) if ((PINB&(1<<AM))==0) return;//一般先AM=1指示地址匹配对
0298 99B1 SBIC 0x16,1
0299 C001 RJMP 0x029B
029A C01E RJMP 0x02B9
(0103)
(0104) if ((PINB&(1<<DR))==0) return;//DR=1时表示数据接收对而且Crc正确
029B 99B3 SBIC 0x16,3
029C C001 RJMP 0x029E
029D C01B RJMP 0x02B9
(0105)
(0106)
(0107) //已经接收到数据
(0108) nrf905_ReadData();//读出...
029E 940E022B CALL _nrf905_ReadData
(0109)
(0110)
(0111) //数据接收正确...灯指示
(0112) CPL(PORTD,LED);
02A0 E880 LDI R24,0x80
02A1 E090 LDI R25,0
02A2 B222 IN R2,0x12
02A3 2433 CLR R3
02A4 2628 EOR R2,R24
02A5 2639 EOR R3,R25
02A6 BA22 OUT 0x12,R2
(0113) for (i=0;i<SIZE;i++){seg(RxBuf[i]);}
02A7 2744 CLR R20
02A8 C00A RJMP 0x02B3
02A9 E686 LDI R24,0x66
02AA E090 LDI R25,0
02AB 2FE4 MOV R30,R20
02AC 27FF CLR R31
02AD 0FE8 ADD R30,R24
02AE 1FF9 ADC R31,R25
02AF 8100 LDD R16,Z+0
02B0 940E034B CALL _seg
02B2 9543 INC R20
02B3 3240 CPI R20,0x20
02B4 F3A0 BCS 0x02A9
(0114) LCD(RxBuf[0]);
02B5 91000066 LDS R16,RxBuf
02B7 940E03D2 CALL _LCD
02B9 940E040F CALL pop_gset1
02BB 9508 RET
_RfSendProc:
i --> R20
02BC 940E040C CALL push_gset1
(0115)
(0116)
(0117) //从机回送数据包,这样双方都能指示是否收到有效数据包
(0118) #ifndef MASTER
(0119) //RfSendProc();
(0120) #endif
(0121) }
(0122)
(0123) //发送测试
(0124) void RfSendProc()
(0125) {uchar i;
(0126) for (i=0;i<SIZE;i++) TxBuf[i]=2*i;
02BE 2744 CLR R20
02BF C00A RJMP 0x02CA
02C0 E082 LDI R24,2
02C1 9F84 MUL R24,R20
02C2 EC8A LDI R24,0xCA
02C3 E090 LDI R25,0
02C4 2FE4 MOV R30,R20
02C5 27FF CLR R31
02C6 0FE8 ADD R30,R24
02C7 1FF9 ADC R31,R25
02C8 8200 STD Z+0,R0
02C9 9543 INC R20
02CA 3240 CPI R20,0x20
02CB F3A0 BCS 0x02C0
(0127) nrf905_SendData();//发送测试数据
02CC 940E0221 CALL _nrf905_SendData
(0128) nrf905_RxOn();//重新回到接收状态
02CE 940E0176 CALL _nrf905_RxOn
02D0 940E040F CALL pop_gset1
02D2 9508 RET
(0129) }
(0130)
(0131) void TimerFunc()
(0132) {
(0133) bTimer=0;
_TimerFunc:
02D3 2422 CLR R2
02D4 92200132 STS bTimer,R2
(0134) //WDR();//clear WDT
(0135)
(0136) CPL(PORTD,LED);
02D6 E880 LDI R24,0x80
02D7 E090 LDI R25,0
02D8 B222 IN R2,0x12
02D9 2433 CLR R3
02DA 2628 EOR R2,R24
02DB 2639 EOR R3,R25
02DC BA22 OUT 0x12,R2
02DD 9508 RET
(0137) //SPDR=66;
(0138) }
(0139)
(0140) void SystemIni()
(0141) {
(0142) T0Cnt=T0N;
_SystemIni:
02DE E189 LDI R24,0x19
02DF 93800130 STS T0Cnt,R24
(0143) RfCnt=RFTN;
02E1 9380012F STS RfCnt,R24
02E3 9508 RET
_DelayMs:
i --> R20
ms --> R22
02E4 940E040A CALL push_gset2
02E6 2F60 MOV R22,R16
(0144) }
(0145)
(0146) void DelayMs(uchar ms)
(0147) {char i;
(0148) for (i=0;i<ms;i++)
02E7 2744 CLR R20
02E8 C004 RJMP 0x02ED
(0149) {DelayUs(1000);
02E9 EE08 LDI R16,0xE8
02EA E013 LDI R17,3
02EB D006 RCALL _DelayUs
02EC 9543 INC R20
02ED 1746 CP R20,R22
02EE F3D0 BCS 0x02E9
(0150) }
(0151) return;
02EF 940E03FE CALL pop_gset2
02F1 9508 RET
_DelayUs:
i --> R20
us --> R16
02F2 940E040C CALL push_gset1
(0152) }
(0153)
(0154) void DelayUs(uint us)
(0155) {uint i;
(0156) for (i=0;i<us;i++)
02F4 2744 CLR R20
02F5 2755 CLR R21
02F6 C008 RJMP 0x02FF
(0157) {NOP();NOP();NOP();NOP();NOP();NOP();
02F7 0000 NOP
02F8 0000 NOP
02F9 0000 NOP
02FA 0000 NOP
02FB 0000 NOP
02FC 0000 NOP
02FD 5F4F SUBI R20,0xFF
02FE 4F5F SBCI R21,0xFF
02FF 1740 CP R20,R16
0300 0751 CPC R21,R17
0301 F3A8 BCS 0x02F7
0302 940E040F CALL pop_gset1
0304 9508 RET
(0158) }
(0159) }
(0160)
(0161) void main()
(0162) {
(0163) init_devices();
_main:
0305 DF82 RCALL _init_devices
(0164) SystemIni();
0306 DFD7 RCALL _SystemIni
(0165) nrf905_Init();
0307 940E017A CALL _nrf905_Init
(0166) ENLCD();
0309 9891 CBI 0x12,1
(0167) PutChar('W');
030A E507 LDI R16,0x57
030B 940E03B8 CALL _PutChar
(0168) PutChar('e');
030D E605 LDI R16,0x65
030E 940E03B8 CALL _PutChar
(0169) PutChar('l');
0310 E60C LDI R16,0x6C
0311 940E03B8 CALL _PutChar
(0170) PutChar('c');
0313 E603 LDI R16,0x63
0314 940E03B8 CALL _PutChar
(0171) PutChar('o');
0316 E60F LDI R16,0x6F
0317 940E03B8 CALL _PutChar
(0172) PutChar('m');
0319 E60D LDI R16,0x6D
031A 940E03B8 CALL _PutChar
(0173) PutChar('e');
031C E605 LDI R16,0x65
031D 940E03B8 CALL _PutChar
(0174) PutChar(' ');
031F E200 LDI R16,0x20
0320 940E03B8 CALL _PutChar
(0175) PutChar('t');
0322 E704 LDI R16,0x74
0323 940E03B8 CALL _PutChar
(0176) PutChar('o');
0325 E60F LDI R16,0x6F
0326 940E03B8 CALL _PutChar
(0177) PutChar(' ');
0328 E200 LDI R16,0x20
0329 940E03B8 CALL _PutChar
(0178) PutChar('X');
032B E508 LDI R16,0x58
032C 940E03B8 CALL _PutChar
(0179) PutChar('G');
032E E407 LDI R16,0x47
032F 940E03B8 CALL _PutChar
(0180) PutChar('C');
0331 E403 LDI R16,0x43
0332 940E03B8 CALL _PutChar
(0181) DelayMs(1000);
0334 EE08 LDI R16,0xE8
0335 DFAE RCALL _DelayMs
(0182) DelayMs(1000);
0336 EE08 LDI R16,0xE8
0337 DFAC RCALL _DelayMs
(0183) DelayMs(1000);
0338 EE08 LDI R16,0xE8
0339 DFAA RCALL _DelayMs
(0184) DelayMs(1000);
033A EE08 LDI R16,0xE8
033B DFA8 RCALL _DelayMs
(0185)
(0186)
(0187)
(0188) clear_lcd();
033C 940E0382 CALL _clear_lcd
(0189)
(0190)
(0191) DISLCD();
033E 9A91 SBI 0x12,1
033F C009 RJMP 0x0349
(0192)
(0193) while (1)
(0194) {
(0195) // if (bTimer) TimerFunc();
(0196) #ifdef MASTER
(0197) if (bRfSend)
0340 90200131 LDS R2,bRfSend
0342 2022 TST R2
0343 F021 BEQ 0x0348
(0198) { bRfSend=0;
0344 2422 CLR R2
0345 92200131 STS bRfSend,R2
(0199) RfSendProc();//发送测试
0347 DF74 RCALL _RfSendProc
(0200) }
(0201) #endif
(0202)
(0203) RfRecvProc();//接收处理
0348 DF4D RCALL _RfRecvProc
0349 CFF6 RJMP 0x0340
034A 9508 RET
_seg:
seg_7 --> Y+0
num --> R20
034B 940E040C CALL push_gset1
034D 2F40 MOV R20,R16
034E 97A0 SBIW R28,0x20
FILE: C:\DOCUME~1\charon\MYDOCU~1\AVR\NRF905\seg.c
(0001) #include <iom16v.h>
(0002)
(0003) void seg(unsigned char num)
(0004) {
(0005)
(0006) unsigned char seg_7[]= //0~9
(0007) {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0X77,0X7C,0X39,0X5E,0X79,0X71,
034F E584 LDI R24,0x54
0350 E090 LDI R25,0
0351 01FE MOVW R30,R28
0352 E200 LDI R16,0x20
0353 E010 LDI R17,0
0354 93FA ST R31,-Y
0355 93EA ST R30,-Y
0356 939A ST R25,-Y
0357 938A ST R24,-Y
0358 940E0423 CALL asgncblk
(0008) 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0X77,0X7C,0X39,0X5E,0X79,0X71};
(0009) PORTA=seg_7[num];
035A 01CE MOVW R24,R28
035B 2FE4 MOV R30,R20
035C 27FF CLR R31
035D 0FE8 ADD R30,R24
035E 1FF9 ADC R31,R25
035F 8020 LDD R2,Z+0
0360 BA2B OUT 0x1B,R2
0361 96A0 ADIW R28,0x20
0362 940E040F CALL pop_gset1
0364 9508 RET
FILE: C:\DOCUME~1\charon\MYDOCU~1\AVR\NRF905\lcd.c
(0001) //ICC-AVR application builder : 2007-6-8 23:42:55
(0002) // Target : M16
(0003) // Crystal: 7.3728Mhz
(0004)
(0005) #include "config.h"
(0006)
(0007) #define RST 0x01
(0008) // PD0
(0009) #define CE 0x02
(0010) // PD1
(0011) #define DC 0x04
(0012) // PD2
(0013) //#define MOSI 0x20
(0014) // PB5
(0015) //#define CLK 0x80
(0016) // PB7
(0017)
(0018) //字模数组长度
(0019) #define X_Length 160
(0020) // 初始位置
(0021) #define X_Init 10
(0022) #define Y_Init 2
(0023)
(0024)
(0025) static const unsigned char CharList[][5] =
(0026) {
(0027) { 0x00, 0x00, 0x00, 0x00, 0x00 }, // sp //0
(0028) { 0x00, 0x00, 0x2f, 0x00, 0x00 }, // !
(0029) { 0x00, 0x07, 0x00, 0x07, 0x00 }, // "
(0030) { 0x14, 0x7f, 0x14, 0x7f, 0x14 }, // #
(0031) { 0x24, 0x2a, 0x7f, 0x2a, 0x12 }, // $
(0032) { 0xc4, 0xc8, 0x10, 0x26, 0x46 }, // %
(0033) { 0x36, 0x49, 0x55, 0x22, 0x50 }, // &
(0034) { 0x00, 0x05, 0x03, 0x00, 0x00 }, // '
(0035) { 0x00, 0x1c, 0x22, 0x41, 0x00 }, // (
(0036) { 0x00, 0x41, 0x22, 0x1c, 0x00 }, // )
(0037) { 0x14, 0x08, 0x3E, 0x08, 0x14 }, // *
(0038) { 0x08, 0x08, 0x3E, 0x08, 0x08 }, // +
(0039) { 0x00, 0x00, 0x50, 0x30, 0x00 }, // ,
(0040) { 0x10, 0x10, 0x10, 0x10, 0x10 }, // -
(0041) { 0x00, 0x60, 0x60, 0x00, 0x00 }, // .
(0042) { 0x20, 0x10, 0x08, 0x04, 0x02 }, // /
(0043) { 0x3E, 0x51, 0x49, 0x45, 0x3E }, // 0 //16
(0044) { 0x00, 0x42, 0x7F, 0x40, 0x00 }, // 1
(0045) { 0x42, 0x61, 0x51, 0x49, 0x46 }, // 2
(0046) { 0x21, 0x41, 0x45, 0x4B, 0x31 }, // 3
(0047) { 0x18, 0x14, 0x12, 0x7F, 0x10 }, // 4
(0048) { 0x27, 0x45, 0x45, 0x45, 0x39 }, // 5
(0049) { 0x3C, 0x4A, 0x49, 0x49, 0x30 }, // 6
(0050) { 0x01, 0x71, 0x09, 0x05, 0x03 }, // 7
(0051) { 0x36, 0x49, 0x49, 0x49, 0x36 }, // 8
(0052) { 0x06, 0x49, 0x49, 0x29, 0x1E }, // 9
(0053) { 0x00, 0x36, 0x36, 0x00, 0x00 }, // :
(0054) { 0x00, 0x56, 0x36, 0x00, 0x00 }, // ;
(0055) { 0x08, 0x14, 0x22, 0x41, 0x00 }, // <
(0056) { 0x14, 0x14, 0x14, 0x14, 0x14 }, // =
(0057) { 0x00, 0x41, 0x22, 0x14, 0x08 }, // >
(0058) { 0x02, 0x01, 0x51, 0x09, 0x06 }, // ?
(0059) { 0x32, 0x49, 0x59, 0x51, 0x3E }, // @
(0060) { 0x7E, 0x11, 0x11, 0x11, 0x7E }, // A //33
(0061) { 0x7F, 0x49, 0x49, 0x49, 0x36 }, // B
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -