📄 ds18b20_1602.lst
字号:
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 + -