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

📄 time.s

📁 ATmegal128的混合中断编程
💻 S
📖 第 1 页 / 共 2 页
字号:
	.module time.c
	.area data(ram, con, rel)
_sound::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile C:\work\mega128\mix_exp\time.c
	.dbsym e sound _sound c
	.area text(rom, con, rel)
	.dbfile C:\work\mega128\mix_exp\time.c
	.dbfunc e timer0_init _timer0_init fV
	.even
_timer0_init::
	.dbline -1
	.dbline 14
; #include<iom128v.h>
; unsigned char second;
; unsigned char minute;
; unsigned char hour;
; unsigned char time[9];
; unsigned char sound=0;
; extern unsigned char keytime;
; extern unsigned char keypad(void);
; extern void cls(unsigned x,unsigned y,unsigned char high,unsigned char width);
; extern void asc_tran(unsigned char x,unsigned char y,unsigned char *asc_p);
; extern void ocmj_write(unsigned char data);
; extern void hz_tran(unsigned char x,unsigned char y,unsigned char *hz_p);
; void timer0_init(void)
; {
	.dbline 15
;  TCCR0 = 0x00; //stop
	clr R2
	out 0x33,R2
	.dbline 16
;  ASSR = 0x08; //set async mode
	ldi R24,8
	out 0x30,R24
	.dbline 17
;  TCNT0 = 0x00; //set count
	out 0x32,R2
	.dbline 18
;  TCCR0 = 0x05; //start timer
	ldi R24,5
	out 0x33,R24
	.dbline -2
	.dbline 19
; }
L1:
	.dbline 0 ; func end
	ret
	.dbend
	.area vector(rom, abs)
	.org 64
	jmp _timer0_ovf_isr
	.area text(rom, con, rel)
	.dbfile C:\work\mega128\mix_exp\time.c
	.dbfunc e timer0_ovf_isr _timer0_ovf_isr fV
	.even
_timer0_ovf_isr::
	st -y,R2
	st -y,R24
	st -y,R25
	in R2,0x3f
	st -y,R2
	.dbline -1
	.dbline 22
; #pragma interrupt_handler timer0_ovf_isr:17
; void timer0_ovf_isr(void)
; {
	.dbline 23
;  TCNT0 = 0x00; //reload counter value
	clr R2
	out 0x32,R2
	.dbline 24
;  keytime++;
	lds R24,_keytime
	subi R24,255    ; addi 1
	sts _keytime,R24
	.dbline 25
;  if(second>=59)
	lds R24,_second
	cpi R24,59
	brlo L3
	.dbline 26
;    {
	.dbline 27
;     second=0;
	sts _second,R2
	.dbline 28
; 	if(minute>=59)
	lds R24,_minute
	cpi R24,59
	brlo L5
	.dbline 29
; 	  {
	.dbline 30
; 	   minute=0;
	sts _minute,R2
	.dbline 31
; 	   if(hour>=23)
	lds R24,_hour
	cpi R24,23
	brlo L7
	.dbline 32
; 	     {
	.dbline 33
; 		  hour=0;
	sts _hour,R2
	.dbline 34
; 		 }
	xjmp L4
L7:
	.dbline 36
; 	   else
; 	     {
	.dbline 37
; 		  hour++;
	lds R24,_hour
	subi R24,255    ; addi 1
	sts _hour,R24
	.dbline 38
; 		 }	 
	.dbline 39
; 	  }
	xjmp L4
L5:
	.dbline 41
; 	else
; 	  {
	.dbline 42
; 	   minute++; 
	lds R24,_minute
	subi R24,255    ; addi 1
	sts _minute,R24
	.dbline 43
; 	  }  
	.dbline 44
;    }
	xjmp L4
L3:
	.dbline 46
;  else
;    {
	.dbline 47
;     second++;
	lds R24,_second
	subi R24,255    ; addi 1
	sts _second,R24
	.dbline 48
;    }  
L4:
	.dbline 49
;  if((PIND&0b00100000)==0) sound=1;  
	sbic 0x10,5
	rjmp L9
	.dbline 49
	ldi R24,1
	sts _sound,R24
L9:
	.dbline 50
;  if (minute==0)
	lds R2,_minute
	tst R2
	brne L11
	.dbline 51
;      {
	.dbline 52
; 	  if (sound==0)
	lds R2,_sound
	tst R2
	brne L13
	.dbline 53
; 	      TIMSK|=0x40;
	in R24,0x37
	ori R24,64
	out 0x37,R24
	xjmp L12
L13:
	.dbline 55
; 	  else
; 	      TIMSK&=0xbf;	  
	in R24,0x37
	andi R24,191
	out 0x37,R24
	.dbline 56
; 	 } 
	xjmp L12
L11:
	.dbline 58
	.dbline 59
	in R24,0x37
	andi R24,191
	out 0x37,R24
	.dbline 60
	clr R2
	sts _sound,R2
	.dbline 61
L12:
	.dbline -2
	.dbline 62
;  else
;      {
; 	  TIMSK&=0xbf;
; 	  sound=0;
; 	 }	   
; }
L2:
	ld R2,y+
	out 0x3f,R2
	ld R25,y+
	ld R24,y+
	ld R2,y+
	.dbline 0 ; func end
	reti
	.dbend
	.dbfunc e timetoasc _timetoasc fV
;           temp -> R20
;              i -> R22
	.even
_timetoasc::
	xcall push_gset2
	sbiw R28,3
	.dbline -1
	.dbline 64
; void timetoasc(void)
;    {
	.dbline 67
;     unsigned char i;
; 	unsigned char temp;
; 	temp=hour;
	lds R20,_hour
	.dbline 68
;     for(i=0;i<2;i++)
	clr R22
	xjmp L19
L16:
	.dbline 69
	.dbline 70
	mov R2,R22
	clr R3
	ldi R30,1
	ldi R31,0
	sub R30,R2
	sbc R31,R3
	ldi R24,<_time
	ldi R25,>_time
	add R30,R24
	adc R31,R25
	ldi R17,10
	mov R16,R20
	xcall mod8u
	mov R24,R16
	subi R24,208    ; addi 48
	std z+0,R24
	.dbline 71
	ldi R17,10
	mov R16,R20
	xcall div8u
	mov R20,R16
	.dbline 72
L17:
	.dbline 68
	inc R22
L19:
	.dbline 68
	cpi R22,2
	brlo L16
	.dbline 73
; 	   {
; 	    time[1-i]=temp%10+0x30;
; 		temp=temp/10;
; 	   }
; 	time[2]=':';   
	ldi R24,58
	sts _time+2,R24
	.dbline 74
; 	temp=minute;
	lds R20,_minute
	.dbline 75
;     for(i=0;i<2;i++)
	clr R22
	xjmp L24
L21:
	.dbline 76
	.dbline 77
	mov R2,R22
	clr R3
	ldi R30,4
	ldi R31,0
	sub R30,R2
	sbc R31,R3
	ldi R24,<_time
	ldi R25,>_time
	add R30,R24
	adc R31,R25
	ldi R17,10
	mov R16,R20
	xcall mod8u
	mov R24,R16
	subi R24,208    ; addi 48
	std z+0,R24
	.dbline 78
	ldi R17,10
	mov R16,R20
	xcall div8u
	mov R20,R16
	.dbline 79
L22:
	.dbline 75
	inc R22
L24:
	.dbline 75
	cpi R22,2
	brlo L21
	.dbline 80
; 	   {
; 	    time[4-i]=temp%10+0x30;
; 		temp=temp/10;
; 	   }
; 	time[5]=':';
	ldi R24,58
	sts _time+5,R24
	.dbline 81
; 	temp=second;
	lds R20,_second
	.dbline 82
;     for(i=0;i<2;i++)
	clr R22
	xjmp L29
L26:
	.dbline 83
	.dbline 84
	mov R2,R22
	clr R3
	ldi R30,7
	ldi R31,0
	sub R30,R2
	sbc R31,R3
	ldi R24,<_time
	ldi R25,>_time
	add R30,R24
	adc R31,R25
	ldi R17,10
	mov R16,R20
	xcall mod8u
	mov R24,R16
	subi R24,208    ; addi 48
	std z+0,R24
	.dbline 85
	ldi R17,10
	mov R16,R20
	xcall div8u
	mov R20,R16
	.dbline 86
L27:
	.dbline 82
	inc R22
L29:
	.dbline 82
	cpi R22,2
	brlo L26
	.dbline 87
; 	   {
; 	    time[7-i]=temp%10+0x30;
; 		temp=temp/10;
; 	   }
; 	time[8]=0;
	clr R2
	sts _time+8,R2
	.dbline 88
; 	cls(0,3,1,8);
	ldi R24,8
	std y+2,R24
	ldi R24,1
	std y+0,R24
	ldi R18,3
	ldi R19,0
	clr R16
	clr R17
	xcall _cls
	.dbline 89
; 	asc_tran(4,52,time);
	ldi R24,<_time
	ldi R25,>_time
	std y+0,R24
	std y+1,R25
	ldi R18,52
	ldi R16,4
	xcall _asc_tran
	.dbline -2
	.dbline 90
;    }
L15:
	adiw R28,3
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r temp 20 c
	.dbsym r i 22 c
	.dbend
	.dbfunc e timer2_init _timer2_init fV
	.even
_timer2_init::
	.dbline -1
	.dbline 92
; void timer2_init(void)
; {
	.dbline 93
;  TCCR2 = 0x00; 
	clr R2
	out 0x25,R2
	.dbline 94
;  TCNT2 = 0xe1; 
	ldi R24,225
	out 0x24,R24
	.dbline 95
;  TCCR2 = 0x03;
	ldi R24,3
	out 0x25,R24
	.dbline -2
	.dbline 96
; }
L31:
	.dbline 0 ; func end
	ret
	.dbend
	.area vector(rom, abs)
	.org 40
	jmp _timer2_ovf_isr
	.area text(rom, con, rel)
	.dbfile C:\work\mega128\mix_exp\time.c
	.area bss(ram, con, rel)
	.dbfile C:\work\mega128\mix_exp\time.c
L33:
	.blkb 2
	.area text(rom, con, rel)
	.dbfile C:\work\mega128\mix_exp\time.c
	.dbfunc e timer2_ovf_isr _timer2_ovf_isr fV
	.dbsym s i L33 i
	.even
_timer2_ovf_isr::
	st -y,R2
	st -y,R3
	st -y,R24
	st -y,R25
	st -y,R30
	in R2,0x3f
	st -y,R2
	.dbline -1
	.dbline 99
; #pragma interrupt_handler timer2_ovf_isr:11
; void timer2_ovf_isr(void)
; {
	.dbline 101
;   static unsigned int i;
;   TCNT2 = 0xe1; //reload counter value
	ldi R24,225
	out 0x24,R24
	.dbline 102
;   i++;
	lds R24,L33
	lds R25,L33+1
	adiw R24,1
	sts L33+1,R25
	sts L33,R24
	.dbline 103
;   if(i<800)
	cpi R24,32
	ldi R30,3
	cpc R25,R30
	brsh L34
	.dbline 104
;      {
	.dbline 105
;       PORTB^=0x80;
	ldi R24,128
	ldi R25,0
	in R2,0x18
	clr R3
	eor R2,R24
	eor R3,R25
	out 0x18,R2
	.dbline 106
; 	 }
L34:
	.dbline 107
	ldi R24,1600
	ldi R25,6
	lds R2,L33
	lds R3,L33+1
	cp R24,R2
	cpc R25,R3
	brsh L36
	.dbline 108
	clr R2
	clr R3
	sts L33+1,R3
	sts L33,R2
L36:
	.dbline -2
	.dbline 109
;   if(i>1600)
;       i=0; 	  	
; }   
L32:
	ld R2,y+
	out 0x3f,R2
	ld R30,y+
	ld R25,y+
	ld R24,y+
	ld R3,y+
	ld R2,y+
	.dbline 0 ; func end
	reti
	.dbend
	.dbfunc e timecal _timecal fV

⌨️ 快捷键说明

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