📄 pt100.lst
字号:
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 + -