📄 main.s
字号:
.module main.c
.area text(rom, con, rel)
.dbfile E:\DS18B20\main.c
.dbfile E:\DS18B20\ds18b20.h
.dbfunc e rst_DS18B20 _rst_DS18B20 fc
; errTime -> R20
.even
_rst_DS18B20::
xcall push_gset1
.dbline -1
.dbline 22
; /****************************************
; ** 文 件 名: main.c **
; ** 日 期: 2007年04月08日 **
; ** 描 述: 主函数 **
; ** 作 者:tonghe **
; ** 版 本: V1.0 **
; ** 主控芯片:M16 **
; ** 晶振频率:7.3728MHZ, 波特率9600 **
; ****************************************/
; #include <iom16v.h>
; #include <macros.h>
; #include <E:\DS18B20\define.h>
; #include <E:\DS18B20\function.h>
; #include <E:\DS18B20\ds18b20.h>
; #include <E:\DS18B20\lcd1602_4h.h>
;
; uint i;
; uchar xs[5];
;
; void xs_zh(uint da)
; {
; uint i=da*10/16;
.dbline 23
; lcd_da('+');
clr R20
.dbline 24
; xs[0]=(i/10000+0x30);
cbi 0x11,5
.dbline 25
; if(xs[0]!=0x30)
nop
.dbline 26
; lcd_da(xs[0]);
sbi 0x11,5
.dbline 27
; i=i%10000;
cbi 0x12,5
.dbline 28
; xs[1]=(i/1000+0x30);
ldi R16,255
ldi R17,0
xcall _delay_us
.dbline 29
; if(xs[1]!=0x30)
ldi R16,255
ldi R17,0
xcall _delay_us
.dbline 30
; lcd_da(xs[1]);
ldi R16,255
ldi R17,0
xcall _delay_us
.dbline 32
; i=i%1000;
; xs[2]=(i/100+0x30);
cbi 0x11,5
.dbline 33
; if(xs[2]!=0x30)
nop
xjmp L3
L2:
.dbline 35
; lcd_da(xs[2]);
; i=i%100;
.dbline 36
; xs[3]=(i/10+0x30);
ldi R16,4
ldi R17,0
xcall _delay_us
.dbline 37
; lcd_da(xs[3]);
inc R20
.dbline 38
; lcd_da('.');
ldi R24,20
cp R24,R20
brsh L5
.dbline 39
; i=i%10;
clr R16
xjmp L1
L5:
.dbline 40
L3:
.dbline 34
sbic 0x10,5
rjmp L2
.dbline 41
; xs[4]=(i+0x30);
; lcd_da(xs[4]);
clr R20
xjmp L8
L7:
.dbline 43
; lcd_da('C');
; }
.dbline 44
;
ldi R16,4
ldi R17,0
xcall _delay_us
.dbline 45
; void main()
inc R20
.dbline 46
; {
ldi R24,50
cp R24,R20
brsh L10
.dbline 47
; port_init();
clr R16
xjmp L1
L10:
.dbline 48
L8:
.dbline 42
sbis 0x10,5
rjmp L7
.dbline 49
; PORTB|=1<<3;
; delay_ms(500);
ldi R16,255
.dbline -2
L1:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r errTime 20 c
.dbend
.dbfunc e read_DS18B20 _read_DS18B20 fc
; retVal -> R20
; i -> R22
.even
_read_DS18B20::
xcall push_gset2
.dbline -1
.dbline 59
; lcd_init();
; delay_ms(100);
; lcd_comm(0x84); //写指令:第1行地址
; delay_ms(10);
; // lcd_da(20);
; // lcd_da(20);
; // lcd_da(20);
; // lcd_da(20);
; lcd_da('T'); //温度的前导字
; lcd_da('e');
.dbline 61
; lcd_da('m');
; lcd_da('p');
clr R20
.dbline 62
; lcd_da(':');
cbi 0x11,5
.dbline 63
; while(1)
ldi R22,8
xjmp L16
L13:
.dbline 64
; {
.dbline 65
; lcd_comm(0xC4); //写指令:第2行地址
lsr R20
.dbline 66
; i=rst_DS18B20();
sbi 0x11,5
.dbline 67
; i=read_Temp();
cbi 0x12,5
.dbline 68
; xs_zh(i);
ldi R16,5
ldi R17,0
xcall _delay_us
.dbline 69
; delay_ms(200);
cbi 0x11,5
.dbline 70
; }
ldi R16,2
ldi R17,0
xcall _delay_us
.dbline 71
; }
sbis 0x10,5
rjmp L17
.dbline 72
;
ori R20,128
L17:
.dbline 73
ldi R16,16
ldi R17,0
xcall _delay_us
.dbline 74
ldi R16,16
ldi R17,0
xcall _delay_us
.dbline 75
cbi 0x11,5
.dbline 76
ldi R16,35
ldi R17,0
xcall _delay_us
.dbline 77
L14:
.dbline 63
dec R22
L16:
.dbline 63
ldi R24,0
cp R24,R22
brlo L13
.dbline 78
;
;
;
;
;
;
ldi R16,2
ldi R17,0
xcall _delay_us
.dbline 79
;
mov R16,R20
.dbline -2
L12:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r retVal 20 c
.dbsym r i 22 c
.dbend
.dbfunc e write_DS18B20 _write_DS18B20 fV
; temp -> R20
; i -> R22
; wb -> R10
.even
_write_DS18B20::
xcall push_gset3
mov R10,R16
.dbline -1
.dbline 89
;
;
;
;
;
;
;
;
;
;
.dbline 92
;
;
;
cbi 0x11,5
.dbline 93
;
clr R22
xjmp L23
L20:
.dbline 94
;
.dbline 95
;
sbi 0x11,5
.dbline 96
;
cbi 0x12,5
.dbline 97
;
ldi R16,16
ldi R17,0
xcall _delay_us
.dbline 98
;
mov R16,R10
mov R17,R22
xcall lsr8
mov R20,R16
.dbline 99
;
andi R20,1
.dbline 100
;
breq L24
.dbline 101
;
cbi 0x11,5
xjmp L25
L24:
.dbline 103
;
;
cbi 0x12,5
L25:
.dbline 104
ldi R16,16
ldi R17,0
xcall _delay_us
.dbline 105
ldi R16,35
ldi R17,0
xcall _delay_us
.dbline 106
cbi 0x11,5
.dbline 107
ldi R16,2
ldi R17,0
xcall _delay_us
.dbline 108
L21:
.dbline 93
inc R22
L23:
.dbline 93
cpi R22,8
brlo L20
.dbline -2
L19:
xcall pop_gset3
.dbline 0 ; func end
ret
.dbsym r temp 20 c
.dbsym r i 22 c
.dbsym r wb 10 c
.dbend
.dbfunc e read_Temp _read_Temp fi
; x -> R20,R21
; tempH -> R20
; tempL -> R22
.even
_read_Temp::
xcall push_gset2
.dbline -1
.dbline 118
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
.dbline 121
;
;
;
xcall _rst_DS18B20
.dbline 122
;
ldi R16,204
xcall _write_DS18B20
.dbline 123
;
ldi R16,68
xcall _write_DS18B20
.dbline 124
;
ldi R16,1
ldi R17,0
xcall _delay_us
.dbline 125
;
xcall _rst_DS18B20
.dbline 126
;
ldi R16,204
xcall _write_DS18B20
.dbline 127
;
ldi R16,190
xcall _write_DS18B20
.dbline 128
;
xcall _read_DS18B20
mov R22,R16
.dbline 129
;
xcall _read_DS18B20
mov R20,R16
.dbline 130
;
mov R21,R20
mov R20,R22
.dbline 131
;
movw R16,R20
.dbline -2
L26:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r x 20 i
.dbsym r tempH 20 c
.dbsym r tempL 22 c
.dbend
.dbfile E:\DS18B20\lcd1602_4h.h
.dbfunc e lcd_da _lcd_da fV
; a -> R20
; data -> R22
.even
_lcd_da::
xcall push_gset2
mov R22,R16
.dbline -1
.dbline 54
.dbline 56
sbi 0x1b,2
.dbline 57
ldi R16,1
ldi R17,0
xcall _delay_ms
.dbline 58
sbi 0x1b,3
.dbline 59
mov R20,R22
ori R20,15
.dbline 60
in R24,0x1b
ori R24,240
and R24,R20
out 0x1b,R24
.dbline 61
ldi R16,50
ldi R17,0
xcall _delay_us
.dbline 62
cbi 0x1b,3
.dbline 63
ldi R16,50
ldi R17,0
xcall _delay_us
.dbline 65
sbi 0x1b,3
.dbline 66
mov R20,R22
andi R20,#0x0F
swap R20
ori R20,15
.dbline 67
in R24,0x1b
ori R24,240
and R24,R20
out 0x1b,R24
.dbline 68
ldi R16,50
ldi R17,0
xcall _delay_us
.dbline 69
cbi 0x1b,3
.dbline 70
ldi R16,50
ldi R17,0
xcall _delay_us
.dbline -2
L27:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r a 20 c
.dbsym r data 22 c
.dbend
.dbfunc e lcd_comm _lcd_comm fV
; a -> R20
; data -> R22
.even
_lcd_comm::
xcall push_gset2
mov R22,R16
.dbline -1
.dbline 75
.dbline 77
cbi 0x1b,2
.dbline 78
ldi R16,50
ldi R17,0
xcall _delay_us
.dbline 79
sbi 0x1b,3
.dbline 80
mov R20,R22
ori R20,15
.dbline 81
in R24,0x1b
ori R24,240
and R24,R20
out 0x1b,R24
.dbline 82
ldi R16,50
ldi R17,0
xcall _delay_us
.dbline 83
cbi 0x1b,3
.dbline 84
ldi R16,50
ldi R17,0
xcall _delay_us
.dbline 86
sbi 0x1b,3
.dbline 87
mov R20,R22
andi R20,#0x0F
swap R20
ori R20,15
.dbline 88
in R24,0x1b
ori R24,240
and R24,R20
out 0x1b,R24
.dbline 89
ldi R16,50
ldi R17,0
xcall _delay_us
.dbline 90
cbi 0x1b,3
.dbline 91
ldi R16,50
ldi R17,0
xcall _delay_us
.dbline -2
L28:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r a 20 c
.dbsym r data 22 c
.dbend
.dbfunc e xs_lcd _xs_lcd fV
.even
_xs_lcd::
.dbline -1
.dbline 95
.dbline 96
ldi R16,128
xcall _lcd_comm
.dbline 97
ldi R16,50
xcall _lcd_da
.dbline 98
ldi R16,51
xcall _lcd_da
.dbline 99
ldi R16,49
xcall _lcd_da
.dbline 100
ldi R16,50
xcall _lcd_da
.dbline 101
ldi R16,56
xcall _lcd_da
.dbline 103
ldi R16,192
xcall _lcd_comm
.dbline 104
ldi R16,39
xcall _lcd_da
.dbline 106
ldi R16,20
xcall _lcd_da
.dbline 107
ldi R16,87
xcall _lcd_da
.dbline 108
ldi R16,101
xcall _lcd_da
.dbline 109
ldi R16,101
xcall _lcd_da
.dbline 110
ldi R16,107
xcall _lcd_da
.dbline -2
L29:
.dbline 0 ; func end
ret
.dbend
.dbfunc e lcd_init _lcd_init fV
.even
_lcd_init::
.dbline -1
.dbline 115
.dbline 116
ldi R16,32
xcall _lcd_comm
.dbline 118
ldi R16,40
xcall _lcd_comm
.dbline 119
ldi R16,80
ldi R17,0
xcall _delay_us
.dbline 120
ldi R16,12
xcall _lcd_comm
.dbline 121
ldi R16,80
ldi R17,0
xcall _delay_us
.dbline 122
ldi R16,6
xcall _lcd_comm
.dbline 123
ldi R16,80
ldi R17,0
xcall _delay_us
.dbline 125
ldi R16,80
ldi R17,0
xcall _delay_us
.dbline 129
ldi R16,1
xcall _lcd_comm
.dbline 130
ldi R16,5
ldi R17,0
xcall _delay_ms
.dbline -2
L30:
.dbline 0 ; func end
ret
.dbend
.dbfunc e cls _cls fV
.even
_cls::
.dbline -1
.dbline 135
;
;
;
;
.dbline 136
;
ldi R16,1
xcall _lcd_comm
.dbline 137
;
ldi R16,5
ldi R17,0
xcall _delay_ms
.dbline -2
L31:
.dbline 0 ; func end
ret
.dbend
.dbfunc e locate _locate fV
; x -> R20
; b -> R22
; a -> R10
.even
_locate::
xcall push_gset3
mov R22,R18
mov R10,R16
.dbline -1
.dbline 142
;
;
;
;
;
.dbline 144
;
;
mov R24,R10
cpi R24,1
brne L33
.dbline 145
;
mov R20,R22
subi R20,128 ; addi 128
subi R20,1
L33:
.dbline 146
;
mov R24,R10
cpi R24,2
brne L35
.dbline 147
;
mov R20,R22
subi R20,64 ; addi 192
subi R20,1
L35:
.dbline 148
;
mov R16,R20
xcall _lcd_comm
.dbline 149
;
ldi R16,80
ldi R17,0
xcall _delay_us
.dbline -2
L32:
xcall pop_gset3
.dbline 0 ; func end
ret
.dbsym r x 20 c
.dbsym r b 22 c
.dbsym r a 10 c
.dbend
.dbfunc e lcd _lcd fV
; i -> R20
.even
_lcd::
xcall push_gset1
mov R20,R16
.dbline -1
.dbline 153
;
;
;
;
.dbline 154
;
mov R16,R20
xcall _lcd_da
.dbline -2
L37:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r i 20 c
.dbend
.dbfile E:\DS18B20\main.c
.dbfunc e xs_zh _xs_zh fV
; i -> R20,R21
; da -> R20,R21
.even
_xs_zh::
xcall push_gset1
movw R20,R16
.dbline -1
.dbline 21
.dbline 22
ldi R16,10
ldi R17,0
movw R18,R20
xcall empy16s
movw R20,R16
lsr R21
ror R20
lsr R21
ror R20
lsr R21
ror R20
lsr R21
ror R20
.dbline 23
ldi R16,43
xcall _lcd_da
.dbline 24
ldi R18,10000
ldi R19,39
movw R16,R20
xcall div16u
movw R24,R16
adiw R24,48
sts _xs,R24
.dbline 25
cpi R24,48
breq L39
.dbline 26
mov R16,R24
xcall _lcd_da
L39:
.dbline 27
ldi R18,10000
ldi R19,39
movw R16,R20
xcall mod16u
movw R20,R16
.dbline 28
ldi R18,1000
ldi R19,3
xcall div16u
movw R24,R16
adiw R24,48
sts _xs+1,R24
.dbline 29
cpi R24,48
breq L42
.dbline 30
mov R16,R24
xcall _lcd_da
L42:
.dbline 31
ldi R18,1000
ldi R19,3
movw R16,R20
xcall mod16u
movw R20,R16
.dbline 32
ldi R18,100
ldi R19,0
xcall div16u
movw R24,R16
adiw R24,48
sts _xs+2,R24
.dbline 33
cpi R24,48
breq L47
.dbline 34
mov R16,R24
xcall _lcd_da
L47:
.dbline 35
ldi R18,100
ldi R19,0
movw R16,R20
xcall mod16u
movw R20,R16
.dbline 36
ldi R18,10
ldi R19,0
xcall div16u
movw R24,R16
adiw R24,48
sts _xs+3,R24
.dbline 37
mov R16,R24
xcall _lcd_da
.dbline 38
ldi R16,46
xcall _lcd_da
.dbline 39
ldi R18,10
ldi R19,0
movw R16,R20
xcall mod16u
movw R20,R16
.dbline 40
movw R24,R20
adiw R24,48
sts _xs+4,R24
.dbline 41
mov R16,R24
xcall _lcd_da
.dbline 42
ldi R16,67
xcall _lcd_da
.dbline -2
L38:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r i 20 i
.dbsym r da 20 i
.dbend
.dbfunc e main _main fV
.even
_main::
.dbline -1
.dbline 46
.dbline 47
xcall _port_init
.dbline 48
sbi 0x18,3
.dbline 49
ldi R16,500
ldi R17,1
xcall _delay_ms
.dbline 50
xcall _lcd_init
.dbline 51
ldi R16,100
ldi R17,0
xcall _delay_ms
.dbline 52
ldi R16,132
xcall _lcd_comm
.dbline 53
ldi R16,10
ldi R17,0
xcall _delay_ms
.dbline 58
ldi R16,84
xcall _lcd_da
.dbline 59
ldi R16,101
xcall _lcd_da
.dbline 60
ldi R16,109
xcall _lcd_da
.dbline 61
ldi R16,112
xcall _lcd_da
.dbline 62
ldi R16,58
xcall _lcd_da
xjmp L57
L56:
.dbline 64
.dbline 65
ldi R16,196
xcall _lcd_comm
.dbline 66
xcall _rst_DS18B20
mov R2,R16
clr R3
sts _i+1,R3
sts _i,R2
.dbline 67
xcall _read_Temp
sts _i+1,R17
sts _i,R16
.dbline 68
xcall _xs_zh
.dbline 69
ldi R16,200
ldi R17,0
xcall _delay_ms
.dbline 70
L57:
.dbline 63
xjmp L56
X0:
.dbline -2
L55:
.dbline 0 ; func end
ret
.dbend
.area bss(ram, con, rel)
.dbfile E:\DS18B20\main.c
_xs::
.blkb 5
.dbsym e xs _xs A[5:5]c
_i::
.blkb 2
.dbsym e i _i i
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -