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

📄 pt100.lst

📁 原创
💻 LST
📖 第 1 页 / 共 5 页
字号:
    061A F308      BCS	0x05FC
(0276) 	return (sum/(20-2));
    061B E182      LDI	R24,0x12
    061C E090      LDI	R25,0
    061D E0A0      LDI	R26,0
    061E E0B0      LDI	R27,0
    061F 01FE      MOVW	R30,R28
    0620 A420      LDD	R2,Z+40
    0621 A431      LDD	R3,Z+41
    0622 A442      LDD	R4,Z+42
    0623 A453      LDD	R5,Z+43
    0624 93BA      ST	R27,-Y
    0625 93AA      ST	R26,-Y
    0626 939A      ST	R25,-Y
    0627 938A      ST	R24,-Y
    0628 0181      MOVW	R16,R2
    0629 0192      MOVW	R18,R4
    062A 940E07DD  CALL	div32u
    062C 96AD      ADIW	R28,0x2D
    062D 940E089D  CALL	pop_gset5x
    062F 9508      RET
_main:
  k                    --> Y+4
  j                    --> Y+1
  i                    --> Y+1
  temp_P               --> R10
  temp_N               --> R14
  temp_A               --> Y+11
  AD                   --> Y+0
  temp                 --> R12
    0630 972D      SBIW	R28,0xD
(0277) }
(0278) 
(0279) 
(0280) 
(0281) 
(0282) 
(0283)    
(0284) 
(0285) //extern uint16 send_s1_data[32];
(0286) void main(void){
(0287)   unsigned long AD;
(0288)   unsigned int  temp,i,j;
(0289)   unsigned char k[7];
(0290)   unsigned int  temp_A,temp_N,temp_P;
(0291)   
(0292) //  delay(200);
(0293)   init_devices();
    0631 DE8D      RCALL	_init_devices
    0632 C0EF      RJMP	0x0722
(0294) 
(0295)   
(0296)   while(1){
(0297) begin:      
(0298) 	  AD = AdAverageT();
    0633 DF63      RCALL	_AdAverageT
    0634 0118      MOVW	R2,R16
    0635 2444      CLR	R4
    0636 2455      CLR	R5
    0637 01FE      MOVW	R30,R28
    0638 8220      STD	Z+0,R2
    0639 8231      STD	Z+1,R3
    063A 8242      STD	Z+2,R4
    063B 8253      STD	Z+3,R5
(0299) 	  
(0300) //	  AD = (AD*330)/125;		 //获得现时放大后的电压值,mv
(0301) 	  
(0302) //	  AD = (AD*201)/1000;		 //电压值  
(0303) 	  
(0304) //	  AD = (AD*2571)/1000 ;      //电阻值
(0305) 
(0306) //    100RPT = (AD*100*RA*RH)/(AD的分辨率*RB)	  
(0307) 	  AD = (AD*257127)/10000;        //真实AD值
    063C 01FE      MOVW	R30,R28
    063D 8020      LDD	R2,Z+0
    063E 8031      LDD	R3,Z+1
    063F 8042      LDD	R4,Z+2
    0640 8053      LDD	R5,Z+3
    0641 E687      LDI	R24,0x67
    0642 EE9C      LDI	R25,0xEC
    0643 E0A3      LDI	R26,3
    0644 E0B0      LDI	R27,0
    0645 925A      ST	R5,-Y
    0646 924A      ST	R4,-Y
    0647 923A      ST	R3,-Y
    0648 922A      ST	R2,-Y
    0649 018C      MOVW	R16,R24
    064A 019D      MOVW	R18,R26
    064B 940E085E  CALL	empy32u
    064D E180      LDI	R24,0x10
    064E E297      LDI	R25,0x27
    064F E0A0      LDI	R26,0
    0650 E0B0      LDI	R27,0
    0651 93BA      ST	R27,-Y
    0652 93AA      ST	R26,-Y
    0653 939A      ST	R25,-Y
    0654 938A      ST	R24,-Y
    0655 940E07DD  CALL	div32u
    0657 01FE      MOVW	R30,R28
    0658 8300      STD	Z+0,R16
    0659 8311      STD	Z+1,R17
    065A 8322      STD	Z+2,R18
    065B 8333      STD	Z+3,R19
(0308) 	                             
(0309) 	  temp = 0;
    065C 24CC      CLR	R12
    065D 24DD      CLR	R13
    065E C017      RJMP	0x0676
(0310) 	  while (AD > PT100_TAB[temp]){
(0311) 	      temp++;
    065F 01C6      MOVW	R24,R12
    0660 9601      ADIW	R24,1
    0661 016C      MOVW	R12,R24
(0312) 		  if(410==temp){
    0662 398A      CPI	R24,0x9A
    0663 E0E1      LDI	R30,1
    0664 079E      CPC	R25,R30
    0665 F481      BNE	0x0676
(0313) 		      TransmitByte('X');
    0666 E508      LDI	R16,0x58
    0667 940E079D  CALL	_TransmitByte
(0314) 			  TransmitByte('X');
    0669 E508      LDI	R16,0x58
    066A 940E079D  CALL	_TransmitByte
(0315) 			  TransmitByte('X');
    066C E508      LDI	R16,0x58
    066D 940E079D  CALL	_TransmitByte
(0316) 			  TransmitByte('X'); 
    066F E508      LDI	R16,0x58
    0670 940E079D  CALL	_TransmitByte
(0317) 			  TransmitByte('\n'); 
    0672 E00A      LDI	R16,0xA
    0673 940E079D  CALL	_TransmitByte
(0318) 			  goto begin;
    0675 CFBD      RJMP	0x0633
    0676 E002      LDI	R16,2
    0677 E010      LDI	R17,0
    0678 0196      MOVW	R18,R12
    0679 940E084E  CALL	empy16s
    067B 01F8      MOVW	R30,R16
    067C E584      LDI	R24,0x54
    067D E090      LDI	R25,0
    067E 0FE8      ADD	R30,R24
    067F 1FF9      ADC	R31,R25
    0680 9025      LPM	R2,Z+
    0681 9034      LPM	R3,0(Z)
    0682 2444      CLR	R4
    0683 2455      CLR	R5
    0684 01FE      MOVW	R30,R28
    0685 8060      LDD	R6,Z+0
    0686 8071      LDD	R7,Z+1
    0687 8082      LDD	R8,Z+2
    0688 8093      LDD	R9,Z+3
    0689 1426      CP	R2,R6
    068A 0437      CPC	R3,R7
    068B 0448      CPC	R4,R8
    068C 0459      CPC	R5,R9
    068D F408      BCC	0x068F
    068E CFD0      RJMP	0x065F
(0319) 		  }
(0320) 	  }
(0321)       temp--;	  				 //实际温度整数部分
    068F 01C6      MOVW	R24,R12
    0690 9701      SBIW	R24,1
    0691 016C      MOVW	R12,R24
(0322) 	  
(0323) 	  temp_A = PT100_TAB[temp+1]-PT100_TAB[temp];
    0692 E002      LDI	R16,2
    0693 E010      LDI	R17,0
    0694 019C      MOVW	R18,R24
    0695 940E084E  CALL	empy16s
    0697 01F8      MOVW	R30,R16
    0698 E584      LDI	R24,0x54
    0699 E090      LDI	R25,0
    069A 0FE8      ADD	R30,R24
    069B 1FF9      ADC	R31,R25
    069C 9005      LPM	R0,Z+
    069D 9014      LPM	R1,0(Z)
    069E 01F0      MOVW	R30,R0
    069F 0196      MOVW	R18,R12
    06A0 5F2F      SUBI	R18,0xFF
    06A1 4F3F      SBCI	R19,0xFF
    06A2 E002      LDI	R16,2
    06A3 E010      LDI	R17,0
    06A4 940E084E  CALL	empy16s
    06A6 01D8      MOVW	R26,R16
    06A7 E584      LDI	R24,0x54
    06A8 E090      LDI	R25,0
    06A9 0FA8      ADD	R26,R24
    06AA 1FB9      ADC	R27,R25
    06AB 93FA      ST	R31,-Y
    06AC 93EA      ST	R30,-Y
    06AD 01FD      MOVW	R30,R26
    06AE 91A5      LPM	R26,Z+
    06AF 91B4      LPM	R27,0(Z)
    06B0 91E9      LD	R30,Y+
    06B1 91F9      LD	R31,Y+
    06B2 1BAE      SUB	R26,R30
    06B3 0BBF      SBC	R27,R31
    06B4 87BC      STD	Y+12,R27
    06B5 87AB      STD	Y+11,R26
(0324) 	  temp_N = AD               -PT100_TAB[temp];	  
    06B6 E002      LDI	R16,2
    06B7 E010      LDI	R17,0
    06B8 0196      MOVW	R18,R12
    06B9 940E084E  CALL	empy16s
    06BB 01F8      MOVW	R30,R16
    06BC E584      LDI	R24,0x54
    06BD E090      LDI	R25,0
    06BE 0FE8      ADD	R30,R24
    06BF 1FF9      ADC	R31,R25
    06C0 9025      LPM	R2,Z+
    06C1 9034      LPM	R3,0(Z)
    06C2 2444      CLR	R4
    06C3 2455      CLR	R5
    06C4 01FE      MOVW	R30,R28
    06C5 8060      LDD	R6,Z+0
    06C6 8071      LDD	R7,Z+1
    06C7 8082      LDD	R8,Z+2
    06C8 8093      LDD	R9,Z+3
    06C9 1862      SUB	R6,R2
    06CA 0873      SBC	R7,R3
    06CB 0884      SBC	R8,R4
    06CC 0895      SBC	R9,R5
    06CD 0173      MOVW	R14,R6
(0325) 	  temp_P = temp_N*10/temp_A;//实际温度小数部分
    06CE E00A      LDI	R16,0xA
    06CF E010      LDI	R17,0
    06D0 0193      MOVW	R18,R6
    06D1 940E084E  CALL	empy16s
    06D3 852B      LDD	R18,Y+11
    06D4 853C      LDD	R19,Y+12
    06D5 940E07C3  CALL	div16u
    06D7 0158      MOVW	R10,R16
(0326) 	      
(0327) 	  
(0328) 	  if((temp%1000)/100){
    06D8 EE28      LDI	R18,0xE8
    06D9 E033      LDI	R19,3
    06DA 0186      MOVW	R16,R12
    06DB 940E07C1  CALL	mod16u
    06DD E624      LDI	R18,0x64
    06DE E030      LDI	R19,0
    06DF 940E07C3  CALL	div16u
    06E1 3000      CPI	R16,0
    06E2 0701      CPC	R16,R17
    06E3 F069      BEQ	0x06F1
(0329)           TransmitByte( (temp%1000)/100 +'0' );
    06E4 EE28      LDI	R18,0xE8
    06E5 E033      LDI	R19,3
    06E6 0186      MOVW	R16,R12
    06E7 940E07C1  CALL	mod16u
    06E9 E624      LDI	R18,0x64
    06EA E030      LDI	R19,0
    06EB 940E07C3  CALL	div16u
    06ED 5D00      SUBI	R16,0xD0
    06EE 4F1F      SBCI	R17,0xFF
    06EF 940E079D  CALL	_TransmitByte
(0330) 	  }	
(0331)       TransmitByte( ((temp%1000)%100)/10 +'0');
    06F1 EE28      LDI	R18,0xE8
    06F2 E033      LDI	R19,3
    06F3 0186      MOVW	R16,R12
    06F4 940E07C1  CALL	mod16u
    06F6 E624      LDI	R18,0x64
    06F7 E030      LDI	R19,0
    06F8 940E07C1  CALL	mod16u
    06FA E02A      LDI	R18,0xA
    06FB E030      LDI	R19,0
    06FC 940E07C3  CALL	div16u
    06FE 5D00      SUBI	R16,0xD0
    06FF 4F1F      SBCI	R17,0xFF
    0700 940E079D  CALL	_TransmitByte
(0332)       TransmitByte( ((temp%1000)%100)%10 +'0' );
    0702 EE28      LDI	R18,0xE8
    0703 E033      LDI	R19,3
    0704 0186      MOVW	R16,R12
    0705 940E07C1  CALL	mod16u
    0707 E624      LDI	R18,0x64
    0708 E030      LDI	R19,0
    0709 940E07C1  CALL	mod16u
    070B E02A      LDI	R18,0xA
    070C E030      LDI	R19,0
    070D 940E07C1  CALL	mod16u
    070F 5D00      SUBI	R16,0xD0
    0710 4F1F      SBCI	R17,0xFF
    0711 940E079D  CALL	_TransmitByte
(0333) 	  TransmitByte('.' );
    0713 E20E      LDI	R16,0x2E
    0714 940E079D  CALL	_TransmitByte
(0334)       TransmitByte( temp_P%10 +'0' );
    0716 E02A      LDI	R18,0xA
    0717 E030      LDI	R19,0
    0718 0185      MOVW	R16,R10
    0719 940E07C1  CALL	mod16u
    071B 5D00      SUBI	R16,0xD0
    071C 4F1F      SBCI	R17,0xFF
    071D 940E079D  CALL	_TransmitByte
(0335) 	 	   		  	  	  		   	
(0336)       TransmitByte( '\n' ); 		    
    071F E00A      LDI	R16,0xA
    0720 940E079D  CALL	_TransmitByte
    0722 CF10      RJMP	0x0633
(0337) //	  delay(200);
(0338)   }
(0339)   
(0340)   while(1);
    0723 CFFF      RJMP	0x0723
    0724 962D      ADIW	R28,0xD
    0725 9508      RET
_InitUART:
  x                    --> R10
  baudrate             --> R16
    0726 940E08A0  CALL	push_gset3x
FILE: E:\avrwork3_pt100\uartintr.c
(0001) /* Code adapted from Atmel AVR Application Note AVR306
(0002)  * Interrupt mode driver for UART.
(0003)  */
(0004) #include <iom16v.h>
(0005) #include <macros.h>
(0006) #include "hal.h"
(0007) #include "main.h"
(0008) #include "uart.h"
(0009) 
(0010) 
(0011) #pragma interrupt_handler UART_RX_interrupt:12 UART_TX_interrupt:13
(0012) 
(0013) /* UART Buffer Defines */
(0014) #define UART_RX_BUFFER_SIZE 128 /* 1,2,4,8,16,32,64,128 or 256 bytes */
(0015) #define UART_RX_BUFFER_MASK ( UART_RX_BUFFER_SIZE - 1 )
(0016) #define UART_TX_BUFFER_SIZE 128 /* 1,2,4,8,16,32,64,128 or 256 bytes */
(0017) #define UART_TX_BUFFER_MASK ( UART_TX_BUFFER_SIZE - 1 )
(0018) 
(0019) 
(0020) 
(0021) /* Static Variables */
(0022) static unsigned char UART_RxBuf[UART_RX_BUFFER_SIZE];
(0023) static volatile unsigned char UART_RxHead;
(0024) static volatile unsigned char UART_RxTail;
(0025) static unsigned char UART_TxBuf[UART_TX_BUFFER_SIZE];
(0026) static volatile unsigned char UART_TxHead;
(0027) static volatile unsigned char UART_TxTail;
(0028) 
(0029) /* initialize UART */
(0030) void InitUART( unsigned char baudrate )
(0031) 	{
(0032) 	unsigned char x;
(0033) 	UBRR = baudrate; /* set the baud rate */
    0728 B909      OUT	0x09,R16
(0034) 	/* enable UART receiver and transmitter, and
(0035) 	receive interrupt */
(0036) //	UCR = ( (1<<RXCIE) | (1<<RXEN) | (1<<TXEN) );
(0037) 	UCSRB = ( (1<<RXCIE) | (1<<RXEN) | (1<<TXEN) );
    0729 E988      LDI	R24,0x98
    072A B98A      OUT	0x0A,R24
(0038) 	x = 0; /* flush receive buffer */
    072B 24AA      CLR	R10
(0039) 	UART_RxTail = x;
    072C 92A0015C  STS	UART_RxTail,R10
(0040) 	UART_RxHead = x;
    072E 92A0015D  STS	UART_RxHead,R10
(0041) 	UART_TxTail = x;
    0730 92A000DA  STS	UART_TxTail,R10
(0042) 	UART_TxHead = x;
    0732 92A000DB  STS	UART_TxHead,R10
    0734 940E088E  CALL	pop_gset3x
    0736 9508      RET
_UART_RX_interrupt:
  data                 --> R16
  tmphead              --> R18
    0737 922A      ST	R2,-Y
    0738 930A      ST	R16,-Y
    0739 932A      ST	R18,-Y
    073A 933A      ST	R19,-Y
    073B 938A      ST	R24,-Y
    073C 939A      ST	R25,-Y
    073D 93EA      ST	R30,-Y
    073E 93FA      ST	R31,-Y
    073F B62F      IN	R2,0x3F
    0740 922A      ST	R2,-Y
(0043) 	}
(0044) 
(0045) /* interrupt handlers */
(0046) void UART_RX_interrupt( void )
(0047) {
(0048) 	unsigned char data;
(0049) 	unsigned char tmphead;
(0050) 	data = UDR; /* read the received data */
    0741 B10C      IN	R16,0x0C
(0051) 	/* calculate buffer index */
(0052) 	tmphead = ( UART_RxHead + 1 ) & UART_RX_BUFFER_MASK;
    0742 9120015D  LDS	R18,UART_RxHead
    0744 5F2F      SUBI	R18,0xFF
    0745 772F      ANDI	R18,0x7F
(0053) 	UART_RxHead = tmphead; /* store new index */
    0746 9320015D  STS	UART_RxHead,R18
(0054) 	if ( tmphead == UART_RxTail )
    0748 9020015C  LDS	R2,UART_RxTail
    074A 1522      CP	R18,R2
    074B F401      BNE	0x074C
(0055) 		{
(0056) 		/* ERROR! Receive buffer overflow */
(0057) 		}
(0058) 	UART_RxBuf[tmphead] = data; /* store received data in buffer */
    074C E58E      LDI	R24,0x5E
    074D E091      LDI	R25,1
    074

⌨️ 快捷键说明

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