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

📄 ds18b20_1602.lst

📁 ds18b20+1602液晶显示 基于atmega16l单片机的编程
💻 LST
📖 第 1 页 / 共 3 页
字号:
    02A5 9596      LSR	R25
    02A6 9587      ROR	R24
    02A7 9701      SBIW	R24,1
    02A8 9580      COM	R24
    02A9 9590      COM	R25
    02AA 9586      LSR	R24
    02AB 8388      STD	Y+0,R24
    02AC 2F26      MOV	R18,R22
    02AD 5F2F      SUBI	R18,0xFF
    02AE 2F04      MOV	R16,R20
    02AF DF9A      RCALL	_LCD_Dis_Float
(0256)    }
    02B0 C016      RJMP	0x02C7
(0257)    else 
(0258)    {
(0259)      DisString(urow,ucol," ");
    02B1 E68C      LDI	R24,0x6C
    02B2 E090      LDI	R25,0
    02B3 8399      STD	Y+1,R25
    02B4 8388      STD	Y+0,R24
    02B5 2F26      MOV	R18,R22
    02B6 2F04      MOV	R16,R20
    02B7 DF25      RCALL	_DisString
(0260)       LCD_Dis_Float(urow,ucol+1,(rValue>>4)&0xff);
    02B8 01C5      MOVW	R24,R10
    02B9 9596      LSR	R25
    02BA 9587      ROR	R24
    02BB 9596      LSR	R25
    02BC 9587      ROR	R24
    02BD 9596      LSR	R25
    02BE 9587      ROR	R24
    02BF 9596      LSR	R25
    02C0 9587      ROR	R24
    02C1 7090      ANDI	R25,0
    02C2 8388      STD	Y+0,R24
    02C3 2F26      MOV	R18,R22
    02C4 5F2F      SUBI	R18,0xFF
    02C5 2F04      MOV	R16,R20
    02C6 DF83      RCALL	_LCD_Dis_Float
(0261)     }
(0262) 	 if((rValue&0x08)==0x08)
    02C7 01C5      MOVW	R24,R10
    02C8 7088      ANDI	R24,0x8
    02C9 7090      ANDI	R25,0
    02CA 3088      CPI	R24,0x8
    02CB E0E0      LDI	R30,0
    02CC 079E      CPC	R25,R30
    02CD F449      BNE	0x02D7
(0263)       DisString(urow,ucol+5,"5");
    02CE E68A      LDI	R24,0x6A
    02CF E090      LDI	R25,0
    02D0 8399      STD	Y+1,R25
    02D1 8388      STD	Y+0,R24
    02D2 2F26      MOV	R18,R22
    02D3 5F2B      SUBI	R18,0xFB
    02D4 2F04      MOV	R16,R20
    02D5 DF07      RCALL	_DisString
    02D6 C008      RJMP	0x02DF
(0264)      else
(0265)       DisString(urow,ucol+5,"0");
    02D7 E688      LDI	R24,0x68
    02D8 E090      LDI	R25,0
    02D9 8399      STD	Y+1,R25
    02DA 8388      STD	Y+0,R24
    02DB 2F26      MOV	R18,R22
    02DC 5F2B      SUBI	R18,0xFB
    02DD 2F04      MOV	R16,R20
    02DE DEFE      RCALL	_DisString
(0266) 	  DisCGRAM(urow, ucol+6, 0x00);
    02DF 2422      CLR	R2
    02E0 8228      STD	Y+0,R2
    02E1 2F26      MOV	R18,R22
    02E2 5F2A      SUBI	R18,0xFA
    02E3 2F04      MOV	R16,R20
    02E4 DEEC      RCALL	_DisCGRAM
    02E5 9622      ADIW	R28,2
    02E6 940E03B3  CALL	pop_gset3
    02E8 9508      RET
_LcdInit:
    02E9 9721      SBIW	R28,1
(0267) }
(0268) 
(0269) 
(0270) 
(0271) void LcdInit(void)
(0272) {
(0273)  	ClearLcd();	
    02EA DE82      RCALL	_ClearLcd
(0274) 	CurReturn(); 
    02EB DE84      RCALL	_CurReturn
(0275) 	SetInputMode(1, 0); 
    02EC 2722      CLR	R18
    02ED E001      LDI	R16,1
    02EE DE84      RCALL	_SetInputMode
(0276) 	SetDisMode(1, 0, 0); 
    02EF 2422      CLR	R2
    02F0 8228      STD	Y+0,R2
    02F1 2722      CLR	R18
    02F2 E001      LDI	R16,1
    02F3 DE94      RCALL	_SetDisMode
(0277) //	SetShift(0, 0);
(0278) 	SetFunction(1, 1, 1);
    02F4 E081      LDI	R24,1
    02F5 8388      STD	Y+0,R24
    02F6 E021      LDI	R18,1
    02F7 E001      LDI	R16,1
    02F8 DEAA      RCALL	_SetFunction
(0279) //	SetCGRAMAddr();
(0280)     LCD_WriteCGRAM(CGRAMtab,8);
    02F9 E028      LDI	R18,0x8
    02FA E600      LDI	R16,0x60
    02FB E010      LDI	R17,0
    02FC DE5C      RCALL	_LCD_WriteCGRAM
    02FD 9621      ADIW	R28,1
    02FE 9508      RET
FILE: F:\avr最小系统板\程序代码\ex15_ds18b20_1602\main.c
(0001) //ICC-AVR application builder : 2008-8-2 15:50:57
(0002) // Target : M16
(0003) // Crystal: 8.0000Mhz
(0004) 
(0005) #include <iom16v.h>
(0006) #include <macros.h>
(0007) #include "lm1602.h"
(0008) #include "ds18b20.h"
(0009) 
(0010) byte flag10ms = 0;
(0011) 
(0012) void port_init(void)
(0013) {
(0014)  PORTA = 0x00;
_port_init:
    02FF 2422      CLR	R2
    0300 BA2B      OUT	0x1B,R2
(0015)  DDRA  = 0xE0;
    0301 EE80      LDI	R24,0xE0
    0302 BB8A      OUT	0x1A,R24
(0016)  PORTB = 0x00;
    0303 BA28      OUT	0x18,R2
(0017)  DDRB  = 0xFF;
    0304 EF8F      LDI	R24,0xFF
    0305 BB87      OUT	0x17,R24
(0018)  PORTC = 0x00; //m103 output only
    0306 BA25      OUT	0x15,R2
(0019)  DDRC  = 0x00;
    0307 BA24      OUT	0x14,R2
(0020)  PORTD = 0x00;
    0308 BA22      OUT	0x12,R2
(0021)  DDRD  = 0x00;
    0309 BA21      OUT	0x11,R2
    030A 9508      RET
(0022) }
(0023) 
(0024) 
(0025) //TIMER1 initialize - prescale:64
(0026) // WGM: 0) Normal, TOP=0xFFFF
(0027) // desired value: 10mSec
(0028) // actual value: 10.000mSec (0.0%)
(0029) void timer1_init(void)
(0030) {
(0031)  TCCR1B = 0x00; //stop
_timer1_init:
    030B 2422      CLR	R2
    030C BC2E      OUT	0x2E,R2
(0032)  TCNT1H = 0xFB; //setup
    030D EF8B      LDI	R24,0xFB
    030E BD8D      OUT	0x2D,R24
(0033)  TCNT1L = 0x1E;
    030F E18E      LDI	R24,0x1E
    0310 BD8C      OUT	0x2C,R24
(0034)  TCCR1A = 0x00;
    0311 BC2F      OUT	0x2F,R2
(0035)  TCCR1B = 0x03; //start Timer
    0312 E083      LDI	R24,3
    0313 BD8E      OUT	0x2E,R24
    0314 9508      RET
_timer1_ovf_isr:
    0315 922A      ST	R2,-Y
    0316 938A      ST	R24,-Y
    0317 939A      ST	R25,-Y
    0318 B62F      IN	R2,0x3F
    0319 922A      ST	R2,-Y
(0036) }
(0037) 
(0038) #pragma interrupt_handler timer1_ovf_isr:9
(0039) void timer1_ovf_isr(void)
(0040) {
(0041)  static unsigned char cnt =0;
(0042)  //TIMER1 has overflowed
(0043)  TCNT1H = 0xFB; //reload counter high value
    031A EF8B      LDI	R24,0xFB
    031B BD8D      OUT	0x2D,R24
(0044)  TCNT1L = 0x1E; //reload counter low value
    031C E18E      LDI	R24,0x1E
    031D BD8C      OUT	0x2C,R24
(0045)  cnt++;
    031E 91800083  LDS	R24,cnt
    0320 5F8F      SUBI	R24,0xFF
    0321 93800083  STS	cnt,R24
(0046)  if(cnt>=50)
    0323 3382      CPI	R24,0x32
    0324 F030      BCS	0x032B
(0047)  {
(0048)   cnt = 0;
    0325 2422      CLR	R2
    0326 92200083  STS	cnt,R2
(0049)   flag10ms = 1;
    0328 E081      LDI	R24,1
    0329 93800082  STS	flag10ms,R24
(0050)   }
    032B 9029      LD	R2,Y+
    032C BE2F      OUT	0x3F,R2
    032D 9199      LD	R25,Y+
    032E 9189      LD	R24,Y+
    032F 9029      LD	R2,Y+
    0330 9518      RETI
(0051) }
(0052) 
(0053) 
(0054) //call this routine to initialize all peripherals
(0055) void init_devices(void)
(0056) {
(0057)  //stop errant interrupts until set up
(0058)  CLI(); //disable all interrupts
_init_devices:
    0331 94F8      BCLR	7
(0059)  port_init();
    0332 DFCC      RCALL	_port_init
(0060)  timer1_init();
    0333 DFD7      RCALL	_timer1_init
(0061)  
(0062)  MCUCR = 0x00;
    0334 2422      CLR	R2
    0335 BE25      OUT	0x35,R2
(0063)  GICR  = 0x00;
    0336 BE2B      OUT	0x3B,R2
(0064)  TIMSK = 0x04; //timer interrupt sources
    0337 E084      LDI	R24,4
    0338 BF89      OUT	0x39,R24
(0065)  SEI(); //re-enable interrupts
    0339 9478      BSET	7
    033A 9508      RET
_main:
  temp_data            --> R20
    033B 9722      SBIW	R28,2
(0066)  //all peripherals are now initialized
(0067) }
(0068) 
(0069) //
(0070) void main(void)
(0071) {
(0072)  unsigned int temp_data;
(0073)  init_devices();
    033C DFF4      RCALL	_init_devices
(0074)  LcdInit();
    033D 940E02E9  CALL	_LcdInit
(0075)  DisString(0, 1, "DS18B20 test");
    033F E983      LDI	R24,0x93
    0340 E090      LDI	R25,0
    0341 8399      STD	Y+1,R25
    0342 8388      STD	Y+0,R24
    0343 E021      LDI	R18,1
    0344 2700      CLR	R16
    0345 940E01DD  CALL	_DisString
    0347 C01D      RJMP	0x0365
(0076)  //insert your functional code here...
(0077)  while(1)
(0078)  {
(0079)     if(flag10ms)
    0348 90200082  LDS	R2,flag10ms
    034A 2022      TST	R2
    034B F0C9      BEQ	0x0365
(0080) 	{
(0081) 	   flag10ms =0;
    034C 2422      CLR	R2
    034D 92200082  STS	flag10ms,R2
(0082) 	    temp_data = ReadTemperature(); 
    034F 940E00E9  CALL	_ReadTemperature
    0351 01A8      MOVW	R20,R16
(0083) 	  if( temp_data!=0xffff)
    0352 3F0F      CPI	R16,0xFF
    0353 EFEF      LDI	R30,0xFF
    0354 071E      CPC	R17,R30
    0355 F039      BEQ	0x035D
(0084) 	  {
(0085) 	      LCD_Dis_Temperature(1,1,temp_data);	//温度数据转换和显示函数
    0356 8359      STD	Y+1,R21
    0357 8348      STD	Y+0,R20
    0358 E021      LDI	R18,1
    0359 E001      LDI	R16,1
    035A 940E0283  CALL	_LCD_Dis_Temperature
(0086) 	  }
    035C C008      RJMP	0x0365
(0087) 	  else
(0088) 	   {
(0089) 	      DisString(1,1,"DS18B20 Error!");
    035D E884      LDI	R24,0x84
    035E E090      LDI	R25,0
    035F 8399      STD	Y+1,R25
    0360 8388      STD	Y+0,R24
    0361 E021      LDI	R18,1
    0362 E001      LDI	R16,1
    0363 940E01DD  CALL	_DisString
    0365 CFE2      RJMP	0x0348
    0366 9622      ADIW	R28,2
    0367 9508      RET
FILE: F:\avr最小系统板\程序代码\ex15_ds18b20_1602\delay.c
(0001) /*--------------------------------------------------*/
(0002) /*             AVR-ARM开发网论坛                    */
(0003) /*           http://www.avrarm.com                  */
(0004) /*            AVR生成代码测试程序                   */
(0005) /*--------------------------------------------------*/
(0006) /*     程序由AVR辅助开发工具V2.1.0自动生成          */
(0007) /*     AVR系统的处理器为:   ATMega16               */
(0008) /*     AVR系统的晶振频率:   8.0000 Mhz             */
(0009) /*--------------------------------------------------*/
(0010) 
(0011) #include <iom16v.h>
(0012) #include <macros.h>
(0013) #include "delay.h"
(0014) 
(0015) /*-----------------------------------------------------------------------
(0016) delay_us	   :1us延时函数
(0017) -----------------------------------------------------------------------*/
(0018) void delay_us(void)
(0019) {
(0020)   _NOP();
_delay_us:
    0368 0000      NOP
    0369 9508      RET
_delay_nus:
  t                    --> R20
    036A 940E03C1  CALL	push_gset1
    036C 01A8      MOVW	R20,R16
(0021) }
(0022) 
(0023) /*-----------------------------------------------------------------------
(0024) delay_nus          :长延时函数
(0025) 
(0026) 输入参数: t        :延时时间 us
(0027) -----------------------------------------------------------------------*/
(0028) void delay_nus(unsigned int t)
(0029) {
    036D C001      RJMP	0x036F
(0030)     while (t--)
(0031)        delay_us();
    036E DFF9      RCALL	_delay_us
    036F 011A      MOVW	R2,R20
    0370 5041      SUBI	R20,1
    0371 4050      SBCI	R21,0
    0372 2022      TST	R2
    0373 F7D1      BNE	0x036E
    0374 2033      TST	R3
    0375 F7C1      BNE	0x036E
    0376 940E03C4  CALL	pop_gset1
    0378 9508      RET
(0032) }
(0033) 
(0034) /*-----------------------------------------------------------------------
(0035) delay_ms	   :1ms延时函数
(0036) -----------------------------------------------------------------------*/
(0037) void delay_ms(void)
(0038) {
(0039)    delay_nus(1000);
_delay_ms:
    0379 EE08      LDI	R16,0xE8
    037A E013      LDI	R17,3
    037B DFEE      RCALL	_delay_nus
    037C 9508      RET
_delay_nms:
  t                    --> R20
    037D 940E03C1  CALL	push_gset1
    037F 01A8      MOVW	R20,R16
(0040) }
(0041) 
(0042) /*-----------------------------------------------------------------------
(0043) delay_nms          :长延时函数
(0044) 
(0045) 输入参数: t        :延时时间 ms
(0046) -----------------------------------------------------------------------*/
(0047) void delay_nms(unsigned int t)
(0048) {
    0380 C001      RJMP	0x0382
(0049)     while (t--)
(0050)        delay_ms();
FILE: <library>
    0381 DFF7      RCALL	_delay_ms
    0382 011A      MOVW	R2,R20
    0383 5041      SUBI	R20,1
    0384 4050      SBCI	R21,0
    0385 2022      TST	R2
    0386 F7D1      BNE	0x0381
    0387 2033      TST	R3
    0388 F7C1      BNE	0x0381
    0389 940E03C4  CALL	pop_gset1
    038B 9508      RET
_strlen:
    038C 2FE0      MOV	R30,R16
    038D 2FF1      MOV	R31,R17
    038E 27AA      CLR	R26
    038F 27BB      CLR	R27
    0390 9001      LD	R0,Z+
    0391 2000      TST	R0
    0392 F011      BEQ	0x0395
    0393 9611      ADIW	R26,1
    0394 CFFB      RJMP	0x0390
    0395 2F0A      MOV	R16,R26
    0396 2F1B      MOV	R17,R27
    0397 9508      RET
mod8u:
    0398 9468      BSET	6
    0399 C001      RJMP	xdiv8u
div8u:
    039A 94E8      BCLR	6
xdiv8u:
    039B 932A      ST	R18,-Y
    039C 92FA      ST	R15,-Y
    039D 92EA      ST	R14,-Y
    039E 24FF      CLR	R15
    039F 24EE      CLR	R14
    03A0 E120      LDI	R18,0x10
    03A1 0F00      LSL	R16
    03A2 1CFF      ROL	R15
    03A3 1CEE      ROL	R14
    03A4 16E1      CP	R14,R17
    03A5 F010      BCS	0x03A8
    03A6 1AE1      SUB	R14,R17
    03A7 9503      INC	R16
    03A8 952A      DEC	R18
    03A9 F7B9      BNE	0x03A1
    03AA F40E      BRTC	0x03AC
    03AB 2D0E      MOV	R16,R14
    03AC 90E9      LD	R14,Y+
    03AD 90F9      LD	R15,Y+
    03AE 9129      LD	R18,Y+
    03AF 9508      RET
pop_gset2:
    03B0 E0E2      LDI	R30,2
    03B1 940C03C5  JMP	pop
pop_gset3:
    03B3 E0E4      LDI	R30,4
    03B4 940C03C5  JMP	pop
pop_gset4:
    03B6 E0E8      LDI	R30,0x8
    03B7 940C03C5  JMP	pop
push_gset5:
    03B9 92FA      ST	R15,-Y
    03BA 92EA      ST	R14,-Y
push_gset4:
    03BB 92DA      ST	R13,-Y
    03BC 92CA      ST	R12,-Y
push_gset3:
    03BD 92BA      ST	R11,-Y
    03BE 92AA      ST	R10,-Y
push_gset2:
    03BF 937A      ST	R23,-Y
    03C0 936A      ST	R22,-Y
push_gset1:
    03C1 935A      ST	R21,-Y
    03C2 934A      ST	R20,-Y
    03C3 9508      RET
pop_gset1:
    03C4 E0E1      LDI	R30,1
pop:
    03C5 9149      LD	R20,Y+
    03C6 9159      LD	R21,Y+
    03C7 FDE0      SBRC	R30,0
    03C8 9508      RET
    03C9 9169      LD	R22,Y+
    03CA 9179      LD	R23,Y+
    03CB FDE1      SBRC	R30,1
    03CC 9508      RET
    03CD 90A9      LD	R10,Y+
    03CE 90B9      LD	R11,Y+
    03CF FDE2      SBRC	R30,2
    03D0 9508      RET
    03D1 90C9      LD	R12,Y+
    03D2 90D9      LD	R13,Y+
    03D3 FDE3      SBRC	R30,3
    03D4 9508      RET
    03D5 90E9      LD	R14,Y+
    03D6 90F9      LD	R15,Y+
    03D7 9508      RET
lsl8:
    03D8 2311      TST	R17
    03D9 F019      BEQ	0x03DD
    03DA 0F00      LSL	R16
    03DB 951A      DEC	R17
    03DC CFFB      RJMP	lsl8
    03DD 9508      RET
lsr8:
    03DE 2311      TST	R17
    03DF F019      BEQ	0x03E3
    03E0 9506      LSR	R16
    03E1 951A      DEC	R17
    03E2 CFFB      RJMP	lsr8
    03E3 9508      RET

⌨️ 快捷键说明

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