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

📄 1602_8563.s

📁 avr单片机的程序
💻 S
📖 第 1 页 / 共 3 页
字号:
	.dbline 58
L56:
	.dbline 58
L57:
	.dbline 58
	in R2,0x36
	sbrs R2,7
	rjmp L56
	.dbline 58
	.dbline 58
	.dbline 59
	in R24,0x1
	andi R24,248
	cpi R24,8
	breq L59
	.dbline 59
	clr R16
	xjmp L55
L59:
	.dbline 60
	ldi R16,162
	xcall _write_tim
	.dbline 61
	ldi R16,2
	xcall _write_tim
	.dbline 63
	ldi R24,164
	out 0x36,R24
	.dbline 64
L61:
	.dbline 64
L62:
	.dbline 64
	in R2,0x36
	sbrs R2,7
	rjmp L61
	.dbline 64
	.dbline 64
	.dbline 65
	in R24,0x1
	andi R24,248
	cpi R24,16
	breq L64
	.dbline 65
	clr R16
	xjmp L55
L64:
	.dbline 66
	ldi R16,163
	xcall _write_tim
	.dbline 68
	xcall _read_tim
	mov R24,R16
	andi R24,127
	sts _timer,R24
	.dbline 69
	xcall _read_tim
	mov R24,R16
	andi R24,127
	sts _timer+1,R24
	.dbline 70
	xcall _read_tim
	mov R24,R16
	andi R24,63
	sts _timer+2,R24
	.dbline 71
	xcall _read_tim
	mov R24,R16
	andi R24,63
	sts _timer+3,R24
	.dbline 72
	xcall _read_tim
	mov R24,R16
	andi R24,7
	sts _timer+4,R24
	.dbline 73
	tst R24
	brne L70
	.dbline 73
	ldi R24,7
	sts _timer+4,R24
L70:
	.dbline 74
	xcall _read_tim
	sts _timer+5,R16
	.dbline 75
	sbrc R16,7
	rjmp L75
	.dbline 76
	ldi R24,32
	sts _timer+7,R24
	xjmp L76
L75:
	.dbline 77
	ldi R24,25
	sts _timer+7,R24
L76:
	.dbline 78
	lds R24,_timer+5
	andi R24,31
	sts _timer+5,R24
	.dbline 79
	xcall _read_tim
	sts _timer+6,R16
	.dbline 80
	ldi R24,148
	out 0x36,R24
	.dbline 81
	ldi R16,1
	.dbline -2
L55:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e write_timer _write_timer fc
	.even
_write_timer::
	.dbline -1
	.dbline 88
	.dbline 89
	ldi R24,164
	out 0x36,R24
	.dbline 90
L84:
	.dbline 90
L85:
	.dbline 90
	in R2,0x36
	sbrs R2,7
	rjmp L84
	.dbline 90
	.dbline 90
	.dbline 91
	in R24,0x1
	andi R24,248
	cpi R24,8
	breq L87
	.dbline 91
	clr R16
	xjmp L83
L87:
	.dbline 92
	ldi R16,162
	xcall _write_tim
	.dbline 93
	clr R16
	xcall _write_tim
	.dbline 94
	ldi R16,32
	xcall _write_tim
	.dbline 95
	clr R16
	xcall _write_tim
	.dbline 96
	clr R16
	xcall _write_tim
	.dbline 97
	lds R16,_timer+1
	xcall _write_tim
	.dbline 98
	lds R16,_timer+2
	xcall _write_tim
	.dbline 99
	lds R16,_timer+3
	xcall _write_tim
	.dbline 100
	lds R16,_timer+4
	xcall _write_tim
	.dbline 101
	lds R16,_timer+5
	xcall _write_tim
	.dbline 102
	lds R16,_timer+6
	xcall _write_tim
	.dbline 103
	ldi R24,148
	out 0x36,R24
	.dbline 104
	ldi R16,1
	.dbline -2
L83:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e start_timer _start_timer fc
	.even
_start_timer::
	.dbline -1
	.dbline 111
	.dbline 112
	ldi R24,164
	out 0x36,R24
	.dbline 113
L96:
	.dbline 113
L97:
	.dbline 113
	in R2,0x36
	sbrs R2,7
	rjmp L96
	.dbline 113
	.dbline 113
	.dbline 114
	in R24,0x1
	andi R24,248
	cpi R24,8
	breq L99
	.dbline 114
	clr R16
	xjmp L95
L99:
	.dbline 115
	ldi R16,162
	xcall _write_tim
	.dbline 116
	clr R16
	xcall _write_tim
	.dbline 117
	clr R16
	xcall _write_tim
	.dbline 118
	ldi R24,148
	out 0x36,R24
	.dbline 119
	ldi R16,1
	.dbline -2
L95:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e timer_lcd _timer_lcd fV
	.even
_timer_lcd::
	.dbline -1
	.dbline 126
	.dbline 127
	ldi R18,4
	ldi R16,1
	xcall _locate
	.dbline 129
	lds R16,_timer+7
	swap R16
	andi R16,#0x0F
	subi R16,208    ; addi 48
	xcall _lcd_da
	.dbline 130
	lds R16,_timer+7
	andi R16,15
	subi R16,208    ; addi 48
	xcall _lcd_da
	.dbline 131
	lds R16,_timer+6
	swap R16
	andi R16,#0x0F
	subi R16,208    ; addi 48
	xcall _lcd_da
	.dbline 132
	lds R16,_timer+6
	andi R16,15
	subi R16,208    ; addi 48
	xcall _lcd_da
	.dbline 133
	ldi R16,47
	xcall _lcd_da
	.dbline 134
	lds R16,_timer+5
	swap R16
	andi R16,#0x0F
	subi R16,208    ; addi 48
	xcall _lcd_da
	.dbline 135
	lds R16,_timer+5
	andi R16,15
	subi R16,208    ; addi 48
	xcall _lcd_da
	.dbline 136
	ldi R16,47
	xcall _lcd_da
	.dbline 137
	lds R16,_timer+3
	swap R16
	andi R16,#0x0F
	subi R16,208    ; addi 48
	xcall _lcd_da
	.dbline 138
	lds R16,_timer+3
	andi R16,15
	subi R16,208    ; addi 48
	xcall _lcd_da
	.dbline 140
	ldi R18,2
	ldi R16,2
	xcall _locate
	.dbline 142
	lds R16,_timer+2
	swap R16
	andi R16,#0x0F
	subi R16,208    ; addi 48
	xcall _lcd_da
	.dbline 143
	lds R16,_timer+2
	andi R16,15
	subi R16,208    ; addi 48
	xcall _lcd_da
	.dbline 144
	ldi R16,58
	xcall _lcd_da
	.dbline 145
	lds R16,_timer+1
	swap R16
	andi R16,#0x0F
	subi R16,208    ; addi 48
	xcall _lcd_da
	.dbline 146
	lds R16,_timer+1
	andi R16,15
	subi R16,208    ; addi 48
	xcall _lcd_da
	.dbline 147
	ldi R16,58
	xcall _lcd_da
	.dbline 148
	lds R16,_timer
	swap R16
	andi R16,#0x0F
	subi R16,208    ; addi 48
	xcall _lcd_da
	.dbline 149
	lds R16,_timer
	andi R16,15
	subi R16,208    ; addi 48
	xcall _lcd_da
	.dbline 151
; 
; 	lcd_da(20);						 //时间与星期间留1空格
	ldi R16,20
	xcall _lcd_da
	.dbline 152
; 	lcd_da('W');					 //星期的前导字
	ldi R16,87
	xcall _lcd_da
	.dbline 153
; 	lcd_da('e');
	ldi R16,101
	xcall _lcd_da
	.dbline 154
; 	lcd_da('e');
	ldi R16,101
	xcall _lcd_da
	.dbline 155
; 	lcd_da('k');
	ldi R16,107
	xcall _lcd_da
	.dbline 156
; 	lcd_da((timer[4]&0x0f)+0x30);	 //星期数据
	lds R16,_timer+4
	andi R16,15
	subi R16,208    ; addi 48
	xcall _lcd_da
	.dbline -2
L101:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e timer1_init _timer1_init fV
	.even
_timer1_init::
	.dbline -1
	.dbline 161
; 	}
; 
; //定时器1:每秒从8563中读取4次数据,更新显示
; void timer1_init(void)	       //定时器1初始化:250毫秒定时,预分频256
;     {
	.dbline 162
; 	TCCR1B = 0x00; 		   	   //停止定时器
	clr R2
	out 0x2e,R2
	.dbline 163
; 	TCNT1H = 0x8F;			   //初值高字节
	ldi R24,143
	out 0x2d,R24
	.dbline 164
; 	TCNT1L = 0x81;			   //定时初值低字节
	ldi R24,129
	out 0x2c,R24
	.dbline 165
; 	TCCR1A = 0x00;
	out 0x2f,R2
	.dbline 166
; 	TCCR1B = 0x03; 	 	   	   //启动定时器
	ldi R24,3
	out 0x2e,R24
	.dbline -2
L115:
	.dbline 0 ; func end
	ret
	.dbend
	.area vector(rom, abs)
	.org 32
	jmp _timer1_ovf_isr
	.area text(rom, con, rel)
	.dbfile D:\PCF8563\1602_time\1602_8563.c
	.dbfunc e timer1_ovf_isr _timer1_ovf_isr fV
	.even
_timer1_ovf_isr::
	xcall push_lset
	.dbline -1
	.dbline 171
; 	}
; 
; #pragma interrupt_handler timer1_ovf_isr:9
; void timer1_ovf_isr(void) 	   //定时器1中断入口:250MS中断一次
;     {
	.dbline 172
; 	TCNT1H = 0x8F;			   //重装初值
	ldi R24,143
	out 0x2d,R24
	.dbline 173
; 	TCNT1L = 0x81;   
	ldi R24,129
	out 0x2c,R24
	.dbline 174
; 	read_timer();	   	   	   //读出当前时钟
	xcall _read_timer
	.dbline 175
; 	timer_lcd();		   	   //显示数据转换
	xcall _timer_lcd
	.dbline -2
L116:
	xcall pop_lset
	.dbline 0 ; func end
	reti
	.dbend
	.dbfunc e set_xs1 _set_xs1 fV
;              i -> R20
	.even
_set_xs1::
	xcall push_gset1
	mov R20,R16
	.dbline -1
	.dbline 182
; 	}
; 
; /**********************************
; *          调整显示函数1		  *
; **********************************/
; void set_xs1(uchar i)
;     {
	.dbline 183
; 	lcd_da((timer[i]>>4)+0x30);		 //显示数据
	ldi R24,<_timer
	ldi R25,>_timer
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	ldd R16,z+0
	swap R16
	andi R16,#0x0F
	subi R16,208    ; addi 48
	xcall _lcd_da
	.dbline 184
; 	lcd_da((timer[i]&0x0f)+0x30);
	ldi R24,<_timer
	ldi R25,>_timer
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	ldd R16,z+0
	andi R16,15
	subi R16,208    ; addi 48
	xcall _lcd_da
	.dbline -2
L117:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r i 20 c
	.dbend
	.dbfunc e set_xs2 _set_xs2 fV
;           data -> R20
	.even
_set_xs2::
	xcall push_gset1
	mov R20,R16
	.dbline -1
	.dbline 191
; 	}
; 
; /**********************************
; *          调整显示函数2		  *
; **********************************/
; void set_xs2(uchar data)
;     {
	.dbline 192
; 	lcd_da((data>>4)+0x30);		 //显示数据
	mov R16,R20
	swap R16
	andi R16,#0x0F
	subi R16,208    ; addi 48
	xcall _lcd_da
	.dbline 193
; 	lcd_da((data&0x0f)+0x30);
	mov R16,R20
	andi R16,15
	subi R16,208    ; addi 48
	xcall _lcd_da
	.dbline 194
; 	lcd(0x20);
	ldi R16,32
	xcall _lcd
	.dbline -2
L118:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r data 20 c
	.dbend
	.dbfunc e main _main fV
;       set_time -> R22
;         set_bh -> y+2
;       set_flag -> y+1
;             a1 -> y+0
;              a -> R20
	.even
_main::
	sbiw R28,5
	.dbline -1
	.dbline 201
; 	}
; 
; /**********************************
; *           程序主函数		      *
; **********************************/
; void main(void)
;     {
	.dbline 202
; 	uchar set_flag=0;			   //调整与正常工作标志
	clr R0
	std y+1,R0
	.dbline 204
; 	uchar set_time;				   //调整数据类型标志
; 	uchar set_bh=0;				   //调整变化标志
	std y+2,R0
	.dbline 207
; 	uchar a,a1;
; 	
; 	port_init();
	xcall _port_init
	.dbline 208
; 	LED_ON;			  			   //开LCD背光
	sbi 0x18,3
	.dbline 209
; 	lcd_init();
	xcall _lcd_init
	.dbline 210
; 	delay_ms(500);
	ldi R16,500
	ldi R17,1
	xcall _delay_ms
	.dbline 211
; 	tonghe();
	xcall _tonghe
	.dbline 212
; 	delay_ms(2000);
	ldi R16,2000
	ldi R17,7
	xcall _delay_ms
	.dbline 214
; 	
; 	Twi_Init();
	xcall _Twi_Init
	.dbline 215
; 	delay_ms(100);
	ldi R16,100
	ldi R17,0
	xcall _delay_ms
	.dbline 216
; 	CLI(); 	 						//关总中断
	cli
	.dbline 217
; 	timer1_init();					//定时器1初始化
	xcall _timer1_init
	.dbline 218
; 	MCUCR = 0x00;
	clr R2
	out 0x35,R2
	.dbline 219
; 	GICR  = 0x00;
	out 0x3b,R2
	.dbline 220
; 	TIMSK = 0x04; 					//开放定时器0中断和比较中断
	ldi R24,4
	out 0x39,R24
	.dbline 221
; 	SEI(); 							//开总中断
	sei
	.dbline 223
; 	
; 	cls();
	xcall _cls
	.dbline 224
; 	delay_ms(50);
	ldi R16,50
	ldi R17,0
	xcall _delay_ms
	xjmp L121
L120:
	.dbline 227
; 
; 	while(1)
; 	    {
	.dbline 228
; 		a=KEY_RD;
	in R24,0x13
	lsr R24
	ori R24,241
	in R20,0x10
	lsr R20
	lsr R20
	ori R20,254
	and R20,R24
	com R20
	.dbline 229
; 		if(a!=0)
	brne X9
	xjmp L123
X9:
	.dbline 230
; 		    {
	.dbline 231
; 			delay_ms(20);
	ldi R16,20
	ldi R17,0
	xcall _delay_ms
	.dbline 232
; 			a1=KEY_RD;
	in R24,0x13
	lsr R24
	ori R24,241
	in R25,0x10
	lsr R25
	lsr R25
	ori R25,254
	and R25,R24
	com R25
	std y+0,R25
	.dbline 233
; 			if(a1==a)
	mov R0,R25
	cp R25,R20
	breq X10
	xjmp L284
X10:
	.dbline 234
; 			    {
	.dbline 235
; 				switch(a)
	mov R14,R20
	clr R15
	movw R24,R14
	cpi R24,1
	ldi R30,0
	cpc R25,R30
	breq L130
	cpi R24,2
	ldi R30,0
	cpc R25,R30
	breq L136
	cpi R24,4
	ldi R30,0
	cpc R25,R30
	brne X11
	xjmp L154
X11:
	cpi R24,8
	ldi R30,0
	cpc R25,R30
	brne X12
	xjmp L216
X12:
	xjmp L284
X4:
	.dbline 236
; 				    {
L130:
	.dbline 238
; 					case 0x01:
; 						spk(10,1);
	ldi R18,1
	ldi R16,10
	xcall _spk
	.dbline 239
; 						if(set_flag==0)
	ldd R0,y+1
	tst R0
	brne L131
	.dbline 240
; 						    {
	.dbline 241
; 							TCCR1B=0x00;
	clr R2
	out 0x2e,R2
	.dbline 242
; 							LED_ON;
	sbi 0x18,3
	.dbline 243
; 							set_flag=1;
	clr R0
	inc R0
	std y+1,R0
	.dbline 244
; 							cls();
	xcall _cls
	.dbline 245
; 							locate(1,4);		   //显示“时间调整”
	ldi R18,4
	ldi R16,1
	xcall _locate
	.dbline 246
; 							xs_lcd("SET:");
	ldi R16,<L133
	ldi R17,>L133
	xcall _xs_lcd
	.dbline 247
; 							}
	xjmp L284
L131:
	.dbline 249
; 						else
; 							{
	.dbline 250
; 							TCCR1B=0x04;  		   //开启时钟
	ldi R24,4
	out 0x2e,R24
	.dbline 251
; 							set_flag=0;
	clr R0
	std y+1,R0
	.dbline 252
; 							if(set_bh==1)
	ldd R24,y+2
	cpi R24,1
	breq X13
	xjmp L284
X13:
	.dbline 253
; 							    {
	.dbline 254
; 								write_timer();	   //写入新时间
	xcall _write_timer
	.dbline 255
; 								set_bh=0;
	clr R0
	std y+2,R0
	.dbline 256
; 								}
	.dbline 257
; 							}
	.dbline 258
; 						break;
	xjmp L284
L136:
	.dbline 260
; 					case 0x02:
; 					    if(set_flag==1)
	ldd R24,y+1
	cpi R24,1
	breq X14
	xjmp L284
X14:
	.dbline 261
; 						    {
	.dbline 262
; 							spk(10,1);
	ldi R18,1
	ldi R16,10
	xcall _spk
	.dbline 263
; 							set_time++;					
	inc R22
	.dbline 264
; 							locate(2,2);		   	//显示待调整的数据
	ldi R18,2
	ldi R16,2
	xcall _locate
	.dbline 265
; 							switch(set_time)
	mov R2,R22
	clr R3
	std y+4,R3

⌨️ 快捷键说明

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