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

📄 ds18b20.lst

📁 16个单片机c语言实验程序
💻 LST
📖 第 1 页 / 共 3 页
字号:
     21C 0745      CPC	R20,R21
     21D F421      BNE	0x0222
     21E E081      LDI	R24,1
     21F E090      LDI	R25,0
     220 015C      MOVW	R10,R24
     221 C002      RJMP	0x0224
     222 24AA      CLR	R10
     223 24BB      CLR	R11
     224 E089      LDI	R24,0x9
     225 E090      LDI	R25,0
     226 1784      CP	R24,R20
     227 0795      CPC	R25,R21
     228 F418      BCC	0x022C
     229 E061      LDI	R22,1
     22A E070      LDI	R23,0
     22B C002      RJMP	0x022E
     22C 2766      CLR	R22
     22D 2777      CLR	R23
     22E 0115      MOVW	R2,R10
     22F 2A26      OR	R2,R22
     230 2A37      OR	R3,R23
     231 2022      TST	R2
     232 F411      BNE	0x0235
     233 2033      TST	R3
     234 F019      BEQ	0x0238
     235 E340      LDI	R20,0x30
     236 E050      LDI	R21,0
     237 C002      RJMP	0x023A
(0195) 	else	num = 0x30 + num;
     238 5D40      SUBI	R20,0xD0
     239 4F5F      SBCI	R21,0xFF
(0196) 
(0197) 	PORTA|=(1<<RS);
     23A 9ADD      SBI	0x1B,5
(0198) 	s_ms(500);
     23B EF04      LDI	R16,0xF4
     23C E011      LDI	R17,1
     23D DEB9      RCALL	_s_ms
(0199) 	PORTA&=~(1<<RW);
     23E 98DE      CBI	0x1B,6
(0200) 	s_ms(500);
     23F EF04      LDI	R16,0xF4
     240 E011      LDI	R17,1
     241 DEB5      RCALL	_s_ms
(0201) 	PORTD = num;
     242 BB42      OUT	0x12,R20
(0202) 	s_ms(500);
     243 EF04      LDI	R16,0xF4
     244 E011      LDI	R17,1
     245 DEB1      RCALL	_s_ms
(0203) 	PORTA|=(1<<EN);
     246 9ADF      SBI	0x1B,7
(0204) 	s_ms(500);
     247 EF04      LDI	R16,0xF4
     248 E011      LDI	R17,1
     249 DEAD      RCALL	_s_ms
(0205) 	PORTA&=~(1<<EN);	
     24A 98DF      CBI	0x1B,7
(0206) 	s_ms(500);			
     24B EF04      LDI	R16,0xF4
     24C E011      LDI	R17,1
     24D DEA9      RCALL	_s_ms
     24E 940C 032D JMP	pop_xgsetF00C
_WriteChar:
  t                    --> R12
  i                    --> R10
  pBuffer              --> R20
  num                  --> Y,+8
  col                  --> R10
  row                  --> R22
     250 940E 0334 CALL	push_xgsetF03C
     252 2EA2      MOV	R10,R18
     253 2F60      MOV	R22,R16
     254 854A      LDD	R20,Y+10
     255 855B      LDD	R21,Y+11
(0207) }
(0208) //================================================================
(0209) // 描述:在任意位置写任意多个字符
(0210) // 入口:’row‘要写的字符所在的行,只能为1或2;
(0211) //       ‘col’要写的字符所在的列,只能为0---15
(0212) //       ‘num’要写字符的个数
(0213) //       ‘pbuffer’要写字符的首地址
(0214) //================================================================== 
(0215) void	WriteChar(uchar row,uchar col,uint num,uchar *pBuffer)
(0216) {
(0217) 	uchar i,t;
(0218) 	if (row == 1)	row = 0x80 + col;
     256 3061      CPI	R22,1
     257 F419      BNE	0x025B
     258 2D6A      MOV	R22,R10
     259 5860      SUBI	R22,0x80
     25A C002      RJMP	0x025D
(0219) 	else	row = 0xC0 + col;
     25B 2D6A      MOV	R22,R10
     25C 5460      SUBI	R22,0x40
(0220) 	writecom(row);
     25D 2F06      MOV	R16,R22
     25E DECC      RCALL	_writecom
(0221) 	//if (num<=0 | num>9)	num =0x30;
(0222) 	//else	num = 0x30 + num;
(0223) 
(0224) 	PORTA|=(1<<RS);
     25F 9ADD      SBI	0x1B,5
(0225) 	s_ms(500);
     260 EF04      LDI	R16,0xF4
     261 E011      LDI	R17,1
     262 DE94      RCALL	_s_ms
(0226) 	PORTA&=~(1<<RW);
     263 98DE      CBI	0x1B,6
(0227) 	s_ms(500);
     264 EF04      LDI	R16,0xF4
     265 E011      LDI	R17,1
     266 DE90      RCALL	_s_ms
(0228) 	for(i=num;i!=0;i--)
     267 84A8      LDD	R10,Y+8
     268 C014      RJMP	0x027D
(0229) 	{
(0230) 		t = *pBuffer;
     269 01FA      MOVW	R30,R20
     26A 80C0      LDD	R12,Z+0
(0231) 		s_ms(500);
     26B EF04      LDI	R16,0xF4
     26C E011      LDI	R17,1
     26D DE89      RCALL	_s_ms
(0232) 		PORTD = t;
     26E BAC2      OUT	0x12,R12
(0233) 		s_ms(500);
     26F EF04      LDI	R16,0xF4
     270 E011      LDI	R17,1
     271 DE85      RCALL	_s_ms
(0234) 		PORTA|=(1<<EN);
     272 9ADF      SBI	0x1B,7
(0235) 		s_ms(500);
     273 EF04      LDI	R16,0xF4
     274 E011      LDI	R17,1
     275 DE81      RCALL	_s_ms
(0236) 		PORTA&=~(1<<EN);		
     276 98DF      CBI	0x1B,7
(0237) 		s_ms(500);		
     277 EF04      LDI	R16,0xF4
     278 E011      LDI	R17,1
     279 DE7D      RCALL	_s_ms
(0238) 		pBuffer++;
     27A 5F4F      SUBI	R20,0xFF
     27B 4F5F      SBCI	R21,0xFF
     27C 94AA      DEC	R10
     27D 20AA      TST	R10
     27E F751      BNE	0x0269
     27F 940C 033D JMP	pop_xgsetF03C
_s_1ms:
  aa                   --> R20
  ms                   --> R16
     281 934A      ST	R20,-Y
     282 935A      ST	R21,-Y
FILE: E:\产品\开发板\光盘\16实验程序\DS18B20\DS18B20_main.c
(0001) //温度传感器DS18B20试验
(0002) //间隔2s采集一次温度值
(0003) //使用1602的液晶作为显示
(0004) #include <iom16v.h>     
(0005) #include <macros.h>
(0006) #include "18B20.h"
(0007) #include "1602.h"
(0008) 
(0009) uchar adc_0[]={"Temperature:"};
(0010) uchar adc_1[]={0xdf,0x43};
(0011) 
(0012) //延时函数在16M时延时1ms
(0013) void s_1ms(unsigned int ms)
(0014) {
(0015)     unsigned int aa;
(0016) 	for(;ms>=1;ms--)
     283 C00C      RJMP	0x0290
(0017) 	{
(0018) 	for(aa=0;aa<=2000;aa++)
     284 2744      CLR	R20
     285 2755      CLR	R21
     286 C002      RJMP	0x0289
     287 5F4F      SUBI	R20,0xFF
     288 4F5F      SBCI	R21,0xFF
     289 ED80      LDI	R24,0xD0
     28A E097      LDI	R25,7
     28B 1784      CP	R24,R20
     28C 0795      CPC	R25,R21
     28D F7C8      BCC	0x0287
     28E 5001      SUBI	R16,1
     28F 4010      SBCI	R17,0
     290 3001      CPI	R16,1
     291 E0E0      LDI	R30,0
     292 071E      CPC	R17,R30
     293 F780      BCC	0x0284
     294 9159      LD	R21,Y+
     295 9149      LD	R20,Y+
     296 9508      RET
_main:
  tem3                 --> Y,+5
  tem1                 --> R10
  tem2                 --> R12
  i                    --> R10
     297 9724      SBIW	R28,4
(0019) 	{;}
(0020) 	}
(0021) }	
(0022)  
(0023) 
(0024) void main()
(0025) { 
(0026) unsigned int i,tem3,tem2,tem1;
(0027) //端口初始化
(0028) DDRA = 0xff;      
     298 EF8F      LDI	R24,0xFF
     299 BB8A      OUT	0x1A,R24
(0029) PORTA = 0x00;      
     29A 2422      CLR	R2
     29B BA2B      OUT	0x1B,R2
(0030) DDRB = 0xFF;    
     29C BB87      OUT	0x17,R24
(0031) PORTB = 0xF0;       
     29D EF80      LDI	R24,0xF0
     29E BB88      OUT	0x18,R24
(0032) DDRC = 0x00; 
     29F BA24      OUT	0x14,R2
(0033) PORTC = 0xFF; 
     2A0 EF8F      LDI	R24,0xFF
     2A1 BB85      OUT	0x15,R24
(0034) DDRD = 0xff; 
     2A2 BB81      OUT	0x11,R24
(0035) PORTD = 0xff;
     2A3 BB82      OUT	0x12,R24
(0036)  
(0037) //延时200ms
(0038) s_1ms(200); 
     2A4 EC08      LDI	R16,0xC8
     2A5 E010      LDI	R17,0
     2A6 DFDA      RCALL	_s_1ms
(0039) //DS18B20复位
(0040) ds1820_reset();      
     2A7 DDC3      RCALL	_ds1820_reset
(0041) //1602 初始化
(0042) LcdInit();   
     2A8 DE9E      RCALL	_LcdInit
(0043) WriteChar(1,0,12,adc_0);
     2A9 E680      LDI	R24,0x60
     2AA E090      LDI	R25,0
     2AB 839B      STD	Y+3,R25
     2AC 838A      STD	Y+2,R24
     2AD E08C      LDI	R24,0xC
     2AE E090      LDI	R25,0
     2AF 8399      STD	Y+1,R25
     2B0 8388      STD	Y+0,R24
     2B1 2722      CLR	R18
     2B2 E001      LDI	R16,1
     2B3 DF9C      RCALL	_WriteChar
(0044) WriteChar(1,14,2,adc_1);
     2B4 E68D      LDI	R24,0x6D
     2B5 E090      LDI	R25,0
     2B6 839B      STD	Y+3,R25
     2B7 838A      STD	Y+2,R24
     2B8 E082      LDI	R24,2
     2B9 E090      LDI	R25,0
     2BA 8399      STD	Y+1,R25
     2BB 8388      STD	Y+0,R24
     2BC E02E      LDI	R18,0xE
     2BD E001      LDI	R16,1
     2BE DF91      RCALL	_WriteChar
     2BF C037      RJMP	0x02F7
(0045) 
(0046) while (1) 
(0047)   {
(0048)   //进行一次转换
(0049)   ds1820_start();    
     2C0 DE0C      RCALL	_ds1820_start
(0050)   s_1ms(2000);     
     2C1 ED00      LDI	R16,0xD0
     2C2 E017      LDI	R17,7
     2C3 DFBD      RCALL	_s_1ms
(0051)   i = ds1820_read_temp();   //读取温度数值
     2C4 DE0E      RCALL	_ds1820_read_temp
     2C5 0158      MOVW	R10,R16
(0052)   i = (i * 10) / 16;        //数值处理  
     2C6 E00A      LDI	R16,0xA
     2C7 E010      LDI	R17,0
     2C8 0195      MOVW	R18,R10
     2C9 940E 0316 CALL	empy16s
     2CB 0158      MOVW	R10,R16
     2CC 94B6      LSR	R11
     2CD 94A7      ROR	R10
     2CE 94B6      LSR	R11
     2CF 94A7      ROR	R10
     2D0 94B6      LSR	R11
     2D1 94A7      ROR	R10
     2D2 94B6      LSR	R11
     2D3 94A7      ROR	R10
(0053)   //第3位没有显示
(0054)   i = i % 1000;  
     2D4 EE28      LDI	R18,0xE8
     2D5 E033      LDI	R19,3
     2D6 0185      MOVW	R16,R10
     2D7 940E 02FA CALL	mod16u
     2D9 0158      MOVW	R10,R16
(0055)   //显示第2位
(0056)   tem2= i / 100;
     2DA E624      LDI	R18,0x64
     2DB E030      LDI	R19,0
     2DC 940E 02FC CALL	div16u
     2DE 0168      MOVW	R12,R16
(0057)   WriteNum(1,12,tem2); 
     2DF 82D9      STD	Y+1,R13
     2E0 82C8      STD	Y+0,R12
     2E1 E02C      LDI	R18,0xC
     2E2 E030      LDI	R19,0
     2E3 E001      LDI	R16,1
     2E4 E010      LDI	R17,0
     2E5 DF22      RCALL	_WriteNum
(0058)   i = i % 100;  
     2E6 E624      LDI	R18,0x64
     2E7 E030      LDI	R19,0
     2E8 0185      MOVW	R16,R10
     2E9 940E 02FA CALL	mod16u
(0059)   //显示第1位
(0060)   tem1= i / 10;
     2EB E02A      LDI	R18,0xA
     2EC E030      LDI	R19,0
     2ED 940E 02FC CALL	div16u
     2EF 0158      MOVW	R10,R16
(0061)   WriteNum(1,13,tem1);
FILE: <library>
     2F0 82B9      STD	Y+1,R11
     2F1 82A8      STD	Y+0,R10
     2F2 E02D      LDI	R18,0xD
     2F3 E030      LDI	R19,0
     2F4 E001      LDI	R16,1
     2F5 E010      LDI	R17,0
     2F6 DF11      RCALL	_WriteNum
     2F7 CFC8      RJMP	0x02C0
     2F8 9624      ADIW	R28,4
     2F9 9508      RET
mod16u:
     2FA 9468      BSET	6
     2FB C001      RJMP	xdiv16u
div16u:
     2FC 94E8      BCLR	6
xdiv16u:
     2FD 92EA      ST	R14,-Y
     2FE 92FA      ST	R15,-Y
     2FF 938A      ST	R24,-Y
     300 24EE      CLR	R14
     301 24FF      CLR	R15
     302 E180      LDI	R24,0x10
     303 0F00      LSL	R16
     304 1F11      ROL	R17
     305 1CEE      ROL	R14
     306 1CFF      ROL	R15
     307 16E2      CP	R14,R18
     308 06F3      CPC	R15,R19
     309 F018      BCS	0x030D
     30A 1AE2      SUB	R14,R18
     30B 0AF3      SBC	R15,R19
     30C 9503      INC	R16
     30D 958A      DEC	R24
     30E F7A1      BNE	0x0303
     30F F416      BRTC	0x0312
     310 2D0E      MOV	R16,R14
     311 2D1F      MOV	R17,R15
     312 9189      LD	R24,Y+
     313 90F9      LD	R15,Y+
     314 90E9      LD	R14,Y+
     315 9508      RET
empy16s:
     316 920A      ST	R0,-Y
     317 921A      ST	R1,-Y
     318 938A      ST	R24,-Y
     319 939A      ST	R25,-Y
     31A 9F02      MUL	R16,R18
     31B 01C0      MOVW	R24,R0
     31C 9F12      MUL	R17,R18
     31D 0D90      ADD	R25,R0
     31E 9F03      MUL	R16,R19
     31F 0D90      ADD	R25,R0
     320 018C      MOVW	R16,R24
     321 9199      LD	R25,Y+
     322 9189      LD	R24,Y+
     323 9019      LD	R1,Y+
     324 9009      LD	R0,Y+
     325 9508      RET
push_xgsetF00C:
     326 937A      ST	R23,-Y
     327 936A      ST	R22,-Y
     328 935A      ST	R21,-Y
     329 934A      ST	R20,-Y
     32A 92BA      ST	R11,-Y
     32B 92AA      ST	R10,-Y
     32C 9508      RET
pop_xgsetF00C:
     32D 90A9      LD	R10,Y+
     32E 90B9      LD	R11,Y+
     32F 9149      LD	R20,Y+
     330 9159      LD	R21,Y+
     331 9169      LD	R22,Y+
     332 9179      LD	R23,Y+
     333 9508      RET
push_xgsetF03C:
     334 937A      ST	R23,-Y
     335 936A      ST	R22,-Y
     336 935A      ST	R21,-Y
     337 934A      ST	R20,-Y
     338 92DA      ST	R13,-Y
     339 92CA      ST	R12,-Y
     33A 92BA      ST	R11,-Y
     33B 92AA      ST	R10,-Y
     33C 9508      RET
pop_xgsetF03C:
     33D 90A9      LD	R10,Y+
     33E 90B9      LD	R11,Y+
     33F 90C9      LD	R12,Y+
     340 90D9      LD	R13,Y+
     341 9149      LD	R20,Y+
     342 9159      LD	R21,Y+
     343 9169      LD	R22,Y+
     344 9179      LD	R23,Y+
     345 9508      RET

⌨️ 快捷键说明

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