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

📄 main.s

📁 有遥控的温度计,用dS1302做时钟芯片
💻 S
📖 第 1 页 / 共 2 页
字号:
	.module main.c
	.area text(rom, con, rel)
	.dbfile D:\时钟芯片\1302\1302-162\main.c
	.area data(ram, con, rel)
	.dbfile D:\时钟芯片\1302\1302-162\main.c
_flag::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile D:\时钟芯片\1302\1302-162\main.c
	.dbsym e flag _flag c
_n::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile D:\时钟芯片\1302\1302-162\main.c
	.dbsym e n _n 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 14
; //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;
; uchar flag=0;
; uchar n=0;
; void port_init(void)
; {
	.dbline 15
;  PORTA = 0x00;
	clr R2
	out 0x1b,R2
	.dbline 16
;  DDRA  = 0xFF;
	ldi R24,255
	out 0x1a,R24
	.dbline 17
;  PORTB = 0xFF;
	out 0x18,R24
	.dbline 18
;  DDRB  = 0xFF;
	out 0x17,R24
	.dbline 19
;  PORTC = 0xFF;
	out 0x15,R24
	.dbline 20
;  DDRC  = 0xFF;
	out 0x14,R24
	.dbline 21
;  PORTD = 0x00;
	out 0x12,R2
	.dbline 22
;  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 25
; }	   	 	   		//call this routine to initialize all peripherals
; void init_devices(void)
; {
	.dbline 27
;  	 				//stop errant interrupts until set up
;  CLI(); 			//disable all interrupts
	cli
	.dbline 28
;  port_init();
	rcall _port_init
	.dbline 29
;  MCUCR = 0x00;
	clr R2
	out 0x35,R2
	.dbline 30
;  GIMSK = 0x40;
	ldi R24,64
	out 0x3b,R24
	.dbline 31
;  TIMSK = 0x00;
	out 0x39,R2
	.dbline 32
;  SEI();  	   		//re-enable interrupts
	sei
	.dbline -2
L2:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e delay_nms _delay_nms fV
;              a -> R20
;              b -> R22
;              n -> R16
	.even
_delay_nms::
	rcall push_gset2
	.dbline -1
	.dbline 36
;  			   		//all peripherals are now initialized
; }
; void delay_nms(uchar n)
; {
	.dbline 39
; 	unsigned char a, b;
; 
; 	for (a = 1; a<n; a++)
	ldi R20,1
	rjmp L7
L4:
	.dbline 40
; 		for (b = 1; b<10; b++)
	ldi R22,1
	rjmp L11
L8:
	.dbline 41
L9:
	.dbline 40
	inc R22
L11:
	.dbline 40
	cpi R22,10
	brlo L8
L5:
	.dbline 39
	inc R20
L7:
	.dbline 39
	cp R20,R16
	brlo L4
	.dbline -2
L3:
	rcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r a 20 c
	.dbsym r b 22 c
	.dbsym r n 16 c
	.dbend
	.dbfunc e delay_ns _delay_ns fV
;              b -> R20
;              n -> R22
	.even
_delay_ns::
	rcall push_gset2
	mov R22,R16
	.dbline -1
	.dbline 44
; 			;
; }
; void delay_ns(uchar n)
; { unsigned char  b;
	.dbline 45
;   for(b=0;b<n;b++)
	clr R20
	rjmp L16
L13:
	.dbline 46
	ldi R16,200
	rcall _delay_nms
L14:
	.dbline 45
	inc R20
L16:
	.dbline 45
	cp R20,R22
	brlo L13
	.dbline -2
L12:
	rcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r b 20 c
	.dbsym r n 22 c
	.dbend
	.area vector(rom, abs)
	.org 2
	rjmp _int0_isr
	.area text(rom, con, rel)
	.dbfile D:\时钟芯片\1302\1302-162\main.c
	.dbfunc e int0_isr _int0_isr fV
;              t -> R20
;          store -> R20,R21
;      user_code -> R12,R13
;      data_code -> R22,R23
;              i -> R10
	.even
_int0_isr::
	rcall push_lset
	rcall push_gset4
	sbiw R28,2
	.dbline -1
	.dbline 50
;   delay_nms(200);
;  }
; #pragma interrupt_handler int0_isr:2
; void int0_isr(void)
; {
	.dbline 53
;  //external interupt on INT0
;    uchar i;
;    uint user_code=0;
	clr R12
	clr R13
	.dbline 54
;    uint data_code=0,store;
	clr R22
	clr R23
	.dbline 55
;    CLI();     //关闭中断
	cli
	.dbline 57
;  //**********************目的是检测在3毫秒内如果出现高电平就退出解码程序  
;    for(i=0;i<3;i++)
	clr R10
	rjmp L21
L18:
	.dbline 58
;    {
	.dbline 59
;     delay_nms(90);        //延时1ms
	ldi R16,90
	rcall _delay_nms
	.dbline 60
;    if(PIND&0X04)
	in R24,0x10
	andi R24,4
	breq L22
	.dbline 61
;      {
	.dbline 62
; 	goto ret;
	rjmp L24
L22:
	.dbline 64
L19:
	.dbline 57
	inc R10
L21:
	.dbline 57
	mov R24,R10
	cpi R24,3
	brlo L18
L25:
	.dbline 66
L26:
	.dbline 66
; 	 }
;     }  
;  //**********************等高电平出现,再延时4.7ms,跳过结果码
;  	while(!(PIND&004));
	in R24,0x10
	andi R24,4
	breq L25
L28:
	.dbline 67
L29:
	.dbline 67
;     while(PIND&0X04);        
	in R24,0x10
	andi R24,4
	brne L28
	.dbline 69
;  //**********************开始接收用户码
;  	for(i=0;i<16;i++)
	clr R10
	rjmp L34
X0:
	.dbline 70
;     {
L35:
	.dbline 71
L36:
	.dbline 71
; 	 while(!(PIND&0X04));
	in R24,0x10
	andi R24,4
	breq L35
	.dbline 72
; 	 delay_nms(90);       //延时1.05ms     
	ldi R16,90
	rcall _delay_nms
	.dbline 73
; 	if(PIND&0X04)         
	in R24,0x10
	andi R24,4
	breq L38
	.dbline 74
; 		{
	.dbline 75
; 		user_code|=(1<<i);
	mov R18,R10
	clr R19
	ldi R16,1
	ldi R17,0
	rcall lsl16
	or R12,R16
	or R13,R17
	.dbline 77
; 		
; 		}
	rjmp L39
L38:
	.dbline 79
; 	else
; 	    {
	.dbline 80
; 		user_code&=~(1<<i);
	mov R18,R10
	clr R19
	ldi R16,1
	ldi R17,0
	rcall lsl16
	mov R2,R16
	mov R3,R17
	com R2
	com R3
	and R12,R2
	and R13,R3
	.dbline 81
; 		}
L39:
	.dbline 82
L32:
	.dbline 69
	inc R10
L34:
	.dbline 69
	mov R24,R10
	cpi R24,16
	brlo L36
	.dbline 85
; 	 }
; 
;    //**********************开始接收数据
;     for(i=0;i<16;i++)
	clr R10
	rjmp L43
X1:
	.dbline 86
;     {
L44:
	.dbline 87
L45:
	.dbline 87
; 	 while(!(PIND&0X04));
	in R24,0x10
	andi R24,4
	breq L44
	.dbline 88
; 	delay_nms(90);       //延时1.05ms    
	ldi R16,90
	rcall _delay_nms
	.dbline 89
; 	if(PIND&0X04)
	in R24,0x10
	andi R24,4
	breq L47
	.dbline 90
; 		{
	.dbline 91
; 		data_code|=(1<<i);
	mov R18,R10
	clr R19
	ldi R16,1
	ldi R17,0
	rcall lsl16
	or R22,R16
	or R23,R17
	.dbline 93
; 		
; 		}
	rjmp L48
L47:
	.dbline 95
; 	else
; 	    {
	.dbline 96
; 		data_code&=~(1<<i);
	mov R18,R10
	clr R19
	ldi R16,1
	ldi R17,0
	rcall lsl16
	mov R2,R16
	mov R3,R17
	com R2
	com R3
	and R22,R2
	and R23,R3
	.dbline 97
; 		}
L48:
	.dbline 98
L41:
	.dbline 85
	inc R10
L43:
	.dbline 85
	mov R24,R10
	cpi R24,16
	brlo L45
	.dbline 99
; 	 }
; 	store=data_code;      //采集到数据码
	mov R20,R22
	mov R21,R23
	.dbline 100
; 	delay_ns(240); 
	ldi R16,240
	rcall _delay_ns
	.dbline 103
;         //延时50ms,不接收连续码
;     //设置开关
; 	if(store==0x0901)
	cpi R22,1
	ldi R30,9
	cpc R23,R30
	brne L49
	.dbline 104
; 		{
	.dbline 105
; 	      flag^=0X01;
	ldi R24,1
	lds R2,_flag
	eor R2,R24
	sts _flag,R2
	.dbline 106
; 		}   
L49:
	.dbline 108
; 	//设置时间
;   	if(flag)
	lds R2,_flag
	tst R2
	brne X8
	rjmp L51
X8:
	.dbline 109
; 	  {
	.dbline 111
; 	  uchar t;
; 	  LCD_write_string(8,1,"s"); 
	ldi R24,<L53
	ldi R25,>L53
	std y+1,R25
	std y+0,R24
	ldi R18,1
	ldi R16,8
	rcall _LCD_write_string
	.dbline 112
; 	  switch(store)
	cpi R20,65
	ldi R30,2
	cpc R21,R30
	brne X9
	rjmp L69
X9:
	ldi R24,577
	ldi R25,2
	cp R24,R20
	cpc R25,R21
	brge X10
	rjmp L74
X10:
L73:
	cpi R20,1
	ldi R30,130
	cpc R21,R30
	brne X11
	rjmp L72
X11:
	ldi R24,-32255
	ldi R25,-126
	cp R24,R20
	cpc R25,R21
	brlt L76
L75:
	cpi R20,129
	ldi R30,128
	cpc R21,R30
	brne X12
	rjmp L66
X12:
	cpi R20,129
	ldi R30,128
	cpc R21,R30
	brge X13
	rjmp L54
X13:
L77:
	cpi R20,1
	ldi R30,129
	cpc R21,R30
	brne X14
	rjmp L68
X14:
	rjmp L54
L76:
	cpi R20,65
	ldi R30,0
	cpc R21,R30
	brne X15
	rjmp L65
X15:
	ldi R24,65
	ldi R25,0
	cp R24,R20
	cpc R25,R21
	brlt L79
L78:
	cpi R20,1
	ldi R30,132
	cpc R21,R30
	brne X16
	rjmp L57
X16:
	rjmp L54
L79:
	cpi R20,65
	ldi R30,1
	cpc R21,R30
	brne X17
	rjmp L67
X17:
	rjmp L54
L74:
	cpi R20,65
	ldi R30,5
	cpc R21,R30
	brne X18
	rjmp L71
X18:
	ldi R24,1345
	ldi R25,5
	cp R24,R20
	cpc R25,R21
	brlt L81
L80:
	cpi R20,129
	ldi R30,2
	cpc R21,R30
	brne X19
	rjmp L70
X19:
	cpi R20,129
	ldi R30,2
	cpc R21,R30
	brge X20
	rjmp L54
X20:
L82:
	cpi R20,65
	ldi R30,4
	cpc R21,R30
	brne X21
	rjmp L63
X21:
	rjmp L54
L81:
	cpi R20,1
	ldi R30,9
	cpc R21,R30
	breq L56
	ldi R24,2305
	ldi R25,9
	cp R24,R20
	cpc R25,R21
	brlt L84
L83:
	cpi R20,65
	ldi R30,8
	cpc R21,R30
	breq L60
	rjmp L54
L84:
	cpi R20,1
	ldi R30,64
	cpc R21,R30
	brne X22
	rjmp L64
X22:
	rjmp L54
X2:
	.dbline 113
;  		{
L56:
	.dbline 114
; 		case 0x0901 :LCD_set_xy(8,1);LCD_write_char('s');n=0;LCD_set_xy(9,1);
	ldi R18,1
	ldi R16,8
	rcall _LCD_set_xy
	.dbline 114
	ldi R16,115
	rcall _LCD_write_char
	.dbline 114
	clr R2
	sts _n,R2
	.dbline 114
	ldi R18,1
	ldi R16,9
	rcall _LCD_set_xy
	.dbline 115
	lds R16,_n
	subi R16,208    ; addi 48
	rcall _LCD_write_char
	.dbline 115
	rjmp L24
X3:
	.dbline 115
; 	                 LCD_write_char(n+48);goto ret;break;
L57:
	.dbline 116
	lds R24,_n
	subi R24,255    ; addi 1
	sts _n,R24
	.dbline 116
	ldi R24,10
	lds R2,_n
	cp R24,R2
	brsh L58
	.dbline 116
	clr R2
	sts _n,R2
L58:
	.dbline 116
; 		case 0x8401 :n++;if(n>10) n=0;  LCD_set_xy(9,1);
	ldi R18,1
	ldi R16,9
	rcall _LCD_set_xy
	.dbline 117
	lds R16,_n
	subi R16,208    ; addi 48
	rcall _LCD_write_char
	.dbline 117
	rjmp L24
X4:
	.dbline 117
; 	                 LCD_write_char(n+48); goto ret;break;
L60:
	.dbline 118
	lds R24,_n
	subi R24,1
	sts _n,R24
	.dbline 118
	tst R24
	brne L61
	.dbline 118
	ldi R24,10
	sts _n,R24
L61:
	.dbline 118
; 		case 0x0841 :n=n-1;if(n==0) n=10;  LCD_set_xy(9,1);
	ldi R18,1
	ldi R16,9
	rcall _LCD_set_xy
	.dbline 119
	lds R16,_n
	subi R16,208    ; addi 48
	rcall _LCD_write_char
	.dbline 119
	rjmp L24
X5:
	.dbline 119
; 	                 LCD_write_char(n+48); goto ret;break;
L63:
	.dbline 120
; 		case 0x0441 :t=0;break;
	clr R20
	.dbline 120
	rjmp L55
L64:
	.dbline 121
;  		case 0x4001 :t=1;break;
	ldi R20,1
	.dbline 121
	rjmp L55
L65:
	.dbline 122
;  		case 0x0041 :t=2;break;
	ldi R20,2
	.dbline 122
	rjmp L55
L66:
	.dbline 123
;  		case 0x8081 :t=3;break;
	ldi R20,3
	.dbline 123
	rjmp L55
L67:
	.dbline 124
;  		case 0x0141 :t=4;break;
	ldi R20,4
	.dbline 124
	rjmp L55
L68:
	.dbline 125
;  		case 0x8101 :t=5;break;
	ldi R20,5
	.dbline 125
	rjmp L55
L69:
	.dbline 126
;  		case 0x0241 :t=6;break;
	ldi R20,6
	.dbline 126
	rjmp L55
L70:
	.dbline 127
;  		case 0x0281 :t=7;break;
	ldi R20,7
	.dbline 127
	rjmp L55
L71:
	.dbline 128
;  		case 0x0541 :t=8;break;
	ldi R20,8
	.dbline 128
	rjmp L55
L72:
	.dbline 129
;  		case 0x8201 :t=9;break;
	ldi R20,9
	.dbline 129
L54:
L55:
	.dbline 132
; 		}
; 	  
; 	  switch(n)
	lds R22,_n
	clr R23
	cpi R22,0
	cpc R22,R23
	brne X23
	rjmp L88
X23:
X6:
	cpi R22,1
	ldi R30,0
	cpc R23,R30
	brne X24
	rjmp L89
X24:
	cpi R22,2
	ldi R30,0
	cpc R23,R30
	brne X25
	rjmp L90
X25:
	cpi R22,3
	ldi R30,0
	cpc R23,R30
	brne X26
	rjmp L91
X26:
	cpi R22,4
	ldi R30,0
	cpc R23,R30
	brne X27
	rjmp L92
X27:
	cpi R22,5
	ldi R30,0
	cpc R23,R30
	brne X28
	rjmp L93
X28:
	cpi R22,6
	ldi R30,0
	cpc R23,R30
	brne X29
	rjmp L94
X29:
	cpi R22,7
	ldi R30,0
	cpc R23,R30
	brne X30
	rjmp L95

⌨️ 快捷键说明

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