📄 main.lis
字号:
0172 ; temp=wb>>i;
0172 0A2D mov R16,R10
0174 142F mov R17,R20
0176 0E940000 xcall lsr8
017A 602F mov R22,R16
017C .dbline 96
017C ; temp&=0x01;
017C 6170 andi R22,1
017E .dbline 97
017E ; if(temp)
017E 11F0 breq L54
0180 X12:
0180 .dbline 98
0180 ; SET_DS18B20; //释放总线
0180 1A9A sbi 0x3,2
0182 01C0 xjmp L55
0184 L54:
0184 .dbline 100
0184 ; else
0184 ; CLR_DS18B20; //强制拉低
0184 1A98 cbi 0x3,2
0186 L55:
0186 .dbline 101
0186 ; Delay_Us(50); //30.38us
0186 02E3 ldi R16,50
0188 10E0 ldi R17,0
018A 3DDF xcall _Delay_Us
018C .dbline 103
018C ; //RLS_DS18B20; //释放总线
018C ; SET_DS18B20; //释放总线
018C 1A9A sbi 0x3,2
018E .dbline 104
018E ; Delay_Us(4); //2.71us(大于1us就行了)
018E 04E0 ldi R16,4
0190 10E0 ldi R17,0
0192 39DF xcall _Delay_Us
0194 .dbline 106
0194 ;
0194 ; }
0194 L51:
0194 .dbline 88
0194 4395 inc R20
0196 L53:
0196 .dbline 88
0196 4830 cpi R20,8
0198 38F3 brlo L50
019A X13:
019A .dbline -2
019A L49:
019A .dbline 0 ; func end
019A 0C940000 xjmp pop_xgsetF00C
019E .dbsym r temp 22 c
019E .dbsym r i 20 c
019E .dbsym r wb 10 c
019E .dbend
019E .dbfunc e readTempDS18B20 _readTempDS18B20 fi
019E ; x -> R10,R11
019E ; tempH -> R12
019E ; tempL -> R10
.even
019E _readTempDS18B20::
019E 0E940000 xcall push_xgset003C
01A2 .dbline -1
01A2 .dbline 114
01A2 ; }
01A2 ;
01A2 ; /**********************************************************************
01A2 ; functionName: unsigned int readTempDS18B20(void)
01A2 ; description :读DS18B20温度
01A2 ; **********************************************************************/
01A2 ; unsigned int readTempDS18B20(void)
01A2 ; {
01A2 .dbline 120
01A2 ; unsigned char tempL,tempH;
01A2 ; unsigned int x;
01A2 ; //resetDS18B20();
01A2 ; //writeByteDS18B20(0xcc); //跳过ROM
01A2 ; //writeByteDS18B20(0x44); //启动温度转换
01A2 ; Delay_Ms(1); //等待1ms
01A2 01E0 ldi R16,1
01A4 10E0 ldi R17,0
01A6 48DF xcall _Delay_Ms
01A8 .dbline 121
01A8 ; resetDS18B20();
01A8 91DF xcall _resetDS18B20
01AA .dbline 122
01AA ; writeByteDS18B20(0xcc); //跳过ROM
01AA 0CEC ldi R16,204
01AC D7DF xcall _writeByteDS18B20
01AE .dbline 123
01AE ; writeByteDS18B20(0xbe); //读数据
01AE 0EEB ldi R16,190
01B0 D5DF xcall _writeByteDS18B20
01B2 .dbline 124
01B2 ; tempL=readByteDS18B20();
01B2 B3DF xcall _readByteDS18B20
01B4 A02E mov R10,R16
01B6 .dbline 125
01B6 ; tempH=readByteDS18B20();
01B6 B1DF xcall _readByteDS18B20
01B8 C02E mov R12,R16
01BA .dbline 126
01BA ; x=(tempH<<8)|tempL;
01BA BC2C mov R11,R12
01BC .dbline 127
01BC ; resetDS18B20();
01BC 87DF xcall _resetDS18B20
01BE .dbline 128
01BE ; writeByteDS18B20(0xcc); //跳过ROM
01BE 0CEC ldi R16,204
01C0 CDDF xcall _writeByteDS18B20
01C2 .dbline 129
01C2 ; writeByteDS18B20(0x44); //启动温度转换
01C2 04E4 ldi R16,68
01C4 CBDF xcall _writeByteDS18B20
01C6 .dbline 130
01C6 ; return(x);
01C6 8501 movw R16,R10
01C8 .dbline -2
01C8 L56:
01C8 .dbline 0 ; func end
01C8 0C940000 xjmp pop_xgset003C
01CC .dbsym r x 10 i
01CC .dbsym r tempH 12 c
01CC .dbsym r tempL 10 c
01CC .dbend
01CC .dbfile H:\mega128开发板rev1.1\开发板程序\ds18b20温度+数码管显示程序\MAIN.C
01CC .dbfunc e timer0_init _timer0_init fV
.even
01CC _timer0_init::
01CC .dbline -1
01CC .dbline 20
01CC ; // Target : M128
01CC ; // Crystal: 8.0000Mhz
01CC ;
01CC ; #include <iom128v.h>
01CC ; #include <macros.h>
01CC ; #include "define.h"
01CC ; #include "delay.h"
01CC ; #include "initrialm128.h"
01CC ; #include "ds18b20.h"
01CC ;
01CC ; //#include
01CC ; void Coding_led(void);//8位数码管译码程序
01CC ;
01CC ;
01CC ; //TIMER0 initialize - prescale:1024
01CC ; // WGM: Normal
01CC ; // desired value: 3mSec
01CC ; // actual value: 2.976mSec (0.2%)
01CC ; void timer0_init(void)
01CC ; {
01CC .dbline 21
01CC ; TCCR0 = 0x00; //stop
01CC 2224 clr R2
01CE 23BE out 0x33,R2
01D0 .dbline 22
01D0 ; ASSR = 0x00; //set async mode
01D0 20BE out 0x30,R2
01D2 .dbline 23
01D2 ; TCNT0 = 0xA3; //set count
01D2 83EA ldi R24,163
01D4 82BF out 0x32,R24
01D6 .dbline 24
01D6 ; OCR0 = 0x1F;
01D6 8FE1 ldi R24,31
01D8 81BF out 0x31,R24
01DA .dbline 25
01DA ; TCCR0 = 0x06; //start timer
01DA 86E0 ldi R24,6
01DC 83BF out 0x33,R24
01DE .dbline 26
01DE ; TIMSK |= 0x01; //timer interrupt sources
01DE 87B7 in R24,0x37
01E0 8160 ori R24,1
01E2 87BF out 0x37,R24
01E4 .dbline -2
01E4 L57:
01E4 .dbline 0 ; func end
01E4 0895 ret
01E6 .dbend
.area vector(rom, abs)
.org 64
0040 0C94F300 jmp _timer0_ovf_isr
.area text(rom, con, rel)
01E6 .dbfile H:\mega128开发板rev1.1\开发板程序\ds18b20温度+数码管显示程序\MAIN.C
01E6 .dbfunc e timer0_ovf_isr _timer0_ovf_isr fV
.even
01E6 _timer0_ovf_isr::
01E6 2A92 st -y,R2
01E8 3A92 st -y,R3
01EA 0A93 st -y,R16
01EC 1A93 st -y,R17
01EE 8A93 st -y,R24
01F0 9A93 st -y,R25
01F2 EA93 st -y,R30
01F4 FA93 st -y,R31
01F6 2FB6 in R2,0x3f
01F8 2A92 st -y,R2
01FA .dbline -1
01FA .dbline 31
01FA ; }
01FA ;
01FA ; #pragma interrupt_handler timer0_ovf_isr:iv_TIM0_OVF
01FA ; void timer0_ovf_isr(void)
01FA ; {
01FA .dbline 32
01FA ; TCNT0 = 0xA3; //reload counter value
01FA 83EA ldi R24,163
01FC 82BF out 0x32,R24
01FE .dbline 33
01FE ; if(sbit_led == 8)
01FE 80911500 lds R24,_sbit_led
0202 8830 cpi R24,8
0204 19F4 brne L59
0206 X14:
0206 .dbline 34
0206 ; {
0206 .dbline 35
0206 ; sbit_led = 0;
0206 2224 clr R2
0208 20921500 sts _sbit_led,R2
020C .dbline 36
020C ; }
020C L59:
020C .dbline 37
020C ; SMG_PORT = 0XFF;
020C 8FEF ldi R24,255
020E 8BBB out 0x1b,R24
0210 .dbline 38
0210 ; SMG_BIT_PORT = 0xff;
0210 85BB out 0x15,R24
0212 .dbline 39
0212 ; SMG_BIT_PORT &=~ BIT(sbit_led);
0212 10911500 lds R17,_sbit_led
0216 01E0 ldi R16,1
0218 0E940000 xcall lsl8
021C 202E mov R2,R16
021E 2094 com R2
0220 35B2 in R3,0x15
0222 3220 and R3,R2
0224 35BA out 0x15,R3
0226 .dbline 40
0226 ; SMG_PORT = led_disbuf[sbit_led];
0226 80E0 ldi R24,<_led_disbuf
0228 90E0 ldi R25,>_led_disbuf
022A E0911500 lds R30,_sbit_led
022E FF27 clr R31
0230 E80F add R30,R24
0232 F91F adc R31,R25
0234 2080 ldd R2,z+0
0236 2BBA out 0x1b,R2
0238 .dbline 41
0238 ; sbit_led ++;
0238 80911500 lds R24,_sbit_led
023C 8F5F subi R24,255 ; addi 1
023E 80931500 sts _sbit_led,R24
0242 .dbline -2
0242 L58:
0242 .dbline 0 ; func end
0242 2990 ld R2,y+
0244 2FBE out 0x3f,R2
0246 F991 ld R31,y+
0248 E991 ld R30,y+
024A 9991 ld R25,y+
024C 8991 ld R24,y+
024E 1991 ld R17,y+
0250 0991 ld R16,y+
0252 3990 ld R3,y+
0254 2990 ld R2,y+
0256 1895 reti
0258 .dbend
0258 .dbfunc e main _main fV
0258 ; n -> <dead>
.even
0258 _main::
0258 .dbline -1
0258 .dbline 46
0258 ; }
0258 ;
0258 ;
0258 ; void main(void)
0258 ; {
0258 .dbline 48
0258 ; unsigned char n;
0258 ; Init_Devices();
0258 21DF xcall _Init_Devices
025A .dbline 49
025A ; timer0_init();
025A B8DF xcall _timer0_init
025C .dbline 50
025C ; BELL_OFF();
025C 1C9A sbi 0x3,4
025E 3FC1 xjmp L63
0260 L62:
0260 .dbline 53
0260 ;
0260 ; while(1)
0260 ; {
0260 .dbline 54
0260 ; temperture = readTempDS18B20();
0260 9EDF xcall _readTempDS18B20
0262 0E940000 xcall uint2fp
0266 10930100 sts _temperture+1,R17
026A 00930000 sts _temperture,R16
026E 30930300 sts _temperture+2+1,R19
0272 20930200 sts _temperture+2,R18
0276 .dbline 55
0276 ; temperture = temperture * 0.0625*10;
0276 00E0 ldi R16,<L65
0278 10E0 ldi R17,>L65
027A 0E940000 xcall elpm32
027E 1801 movw R2,R16
0280 2901 movw R4,R18
0282 00E0 ldi R16,<L66
0284 10E0 ldi R17,>L66
0286 0E940000 xcall elpm32
028A 80E0 ldi R24,<_temperture
028C 90E0 ldi R25,>_temperture
028E 9A93 st -y,R25
0290 8A93 st -y,R24
0292 0E940000 xcall fpmule1x
0296 8101 movw R16,R2
0298 9201 movw R18,R4
029A 0E940000 xcall fpmule2
029E 10930100 sts _temperture+1,R17
02A2 00930000 sts _temperture,R16
02A6 30930300 sts _temperture+2+1,R19
02AA 20930200 sts _temperture+2,R18
02AE .dbline 56
02AE ; if(temperture < 1000)//ds18b20由于进中断后干扰时序,最好加上校验数据
02AE 1801 movw R2,R16
02B0 2901 movw R4,R18
02B2 00E0 ldi R16,<L69
02B4 10E0 ldi R17,>L69
02B6 0E940000 xcall elpm32
02BA 3A93 st -y,R19
02BC 2A93 st -y,R18
02BE 1A93 st -y,R17
02C0 0A93 st -y,R16
02C2 8101 movw R16,R2
02C4 9201 movw R18,R4
02C6 0E940000 xcall fpcmp2
02CA 0CF0 brlt X24
02CC D7C0 xjmp L67
02CE X24:
02CE X15:
02CE .dbline 57
02CE ; {
02CE .dbline 58
02CE ; led_buf[0] = (int)temperture/10000000%10;
02CE 40E8 ldi R20,128
02D0 56E9 ldi R21,150
02D2 68E9 ldi R22,152
02D4 70E0 ldi R23,0
02D6 20910200 lds R18,_temperture+2
02DA 30910300 lds R19,_temperture+2+1
02DE 00910000 lds R16,_temperture
02E2 10910100 lds R17,_temperture+1
02E6 0E940000 xcall fpint
02EA 2227 clr R18
02EC 17FD sbrc R17,7
02EE 2095 com R18
02F0 3327 clr R19
02F2 27FD sbrc R18,7
02F4 3095 com R19
02F6 7A93 st -y,R23
02F8 6A93 st -y,R22
02FA 5A93 st -y,R21
02FC 4A93 st -y,R20
02FE 0E940000 xcall div32s
0302 4AE0 ldi R20,10
0304 50E0 ldi R21,0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -