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

📄 ptr8000.lst

📁 本文档是从MCS51向AVR的快速转换的说明文档.
💻 LST
📖 第 1 页 / 共 3 页
字号:
(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
    0161 E581      LDI	R24,0x51
    0162 B98D      OUT	0x0D,R24
(0096)  SPSR = 0x00; //setup SPI
    0163 2422      CLR	R2
    0164 B82E      OUT	0x0E,R2
(0097)  
(0098)  temp = SPSR; //!!!
    0165 B10E      IN	R16,0x0E
(0099)  temp = SPDR; //清空SPI,和中断标志,使SPI空闲    
    0166 B10F      IN	R16,0x0F
    0167 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
    0168 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:
    0169 2422      CLR	R2
    016A B82A      OUT	0x0A,R2
(0118)  UCSRA = 0x00;
    016B B82B      OUT	0x0B,R2
(0119)  UCSRC = BIT(URSEL) | 0x00;
    016C E880      LDI	R24,0x80
    016D BD80      OUT	0x20,R24
(0120)  UBRRL = 0x23; //set baud rate lo
    016E E283      LDI	R24,0x23
    016F B989      OUT	0x09,R24
(0121)  UBRRH = 0x00; //set baud rate hi
    0170 BC20      OUT	0x20,R2
(0122)  UCSRB = 0x18;
    0171 E188      LDI	R24,0x18
    0172 B98A      OUT	0x0A,R24
    0173 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:
    0174 94F8      BCLR	7
(0130)  port_init();
    0175 DF8A      RCALL	_port_init
(0131)  timer0_init();
    0176 DF99      RCALL	_timer0_init
(0132)  timer1_init();
    0177 DFC8      RCALL	_timer1_init
(0133)  spi_init();
    0178 DFE8      RCALL	_spi_init
(0134)  uart0_init();
    0179 DFEF      RCALL	_uart0_init
(0135) 
(0136)  MCUCR = 0x00;
    017A 2422      CLR	R2
    017B BE25      OUT	0x35,R2
(0137)  GICR  = 0x00;
    017C BE2B      OUT	0x3B,R2
(0138)  TIMSK = 0x05; //timer interrupt sources
    017D E085      LDI	R24,5
    017E BF89      OUT	0x39,R24
(0139)  SEI(); //re-enable interrupts
    017F 9478      BSET	7
    0180 9508      RET
(0140)  //all peripherals are now initialized
(0141) }
(0142) 
(0143) void main()
(0144) {
(0145)    init_devices();
_main:
    0181 DFF2      RCALL	_init_devices
(0146)    SystemIni();
    0182 D057      RCALL	_SystemIni
(0147)    nrf905_Init();
    0183 940E009A  CALL	_nrf905_Init
    0185 C00E      RJMP	0x0194
(0148) 
(0149)    while (1)
(0150)    {  
(0151)       if (bTimer) TimerFunc();
    0186 902000A3  LDS	R2,bTimer
    0188 2022      TST	R2
    0189 F009      BEQ	0x018B
    018A D044      RCALL	_TimerFunc
(0152) 	  #ifdef MASTER
(0153) 	    if (bRfSend)
    018B 902000A2  LDS	R2,bRfSend
    018D 2022      TST	R2
    018E F021      BEQ	0x0193
(0154) 		{ bRfSend=0;
    018F 2422      CLR	R2
    0190 922000A2  STS	bRfSend,R2
(0155) 		  RfSendProc();//发送测试
    0192 D025      RCALL	_RfSendProc
(0156) 		}
(0157) 	  #endif
(0158) 	  
(0159) 	  RfRecvProc();//接收处理
    0193 D002      RCALL	_RfRecvProc
    0194 CFF1      RJMP	0x0186
(0160)    };
    0195 9508      RET
_RfRecvProc:
  i                    --> R20
    0196 940E020D  CALL	push_gset1
(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正确
    0198 9984      SBIC	0x10,4
    0199 C001      RJMP	0x019B
    019A C01A      RJMP	0x01B5
(0170)    
(0171)    //已经接收到数据
(0172)    nrf905_ReadData();//读出...
    019B 940E00E9  CALL	_nrf905_ReadData
(0173)    for (i=0;i<32;i++)
    019D 2744      CLR	R20
    019E C00D      RJMP	0x01AC
(0174)    { if (RxBuf[i]!=(i+i)) 
    019F 2E24      MOV	R2,R20
    01A0 0E24      ADD	R2,R20
    01A1 E680      LDI	R24,0x60
    01A2 E090      LDI	R25,0
    01A3 2FE4      MOV	R30,R20
    01A4 27FF      CLR	R31
    01A5 0FE8      ADD	R30,R24
    01A6 1FF9      ADC	R31,R25
    01A7 8030      LDD	R3,Z+0
    01A8 1432      CP	R3,R2
    01A9 F009      BEQ	0x01AB
(0175)         return;
    01AA C00A      RJMP	0x01B5
    01AB 9543      INC	R20
    01AC 3240      CPI	R20,0x20
    01AD F388      BCS	0x019F
(0176)    }
(0177)    
(0178)    //数据接收正确...灯指示
(0179)    CPL(PORTD,LED);
    01AE E880      LDI	R24,0x80
    01AF E090      LDI	R25,0
    01B0 B222      IN	R2,0x12
    01B1 2433      CLR	R3
    01B2 2628      EOR	R2,R24
    01B3 2639      EOR	R3,R25
    01B4 BA22      OUT	0x12,R2
    01B5 940E0210  CALL	pop_gset1
    01B7 9508      RET
_RfSendProc:
  i                    --> R20
    01B8 940E020D  CALL	push_gset1
(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;
    01BA 2744      CLR	R20
    01BB C00A      RJMP	0x01C6
    01BC 2E24      MOV	R2,R20
    01BD 0E24      ADD	R2,R20
    01BE E880      LDI	R24,0x80
    01BF E090      LDI	R25,0
    01C0 2FE4      MOV	R30,R20
    01C1 27FF      CLR	R31
    01C2 0FE8      ADD	R30,R24
    01C3 1FF9      ADC	R31,R25
    01C4 8220      STD	Z+0,R2
    01C5 9543      INC	R20
    01C6 3240      CPI	R20,0x20
    01C7 F3A0      BCS	0x01BC
(0191)    nrf905_SendData();//发送测试数据
    01C8 940E00DF  CALL	_nrf905_SendData
(0192)    nrf905_RxOn();//重新回到接收状态
    01CA 940E0096  CALL	_nrf905_RxOn
    01CC 940E0210  CALL	pop_gset1
    01CE 9508      RET
(0193) }
(0194) 
(0195) void TimerFunc()
(0196) {
(0197)    bTimer=0;
_TimerFunc:
    01CF 2422      CLR	R2
    01D0 922000A3  STS	bTimer,R2
(0198)    //WDR();//clear WDT
(0199)    
(0200)    CPL(PORTD,LED);
    01D2 E880      LDI	R24,0x80
    01D3 E090      LDI	R25,0
    01D4 B222      IN	R2,0x12
    01D5 2433      CLR	R3
    01D6 2628      EOR	R2,R24
    01D7 2639      EOR	R3,R25
    01D8 BA22      OUT	0x12,R2
    01D9 9508      RET
(0201)    //SPDR=66;
(0202) }
(0203) 
(0204) void SystemIni()
(0205) {
(0206)   T0Cnt=T0N;
_SystemIni:
    01DA E189      LDI	R24,0x19
    01DB 938000A1  STS	T0Cnt,R24
(0207)   RfCnt=RFTN;
    01DD E08A      LDI	R24,0xA
    01DE 938000A0  STS	RfCnt,R24
    01E0 9508      RET
_DelayMs:
  i                    --> R20
  ms                   --> R22
    01E1 940E020B  CALL	push_gset2
    01E3 2F60      MOV	R22,R16
(0208) }
(0209) 
(0210) void DelayMs(uchar ms)
(0211) {char i;
(0212) for (i=0;i<ms;i++)
    01E4 2744      CLR	R20
    01E5 C004      RJMP	0x01EA
(0213)   {DelayUs(1000);
    01E6 EE08      LDI	R16,0xE8
    01E7 E013      LDI	R17,3
    01E8 D006      RCALL	_DelayUs
    01E9 9543      INC	R20
    01EA 1746      CP	R20,R22
    01EB F3D0      BCS	0x01E6
(0214)   }
(0215)   return;
    01EC 940E0202  CALL	pop_gset2
    01EE 9508      RET
_DelayUs:
  i                    --> R20
  us                   --> R16
    01EF 940E020D  CALL	push_gset1
(0216) }
(0217) 
(0218) void DelayUs(uint us)
(0219) {uint i;
(0220)   for (i=0;i<us;i++)
    01F1 2744      CLR	R20
    01F2 2755      CLR	R21
    01F3 C008      RJMP	0x01FC
(0221)   {NOP();NOP();NOP();NOP();NOP();NOP();
FILE: <library>
    01F4 0000      NOP
    01F5 0000      NOP
    01F6 0000      NOP
    01F7 0000      NOP
    01F8 0000      NOP
    01F9 0000      NOP
    01FA 5F4F      SUBI	R20,0xFF
    01FB 4F5F      SBCI	R21,0xFF
    01FC 1740      CP	R20,R16
    01FD 0751      CPC	R21,R17
    01FE F3A8      BCS	0x01F4
    01FF 940E0210  CALL	pop_gset1
    0201 9508      RET
pop_gset2:
    0202 E0E2      LDI	R30,2
    0203 940C0211  JMP	pop
push_gset5:
    0205 92FA      ST	R15,-Y
    0206 92EA      ST	R14,-Y
push_gset4:
    0207 92DA      ST	R13,-Y
    0208 92CA      ST	R12,-Y
push_gset3:
    0209 92BA      ST	R11,-Y
    020A 92AA      ST	R10,-Y
push_gset2:
    020B 937A      ST	R23,-Y
    020C 936A      ST	R22,-Y
push_gset1:
    020D 935A      ST	R21,-Y
    020E 934A      ST	R20,-Y
    020F 9508      RET
pop_gset1:
    0210 E0E1      LDI	R30,1
pop:
    0211 9149      LD	R20,Y+
    0212 9159      LD	R21,Y+
    0213 FDE0      SBRC	R30,0
    0214 9508      RET
    0215 9169      LD	R22,Y+
    0216 9179      LD	R23,Y+
    0217 FDE1      SBRC	R30,1
    0218 9508      RET
    0219 90A9      LD	R10,Y+
    021A 90B9      LD	R11,Y+
    021B FDE2      SBRC	R30,2
    021C 9508      RET
    021D 90C9      LD	R12,Y+
    021E 90D9      LD	R13,Y+
    021F FDE3      SBRC	R30,3
    0220 9508      RET
    0221 90E9      LD	R14,Y+
    0222 90F9      LD	R15,Y+
    0223 9508      RET

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -