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

📄 ds18b20.lst

📁 DS18B20温度监控程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
__start:
__text_start:
      21 EFCF      LDI	R28,0xFF
      22 E0D2      LDI	R29,2
      23 BFCD      OUT	0x3D,R28
      24 BFDE      OUT	0x3E,R29
      25 51CE      SUBI	R28,0x1E
      26 40D0      SBCI	R29,0
      27 EA0A      LDI	R16,0xAA
      28 8308      STD	Y+0,R16
      29 2400      CLR	R0
      2A E0EE      LDI	R30,0xE
      2B E0F1      LDI	R31,1
      2C E011      LDI	R17,1
      2D 31EC      CPI	R30,0x1C
      2E 07F1      CPC	R31,R17
      2F F011      BEQ	0x0032
      30 9201      ST	R0,Z+
      31 CFFB      RJMP	0x002D
      32 8300      STD	Z+0,R16
      33 E3E4      LDI	R30,0x34
      34 E0F0      LDI	R31,0
      35 E0A0      LDI	R26,0
      36 E0B1      LDI	R27,1
      37 E010      LDI	R17,0
      38 E000      LDI	R16,0
      39 BF0B      OUT	0x3B,R16
      3A 34E2      CPI	R30,0x42
      3B 07F1      CPC	R31,R17
      3C F021      BEQ	0x0041
      3D 95C8      LPM
      3E 9631      ADIW	R30,1
      3F 920D      ST	R0,X+
      40 CFF9      RJMP	0x003A
      41 D001      RCALL	_main
_exit:
      42 CFFF      RJMP	_exit
FILE: E:\VB01D6~1\ComTest\DS18b20\ds18b20.c
(0001) /*************************************
(0002)           ds18b20测温程序
(0003) 文 件 名    :ds18b20.c				 
(0004) 设    计    :毕京鹏					 
(0005) 最后修改日期:2008.11.13		 
(0006) 版    本    :V1.0				 	 
(0007) 主控芯片    :ATMEGA48V					 
(0008) 工作频率    :外部16MHz晶振
(0009) 备注        : 初步:实时测温并显示
(0010)               1.读数据时的处理方式
(0011) 			  2.数据口上需带上拉(5.1K)
(0012) 			  3.配置成9位时后三位始终为0,以此类推
(0013) 			  4.1s更新一次
(0014) *************************************/
(0015) #include<iom48v.h>
(0016) #include<macros.h>
(0017) 
(0018) #define uchar unsigned char
(0019) #define uint  unsigned int
(0020) /*DQ 接在PC0上*/
(0021) #define  DQ(x)  x ? (PORTC |= 0x01) : (PORTC &= 0xfe)
(0022) #define  DRC(y)  y ? (DDRC |= 0x01 ) : (DDRC &= 0xfe)
(0023) uchar flag;
(0024) void Init_1wire(void);
(0025) void WriteByte_1wire(uchar data);
(0026) uchar ReadByte_1wire(void);
(0027) 
(0028) void PortInit(void);
(0029) void delay_1us(void); 
(0030) void delay_10us(uchar n);
(0031) /*显示有关*/
(0032) #pragma interrupt_handler display_int:17
(0033) const uchar distable[]={0x27,0x2f,0x37,0x3f,0x67,0x6f,0x77,0x7f,0xa7,0xaf};
(0034)                       // 0    1    2    3    4     5   6     7    8    9
(0035) uchar time1,time2;
(0036) uchar count2=0;
(0037) uchar timeb1,timeb2,timeb3,timeb4,timeb5,timeb6;
(0038) void convert(void);
(0039) /*定时有关*/
(0040) uchar count1=0;
(0041) #pragma interrupt_handler timer1_int:14
(0042) /*通信有关*/
(0043) uchar Rece[2],Send[3];
(0044) uchar count3=0;
(0045) uchar flag1=0;
(0046) void UartInit(void);
(0047) void UartSend(uchar a[],uchar length);
(0048) #pragma interrupt_handler UartRece_int:19
(0049) /*******************主函数********************************/
(0050) main()
(0051) { uchar tempH,tempL;
(0052)   PortInit();
_main:
  tempL                --> R10
  tempH                --> R12
      43 D102      RCALL	_PortInit
(0053)   /***********此部分在初次配置完成后可略去*****************/
(0054)   Init_1wire(); 
      44 D147      RCALL	_Init_1wire
(0055)   WriteByte_1wire(0xcc);
      45 EC0C      LDI	R16,0xCC
      46 D161      RCALL	_WriteByte_1wire
(0056)   WriteByte_1wire(0x4e);   //Write Scratchpad
      47 E40E      LDI	R16,0x4E
      48 D15F      RCALL	_WriteByte_1wire
(0057)   WriteByte_1wire(0x7f);   //TH
      49 E70F      LDI	R16,0x7F
      4A D15D      RCALL	_WriteByte_1wire
(0058)   WriteByte_1wire(0xff);   //TL
      4B EF0F      LDI	R16,0xFF
      4C D15B      RCALL	_WriteByte_1wire
(0059)   WriteByte_1wire(0x1f);   //CONFIGURATION REGISTER  9位
      4D E10F      LDI	R16,0x1F
      4E D159      RCALL	_WriteByte_1wire
(0060)   
(0061)   Init_1wire(); 
      4F D13C      RCALL	_Init_1wire
(0062)   WriteByte_1wire(0xcc);
      50 EC0C      LDI	R16,0xCC
      51 D156      RCALL	_WriteByte_1wire
(0063)   WriteByte_1wire(0x48);  //Copy Scratchpad
      52 E408      LDI	R16,0x48
      53 D154      RCALL	_WriteByte_1wire
(0064)   /***********************************************/
(0065)   SEI();
      54 9478      BSET	7
      55 C039      RJMP	0x008F
(0066)   while(1)
(0067)     {if(count1==100)
      56 9180 010B LDS	R24,count1
      58 3684      CPI	R24,0x64
      59 F4D9      BNE	0x0075
(0068) 	   {count1=0;
      5A 2422      CLR	R2
      5B 9220 010B STS	count1,R2
(0069) 	    Init_1wire();
      5D D12E      RCALL	_Init_1wire
(0070)   		WriteByte_1wire(0xcc);
      5E EC0C      LDI	R16,0xCC
      5F D148      RCALL	_WriteByte_1wire
(0071)   		WriteByte_1wire(0x44);
      60 E404      LDI	R16,0x44
      61 D146      RCALL	_WriteByte_1wire
(0072)   		DRC(0);                       //判断转换是否完成
      62 B187      IN	R24,0x07
      63 7F8E      ANDI	R24,0xFE
      64 B987      OUT	0x07,R24
(0073)   		if(!(PINC&0x01));
      65 9930      SBIC	0x06,0
      66 C000      RJMP	0x0067
(0074)   		Init_1wire();
      67 D124      RCALL	_Init_1wire
(0075)   		WriteByte_1wire(0xcc);
      68 EC0C      LDI	R16,0xCC
      69 D13E      RCALL	_WriteByte_1wire
(0076)   		WriteByte_1wire(0xbe);
      6A EB0E      LDI	R16,0xBE
      6B D13C      RCALL	_WriteByte_1wire
(0077)   		tempL = ReadByte_1wire();
      6C D15C      RCALL	_ReadByte_1wire
      6D 2EA0      MOV	R10,R16
(0078)   		tempH = ReadByte_1wire();
      6E D15A      RCALL	_ReadByte_1wire
      6F 2EC0      MOV	R12,R16
(0079)  
(0080)   		time1=tempH;
      70 92C0 011A STS	time1,R12
(0081)   		time2=tempL;
      72 92A0 0119 STS	time2,R10
(0082)   		convert();
      74 D0EE      RCALL	_convert
(0083) 	   }
(0084) 	 if(flag1==1)
      75 9180 010D LDS	R24,flag1
      77 3081      CPI	R24,1
      78 F4B1      BNE	0x008F
(0085) 	   {flag1=0;
      79 2422      CLR	R2
      7A 9220 010D STS	flag1,R2
(0086) 	    if((Rece[0]=='S')&&(Rece[1]=='T'))
      7C 9180 0111 LDS	R24,Rece
      7E 3583      CPI	R24,0x53
      7F F479      BNE	0x008F
      80 9180 0112 LDS	R24,Rece+1
      82 3584      CPI	R24,0x54
      83 F459      BNE	0x008F
(0087) 		  {Send[0]='#';
      84 E283      LDI	R24,0x23
      85 9380 010E STS	Send,R24
(0088) 		   Send[1]=tempH;
      87 92C0 010F STS	Send+1,R12
(0089) 		   Send[2]=tempL;
      89 92A0 0110 STS	Send+2,R10
(0090) 		   UartSend(Send,3);            //向上位机发送数据
      8B E023      LDI	R18,3
      8C E00E      LDI	R16,0xE
      8D E011      LDI	R17,1
      8E D1B0      RCALL	_UartSend
      8F CFC6      RJMP	0x0056
      90 9508      RET
_timer1_int:
      91 938A      ST	R24,-Y
      92 939A      ST	R25,-Y
      93 B78F      IN	R24,0x3F
      94 938A      ST	R24,-Y
(0091) 		  }
(0092) 	   }  
(0093) 	}
(0094) }
(0095) /*******************中断函数****************************/
(0096) /*定时中断*/
(0097) void timer1_int(void)
(0098) {TCNT1=0xfd8f; //重赋初值
      95 E88F      LDI	R24,0x8F
      96 EF9D      LDI	R25,0xFD
      97 9390 0085 STS	0x0085,R25
      99 9380 0084 STS	0x0084,R24
(0099)  if(count1!=100)count1++;
      9B 9180 010B LDS	R24,count1
      9D 3684      CPI	R24,0x64
      9E F019      BEQ	0x00A2
      9F 5F8F      SUBI	R24,0xFF
      A0 9380 010B STS	count1,R24
      A2 9189      LD	R24,Y+
      A3 BF8F      OUT	0x3F,R24
      A4 9199      LD	R25,Y+
      A5 9189      LD	R24,Y+
      A6 9518      RETI
_display_int:
      A7 922A      ST	R2,-Y
      A8 923A      ST	R3,-Y
      A9 930A      ST	R16,-Y
      AA 931A      ST	R17,-Y
      AB 938A      ST	R24,-Y
      AC 939A      ST	R25,-Y
      AD 93AA      ST	R26,-Y
      AE 93EA      ST	R30,-Y
      AF 93FA      ST	R31,-Y
      B0 B62F      IN	R2,0x3F
      B1 922A      ST	R2,-Y
(0100) }
(0101) /*显示中断*/
(0102) void display_int(void)
(0103) {count2++;
      B2 9180 010A LDS	R24,count2
      B4 5F8F      SUBI	R24,0xFF
      B5 9380 010A STS	count2,R24
(0104)  TCNT0=0xce;  //重赋初值
      B7 EC8E      LDI	R24,0xCE
      B8 BD86      OUT	0x26,R24
(0105)  PORTC|=0x0e;  //0000 1110
      B9 B188      IN	R24,0x08
      BA 608E      ORI	R24,0xE
      BB B988      OUT	0x08,R24
(0106)  PORTD|=0xd8; //1101 1000
      BC B18B      IN	R24,0x0B
      BD 6D88      ORI	R24,0xD8
      BE B98B      OUT	0x0B,R24
(0107)  switch(count2)
      BF 9100 010A LDS	R16,count2
      C1 2711      CLR	R17
      C2 3001      CPI	R16,1
      C3 E0E0      LDI	R30,0
      C4 071E      CPC	R17,R30
      C5 F0C1      BEQ	0x00DE
      C6 3002      CPI	R16,2
      C7 E0E0      LDI	R30,0
      C8 071E      CPC	R17,R30
      C9 F119      BEQ	0x00ED
      CA 3003      CPI	R16,3
      CB E0E0      LDI	R30,0
      CC 071E      CPC	R17,R30
      CD F171      BEQ	0x00FC
      CE 3004      CPI	R16,4
      CF E0E0      LDI	R30,0
      D0 071E      CPC	R17,R30
      D1 F409      BNE	0x00D3
      D2 C038      RJMP	0x010B
      D3 3005      CPI	R16,5
      D4 E0E0      LDI	R30,0
      D5 071E      CPC	R17,R30
      D6 F409      BNE	0x00D8
      D7 C042      RJMP	0x011A
      D8 3006      CPI	R16,6
      D9 E0E0      LDI	R30,0
      DA 071E      CPC	R17,R30
      DB F409      BNE	0x00DD
      DC C04C      RJMP	0x0129
      DD C05C      RJMP	0x013A
(0108)  {case 1:
(0109)   	   PORTC&=0xf1; //L6  1111 0001
      DE B188      IN	R24,0x08
      DF 7F81      ANDI	R24,0xF1
      E0 B988      OUT	0x08,R24
(0110)   	   PORTD&=distable[timeb6];
      E1 E080      LDI	R24,0
      E2 E091      LDI	R25,1
      E3 91E0 0113 LDS	R30,timeb6
      E5 27FF      CLR	R31
      E6 0FE8      ADD	R30,R24
      E7 1FF9      ADC	R31,R25
      E8 8020      LDD	R2,Z+0
      E9 B03B      IN	R3,0x0B
      EA 2032      AND	R3,R2
      EB B83B      OUT	0x0B,R3
(0111)   	   break;
      EC C04D      RJMP	0x013A
(0112)   case 2:
(0113)   	   PORTC&=0xf3; //L5  1111 0011
      ED B188      IN	R24,0x08
      EE 7F83      ANDI	R24,0xF3
      EF B988      OUT	0x08,R24
(0114)  	   PORTD&=distable[timeb5];
      F0 E080      LDI	R24,0
      F1 E091      LDI	R25,1
      F2 91E0 0114 LDS	R30,timeb5
      F4 27FF      CLR	R31
      F5 0FE8      ADD	R30,R24
      F6 1FF9      ADC	R31,R25
      F7 8020      LDD	R2,Z+0
      F8 B03B      IN	R3,0x0B
      F9 2032      AND	R3,R2
      FA B83B      OUT	0x0B,R3
(0115)  	   break;
      FB C03E      RJMP	0x013A
(0116)   case 3:
(0117)   	   PORTC&=0xf5; //L4  1111 0101
      FC B188      IN	R24,0x08
      FD 7F85      ANDI	R24,0xF5
      FE B988      OUT	0x08,R24
(0118)  	   PORTD&=distable[timeb4];
      FF E080      LDI	R24,0
     100 E091      LDI	R25,1
     101 91E0 0115 LDS	R30,timeb4
     103 27FF      CLR	R31
     104 0FE8      ADD	R30,R24
     105 1FF9      ADC	R31,R25
     106 8020      LDD	R2,Z+0
     107 B03B      IN	R3,0x0B
     108 2032      AND	R3,R2
     109 B83B      OUT	0x0B,R3
(0119)  	   break;
     10A C02F      RJMP	0x013A
(0120)   case 4:
(0121)        PORTC&=0xf7; //L3  1111 0111
     10B B188      IN	R24,0x08
     10C 7F87      ANDI	R24,0xF7
     10D B988      OUT	0x08,R24
(0122)  	   PORTD&=distable[timeb3];
     10E E080      LDI	R24,0
     10F E091      LDI	R25,1
     110 91E0 0116 LDS	R30,timeb3
     112 27FF      CLR	R31
     113 0FE8      ADD	R30,R24
     114 1FF9      ADC	R31,R25
     115 8020      LDD	R2,Z+0
     116 B03B      IN	R3,0x0B
     117 2032      AND	R3,R2
     118 B83B      OUT	0x0B,R3
(0123)  	   break;
     119 C020      RJMP	0x013A
(0124)   case 5:
(0125)        PORTC&=0xf9; //L2  1111 1001
     11A B188      IN	R24,0x08
     11B 7F89      ANDI	R24,0xF9
     11C B988      OUT	0x08,R24
(0126)  	   PORTD&=distable[timeb2];
     11D E080      LDI	R24,0
     11E E091      LDI	R25,1
     11F 91E0 0117 LDS	R30,timeb2
     121 27FF      CLR	R31
     122 0FE8      ADD	R30,R24
     123 1FF9      ADC	R31,R25
     124 8020      LDD	R2,Z+0
     125 B03B      IN	R3,0x0B
     126 2032      AND	R3,R2
     127 B83B      OUT	0x0B,R3
(0127)  	   break;
     128 C011      RJMP	0x013A
(0128)   case 6:
(0129)        count2=0;
     129 2422      CLR	R2
     12A 9220 010A STS	count2,R2
(0130)   	   PORTC&=0xfb; //L1  1111 1011
     12C B188      IN	R24,0x08
     12D 7F8B      ANDI	R24,0xFB
     12E B988      OUT	0x08,R24
(0131)  	   PORTD&=distable[timeb1];
     12F E080      LDI	R24,0
     130 E091      LDI	R25,1
     131 91E0 0118 LDS	R30,timeb1
     133 27FF      CLR	R31
     134 0FE8      ADD	R30,R24
     135 1FF9      ADC	R31,R25
     136 8020      LDD	R2,Z+0
     137 B03B      IN	R3,0x0B
     138 2032      AND	R3,R2
     139 B83B      OUT	0x0B,R3
(0132)  	   break;	      
     13A 9029      LD	R2,Y+
     13B BE2F      OUT	0x3F,R2
     13C 91F9      LD	R31,Y+
     13D 91E9      LD	R30,Y+
     13E 91A9      LD	R26,Y+
     13F 9199      LD	R25,Y+
     140 9189      LD	R24,Y+
     141 9119      LD	R17,Y+
     142 9109      LD	R16,Y+
     143 9039      LD	R3,Y+
     144 9029      LD	R2,Y+
     145 9518      RETI
(0133)  }
(0134) }
(0135) /*******************子函数***********************************/
(0136) /*端口及中断初始化*/
(0137) void PortInit(void)
(0138) {DDRC = 0xff;
_PortInit:
     146 EF8F      LDI	R24,0xFF
     147 B987      OUT	0x07,R24
(0139)  PORTC=0xff;
     148 B988      OUT	0x08,R24
(0140)  DDRD=0xff;
     149 B98A      OUT	0x0A,R24
(0141)  PORTD=0x00;
     14A 2422      CLR	R2
     14B B82B      OUT	0x0B,R2
(0142)  /*T/C0*/
(0143)  TCCR0A=0x00;
     14C BC24      OUT	0x24,R2
(0144)  TIMSK0=0x01;

⌨️ 快捷键说明

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