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

📄 lianjie.lst

📁 监测高压电电流
💻 LST
📖 第 1 页 / 共 5 页
字号:
_put_str_CRLF:
  str                  --> R10
     393 92AA      ST	R10,-Y
     394 92BA      ST	R11,-Y
     395 0158      MOVW	R10,R16
(0741) }
(0742) 
(0743) /////////////////////////////////////////////////////////////////////////////////
(0744) void put_str_CRLF(char *str)
(0745) {
(0746) 	put_str(str);
     396 0185      MOVW	R16,R10
     397 DFE8      RCALL	_put_str
(0747) 	uart_TxChar(0x0d);
     398 E00D      LDI	R16,0xD
     399 DD5D      RCALL	_uart_TxChar
(0748) 	uart_TxChar(0x0a);
     39A E00A      LDI	R16,0xA
     39B DD5B      RCALL	_uart_TxChar
     39C 90B9      LD	R11,Y+
     39D 90A9      LD	R10,Y+
     39E 9508      RET
(0749) }
(0750) 
(0751) /////////////////////////////////////////////////////////////////////////////////
(0752) void wdt_init(void)
(0753) {
(0754) 	WDR();//喂狗
_wdt_init:
     39F 95A8      WDR
(0755) 	WDTCR|=(BIT(WDCE)|BIT(WDE));
     3A0 B581      IN	R24,0x21
     3A1 6188      ORI	R24,0x18
     3A2 BD81      OUT	0x21,R24
(0756) 	WDTCR=BIT(WDP2)|BIT(WDP1)|BIT(WDP0)|BIT(WDE);
     3A3 E08F      LDI	R24,0xF
     3A4 BD81      OUT	0x21,R24
     3A5 9508      RET
_uart_Rx_isr:
     3A6 922A      ST	R2,-Y
     3A7 938A      ST	R24,-Y
     3A8 939A      ST	R25,-Y
     3A9 93EA      ST	R30,-Y
     3AA 93FA      ST	R31,-Y
     3AB B62F      IN	R2,0x3F
     3AC 922A      ST	R2,-Y
(0757) }
(0758) /////////////////////////////////////////////////////////////////////////////////
(0759) //uart完成中断
(0760) #pragma interrupt_handler uart_Rx_isr:iv_USART_RXC
(0761) void uart_Rx_isr(void)
(0762) {
(0763) 	rxbuf[rxpt] = UDR;
     3AD EC88      LDI	R24,0xC8
     3AE E090      LDI	R25,0
     3AF 91E0 00C7 LDS	R30,rxpt
     3B1 27FF      CLR	R31
     3B2 0FE8      ADD	R30,R24
     3B3 1FF9      ADC	R31,R25
     3B4 B02C      IN	R2,0x0C
     3B5 8220      STD	Z+0,R2
(0764) //	uart_TxChar(rxbuf[rxpt]);
(0765) 	rxpt++;
     3B6 9180 00C7 LDS	R24,rxpt
     3B8 5F8F      SUBI	R24,0xFF
     3B9 9380 00C7 STS	rxpt,R24
(0766) 	rxpt &= RXBUF_LEN1;
     3BB 718F      ANDI	R24,0x1F
     3BC 9380 00C7 STS	rxpt,R24
     3BE 9029      LD	R2,Y+
     3BF BE2F      OUT	0x3F,R2
     3C0 91F9      LD	R31,Y+
     3C1 91E9      LD	R30,Y+
     3C2 9199      LD	R25,Y+
     3C3 9189      LD	R24,Y+
     3C4 9029      LD	R2,Y+
     3C5 9518      RETI
(0767) 
(0768) }
(0769) 
(0770) /////////////////////////////////////////////////////////////////////////////////
(0771) void Spi_InitRegister(void)
(0772) {
(0773) //	Register[0] = 0x6c;									// 433.2MHZ
(0774) //	Register[1] = 0x0c;									//不重发,正常模式,输出+10dBm,433M频段
(0775) 	Register[0] = CH_NO_BYTE;							// 433.2MHZ
_Spi_InitRegister:
     3C6 E48C      LDI	R24,0x4C
     3C7 9380 00E8 STS	Register,R24
(0776) 	Register[1] = PA_PWR_10dBm | HFREQ_PLL_433MHz;		//不重发,正常模式,输出+10dBm,433M频段
     3C9 E08C      LDI	R24,0xC
     3CA 9380 00E9 STS	Register+1,R24
(0777) 	Register[2] = 0x44;									//TX、RX地址宽度为4
     3CC E484      LDI	R24,0x44
     3CD 9380 00EA STS	Register+2,R24
(0778) 	Register[3] = 0x10;									//收为16个有效数据
     3CF E180      LDI	R24,0x10
     3D0 9380 00EB STS	Register+3,R24
(0779) 	Register[4] = 0x10;									//发为16个有效数据
     3D2 9380 00EC STS	0x00EC,R24
(0780) 	Register[5] = ADDR_1;									//本机收地址
     3D4 E487      LDI	R24,0x47
     3D5 9380 00ED STS	0x00ED,R24
(0781) 	Register[6] = ADDR_2;
     3D7 E587      LDI	R24,0x57
     3D8 9380 00EE STS	0x00EE,R24
(0782) 	Register[7] = ADDR_3;
     3DA E58A      LDI	R24,0x5A
     3DB 9380 00EF STS	0x00EF,R24
(0783) 	Register[8] = ADDR_4;
     3DD E484      LDI	R24,0x44
     3DE 9380 00F0 STS	0x00F0,R24
(0784) 	Register[9] = 0xD8;   //CRC校验16位,16M晶振
     3E0 ED88      LDI	R24,0xD8
     3E1 9380 00F1 STS	0x00F1,R24
(0785) 
(0786) 	tx_addr[0] = ADDR_1;
     3E3 E487      LDI	R24,0x47
     3E4 9380 00C2 STS	nrf905_JinJu.c:tx_addr,R24
(0787) 	tx_addr[1] = ADDR_2;
     3E6 E587      LDI	R24,0x57
     3E7 9380 00C3 STS	nrf905_JinJu.c:tx_addr+1,R24
(0788) 	tx_addr[2] = ADDR_3;
     3E9 E58A      LDI	R24,0x5A
     3EA 9380 00C4 STS	nrf905_JinJu.c:tx_addr+2,R24
(0789) 	tx_addr[3] = ADDR_4;
     3EC E484      LDI	R24,0x44
     3ED 9380 00C5 STS	nrf905_JinJu.c:tx_addr+3,R24
(0790) 
(0791) 	TxFlag[0] = 0;
     3EF 2422      CLR	R2
     3F0 9220 00F7 STS	TxFlag,R2
(0792) 	TxFlag[1] = 0;
     3F2 9220 00F8 STS	TxFlag+1,R2
(0793) 	TxFlag[2] = 0;
     3F4 9220 00F9 STS	TxFlag+2,R2
(0794) 	TxFlag[3] = 0;
     3F6 9220 00FA STS	TxFlag+3,R2
(0795) 	TxFlag[4] = 0;
     3F8 9220 00FB STS	0x00FB,R2
(0796) 	TxFlag[5] = 0;
     3FA 9220 00FC STS	0x00FC,R2
     3FC 9508      RET
(0797) }
(0798) 
(0799) /////////////////////////////////////////////////////////////
(0800) void InitSPI(void)
(0801) {
(0802) 	Spi_InitRegister();
_InitSPI:
     3FD DFC8      RCALL	_Spi_InitRegister
(0803) 	SPI_MasterInit();
     3FE DD1E      RCALL	_SPI_MasterInit
(0804) 	SPI_W_CONFIG();
     3FF DDEA      RCALL	_SPI_W_CONFIG
     400 9508      RET
_uart_handle:
  lpc                  --> R22
  cmd                  --> R12
  len                  --> R10
  len1                 --> R20
  i                    --> R22
     401 D16C      RCALL	push_xgsetF03C
(0805) }
(0806) /////////////////////////////////////////////////////////////
(0807) void uart_handle(void)
(0808) {
(0809) 	int		len,len1,i;
(0810) 	BYTE	cmd,lpc=0xff;
     402 EF6F      LDI	R22,0xFF
(0811) 
(0812) 	if ( handlept == rxpt )		return;
     403 9020 00C7 LDS	R2,rxpt
     405 9030 00C6 LDS	R3,handlept
     407 1432      CP	R3,R2
     408 F409      BNE	0x040A
     409 C0AA      RJMP	0x04B4
(0813) 	len = (rxpt - handlept) & RXBUF_LEN1;
     40A 9020 00C6 LDS	R2,handlept
     40C 2433      CLR	R3
     40D 9180 00C7 LDS	R24,rxpt
     40F 2799      CLR	R25
     410 1982      SUB	R24,R2
     411 0993      SBC	R25,R3
     412 718F      ANDI	R24,0x1F
     413 7090      ANDI	R25,0
     414 015C      MOVW	R10,R24
(0814) 
(0815) 	if ( len < 4 )	return;
     415 3084      CPI	R24,4
     416 E0E0      LDI	R30,0
     417 079E      CPC	R25,R30
     418 F40C      BGE	0x041A
     419 C09A      RJMP	0x04B4
(0816) 	
(0817) 	for ( i=0; i<len; i++ )	buf[i] = rxbuf[(handlept+i) & RXBUF_LEN1];
     41A 2766      CLR	R22
     41B 2777      CLR	R23
     41C C014      RJMP	0x0431
     41D 91E0 00C6 LDS	R30,handlept
     41F 27FF      CLR	R31
     420 0FE6      ADD	R30,R22
     421 1FF7      ADC	R31,R23
     422 71EF      ANDI	R30,0x1F
     423 70F0      ANDI	R31,0
     424 EC88      LDI	R24,0xC8
     425 E090      LDI	R25,0
     426 0FE8      ADD	R30,R24
     427 1FF9      ADC	R31,R25
     428 8020      LDD	R2,Z+0
     429 E882      LDI	R24,0x82
     42A E090      LDI	R25,0
     42B 01FB      MOVW	R30,R22
     42C 0FE8      ADD	R30,R24
     42D 1FF9      ADC	R31,R25
     42E 8220      STD	Z+0,R2
     42F 5F6F      SUBI	R22,0xFF
     430 4F7F      SBCI	R23,0xFF
     431 156A      CP	R22,R10
     432 057B      CPC	R23,R11
     433 F34C      BLT	0x041D
(0818) 
(0819) 	                            
(0820) 	
(0821) 	if ( buf[0] != 0xeb ) {
     434 9180 0082 LDS	R24,buf
     436 3E8B      CPI	R24,0xEB
     437 F039      BEQ	0x043F
(0822) 		handlept = (handlept + 1) & RXBUF_LEN1;
     438 9180 00C6 LDS	R24,handlept
     43A 5F8F      SUBI	R24,0xFF
     43B 718F      ANDI	R24,0x1F
     43C 9380 00C6 STS	handlept,R24
(0823) 		return;
     43E C075      RJMP	0x04B4
(0824) 	}
(0825) 	
(0826) 	if ( buf[1] != 0x90 ) {
     43F 9180 0083 LDS	R24,buf+1
     441 3980      CPI	R24,0x90
     442 F039      BEQ	0x044A
(0827) 		handlept = (handlept + 2) & RXBUF_LEN1;
     443 9180 00C6 LDS	R24,handlept
     445 5F8E      SUBI	R24,0xFE
     446 718F      ANDI	R24,0x1F
     447 9380 00C6 STS	handlept,R24
(0828) 		return;
     449 C06A      RJMP	0x04B4
(0829) 	}
(0830) 
(0831) 	cmd = buf[2];
     44A 90C0 0084 LDS	R12,buf+2
(0832) 	if ( (cmd != CMD_ASKDATA)&&(cmd != CMD_DOWNPARA)&&(cmd != CMD_SETID)&&(cmd != CMD_READID) ) {
     44C 20CC      TST	R12
     44D F071      BEQ	0x045C
     44E 2D8C      MOV	R24,R12
     44F 3082      CPI	R24,2
     450 F059      BEQ	0x045C
     451 3085      CPI	R24,5
     452 F049      BEQ	0x045C
     453 3087      CPI	R24,7
     454 F039      BEQ	0x045C
(0833) 		handlept = (handlept + 3) & RXBUF_LEN1;
     455 9180 00C6 LDS	R24,handlept
     457 5F8D      SUBI	R24,0xFD
     458 718F      ANDI	R24,0x1F
     459 9380 00C6 STS	handlept,R24
(0834) 		return;
     45B C058      RJMP	0x04B4
(0835) 	}
(0836) 
(0837) 	switch(cmd)	 {
     45C 24DD      CLR	R13
     45D 20CC      TST	R12
     45E F411      BNE	0x0461
     45F 20DD      TST	R13
     460 F071      BEQ	0x046F
     461 01C6      MOVW	R24,R12
     462 3082      CPI	R24,2
     463 E0E0      LDI	R30,0
     464 079E      CPC	R25,R30
     465 F061      BEQ	0x0472
     466 3085      CPI	R24,5
     467 E0E0      LDI	R30,0
     468 079E      CPC	R25,R30
     469 F059      BEQ	0x0475
     46A 3087      CPI	R24,7
     46B E0E0      LDI	R30,0
     46C 079E      CPC	R25,R30
     46D F051      BEQ	0x0478
     46E C00B      RJMP	0x047A
(0838) 	case CMD_ASKDATA:
(0839) 		len1 = 7;
     46F E047      LDI	R20,7
     470 E050      LDI	R21,0
(0840) 		break;
     471 C008      RJMP	0x047A
(0841) 	case CMD_DOWNPARA:
(0842) 		len1 = 14;
     472 E04E      LDI	R20,0xE
     473 E050      LDI	R21,0
(0843) 		break;
     474 C005      RJMP	0x047A
(0844) 	case CMD_SETID:
(0845) 		len1 = 6;
     475 E046      LDI	R20,6
     476 E050      LDI	R21,0
(0846) 		break;
     477 C002      RJMP	0x047A
(0847) 	case CMD_READID:
(0848) 		len1 = 4;
     478 E044      LDI	R20,4
     479 E050      LDI	R21,0
(0849) 		break;
(0850) 	}
(0851) 
(0852) 	if ( len < len1 ) 	return;
     47A 16A4      CP	R10,R20
     47B 06B5      CPC	R11,R21
     47C F40C      BGE	0x047E
     47D C036      RJMP	0x04B4
(0853) /*
(0854) 	lpc = GetLPC(buf,len1);
(0855) 	if ( lpc )	{
(0856) 		handlept = (handlept + len1) & RXBUF_LEN1;
(0857) 		return;
(0858) 	}
(0859) */
(0860)    	for ( i=0; i<len1;i++ )
     47E 2766      CLR	R22
     47F 2777      CLR	R23
     480 C014      RJMP	0x0495
(0861) 		tx_buf[i] = rxbuf[(handlept+i) & RXBUF_LEN1];
     481 91E0 00C6 LDS	R30,handlept
     483 27FF      CLR	R31
     484 0FE6      ADD	R30,R22
     485 1FF7      ADC	R31,R23
     486 71EF      ANDI	R30,0x1F
     487 70F0      ANDI	R31,0
     488 EC88      LDI	R24,0xC8
     489 E090      LDI	R25,0
     48A 0FE8      ADD	R30,R24
     48B 1FF9      ADC	R31,R25
     48C 8020      LDD	R2,Z+0
     48D EA82      LDI	R24,0xA2
     48E E090      LDI	R25,0
     48F 01FB      MOVW	R30,R22
     490 0FE8      ADD	R30,R24
     491 1FF9      ADC	R31,R25
     492 8220      STD	Z+0,R2
     493 5F6F      SUBI	R22,0xFF
     494 4F7F      SBCI	R23,0xFF
     495 1764      CP	R22,R20
     496 0775      CPC	R23,R21
     497 F34C      BLT	0x0481
(0862) 
(0863) 	tx_len = len1;
     498 9340 0081 STS	tx_len,R20
(0864) 	for ( i=tx_len; i<16; i++ )	tx_buf[i] = 0;
     49A 2F64      MOV	R22,R20
     49B 2777      CLR	R23
     49C C009      RJMP	0x04A6
     49D EA82      LDI	R24,0xA2
     49E E090      LDI	R25,0
     49F 01FB      MOVW	R30,R22
     4A0 0FE8      ADD	R30,R24
     4A1 1FF9      ADC	R31,R25
     4A2 2422      CLR	R2
     4A3 8220      STD	Z+0,R2
     4A4 5F6F      SUBI	R22,0xFF
     4A5 4F7F      SBCI	R23,0xFF
     4A6 3160      CPI	R22,0x10
     4A7 E0E0      LDI	R30,0
     4A8 077E      CPC	R23,R30
     4A9 F39C      BLT	0x049D
(0865) 
(0866) //	put_bytes(tx_buf,len1);
(0867) 
(0868) 	SendGram();
     4AA DDEB      RCALL	_SendGram
(0869) 	handlept = (handlept + len1) & RXBUF_LEN1;
     4AB 9180 00C6 LDS	R24,handlept
     4AD 2799      CLR	R25
     4AE 0F84      ADD	R24,R20
     4AF 1F95      ADC	R25,R21
     4B0 718F      ANDI	R24,0x1F
     4B1 7090      ANDI	R25,0
     4B2 9380 00C6 STS	handlept,R24
     4B4 C0C2      RJMP	pop_xgsetF03C
(0870) }
(0871) 
(0872) /////////////////////////////////////////////////////////////
(0873) void SendData()
(0874) {
(0875)  	 tx_buf[0] = 0xeb;
_SendData:
     4B5 EE8B      LDI	R24,0xEB
     4B6 9380 00A2 STS	nrf905_JinJu.c:tx_buf,R24
(0876)  	 tx_buf[1] = 0x90;
     4B8 E980      LDI	R24,0x90
     4B9 9380 00A3 STS	nrf905_JinJu.c:tx_buf+1,R24
(0877)  	 tx_buf[2] = 0x02;
     4BB E082      LDI	R24,2
     4BC 9380 00A4 STS	nrf905_JinJu.c:tx_buf+2,R24
(0878)  	 tx_buf[3] = 0x00;
     4BE 2422      CLR	R2
     4BF 9220 00A5 STS	nrf905_JinJu.c:tx_buf+3,R2
(0879)  	 tx_buf[4] = 0x00;
     4C1 9220 00A6 STS	0x00A6,R2
(0880)  	 tx_buf[5] = 0x08;
     4C3 E088      LDI	R24,0x8
     4C4 9380 00A7 STS	0x00A7,R24
(0881)  	 tx_buf[6] = 0x00;
     4C6 9220 00A8 STS	0x00A8,R2
(0882)  	 tx_buf[7] = 0x0c;
     4C8 E08C      LDI	R24,0xC
 

⌨️ 快捷键说明

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