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

📄 ds18b20.lst

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

⌨️ 快捷键说明

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