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

📄 atmegal16l.lst

📁 AVR16源代码 ICC编译器
💻 LST
📖 第 1 页 / 共 5 页
字号:
    013F E280      LDI	R24,0x20
    0140 BB8A      OUT	0x1A,R24
(0179) i=0;
    0141 2744      CLR	R20
(0180) PORTD=0x00;
    0142 BA22      OUT	0x12,R2
(0181) DDRD=0x80;
    0143 E880      LDI	R24,0x80
    0144 BB81      OUT	0x11,R24
(0182) i=0;
(0183) i=0;
(0184) i=0;
(0185) i=0;
(0186) PORTD=0x00;
    0145 BA22      OUT	0x12,R2
(0187) i=0;
(0188) PORTA=0x20;
    0146 E280      LDI	R24,0x20
    0147 BB8B      OUT	0x1B,R24
    0148 C006      RJMP	0x014F
(0189) 
(0190) 
(0191) //Uart_PutChar(EEBuffer[0]);
(0192) //Uart_PutChar(EEBuffer[1]);
(0193) //SEI();
(0194) while(1)
(0195) h=measure();
    0149 DF4A      RCALL	_measure
    014A 01FE      MOVW	R30,R28
    014B 8302      STD	Z+2,R16
    014C 8313      STD	Z+3,R17
    014D 8324      STD	Z+4,R18
    014E 8335      STD	Z+5,R19
    014F CFF9      RJMP	0x0149
(0196) 
(0197) Uart_PutChar(0x03);
    0150 E003      LDI	R16,3
    0151 940E034E  CALL	_Uart_PutChar
(0198) Uart_PutChar(0x04);
    0153 E004      LDI	R16,4
    0154 940E034E  CALL	_Uart_PutChar
(0199) while(1);
    0156 CFFF      RJMP	0x0156
(0200) 
(0201) }
    0157 962A      ADIW	R28,0xA
    0158 9508      RET
_BlockCRC16UsingAlgorithm:
  uiCharShifted        --> R20
  i                    --> R22
  v                    --> R12
  CRC                  --> R10
  Len                  --> R18
  Block                --> R16
    0159 940E0431  CALL	push_gset4
FILE: D:\MY_COMPUTER\d\avr16\atmegal16\Crc.c
(0001) #include	<iom16v.h>
(0002) #include	"Crc.h"
(0003) 
(0004) //============================================================
(0005) //函	数:unsigned short CRC16(unsigned char *Message, int Len)
(0006) //功	能:CRC16计算
(0007) //入口参数:Message 要进行CRC16计算字符串,Len字符串长度  
(0008) //返 回 值:CRC16计算结果  
(0009) //设 计 者:覃道堂 
(0010) //创作时间:2004-03-30
(0011) //修改时间:
(0012) //修改目的:
(0013) //============================================================
(0014) unsigned int  BlockCRC16UsingAlgorithm(unsigned char *Block, unsigned int Len)
(0015) {
(0016)    unsigned int CRC;
(0017)    unsigned int uiCharShifted;
(0018)    unsigned int i;
(0019)    unsigned char v;
(0020) 
(0021)    CRC = 0;
    015B 24AA      CLR	R10
    015C 24BB      CLR	R11
(0022)    for (i=0; i<Len; i++)
    015D 2766      CLR	R22
    015E 2777      CLR	R23
    015F C01F      RJMP	0x017F
(0023)      {
(0024)      uiCharShifted = ((unsigned int)(Block[i]) & 0x00FF) << 8;
    0160 01FB      MOVW	R30,R22
    0161 0FE0      ADD	R30,R16
    0162 1FF1      ADC	R31,R17
    0163 8140      LDD	R20,Z+0
    0164 2755      CLR	R21
    0165 7050      ANDI	R21,0
    0166 2F54      MOV	R21,R20
    0167 2744      CLR	R20
(0025)      CRC = (CRC) ^ uiCharShifted;
    0168 26A4      EOR	R10,R20
    0169 26B5      EOR	R11,R21
(0026)      for (v = 0; v < 8; ++v)
    016A 24CC      CLR	R12
    016B C00E      RJMP	0x017A
(0027)        {
(0028)        if ( CRC & 0x8000 )
    016C FEB7      SBRS	R11,7
    016D C009      RJMP	0x0177
(0029)          CRC = (CRC << 1) ^ 0x1021;
    016E E281      LDI	R24,0x21
    016F E190      LDI	R25,0x10
    0170 0115      MOVW	R2,R10
    0171 0C22      LSL	R2
    0172 1C33      ROL	R3
    0173 2628      EOR	R2,R24
    0174 2639      EOR	R3,R25
    0175 0151      MOVW	R10,R2
    0176 C002      RJMP	0x0179
(0030)        else
(0031)          CRC = CRC << 1;
    0177 0CAA      LSL	R10
    0178 1CBB      ROL	R11
    0179 94C3      INC	R12
    017A 2D8C      MOV	R24,R12
    017B 3088      CPI	R24,0x8
    017C F378      BCS	0x016C
    017D 5F6F      SUBI	R22,0xFF
    017E 4F7F      SBCI	R23,0xFF
    017F 1762      CP	R22,R18
    0180 0773      CPC	R23,R19
    0181 F2F0      BCS	0x0160
(0032)        }
(0033)      CRC = CRC & 0xFFFF;
(0034)      }
(0035)      // ByteCRC16UsingAlgorithm(CRC, Block[i]);
(0036)    return CRC;
    0182 0185      MOVW	R16,R10
    0183 940E040C  CALL	pop_gset4
    0185 9508      RET
FILE: D:\MY_COMPUTER\d\avr16\atmegal16\Eeprom16.c
(0001) #include	<iom16v.h>
(0002) #include 	"Eeprom16.h"
(0003) 
(0004) //============================================================
(0005) //函	数:unsigned char eeprom_read_byte(unsigned long *addr)
(0006) //功	能:读取EE一个字节
(0007) //入口参数:读取地址  
(0008) //返 回 值:读取的字节数据  
(0009) //设 计 者:覃道堂
(0010) //创作时间:2006-03-28
(0011) //修改时间:
(0012) //修改目的:
(0013) //============================================================
(0014) unsigned char eeprom_read_byte(unsigned int *addr)
(0015) {
(0016) 	/* Wait for completion of previous write */
(0017) 	while(EECR & (1<<EEWE));
_eeprom_read_byte:
  addr                 --> R16
    0186 99E1      SBIC	0x1C,1
    0187 CFFE      RJMP	_eeprom_read_byte
(0018) 	/* Set up address register */
(0019) 	EEAR = *addr;
    0188 01F8      MOVW	R30,R16
    0189 8020      LDD	R2,Z+0
    018A 8031      LDD	R3,Z+1
    018B BA3F      OUT	0x1F,R3
    018C BA2E      OUT	0x1E,R2
(0020) 	/* Start eeprom read by writing EERE */
(0021) 	EECR |= (1<<EERE);
    018D 9AE0      SBI	0x1C,0
(0022) 	/* Return data from Data Register */
(0023) 	return EEDR;
    018E B30D      IN	R16,0x1D
    018F 9508      RET
(0024) }
(0025) //============================================================
(0026) //函	数:void eeprom_write_byte(unsigned long *addr, unsigned char val)
(0027) //功	能:写入EE一个字节
(0028) //入口参数:写入地址,写入数据  
(0029) //返 回 值:无  
(0030) //设 计 者:覃道堂 
(0031) //创作时间:2006-03-28
(0032) //修改时间:
(0033) //修改目的:
(0034) //============================================================
(0035) void eeprom_write_byte(unsigned int *addr, unsigned char val) 
(0036) {
(0037) 	/* Wait for completion of previous write */
(0038) 	while(EECR & (1<<EEWE));
_eeprom_write_byte:
  val                  --> R18
  addr                 --> R16
    0190 99E1      SBIC	0x1C,1
    0191 CFFE      RJMP	_eeprom_write_byte
(0039) 	/* Set up address and Data Registers */
(0040) 	EEAR = *addr;
    0192 01F8      MOVW	R30,R16
    0193 8020      LDD	R2,Z+0
    0194 8031      LDD	R3,Z+1
    0195 BA3F      OUT	0x1F,R3
    0196 BA2E      OUT	0x1E,R2
(0041) 	EEDR = val;
    0197 BB2D      OUT	0x1D,R18
(0042) 	/* Write logical one to EEMWE */
(0043) 	EECR |= (1<<EEMWE);
    0198 9AE2      SBI	0x1C,2
(0044) 	/* Start eeprom write by setting EEWE */
(0045) 	EECR |= (1<<EEWE);
    0199 9AE1      SBI	0x1C,1
(0046) 	while(EECR & (1<<EEWE));
    019A 99E1      SBIC	0x1C,1
    019B CFFE      RJMP	0x019A
(0047) }
    019C 9508      RET
_Write_EEPROM:
  i                    --> R20
  EE_START_ADR         --> Y+6
  num_bytes            --> R22
  pBuffer              --> R10
    019D 940E042D  CALL	push_gset3
    019F 2F62      MOV	R22,R18
    01A0 0158      MOVW	R10,R16
(0048) /*****************************************************************************
(0049) *
(0050) *   Function name : StoreEEPROM
(0051) *
(0052) *   Returns :       None
(0053) *
(0054) *   Parameters :    Pointer to string, number of bytes to write, adress in EEPROM
(0055) *
(0056) *   Purpose :       Write byte(s) to the EEPROM
(0057) *
(0058) *****************************************************************************/
(0059) void Write_EEPROM(unsigned char *pBuffer, unsigned char num_bytes, unsigned int EE_START_ADR)
(0060) {
(0061)     	unsigned char 	i;
(0062)     	for (i=0;i<num_bytes;i++) 
    01A1 2744      CLR	R20
    01A2 C00F      RJMP	0x01B2
(0063)     	{
(0064) 		eeprom_write_byte(&EE_START_ADR, pBuffer[i]);
    01A3 2FE4      MOV	R30,R20
    01A4 27FF      CLR	R31
    01A5 0DEA      ADD	R30,R10
    01A6 1DFB      ADC	R31,R11
    01A7 8120      LDD	R18,Z+0
    01A8 018E      MOVW	R16,R28
    01A9 5F0A      SUBI	R16,0xFA
    01AA 4F1F      SBCI	R17,0xFF
    01AB DFE4      RCALL	_eeprom_write_byte
(0065) 		EE_START_ADR++;
    01AC 818E      LDD	R24,Y+6
    01AD 819F      LDD	R25,Y+7
    01AE 9601      ADIW	R24,1
    01AF 839F      STD	Y+7,R25
    01B0 838E      STD	Y+6,R24
    01B1 9543      INC	R20
    01B2 1746      CP	R20,R22
    01B3 F378      BCS	0x01A3
(0066) 	}
(0067) }
    01B4 940E0409  CALL	pop_gset3
    01B6 9508      RET
_Read_EEPROM:
  i                    --> R20
  EE_START_ADR         --> Y+6
  num_bytes            --> R22
  pBuffer              --> R10
    01B7 940E042D  CALL	push_gset3
    01B9 2F62      MOV	R22,R18
    01BA 0158      MOVW	R10,R16
(0068) 
(0069) 
(0070) /*****************************************************************************
(0071) *
(0072) *   Function name : ReadEEPROM
(0073) *
(0074) *   Returns :       None
(0075) *
(0076) *   Parameters :    Pointer to string, number of bytes to read, adress in EEPROM
(0077) *
(0078) *   Purpose :       Write byte(s) to the EEPROM
(0079) *
(0080) *****************************************************************************/
(0081) 
(0082) void Read_EEPROM(unsigned char *pBuffer, unsigned char num_bytes, unsigned int EE_START_ADR)
(0083) {
(0084)     	unsigned char 	i;
(0085)     	
(0086)     	for (i=0;i<num_bytes;i++) 
    01BB 2744      CLR	R20
    01BC C00F      RJMP	0x01CC
(0087)     	{
(0088) 		pBuffer[i]=eeprom_read_byte(&EE_START_ADR);
    01BD 018E      MOVW	R16,R28
    01BE 5F0A      SUBI	R16,0xFA
    01BF 4F1F      SBCI	R17,0xFF
    01C0 DFC5      RCALL	_eeprom_read_byte
    01C1 2FE4      MOV	R30,R20
    01C2 27FF      CLR	R31
    01C3 0DEA      ADD	R30,R10
    01C4 1DFB      ADC	R31,R11
    01C5 8300      STD	Z+0,R16
(0089) 		EE_START_ADR++;
    01C6 818E      LDD	R24,Y+6
    01C7 819F      LDD	R25,Y+7
    01C8 9601      ADIW	R24,1
    01C9 839F      STD	Y+7,R25
    01CA 838E      STD	Y+6,R24
    01CB 9543      INC	R20
    01CC 1746      CP	R20,R22
    01CD F378      BCS	0x01BD
(0090) 	}
(0091) 
(0092) }
    01CE 940E0409  CALL	pop_gset3
    01D0 9508      RET
_crccheck:
  j                    --> R20
  r                    --> R14
  cbit                 --> Y+0
  bit0                 --> R8
  byte                 --> R10
  i                    --> R12
  temp                 --> R22
  len                  --> R6
  p                    --> R4
    01D1 940E0435  CALL	push_gset5
    01D3 2E62      MOV	R6,R18
    01D4 0128      MOVW	R4,R16
    01D5 9721      SBIW	R28,1
FILE: D:\MY_COMPUTER\d\avr16\atmegal16\DS18B20.C
(0001) /********************************************************************
(0002) 			ATmega16L开发板18B20测试程序
(0003) 			晶振频率:	4MHz
(0004) 			编译:		ICCAVR 6.31
(0005) 			编写:		QINDAOTANG
(0006) ********************************************************************/
(0007) 
(0008) #include <iom16v.h>
(0009) #include <macros.h>
(0010) #include "DS18B20.H"
(0011) //硬件连接与PD6
(0012) #define      DQ       1<<6      
(0013) #define      true     0
(0014) #define      false     1
(0015) float temperature;
(0016) /*===================================================================
(0017) //	函数功能:	DS18B20数据校验函数
(0018) //	形参:		void
(0019) //	返回:		unsigned char	校验结果
(0020) //	编写:		2004/8/25
(0021) //	备注:		CRC公式为:CRC = X^8 + X^5 + X^4 + 1
(0022) ===================================================================*/
(0023) unsigned char crccheck(unsigned char *p,unsigned char len)
(0024) {
(0025) 	unsigned char bit0,cbit,r,temp,i,j,byte;
(0026) 	temp = 0;
    01D6 2766      CLR	R22
(0027) 	for(j = 0; j < len; j++)
    01D7 2744      CLR	R20
    01D8 C020      RJMP	0x01F9
(0028) 	{
(0029) 		byte = p[j];
    01D9 2FE4      MOV	R30,R20
    01DA 27FF      CLR	R31
    01DB 0DE4      ADD	R30,R4
    01DC 1DF5      ADC	R31,R5
    01DD 80A0      LDD	R10,Z+0
(0030) 		for(i = 0; i < 8; i++)
    01DE 24CC      CLR	R12
    01DF C015      RJMP	0x01F5
(0031) 		{
(0032)         		cbit = temp & 0x01;
    01E0 2F86      MOV	R24,R22
    01E1 7081      ANDI	R24,1
    01E2 8388      STD	Y+0,R24
(0033)         		bit0 = byte&0x01;
    01E3 2D8A      MOV	R24,R10
    01E4 7081      ANDI	R24,1
    01E5 2E88      MOV	R8,R24
(0034)         		temp >>=   1;
    01E6 9566      LSR	R22
(0035)         		r = cbit ^ bit0;
    01E7 80E8      LDD	R14,Y+0
    01E8 26E8      EOR	R14,R24
(0036)         		if(r == 1)
    01E9 2D8E      MOV	R24,R14
    01EA 3081      CPI	R24,1
    01EB F439      BNE	0x01F3
(0037)         			temp ^= 0x8c;
    01EC E88C      LDI	R24,0x8C
    01ED E090      LDI	R25,0
    01EE 2E26      MOV	R2,R22
    01EF 2433      CLR	R3
    01F0 2628      EOR	R2,R24
    01F1 2639      EOR	R3,R25
    01F2 2D62      MOV	R22,R2
(0038)         		byte >>= 1;
    01F3 94A6      LSR	R10
    01F4 94C3      INC	R12
    01F5 2D8C      MOV	R24,R12
    01F6 3088      CPI	R24,0x8
    01F7 F340      BCS	0x01E0
    01F8 9543      INC	R20
    01F9 1546      CP	R20,R6
    01FA F2F0      BCS	0x01D9
(0039)         	}
(0040)     	}
(0041) 	return	temp;	
    01FB 2F06      MOV	R16,R22
    01FC 9621      ADIW	R28,1
    01FD 940E040F  CALL	pop_gset5
    01FF 9508      RET
(0042) }
(0043) /*===================================================================
(0044) //	函数功能:	us延时函数

⌨️ 快捷键说明

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