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

📄 main.s

📁 非常经典的基于AVR m16的DS18B20 C 程序 !1
💻 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 + -