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

📄 main.s

📁 结合温度传感器的实现测温度的C程序 这个小项目用到了比较多的AVR单片机的资源 是个不错的学习例程
💻 S
字号:
	.module main.c
	.area text(rom, con, rel)
	.dbfile D:\时钟芯片\1302\1302-162\main.c
	.dbfunc e port_init _port_init fV
	.even
_port_init::
	.dbline -1
	.dbline 12
; //ICC-AVR application builder : 2005-11-2 16:28:30
; // Target : 8515
; // Crystal: 4.0000Mhz
; #include <io8515v.h>
; #include <macros.h>
; #include <162-1302.h>
; #include <function.h>
; uchar temh_d;
; uchar teml_d;
; uchar temm_d;
; void port_init(void)
; {
	.dbline 13
;  PORTA = 0x00;
	clr R2
	out 0x1b,R2
	.dbline 14
;  DDRA  = 0xFF;
	ldi R24,255
	out 0x1a,R24
	.dbline 15
;  PORTB = 0xFF;
	out 0x18,R24
	.dbline 16
;  DDRB  = 0xFF;
	out 0x17,R24
	.dbline 17
;  PORTC = 0xFF;
	out 0x15,R24
	.dbline 18
;  DDRC  = 0xFF;
	out 0x14,R24
	.dbline 19
;  PORTD = 0x00;
	out 0x12,R2
	.dbline 20
;  DDRD  = 0x00; 
	out 0x11,R2
	.dbline -2
L1:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e init_devices _init_devices fV
	.even
_init_devices::
	.dbline -1
	.dbline 23
; }	   	 	   		//call this routine to initialize all peripherals
; void init_devices(void)
; {
	.dbline 25
;  	 				//stop errant interrupts until set up
;  CLI(); 			//disable all interrupts
	cli
	.dbline 26
;  port_init();
	rcall _port_init
	.dbline 27
;  MCUCR = 0x00;
	clr R2
	out 0x35,R2
	.dbline 28
;  GIMSK = 0x00;
	out 0x3b,R2
	.dbline 29
;  TIMSK = 0x00;
	out 0x39,R2
	.dbline 30
;  SEI();  	   		//re-enable interrupts
	sei
	.dbline -2
L2:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e main _main fV
;           temm -> R20
;          count -> R22
;              a -> R10
;           temh -> R12
;           teml -> R14
;             th -> R12
;             tl -> R20
;              s -> R22
;              i -> y+2
	.even
_main::
	sbiw R28,3
	.dbline -1
	.dbline 37
;  			   		//all peripherals are now initialized
; }
; /******************************************************
;                          主程序
; ******************************************************/		               
; void main(void)
; {
	.dbline 40
; uchar s,i,th,tl;
;  uchar temh,teml,a,count,temm; 
; init_devices();
	rcall _init_devices
	.dbline 41
; init_1302();
	rcall _init_1302
	.dbline 42
; init_1302();
	rcall _init_1302
	.dbline 43
; init_lcd() ;
	rcall _init_lcd
	.dbline 44
; init_lcd() ;
	rcall _init_lcd
	.dbline 45
; init_time();
	rcall _init_time
	rjmp L5
L4:
	.dbline 47
;    while(1)
;     {
	.dbline 48
; 	 LCD_set_xy(0,0);
	clr R18
	clr R16
	rcall _LCD_set_xy
	.dbline 49
; 	 for(i=0;i<9;i+=2)
	clr R0
	std y+2,R0
	rjmp L10
L7:
	.dbline 50
	.dbline 51
	ldd R2,y+2
	clr R3
	ldi R16,137
	sub R16,R2
	sbc R17,R3
	rcall _read_data
	mov R22,R16
	.dbline 52
	mov R20,R22
	andi R20,15
	.dbline 53
	mov R24,R22
	swap R24
	andi R24,#0x0F
	mov R12,R24
	.dbline 54
	mov R16,R24
	subi R16,208    ; addi 48
	rcall _LCD_write_char
	.dbline 55
	mov R16,R20
	subi R16,208    ; addi 48
	rcall _LCD_write_char
	.dbline 56
	ldi R16,58
	rcall _LCD_write_char
	.dbline 57
L8:
	.dbline 49
	ldd R24,y+2
	subi R24,254    ; addi 2
	std y+2,R24
L10:
	.dbline 49
	ldd R24,y+2
	cpi R24,9
	brlo L7
	.dbline 58
; 	 {
;    	  s=read_data(0x89-i);
; 	  tl=s&0x0f;
;    	  th=(s>>4);
;    	  LCD_write_char(th+48);
;       LCD_write_char(tl+48);
; 	  LCD_write_char(':');
; 	 }
; 	  s=read_data(0x8b);
	ldi R16,139
	rcall _read_data
	mov R22,R16
	.dbline 59
; 	  tl=s&0x0f;
	mov R20,R22
	andi R20,15
	.dbline 60
;       LCD_write_char(tl+48);
	mov R16,R20
	subi R16,208    ; addi 48
	rcall _LCD_write_char
	.dbline 62
; 	  
; 	 a=init_1820();               //复位18b20   
	rcall _init_1820
	mov R10,R16
	.dbline 63
; if(a==0x01)
	cpi R16,1
	brne L11
	.dbline 64
; {
	.dbline 65
; LCD_write_string(0,1,"wrong"); //初始化失败
	ldi R24,<L13
	ldi R25,>L13
	std y+1,R25
	std y+0,R24
	ldi R18,1
	clr R16
	rcall _LCD_write_string
	.dbline 66
; }
	rjmp L12
L11:
	.dbline 68
; else
; {
	.dbline 69
; LCD_write_string(0,1,"temper is");//初始化成功
	ldi R24,<L14
	ldi R25,>L14
	std y+1,R25
	std y+0,R24
	ldi R18,1
	clr R16
	rcall _LCD_write_string
	.dbline 70
; }                  
L12:
	.dbline 71
;      write_1820(0xCC);              // SKIP THE ROM
	ldi R16,204
	rcall _write_1820
	.dbline 72
;       write_1820(0x44);              //启动温度转换
	ldi R16,68
	rcall _write_1820
	.dbline 73
; 	  for(i=0;i<200;i++)           //每次转换需要延时200ms以上 
	clr R0
	std y+2,R0
	rjmp L18
L15:
	.dbline 74
	ldi R16,200
	rcall _delay
L16:
	.dbline 73
	ldd R0,y+2
	inc R0
	std y+2,R0
L18:
	.dbline 73
	ldd R24,y+2
	cpi R24,200
	brlo L15
	.dbline 75
	rcall _init_1820
	mov R10,R16
	.dbline 76
	ldi R16,204
	rcall _write_1820
	.dbline 77
	ldi R16,190
	rcall _write_1820
	.dbline 78
	rcall _read_1820
	mov R14,R16
	.dbline 79
	rcall _read_1820
	mov R12,R16
	.dbline 80
	mov R20,R14
	.dbline 81
	andi R20,15
	.dbline 82
	mov R24,R14
	swap R24
	andi R24,#0x0F
	mov R14,R24
	.dbline 83
	mov R24,R12
	andi R24,#0x0F
	swap R24
	mov R12,R24
	.dbline 84
	mov R22,R14
	or R22,R24
	.dbline 85
	ldi R17,10
	mov R16,R22
	rcall div8u
	sts _temh_d,R16
	.dbline 86
	mov R18,R20
	clr R19
	ldi R16,6
	ldi R17,0
	rcall mpy16s
	ldi R18,10
	ldi R19,0
	rcall div16s
	sts _temm_d,R16
	.dbline 87
	ldi R17,10
	mov R16,R22
	rcall mod8u
	sts _teml_d,R16
	.dbline 88
	ldi R16,200
	rcall _delay
	.dbline 89
	ldi R18,1
	ldi R16,10
	rcall _LCD_set_xy
	.dbline 90
	lds R16,_temh_d
	subi R16,208    ; addi 48
	rcall _LCD_write_char
	.dbline 91
	ldi R18,1
	ldi R16,11
	rcall _LCD_set_xy
	.dbline 92
	lds R16,_teml_d
	subi R16,208    ; addi 48
	rcall _LCD_write_char
	.dbline 93
	ldi R18,1
	ldi R16,12
	rcall _LCD_set_xy
	.dbline 94
	ldi R16,46
	rcall _LCD_write_char
	.dbline 95
	ldi R18,1
	ldi R16,13
	rcall _LCD_set_xy
	.dbline 96
	lds R16,_temm_d
	subi R16,208    ; addi 48
	rcall _LCD_write_char
	.dbline 97
	ldi R24,<L19
	ldi R25,>L19
	std y+1,R25
	std y+0,R24
	ldi R18,1
	ldi R16,14
	rcall _LCD_write_string
	.dbline 98
L5:
	.dbline 46
	rjmp L4
X0:
	.dbline -2
L3:
	adiw R28,3
	.dbline 0 ; func end
	ret
	.dbsym r temm 20 c
	.dbsym r count 22 c
	.dbsym r a 10 c
	.dbsym r temh 12 c
	.dbsym r teml 14 c
	.dbsym r th 12 c
	.dbsym r tl 20 c
	.dbsym r s 22 c
	.dbsym l i 2 c
	.dbend
	.area bss(ram, con, rel)
	.dbfile D:\时钟芯片\1302\1302-162\main.c
_temm_d::
	.blkb 1
	.dbsym e temm_d _temm_d c
_teml_d::
	.blkb 1
	.dbsym e teml_d _teml_d c
_temh_d::
	.blkb 1
	.dbsym e temh_d _temh_d c
	.area data(ram, con, rel)
	.dbfile D:\时钟芯片\1302\1302-162\main.c
L19:
	.blkb 3
	.area idata
	.byte 96,'c,0
	.area data(ram, con, rel)
	.dbfile D:\时钟芯片\1302\1302-162\main.c
L14:
	.blkb 10
	.area idata
	.byte 't,'e,'m,'p,'e,'r,32,'i,'s,0
	.area data(ram, con, rel)
	.dbfile D:\时钟芯片\1302\1302-162\main.c
L13:
	.blkb 6
	.area idata
	.byte 'w,'r,'o,'n,'g,0
	.area data(ram, con, rel)
	.dbfile D:\时钟芯片\1302\1302-162\main.c

⌨️ 快捷键说明

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