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

📄 ac15-4.s

📁 AVR学习资料
💻 S
📖 第 1 页 / 共 2 页
字号:
; 	  Wait();
	in R2,0x36
	sbrs R2,7
	rjmp L68
	.dbline 218
	.dbline 218
	.dbline 219
; 	  if(TestAck()!=MT_DATA_ACK) return 1;
	in R24,0x1
	andi R24,248
	cpi R24,40
	breq L71
	.dbline 219
	ldi R16,1
	xjmp L57
L71:
	.dbline 220
; 	  Write8Bit(Wdata);
	.dbline 220
	out 0x3,R20
	.dbline 220
	ldi R24,132
	out 0x36,R24
	.dbline 220
	.dbline 220
	.dbline 221
L73:
	.dbline 221
L74:
	.dbline 221
; 	  Wait();
	in R2,0x36
	sbrs R2,7
	rjmp L73
	.dbline 221
	.dbline 221
	.dbline 222
; 	  if(TestAck()!=MT_DATA_ACK) return 1;	
	in R24,0x1
	andi R24,248
	cpi R24,40
	breq L76
	.dbline 222
	ldi R16,1
	xjmp L57
L76:
	.dbline 223
; 	  Stop();
	ldi R24,148
	out 0x36,R24
	.dbline 224
;  	  delay_ms(10);
	ldi R16,10
	ldi R17,0
	xcall _delay_ms
	.dbline 225
; 	  return 0;
	clr R16
	.dbline -2
L57:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r Wdata 20 c
	.dbsym r RomAddress 22 c
	.dbend
	.dbfunc e timer1_init _timer1_init fV
	.even
_timer1_init::
	.dbline -1
	.dbline 230
; }
; 
; /*****************定时器1初始化*************/
; void timer1_init(void)
; {
	.dbline 231
;  TCNT1H = 0xF3; //setup
	ldi R24,243
	out 0x2d,R24
	.dbline 232
;  TCNT1L = 0xCB;
	ldi R24,203
	out 0x2c,R24
	.dbline 233
;  TCCR1B = 0x04; //start Timer
	ldi R24,4
	out 0x2e,R24
	.dbline -2
L78:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e main _main fV
;        key_val -> R22
	.even
_main::
	sbiw R28,2
	.dbline -1
	.dbline 238
; }
; 
; //******************************************
; void main(void)				
; {
	.dbline 240
;  	 uchar key_val;	
; 	 init_devices();
	xcall _init_devices
	.dbline 241
;     delay_ms(400);			
	ldi R16,400
	ldi R17,1
	xcall _delay_ms
	.dbline 242
; 	InitLcd();		
	xcall _InitLcd
	.dbline 243
; 	LcdWriteCommand(0x01,1); 
	ldi R18,1
	ldi R16,1
	xcall _LcdWriteCommand
	.dbline 244
; 	LcdWriteCommand(0x0c,1); 
	ldi R18,1
	ldi R16,12
	xcall _LcdWriteCommand
	.dbline 245
; 	ePutstr(0,0,str0);  
	ldi R24,<_str0
	ldi R25,>_str0
	std y+1,R25
	std y+0,R24
	clr R18
	clr R16
	xcall _ePutstr
	.dbline 246
; 	delay_ms(10);
	ldi R16,10
	ldi R17,0
	xcall _delay_ms
	.dbline 247
; 	ePutstr(0,1,str1);  
	ldi R24,<_str1
	ldi R25,>_str1
	std y+1,R25
	std y+0,R24
	ldi R18,1
	clr R16
	xcall _ePutstr
	.dbline 248
; 	delay_ms(10);
	ldi R16,10
	ldi R17,0
	xcall _delay_ms
	xjmp L81
L80:
	.dbline 251
; 	/********************************************/
; 		while(1)             
; 		{
	.dbline 252
; 		   DisplayOneChar(6,0,(time1.hour/10)+0x30);
	ldi R17,10
	lds R16,_time1
	xcall div8u
	mov R24,R16
	subi R24,208    ; addi 48
	std y+0,R24
	clr R18
	ldi R16,6
	xcall _DisplayOneChar
	.dbline 253
; 		   delay_ms(10);
	ldi R16,10
	ldi R17,0
	xcall _delay_ms
	.dbline 254
; 		   DisplayOneChar(7,0,(time1.hour%10)+0x30);
	ldi R17,10
	lds R16,_time1
	xcall mod8u
	mov R24,R16
	subi R24,208    ; addi 48
	std y+0,R24
	clr R18
	ldi R16,7
	xcall _DisplayOneChar
	.dbline 255
; 		   delay_ms(10);
	ldi R16,10
	ldi R17,0
	xcall _delay_ms
	.dbline 256
; 		   DisplayOneChar(9,0,(time1.min/10)+0x30);
	ldi R17,10
	lds R16,_time1+1
	xcall div8u
	mov R24,R16
	subi R24,208    ; addi 48
	std y+0,R24
	clr R18
	ldi R16,9
	xcall _DisplayOneChar
	.dbline 257
; 		   delay_ms(10);
	ldi R16,10
	ldi R17,0
	xcall _delay_ms
	.dbline 258
; 		   DisplayOneChar(10,0,(time1.min%10)+0x30);
	ldi R17,10
	lds R16,_time1+1
	xcall mod8u
	mov R24,R16
	subi R24,208    ; addi 48
	std y+0,R24
	clr R18
	ldi R16,10
	xcall _DisplayOneChar
	.dbline 259
; 		   delay_ms(10);
	ldi R16,10
	ldi R17,0
	xcall _delay_ms
	.dbline 260
; 		   DisplayOneChar(12,0,(time1.sec/10)+0x30);
	ldi R17,10
	lds R16,_time1+2
	xcall div8u
	mov R24,R16
	subi R24,208    ; addi 48
	std y+0,R24
	clr R18
	ldi R16,12
	xcall _DisplayOneChar
	.dbline 261
; 		   delay_ms(10);
	ldi R16,10
	ldi R17,0
	xcall _delay_ms
	.dbline 262
; 		   DisplayOneChar(13,0,(time1.sec%10)+0x30);
	ldi R17,10
	lds R16,_time1+2
	xcall mod8u
	mov R24,R16
	subi R24,208    ; addi 48
	std y+0,R24
	clr R18
	ldi R16,13
	xcall _DisplayOneChar
	.dbline 263
; 		   delay_ms(10);
	ldi R16,10
	ldi R17,0
	xcall _delay_ms
	.dbline 265
; 		   
; 	   	   DisplayOneChar(7,1,(time2.hour/10)+0x30);
	ldi R17,10
	lds R16,_time2
	xcall div8u
	mov R24,R16
	subi R24,208    ; addi 48
	std y+0,R24
	ldi R18,1
	ldi R16,7
	xcall _DisplayOneChar
	.dbline 266
; 		   delay_ms(10);
	ldi R16,10
	ldi R17,0
	xcall _delay_ms
	.dbline 267
; 		   DisplayOneChar(8,1,(time2.hour%10)+0x30);
	ldi R17,10
	lds R16,_time2
	xcall mod8u
	mov R24,R16
	subi R24,208    ; addi 48
	std y+0,R24
	ldi R18,1
	ldi R16,8
	xcall _DisplayOneChar
	.dbline 268
; 		   delay_ms(10);
	ldi R16,10
	ldi R17,0
	xcall _delay_ms
	.dbline 269
; 		   DisplayOneChar(10,1,(time2.min/10)+0x30);
	ldi R17,10
	lds R16,_time2+1
	xcall div8u
	mov R24,R16
	subi R24,208    ; addi 48
	std y+0,R24
	ldi R18,1
	ldi R16,10
	xcall _DisplayOneChar
	.dbline 270
; 		   delay_ms(10);
	ldi R16,10
	ldi R17,0
	xcall _delay_ms
	.dbline 271
;     	   DisplayOneChar(11,1,(time2.min%10)+0x30);
	ldi R17,10
	lds R16,_time2+1
	xcall mod8u
	mov R24,R16
	subi R24,208    ; addi 48
	std y+0,R24
	ldi R18,1
	ldi R16,11
	xcall _DisplayOneChar
	.dbline 272
; 		   delay_ms(10);
	ldi R16,10
	ldi R17,0
	xcall _delay_ms
	.dbline 273
; 		   key_val=scan_key();	
	xcall _scan_key
	mov R22,R16
	.dbline 274
; 		   switch(key_val)		
	mov R20,R22
	clr R21
	cpi R20,223
	ldi R30,0
	cpc R21,R30
	brne X2
	xjmp L100
X2:
	ldi R24,223
	ldi R25,0
	cp R24,R20
	cpc R25,R21
	brlt L119
L118:
	cpi R20,127
	ldi R30,0
	cpc R21,R30
	brne X3
	xjmp L111
X3:
	cpi R20,127
	ldi R30,0
	cpc R21,R30
	brge X4
	xjmp L90
X4:
L120:
	cpi R20,191
	ldi R30,0
	cpc R21,R30
	brne X5
	xjmp L103
X5:
	xjmp L90
L119:
	cpi R20,247
	ldi R30,0
	cpc R21,R30
	brne X6
	xjmp L116
X6:
	ldi R24,247
	ldi R25,0
	cp R24,R20
	cpc R25,R21
	brlt L122
L121:
	cpi R20,239
	ldi R30,0
	cpc R21,R30
	breq L92
	xjmp L90
L122:
	cpi R20,251
	ldi R30,0
	cpc R21,R30
	brne X7
	xjmp L114
X7:
	xjmp L90
X0:
	.dbline 275
; 	   	   {				
L92:
	.dbline 276
; 	   	   	case 0xef:time1.min++;
	lds R24,_time1+1
	subi R24,255    ; addi 1
	sts _time1+1,R24
	.dbline 277
; 			          if(time1.min>59){time1.min=0;
	ldi R24,59
	lds R2,_time1+1
	cp R24,R2
	brlo X8
	xjmp L90
X8:
	.dbline 277
	.dbline 277
	clr R2
	sts _time1+1,R2
	.dbline 278
; 					                  if(time1.hour<23)time1.hour++;
	lds R24,_time1
	cpi R24,23
	brlo X9
	xjmp L90
X9:
	.dbline 278
	subi R24,255    ; addi 1
	sts _time1,R24
	.dbline 279
; 								      }break; 
	.dbline 279
	xjmp L90
L100:
	.dbline 280
; 	   		case 0xdf:time1.hour++;if(time1.hour>23)time1.hour=0;break;	
	lds R24,_time1
	subi R24,255    ; addi 1
	sts _time1,R24
	.dbline 280
	ldi R24,23
	lds R2,_time1
	cp R24,R2
	brlo X10
	xjmp L90
X10:
	.dbline 280
	clr R2
	sts _time1,R2
	.dbline 280
	xjmp L90
L103:
	.dbline 282
; 											
; 	   		case 0xbf:time2.min++;
	lds R24,_time2+1
	subi R24,255    ; addi 1
	sts _time2+1,R24
	.dbline 283
; 			          if(time2.min>59){time2.min=0;
	ldi R24,59
	lds R2,_time2+1
	cp R24,R2
	brlo X11
	xjmp L90
X11:
	.dbline 283
	.dbline 283
	clr R2
	sts _time2+1,R2
	.dbline 284
; 					                  if(time2.hour<23)time2.hour++;
	lds R24,_time2
	cpi R24,23
	brlo X12
	xjmp L90
X12:
	.dbline 284
	subi R24,255    ; addi 1
	sts _time2,R24
	.dbline 285
; 								      }break; 
	.dbline 285
	xjmp L90
L111:
	.dbline 286
; 	   		case 0x7f:time2.hour++;if(time2.hour>23)time2.hour=0;break;	
	lds R24,_time2
	subi R24,255    ; addi 1
	sts _time2,R24
	.dbline 286
	ldi R24,23
	lds R2,_time2
	cp R24,R2
	brsh L90
	.dbline 286
	clr R2
	sts _time2,R2
	.dbline 286
	xjmp L90
L114:
	.dbline 289
; 											
; 			//*************************
; 			case 0xfb:i2c_Write(11,time2.hour); 
	lds R18,_time2
	ldi R16,11
	xcall _i2c_Write
	.dbline 290
; 				 delay_ms(10);
	ldi R16,10
	ldi R17,0
	xcall _delay_ms
	.dbline 291
; 				 i2c_Write(12,time2.min);		
	lds R18,_time2+1
	ldi R16,12
	xcall _i2c_Write
	.dbline 292
; 				 delay_ms(10);
	ldi R16,10
	ldi R17,0
	xcall _delay_ms
	.dbline 293
; 				 DisplayOneChar(13,1,0x57); 
	ldi R24,87
	std y+0,R24
	ldi R18,1
	ldi R16,13
	xcall _DisplayOneChar
	.dbline 294
; 				 delay_ms(10);break;	
	ldi R16,10
	ldi R17,0
	xcall _delay_ms
	.dbline 294
	xjmp L90
L116:
	.dbline 295
; 	   		case 0xf7:time2.hour=i2c_Read(11); 
	ldi R16,11
	xcall _i2c_Read
	sts _time2,R16
	.dbline 296
; 				 delay_ms(10);
	ldi R16,10
	ldi R17,0
	xcall _delay_ms
	.dbline 297
; 				 time2.min=i2c_Read(12);
	ldi R16,12
	xcall _i2c_Read
	sts _time2+1,R16
	.dbline 298
; 				 delay_ms(10);
	ldi R16,10
	ldi R17,0
	xcall _delay_ms
	.dbline 299
; 				 DisplayOneChar(13,1,0x52); 
	ldi R24,82
	std y+0,R24
	ldi R18,1
	ldi R16,13
	xcall _DisplayOneChar
	.dbline 300
; 				 delay_ms(10);break;	
	ldi R16,10
	ldi R17,0
	xcall _delay_ms
	.dbline 300
	.dbline 301
; 	   		default:break;		
L90:
	.dbline 303
	ldi R16,300
	ldi R17,1
	xcall _delay_ms
	.dbline 304
	ldi R24,32
	std y+0,R24
	ldi R18,1
	ldi R16,13
	xcall _DisplayOneChar
	.dbline 305
	ldi R16,10
	ldi R17,0
	xcall _delay_ms
	.dbline 307
L81:
	.dbline 250
	xjmp L80
X1:
	.dbline -2
L79:
	adiw R28,2
	.dbline 0 ; func end
	ret
	.dbsym r key_val 22 c
	.dbend
	.area vector(rom, abs)
	.org 32
	jmp _timer1_ovf_isr
	.area text(rom, con, rel)
	.dbfile d:\MYDOCU~1\ac15-4\ac15-4.c
	.dbfunc e timer1_ovf_isr _timer1_ovf_isr fV
	.even
_timer1_ovf_isr::
	st -y,R2
	st -y,R3
	st -y,R24
	st -y,R25
	in R2,0x3f
	st -y,R2
	.dbline -1
	.dbline 312
; 	   		}					
; 			delay_ms(300); 
; 			DisplayOneChar(13,1,0x20); 
; 			delay_ms(10);
; 						
;   		 }				
; }		   
; /***********************定时器T1中断子函数**********************/
; #pragma interrupt_handler timer1_ovf_isr:9
; void timer1_ovf_isr(void)
; {
	.dbline 314
;  //TIMER1 has overflowed
;  TCNT1H = 0xF3; //reload counter high value
	ldi R24,243
	out 0x2d,R24
	.dbline 315
;  TCNT1L = 0xCB; //reload counter low value
	ldi R24,203
	out 0x2c,R24
	.dbline 316
;  if(++time1.dida>=10){time1.dida=0;time1.sec++;}
	lds R24,_time1+3
	subi R24,255    ; addi 1
	mov R2,R24
	sts _time1+3,R2
	cpi R24,10
	brlo L124
	.dbline 316
	.dbline 316
	clr R2
	sts _time1+3,R2
	.dbline 316
	lds R24,_time1+2
	subi R24,255    ; addi 1
	sts _time1+2,R24
	.dbline 316
L124:
	.dbline 317
;  if(time1.sec>=60){time1.sec=0;time1.min++;}
	lds R24,_time1+2
	cpi R24,60
	brlo L129
	.dbline 317
	.dbline 317
	clr R2
	sts _time1+2,R2
	.dbline 317
	lds R24,_time1+1
	subi R24,255    ; addi 1
	sts _time1+1,R24
	.dbline 317
L129:
	.dbline 318
;  if(time1.min>=60){time1.min=0;time1.hour++;}
	lds R24,_time1+1
	cpi R24,60
	brlo L134
	.dbline 318
	.dbline 318
	clr R2
	sts _time1+1,R2
	.dbline 318
	lds R24,_time1
	subi R24,255    ; addi 1
	sts _time1,R24
	.dbline 318
L134:
	.dbline 319
;  if(time1.hour>=24){time1.hour=0;}
	lds R24,_time1
	cpi R24,24
	brlo L138
	.dbline 319
	.dbline 319
	clr R2
	sts _time1,R2
	.dbline 319
L138:
	.dbline 321
;  //-------------------
;  if((time1.hour==time2.hour)&&(time1.min==time2.min))LED_0; 
	lds R2,_time2
	lds R3,_time1
	cp R3,R2
	brne L140
	lds R2,_time2+1
	lds R3,_time1+1
	cp R3,R2
	brne L140
	.dbline 321
	cbi 0x18,7
	xjmp L141
L140:
	.dbline 322
	sbi 0x18,7
L141:
	.dbline -2
L123:
	ld R2,y+
	out 0x3f,R2
	ld R25,y+
	ld R24,y+
	ld R3,y+
	ld R2,y+
	.dbline 0 ; func end
	reti
	.dbend
	.dbfunc e init_devices _init_devices fV
	.even
_init_devices::
	.dbline -1
	.dbline 326
;  else LED_1;
; }
; /*********************************************/
; void init_devices(void)
; {
	.dbline 328
;  //stop errant interrupts until set up
;  CLI(); //disable all interrupts
	cli
	.dbline 329
;  port_init();
	xcall _port_init
	.dbline 330
;  timer1_init();
	xcall _timer1_init
	.dbline 331
;  MCUCR = 0x00;
	clr R2
	out 0x35,R2
	.dbline 332
;  GICR  = 0x00;
	out 0x3b,R2
	.dbline 333
;  TIMSK = 0x04; //timer interrupt sources
	ldi R24,4
	out 0x39,R24
	.dbline 334
;  SEI(); //re-enable interrupts
	sei
	.dbline -2
L144:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e delay_ms _delay_ms fV
;           time -> R20,R21
	.even
_delay_ms::
	xcall push_gset1
	movw R20,R16
	.dbline -1
	.dbline 340
;  //all peripherals are now initialized
; }
; 
; /*******************器件初始化********************/
; void delay_ms(unsigned int time)
; 	 {
	xjmp L147
L146:
	.dbline 342
	.dbline 343
	ldi R16,1000
	ldi R17,3
	xcall _delay_us
	.dbline 344
	subi R20,1
	sbci R21,0
	.dbline 345
L147:
	.dbline 341
; 	  while(time!=0)
	cpi R20,0
	cpc R20,R21
	brne L146
X13:
	.dbline -2
L145:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r time 20 i
	.dbend
	.dbfunc e delay_us _delay_us fV
;           time -> R16,R17
	.even
_delay_us::
	.dbline -1
	.dbline 350
; 	  	  {		
; 		   delay_us(1000);
; 		   time--;
; 		  }
; 	 }
; 	 					
; /*****************廷时子函数************************/
; void delay_us(int time)
; 	 {     
L150:
	.dbline 352
;   	  do
; 	  	{
	.dbline 353
; 		 time--;
	subi R16,1
	sbci R17,0
	.dbline 354
; 		}	
L151:
	.dbline 355
;   	  while (time>1);
	ldi R24,1
	ldi R25,0
	cp R24,R16
	cpc R25,R17
	brlt L150
	.dbline -2
L149:
	.dbline 0 ; func end
	ret
	.dbsym r time 16 I
	.dbend
	.area bss(ram, con, rel)
	.dbfile d:\MYDOCU~1\ac15-4\ac15-4.c
_time2::
	.blkb 4
	.dbstruct 0 4 date
	.dbfield 0 hour c
	.dbfield 1 min c
	.dbfield 2 sec c
	.dbfield 3 dida c
	.dbend
	.dbsym e time2 _time2 S[date]
_time1::
	.blkb 4
	.dbsym e time1 _time1 S[date]

⌨️ 快捷键说明

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