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

📄 ds18b20.lst

📁 AVR-based single-chip temperature display system, so absolutely! DS18B20 sensors used
💻 LST
📖 第 1 页 / 共 2 页
字号:
    0120 E785      LDI	R24,0x75
    0121 E090      LDI	R25,0
    0122 91E00074  LDS	R30,posit
    0124 27FF      CLR	R31
    0125 0FE8      ADD	R30,R24
    0126 1FF9      ADC	R31,R25
    0127 81E0      LDD	R30,Z+0
    0128 27FF      CLR	R31
    0129 E680      LDI	R24,0x60
    012A E090      LDI	R25,0
    012B 0FE8      ADD	R30,R24
    012C 1FF9      ADC	R31,R25
    012D 8020      LDD	R2,Z+0
    012E BA25      OUT	0x15,R2
(0153)   PORTD= position[posit];
    012F E68C      LDI	R24,0x6C
    0130 E090      LDI	R25,0
    0131 91E00074  LDS	R30,posit
    0133 27FF      CLR	R31
    0134 0FE8      ADD	R30,R24
    0135 1FF9      ADC	R31,R25
    0136 8020      LDD	R2,Z+0
    0137 BA22      OUT	0x12,R2
(0154)   if (++posit >=4 ) posit = 0;
    0138 91800074  LDS	R24,posit
    013A 5F8F      SUBI	R24,0xFF
    013B 2E28      MOV	R2,R24
    013C 92200074  STS	posit,R2
    013E 3084      CPI	R24,4
    013F F018      BCS	0x0143
    0140 2422      CLR	R2
    0141 92200074  STS	posit,R2
    0143 9508      RET
_TIMER0_COMP:
    0144 940E0255  CALL	push_lset
(0155) } 
(0156) 
(0157) // Timer 0 比较匹配中断服务
(0158) #pragma interrupt_handler TIMER0_COMP:20 
(0159) void TIMER0_COMP(void)
(0160) { 
(0161)   display(); 
    0146 DFD7      RCALL	_display
    0147 940E026C  CALL	pop_lset
    0149 9518      RETI
_main:
  j                    --> Y+5
  i                    --> R20
    014A 9724      SBIW	R28,4
(0162)  
(0163) }
(0164)   
(0165) void main(void)
(0166) {
(0167)   int i,j;
(0168)   PORTD=0xFF;           // 显示控制I/O端口初始化
    014B EF8F      LDI	R24,0xFF
    014C BB82      OUT	0x12,R24
(0169)   DDRD=0xFF;
    014D BB81      OUT	0x11,R24
(0170)   PORTC=0XfF;
    014E BB85      OUT	0x15,R24
(0171)   DDRC=0xFF;
    014F BB84      OUT	0x14,R24
(0172)   
(0173) 
(0174)   // T/C0 初始化
(0175)   
(0176)   TCCR0=0x0B;           // 内部时钟,64分频(4M/64=62.5KHz),CTC模式
    0150 E08B      LDI	R24,0xB
    0151 BF83      OUT	0x33,R24
(0177)   TCNT0=0x00;
    0152 2422      CLR	R2
    0153 BE22      OUT	0x32,R2
(0178)   OCR0=0x7C;           // OCR0 = 0x7C(124),(124+1)/62.5=2ms
    0154 E78C      LDI	R24,0x7C
    0155 BF8C      OUT	0x3C,R24
(0179)   TIMSK=0x02;           // 允许T/C0比较匹配中断
    0156 E082      LDI	R24,2
    0157 BF89      OUT	0x39,R24
(0180)   SEI(); //允许全局中断
    0158 9478      BSET	7
    0159 C08C      RJMP	0x01E6
(0181)   
(0182) 	while (1) {
(0183) 		ds1820_start();					/*启动一次转换*/
    015A DF8C      RCALL	_ds1820_start
(0184) 		delay_nms(10);					/*等待转换结束*/
    015B E00A      LDI	R16,0xA
    015C E010      LDI	R17,0
    015D DF12      RCALL	_delay_nms
(0185) 		i=ds1820_read_temp();				/*读取温度数值*/
    015E DF8E      RCALL	_ds1820_read_temp
    015F 01A8      MOVW	R20,R16
(0186) 		if(i>=0xf000)//判断是不是负数
    0160 3000      CPI	R16,0
    0161 EFE0      LDI	R30,0xF0
    0162 071E      CPC	R17,R30
    0163 F408      BCC	0x0165
    0164 C042      RJMP	0x01A7
(0187) 		{
(0188) 		i=~i;           //转换,先取反,在加1.
    0165 9540      COM	R20
    0166 9550      COM	R21
(0189) 		i+=1;
    0167 5F4F      SUBI	R20,0xFF
    0168 4F5F      SBCI	R21,0xFF
(0190) 		i = (i * 10) / 16;				/*数值处理*/
    0169 E00A      LDI	R16,0xA
    016A E010      LDI	R17,0
    016B 019A      MOVW	R18,R20
    016C 940E0223  CALL	empy16s
    016E E120      LDI	R18,0x10
    016F E030      LDI	R19,0
    0170 940E01ED  CALL	div16s
    0172 01A8      MOVW	R20,R16
(0191) 		led_buf[3] = i / 1000;			/*将显示信息加载到显示缓存区*/
    0173 EE28      LDI	R18,0xE8
    0174 E033      LDI	R19,3
    0175 940E01ED  CALL	div16s
    0177 93000073  STS	led_buf+3,R16
(0192) 		i = i % 1000;
    0179 EE28      LDI	R18,0xE8
    017A E033      LDI	R19,3
    017B 018A      MOVW	R16,R20
    017C 940E01E9  CALL	mod16s
    017E 01A8      MOVW	R20,R16
(0193) 		led_buf[2] = i / 100;
    017F E624      LDI	R18,0x64
    0180 E030      LDI	R19,0
    0181 940E01ED  CALL	div16s
    0183 93000072  STS	led_buf+2,R16
(0194) 		i = i % 100;
    0185 E624      LDI	R18,0x64
    0186 E030      LDI	R19,0
    0187 018A      MOVW	R16,R20
    0188 940E01E9  CALL	mod16s
    018A 01A8      MOVW	R20,R16
(0195) 		led_buf[1] = i / 10;
    018B E02A      LDI	R18,0xA
    018C E030      LDI	R19,0
    018D 940E01ED  CALL	div16s
    018F 93000071  STS	led_buf+1,R16
(0196) 		led_buf[0] = i % 10;
    0191 E02A      LDI	R18,0xA
    0192 E030      LDI	R19,0
    0193 018A      MOVW	R16,R20
    0194 940E01E9  CALL	mod16s
    0196 93000070  STS	led_buf,R16
(0197) 		time_to_disbuffer(led_buf[1],led_buf[2],10,11);
    0198 E08B      LDI	R24,0xB
    0199 E090      LDI	R25,0
    019A 839B      STD	Y+3,R25
    019B 838A      STD	Y+2,R24
    019C E08A      LDI	R24,0xA
    019D 8399      STD	Y+1,R25
    019E 8388      STD	Y+0,R24
    019F 91200072  LDS	R18,led_buf+2
    01A1 2733      CLR	R19
    01A2 91000071  LDS	R16,led_buf+1
    01A4 2711      CLR	R17
    01A5 DF6B      RCALL	_time_to_disbuffer
(0198) 		}
    01A6 C03F      RJMP	0x01E6
(0199) 		else
(0200) 		{	
(0201) 		i = (i * 10) / 16;				/*数值处理*/
    01A7 E00A      LDI	R16,0xA
    01A8 E010      LDI	R17,0
    01A9 019A      MOVW	R18,R20
    01AA 940E0223  CALL	empy16s
    01AC E120      LDI	R18,0x10
    01AD E030      LDI	R19,0
    01AE 940E01ED  CALL	div16s
    01B0 01A8      MOVW	R20,R16
(0202) 		led_buf[3] = i / 1000;			/*将显示信息加载到显示缓存区*/
    01B1 EE28      LDI	R18,0xE8
    01B2 E033      LDI	R19,3
    01B3 940E01ED  CALL	div16s
    01B5 93000073  STS	led_buf+3,R16
(0203) 		i = i % 1000;
    01B7 EE28      LDI	R18,0xE8
    01B8 E033      LDI	R19,3
    01B9 018A      MOVW	R16,R20
    01BA 940E01E9  CALL	mod16s
    01BC 01A8      MOVW	R20,R16
(0204) 		led_buf[2] = i / 100;
    01BD E624      LDI	R18,0x64
    01BE E030      LDI	R19,0
    01BF 940E01ED  CALL	div16s
    01C1 93000072  STS	led_buf+2,R16
(0205) 		i = i % 100;
    01C3 E624      LDI	R18,0x64
    01C4 E030      LDI	R19,0
    01C5 018A      MOVW	R16,R20
    01C6 940E01E9  CALL	mod16s
    01C8 01A8      MOVW	R20,R16
(0206) 		led_buf[1] = i / 10;
    01C9 E02A      LDI	R18,0xA
    01CA E030      LDI	R19,0
    01CB 940E01ED  CALL	div16s
    01CD 93000071  STS	led_buf+1,R16
(0207) 		led_buf[0] = i % 10;	
    01CF E02A      LDI	R18,0xA
    01D0 E030      LDI	R19,0
    01D1 018A      MOVW	R16,R20
    01D2 940E01E9  CALL	mod16s
    01D4 93000070  STS	led_buf,R16
(0208) 		time_to_disbuffer(led_buf[1],led_buf[2],led_buf[3],led_buf[0]);
FILE: <library>
    01D6 2E20      MOV	R2,R16
    01D7 2433      CLR	R3
    01D8 823B      STD	Y+3,R3
    01D9 822A      STD	Y+2,R2
    01DA 90200073  LDS	R2,led_buf+3
    01DC 2433      CLR	R3
    01DD 8239      STD	Y+1,R3
    01DE 8228      STD	Y+0,R2
    01DF 91200072  LDS	R18,led_buf+2
    01E1 2733      CLR	R19
    01E2 91000071  LDS	R16,led_buf+1
    01E4 2711      CLR	R17
    01E5 DF2B      RCALL	_time_to_disbuffer
    01E6 CF73      RJMP	0x015A
    01E7 9624      ADIW	R28,4
    01E8 9508      RET
mod16s:
    01E9 9468      BSET	6
    01EA 92DA      ST	R13,-Y
    01EB 2ED1      MOV	R13,R17
    01EC C004      RJMP	0x01F1
div16s:
    01ED 94E8      BCLR	6
    01EE 92DA      ST	R13,-Y
    01EF 2ED1      MOV	R13,R17
    01F0 26D3      EOR	R13,R19
    01F1 FF17      SBRS	R17,7
    01F2 C004      RJMP	0x01F7
    01F3 9510      COM	R17
    01F4 9500      COM	R16
    01F5 5F0F      SUBI	R16,0xFF
    01F6 4F1F      SBCI	R17,0xFF
    01F7 FF37      SBRS	R19,7
    01F8 C004      RJMP	0x01FD
    01F9 9530      COM	R19
    01FA 9520      COM	R18
    01FB 5F2F      SUBI	R18,0xFF
    01FC 4F3F      SBCI	R19,0xFF
    01FD 940E020A  CALL	xdiv16u
    01FF FED7      SBRS	R13,7
    0200 C004      RJMP	0x0205
    0201 9510      COM	R17
    0202 9500      COM	R16
    0203 5F0F      SUBI	R16,0xFF
    0204 4F1F      SBCI	R17,0xFF
    0205 90D9      LD	R13,Y+
    0206 9508      RET
mod16u:
    0207 9468      BSET	6
    0208 C001      RJMP	xdiv16u
div16u:
    0209 94E8      BCLR	6
xdiv16u:
    020A 92EA      ST	R14,-Y
    020B 92FA      ST	R15,-Y
    020C 938A      ST	R24,-Y
    020D 24EE      CLR	R14
    020E 24FF      CLR	R15
    020F E180      LDI	R24,0x10
    0210 0F00      LSL	R16
    0211 1F11      ROL	R17
    0212 1CEE      ROL	R14
    0213 1CFF      ROL	R15
    0214 16E2      CP	R14,R18
    0215 06F3      CPC	R15,R19
    0216 F018      BCS	0x021A
    0217 1AE2      SUB	R14,R18
    0218 0AF3      SBC	R15,R19
    0219 9503      INC	R16
    021A 958A      DEC	R24
    021B F7A1      BNE	0x0210
    021C F416      BRTC	0x021F
    021D 2D0E      MOV	R16,R14
    021E 2D1F      MOV	R17,R15
    021F 9189      LD	R24,Y+
    0220 90F9      LD	R15,Y+
    0221 90E9      LD	R14,Y+
    0222 9508      RET
empy16s:
    0223 920A      ST	R0,-Y
    0224 921A      ST	R1,-Y
    0225 938A      ST	R24,-Y
    0226 939A      ST	R25,-Y
    0227 9F02      MUL	R16,R18
    0228 01C0      MOVW	R24,R0
    0229 9F12      MUL	R17,R18
    022A 0D90      ADD	R25,R0
    022B 9F03      MUL	R16,R19
    022C 0D90      ADD	R25,R0
    022D 018C      MOVW	R16,R24
    022E 9199      LD	R25,Y+
    022F 9189      LD	R24,Y+
    0230 9019      LD	R1,Y+
    0231 9009      LD	R0,Y+
    0232 9508      RET
pop_gset2:
    0233 E0E2      LDI	R30,2
    0234 940C0242  JMP	pop
push_gset5:
    0236 92FA      ST	R15,-Y
    0237 92EA      ST	R14,-Y
push_gset4:
    0238 92DA      ST	R13,-Y
    0239 92CA      ST	R12,-Y
push_gset3:
    023A 92BA      ST	R11,-Y
    023B 92AA      ST	R10,-Y
push_gset2:
    023C 937A      ST	R23,-Y
    023D 936A      ST	R22,-Y
push_gset1:
    023E 935A      ST	R21,-Y
    023F 934A      ST	R20,-Y
    0240 9508      RET
pop_gset1:
    0241 E0E1      LDI	R30,1
pop:
    0242 9149      LD	R20,Y+
    0243 9159      LD	R21,Y+
    0244 FDE0      SBRC	R30,0
    0245 9508      RET
    0246 9169      LD	R22,Y+
    0247 9179      LD	R23,Y+
    0248 FDE1      SBRC	R30,1
    0249 9508      RET
    024A 90A9      LD	R10,Y+
    024B 90B9      LD	R11,Y+
    024C FDE2      SBRC	R30,2
    024D 9508      RET
    024E 90C9      LD	R12,Y+
    024F 90D9      LD	R13,Y+
    0250 FDE3      SBRC	R30,3
    0251 9508      RET
    0252 90E9      LD	R14,Y+
    0253 90F9      LD	R15,Y+
    0254 9508      RET
push_lset:
    0255 93FA      ST	R31,-Y
    0256 93EA      ST	R30,-Y
    0257 93BA      ST	R27,-Y
    0258 93AA      ST	R26,-Y
    0259 939A      ST	R25,-Y
    025A 938A      ST	R24,-Y
    025B 933A      ST	R19,-Y
    025C 932A      ST	R18,-Y
    025D 931A      ST	R17,-Y
    025E 930A      ST	R16,-Y
    025F 929A      ST	R9,-Y
    0260 928A      ST	R8,-Y
    0261 927A      ST	R7,-Y
    0262 926A      ST	R6,-Y
    0263 925A      ST	R5,-Y
    0264 924A      ST	R4,-Y
    0265 923A      ST	R3,-Y
    0266 922A      ST	R2,-Y
    0267 921A      ST	R1,-Y
    0268 920A      ST	R0,-Y
    0269 B60F      IN	R0,0x3F
    026A 920A      ST	R0,-Y
    026B 9508      RET
pop_lset:
    026C 9009      LD	R0,Y+
    026D BE0F      OUT	0x3F,R0
    026E 9009      LD	R0,Y+
    026F 9019      LD	R1,Y+
    0270 9029      LD	R2,Y+
    0271 9039      LD	R3,Y+
    0272 9049      LD	R4,Y+
    0273 9059      LD	R5,Y+
    0274 9069      LD	R6,Y+
    0275 9079      LD	R7,Y+
    0276 9089      LD	R8,Y+
    0277 9099      LD	R9,Y+
    0278 9109      LD	R16,Y+
    0279 9119      LD	R17,Y+
    027A 9129      LD	R18,Y+
    027B 9139      LD	R19,Y+
    027C 9189      LD	R24,Y+
    027D 9199      LD	R25,Y+
    027E 91A9      LD	R26,Y+
    027F 91B9      LD	R27,Y+
    0280 91E9      LD	R30,Y+
    0281 91F9      LD	R31,Y+
    0282 9508      RET

⌨️ 快捷键说明

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