📄 pt100.lst
字号:
__start:
__text_start:
0220 E5CF LDI R28,0x5F
0221 E0D4 LDI R29,4
0222 BFCD OUT 0x3D,R28
0223 BFDE OUT 0x3E,R29
0224 51C0 SUBI R28,0x10
0225 40D0 SBCI R29,0
0226 EA0A LDI R16,0xAA
0227 8308 STD Y+0,R16
0228 2400 CLR R0
0229 EDE9 LDI R30,0xD9
022A E0F0 LDI R31,0
022B E011 LDI R17,1
022C 3DEE CPI R30,0xDE
022D 07F1 CPC R31,R17
022E F011 BEQ 0x0231
022F 9201 ST R0,Z+
0230 CFFB RJMP 0x022C
0231 8300 STD Z+0,R16
0232 ECE6 LDI R30,0xC6
0233 E0F3 LDI R31,3
0234 E6A0 LDI R26,0x60
0235 E0B0 LDI R27,0
0236 E014 LDI R17,4
0237 33EF CPI R30,0x3F
0238 07F1 CPC R31,R17
0239 F021 BEQ 0x023E
023A 95C8 LPM
023B 9631 ADIW R30,1
023C 920D ST R0,X+
023D CFF9 RJMP 0x0237
023E 940E0630 CALL _main
_exit:
0240 CFFF RJMP _exit
FILE: E:\avrwork3_pt100\eeprom.c
(0001) #include <iom16v.h>
(0002) #include <macros.h>
(0003)
(0004)
(0005) unsigned char EEPROMread( int location)
(0006) {
(0007) while (EECR & 0x02); // Wait until any earlier write is done.
_EEPROMread:
location --> R16
0241 99E1 SBIC 0x1C,1
0242 CFFE RJMP _EEPROMread
(0008) // This is just a safety incase a write
(0009) // was done and is not completed when
(0010) // the read was called. If this test is
(0011) // not done, the current write operation
(0012) // will fail due to that the address or
(0013) // data is changed.
(0014)
(0015) EEAR = location;
0243 BB1F OUT 0x1F,R17
0244 BB0E OUT 0x1E,R16
(0016)
(0017) EECR |= 0x01; // Set READ strobe
0245 9AE0 SBI 0x1C,0
(0018)
(0019) return (EEDR); // Return byte
0246 B30D IN R16,0x1D
0247 9508 RET
_EEPROMReadBytes:
dst --> R10
size --> R12
ptr --> Y+6
addr --> R14
0248 933A ST R19,-Y
0249 932A ST R18,-Y
024A 940E08A7 CALL push_gset5x
024C 0178 MOVW R14,R16
024D 84C8 LDD R12,Y+8
024E 84D9 LDD R13,Y+9
(0020) }
(0021)
(0022)
(0023) void EEPROMReadBytes(int addr, void *ptr, int size)
(0024) {
(0025) char *dst = ptr;
024F 80AE LDD R10,Y+6
0250 80BF LDD R11,Y+7
0251 C00A RJMP 0x025C
(0026)
(0027) while (size--)
(0028) {
(0029) *dst = EEPROMread(addr);
0252 0187 MOVW R16,R14
0253 DFED RCALL _EEPROMread
0254 01F5 MOVW R30,R10
0255 8300 STD Z+0,R16
(0030) addr++;
0256 01C7 MOVW R24,R14
0257 9601 ADIW R24,1
0258 017C MOVW R14,R24
(0031) dst++;
0259 01CF MOVW R24,R30
025A 9601 ADIW R24,1
025B 015C MOVW R10,R24
025C 0116 MOVW R2,R12
025D 01C1 MOVW R24,R2
025E 9701 SBIW R24,1
025F 016C MOVW R12,R24
0260 2022 TST R2
0261 F781 BNE 0x0252
0262 2033 TST R3
0263 F771 BNE 0x0252
0264 940E089D CALL pop_gset5x
0266 9622 ADIW R28,2
0267 9508 RET
_EEPROMwrite:
oldSREG --> R10
byte --> R18
location --> R16
0268 940E08A0 CALL push_gset3x
(0032) }
(0033) }
(0034)
(0035)
(0036) int EEPROMwrite( int location, unsigned char byte)
(0037) {
(0038) unsigned char oldSREG;
(0039)
(0040) while (EECR & 0x02); // Wait until any earlier write is done
026A 99E1 SBIC 0x1C,1
026B CFFE RJMP 0x026A
(0041)
(0042) EEAR = location;
026C BB1F OUT 0x1F,R17
026D BB0E OUT 0x1E,R16
(0043)
(0044) EEDR = byte;
026E BB2D OUT 0x1D,R18
(0045)
(0046) oldSREG = SREG;
026F B6AF IN R10,0x3F
(0047) SREG &= ~0x80; // disable interrupt
0270 94F8 BCLR 7
(0048)
(0049) EECR |= 0x04; // Set MASTER WRITE enable
0271 9AE2 SBI 0x1C,2
(0050) EECR |= 0x02; // Set WRITE strobe
0272 9AE1 SBI 0x1C,1
(0051)
(0052) SREG = oldSREG;
0273 BEAF OUT 0x3F,R10
(0053) return 0; // return Success.
0274 2700 CLR R16
0275 2711 CLR R17
0276 940E088E CALL pop_gset3x
0278 9508 RET
_EEPROMWriteBytes:
src --> R10
size --> R12
ptr --> Y+6
addr --> R14
0279 933A ST R19,-Y
027A 932A ST R18,-Y
027B 940E08A7 CALL push_gset5x
027D 0178 MOVW R14,R16
027E 84C8 LDD R12,Y+8
027F 84D9 LDD R13,Y+9
(0054) // Could be expanded so that
(0055) // the routine checks that the address
(0056) // is within the range of the chip.
(0057) }
(0058)
(0059)
(0060)
(0061) void EEPROMWriteBytes(int addr, void *ptr, int size)
(0062) {
(0063) char *src = ptr;
0280 80AE LDD R10,Y+6
0281 80BF LDD R11,Y+7
0282 C00A RJMP 0x028D
(0064)
(0065) while (size--)
(0066) {
(0067) EEPROMwrite(addr, *src);
0283 01F5 MOVW R30,R10
0284 8120 LDD R18,Z+0
0285 0187 MOVW R16,R14
0286 DFE1 RCALL _EEPROMwrite
(0068) addr++;
0287 01C7 MOVW R24,R14
0288 9601 ADIW R24,1
0289 017C MOVW R14,R24
(0069) src++;
028A 01C5 MOVW R24,R10
028B 9601 ADIW R24,1
028C 015C MOVW R10,R24
028D 0116 MOVW R2,R12
028E 01C1 MOVW R24,R2
028F 9701 SBIW R24,1
0290 016C MOVW R12,R24
0291 2022 TST R2
0292 F781 BNE 0x0283
0293 2033 TST R3
0294 F771 BNE 0x0283
0295 940E089D CALL pop_gset5x
0297 9622 ADIW R28,2
0298 9508 RET
FILE: E:\avrwork3_pt100\hal.c
(0001) #include <iom16v.h>
(0002) #include <macros.h>
(0003) #include "hal.h"
(0004) #include "main.h"
(0005) #include "uart.h"
(0006) #include "Temp.h"
(0007)
(0008)
(0009) uint8 u7_data=0xff,u9_data=0xff,u18_data=0xff,u19_data=0xff;
(0010)
(0011) /*************************************************************************************************************
(0012) * 函数名称 :
(0013) * 功能描述 :
(0014) * 实际参数 :
(0015) * 返回值 :
(0016) * 说明 :
(0017) *************************************************************************************************************/
(0018) void U7 (uint8 data){
(0019) CLR_CS0;
_U7:
data --> R16
0299 9893 CBI 0x12,3
(0020)
(0021) PORTB = data;
029A BB08 OUT 0x18,R16
(0022) asm ("nop");
029B 0000 NOP
(0023) asm ("nop");
029C 0000 NOP
(0024) asm ("nop");
029D 0000 NOP
(0025)
(0026) SET_CS0;
029E 9A93 SBI 0x12,3
(0027)
(0028) asm ("nop");
029F 0000 NOP
(0029) asm ("nop");
02A0 0000 NOP
(0030) asm ("nop");
02A1 0000 NOP
(0031)
(0032) CLR_CS0;
02A2 9893 CBI 0x12,3
02A3 9508 RET
(0033) }
(0034) /*************************************************************************************************************
(0035) * 函数名称 :
(0036) * 功能描述 :
(0037) * 实际参数 :
(0038) * 返回值 :
(0039) * 说明 :
(0040) *************************************************************************************************************/
(0041) void U18 (uint8 data){
(0042) CLR_CS1;
_U18:
data --> R16
02A4 9895 CBI 0x12,5
(0043)
(0044) PORTB = data;
02A5 BB08 OUT 0x18,R16
(0045) asm ("nop");
02A6 0000 NOP
(0046) asm ("nop");
02A7 0000 NOP
(0047) asm ("nop");
02A8 0000 NOP
(0048)
(0049) SET_CS1;
02A9 9A95 SBI 0x12,5
(0050)
(0051) asm ("nop");
02AA 0000 NOP
(0052) asm ("nop");
02AB 0000 NOP
(0053) asm ("nop");
02AC 0000 NOP
(0054)
(0055) CLR_CS1;
02AD 9895 CBI 0x12,5
02AE 9508 RET
(0056) }
(0057) /*************************************************************************************************************
(0058) * 函数名称 :
(0059) * 功能描述 :
(0060) * 实际参数 :
(0061) * 返回值 :
(0062) * 说明 :
(0063) *************************************************************************************************************/
(0064) void U9 (uint8 data){
(0065) CLR_CS2;
_U9:
data --> R16
02AF 9894 CBI 0x12,4
(0066)
(0067) PORTB = data;
02B0 BB08 OUT 0x18,R16
(0068) asm ("nop");
02B1 0000 NOP
(0069) asm ("nop");
02B2 0000 NOP
(0070) asm ("nop");
02B3 0000 NOP
(0071)
(0072) SET_CS2;
02B4 9A94 SBI 0x12,4
(0073)
(0074) asm ("nop");
02B5 0000 NOP
(0075) asm ("nop");
02B6 0000 NOP
(0076) asm ("nop");
02B7 0000 NOP
(0077)
(0078) CLR_CS2;
02B8 9894 CBI 0x12,4
02B9 9508 RET
(0079) }
(0080) /*************************************************************************************************************
(0081) * 函数名称 :
(0082) * 功能描述 :
(0083) * 实际参数 :
(0084) * 返回值 :
(0085) * 说明 :
(0086) *************************************************************************************************************/
(0087) void U19 (uint8 data){
(0088) CLR_CS3;
_U19:
data --> R16
02BA 9896 CBI 0x12,6
(0089)
(0090) PORTB = data;
02BB BB08 OUT 0x18,R16
(0091) asm ("nop");
02BC 0000 NOP
(0092) asm ("nop");
02BD 0000 NOP
(0093) asm ("nop");
02BE 0000 NOP
(0094)
(0095) SET_CS3;
02BF 9A96 SBI 0x12,6
(0096)
(0097) asm ("nop");
02C0 0000 NOP
(0098) asm ("nop");
02C1 0000 NOP
(0099) asm ("nop");
02C2 0000 NOP
(0100)
(0101) CLR_CS3;
02C3 9896 CBI 0x12,6
02C4 9508 RET
(0102) }
(0103) /*************************************************************************************************************
(0104) * 函数名称 :TempCs
(0105) * 功能描述 :6675片选
(0106) * 实际参数 :选择为0
(0107) * 返回值 :
(0108) * 说明 :
(0109) *************************************************************************************************************/
(0110) void TempCs(unsigned char onoff){
(0111) if(onoff){
_TempCs:
onoff --> R16
02C5 2300 TST R16
02C6 F011 BEQ 0x02C9
(0112) PORTA|= 0x08;
02C7 9ADB SBI 0x1B,3
(0113) }
02C8 C001 RJMP 0x02CA
(0114) else{
(0115) PORTA&=~0x08;
02C9 98DB CBI 0x1B,3
(0116) }
02CA 9508 RET
_TempRelayOnoff:
number --> R10
onoff --> R12
02CB 940E08A3 CALL push_gset4x
02CD 2EA2 MOV R10,R18
02CE 2EC0 MOV R12,R16
(0117) }
(0118)
(0119) /*************************************************************************************************************
(0120) * 函数名称 :TempRelayOnoff
(0121) * 功能描述 :
(0122) * 实际参数 :
(0123) * 返回值 :
(0124) * 说明 :
(0125) **************************************************************************************************************/
(0126) void TempRelayOnoff(unsigned char onoff,unsigned char number){
(0127) if (onoff){ //ON
02CF 20CC TST R12
02D0 F409 BNE 0x02D2
02D1 C05D RJMP 0x032F
(0128) u7_data = 0x00;
02D2 2422 CLR R2
02D3 92200060 STS u7_data,R2
(0129) u19_data&=~0x03;
02D5 91800063 LDS R24,u19_data
02D7 7F8C ANDI R24,0xFC
02D8 93800063 STS u19_data,R24
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -