⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 slave.lst

📁 这是用C编的nrf905的通讯程序
💻 LST
📖 第 1 页 / 共 4 页
字号:
(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 + -