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

📄 main.s

📁 AVR单片机ATmega16(L)应用实例—红外线转速仪
💻 S
📖 第 1 页 / 共 2 页
字号:
	ldd R5,z+8
	st -y,R5
	st -y,R4
	st -y,R3
	st -y,R2
	xcall empy32f
	movw R30,R28
	std z+1,R16
	std z+2,R17
	std z+3,R18
	std z+4,R19
	.dbline 126
	movw R30,R28
	ldd R2,z+1
	ldd R3,z+2
	ldd R4,z+3
	ldd R5,z+4
	st -y,R5
	st -y,R4
	st -y,R3
	st -y,R2
	ldi R16,<L25
	ldi R17,>L25
	xcall lpm32
	st -y,R19
	st -y,R18
	st -y,R17
	st -y,R16
	xcall cmp32f
	brlt L23
	movw R30,R28
	ldd R2,z+1
	ldd R3,z+2
	ldd R4,z+3
	ldd R5,z+4
	st -y,R5
	st -y,R4
	st -y,R3
	st -y,R2
	ldi R16,<L25
	ldi R17,>L25
	xcall lpm32
	st -y,R19
	st -y,R18
	st -y,R17
	st -y,R16
	xcall sub32f
	xcall fp2int
	movw R24,R16
	subi R24,0  ; offset = 32768
	sbci R25,128
	movw R10,R24
	xjmp L24
L23:
	movw R30,R28
	ldd R16,z+1
	ldd R17,z+2
	ldd R18,z+3
	ldd R19,z+4
	xcall fp2int
	movw R10,R16
L24:
	sts _DisVal+1,R11
	sts _DisVal,R10
	.dbline 128
; 				  
; 				  disx[3]=(DisVal/1000)%10;disx[2]=(DisVal/100)%10;
	ldi R18,1000
	ldi R19,3
	movw R16,R10
	xcall div16u
	ldi R18,10
	ldi R19,0
	xcall mod16u
	sts _disx+6+1,R17
	sts _disx+6,R16
	.dbline 128
	ldi R18,100
	ldi R19,0
	lds R16,_DisVal
	lds R17,_DisVal+1
	xcall div16u
	ldi R18,10
	ldi R19,0
	xcall mod16u
	sts _disx+4+1,R17
	sts _disx+4,R16
	.dbline 129
; 				  disx[1]=(DisVal%100)/10;disx[0]=DisVal%10;
	ldi R18,100
	ldi R19,0
	lds R16,_DisVal
	lds R17,_DisVal+1
	xcall mod16u
	ldi R18,10
	ldi R19,0
	xcall div16u
	sts _disx+2+1,R17
	sts _disx+2,R16
	.dbline 129
	ldi R18,10
	ldi R19,0
	lds R16,_DisVal
	lds R17,_DisVal+1
	xcall mod16u
	sts _disx+1,R17
	sts _disx,R16
	.dbline 130
; 				  DisplayOneChar(4,1,disx[3]+0x30);//显示数据
	lds R24,_disx+6
	lds R25,_disx+6+1
	adiw R24,48
	std y+0,R24
	ldi R18,1
	ldi R16,4
	xcall _DisplayOneChar
	.dbline 131
; 				  DisplayOneChar(5,1,disx[2]+0x30);
	lds R24,_disx+4
	lds R25,_disx+4+1
	adiw R24,48
	std y+0,R24
	ldi R18,1
	ldi R16,5
	xcall _DisplayOneChar
	.dbline 132
; 				  DisplayOneChar(6,1,disx[1]+0x30);
	lds R24,_disx+2
	lds R25,_disx+2+1
	adiw R24,48
	std y+0,R24
	ldi R18,1
	ldi R16,6
	xcall _DisplayOneChar
	.dbline 133
; 				  DisplayOneChar(7,1,disx[0]+0x30);
	lds R24,_disx
	lds R25,_disx+1
	adiw R24,48
	std y+0,R24
	ldi R18,1
	ldi R16,7
	xcall _DisplayOneChar
	.dbline 134
; 				  DisFlag=0;WorkTime=0;DisTime=0;EndFlag=0;
	clr R2
	sts _DisFlag,R2
	.dbline 134
	clr R3
	sts _WorkTime+1,R3
	sts _WorkTime,R2
	.dbline 134
	sts _DisTime+1,R3
	sts _DisTime,R2
	.dbline 134
	sts _EndFlag,R2
	.dbline 135
; 				  Start=0;cnt=0;
	sts _Start,R2
	.dbline 135
	sts _cnt+1,R3
	sts _cnt,R2
	.dbline 136
; 			}
	xjmp L20
L19:
	.dbline 138
; 			else  		//否则进行取样
; 			{     
L32:
	.dbline 139
; 			do{temp=PIND&0x04;WDR();JS=1;//等待下降沿后下一次测试
	.dbline 139
	in R24,0x10
	andi R24,4
	mov R10,R24
	.dbline 139
	wdr
	.dbline 139
	ldi R24,1
	sts _JS,R24
	.dbline 140
; 			    if(Counter>1500){Counter=0;JS=0;DisFlag=1;cx=0;goto END;}
	ldi R24,1500
	ldi R25,5
	lds R2,_Counter
	lds R3,_Counter+1
	cp R24,R2
	cpc R25,R3
	brsh L35
	.dbline 140
	.dbline 140
	clr R2
	clr R3
	sts _Counter+1,R3
	sts _Counter,R2
	.dbline 140
	sts _JS,R2
	.dbline 140
	ldi R24,1
	sts _DisFlag,R24
	.dbline 140
	sts _cx+1,R3
	sts _cx,R2
	.dbline 140
	xjmp L37
L35:
	.dbline 141
; 			  }
L33:
	.dbline 142
; 			 while(temp==0x04);
	mov R24,R10
	cpi R24,4
	breq L32
	.dbline 143
; 				  BeginFlag=1;Start=1;GICR=0x40;//重开INT0
	ldi R24,1
	sts _BeginFlag,R24
	.dbline 143
	sts _Start,R24
	.dbline 143
	ldi R24,64
	out 0x3b,R24
L37:
	.dbline 144
; 			END:;	  
	.dbline 145
; 			}
L20:
	.dbline 146
L17:
	.dbline 120
	xjmp L16
X0:
	.dbline -2
L15:
	adiw R28,13
	.dbline 0 ; func end
	ret
	.dbsym l time 9 D
	.dbsym l count 5 D
	.dbsym l x 1 D
	.dbsym r temp 10 c
	.dbend
	.area vector(rom, abs)
	.org 16
	jmp _timer2_ovf_isr
	.area text(rom, con, rel)
	.dbfile d:\MYDOCU~1\ac19-1\main.c
	.dbfunc e timer2_ovf_isr _timer2_ovf_isr fV
	.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 151
; 		}
; }		   
; 
; #pragma interrupt_handler timer2_ovf_isr:5
; void timer2_ovf_isr(void)
; {
	.dbline 152
;  TCNT2 = 0x83; //reload counter value
	ldi R24,131
	out 0x24,R24
	.dbline 153
;  SEI();
	sei
	.dbline 154
;  if(BeginFlag==1)
	lds R24,_BeginFlag
	cpi R24,1
	brne L39
	.dbline 155
;   {
	.dbline 156
;    DisTime++;
	lds R24,_DisTime
	lds R25,_DisTime+1
	adiw R24,1
	sts _DisTime+1,R25
	sts _DisTime,R24
	.dbline 157
;    if(DisTime>1300){DisFlag=1;DisTime=0;BeginFlag=0;} //开显示
	ldi R24,1300
	ldi R25,5
	lds R2,_DisTime
	lds R3,_DisTime+1
	cp R24,R2
	cpc R25,R3
	brsh L41
	.dbline 157
	.dbline 157
	ldi R24,1
	sts _DisFlag,R24
	.dbline 157
	clr R2
	clr R3
	sts _DisTime+1,R3
	sts _DisTime,R2
	.dbline 157
	sts _BeginFlag,R2
	.dbline 157
L41:
	.dbline 158
;   } 
L39:
	.dbline 159
;    if(Start==1){WorkTime++;}
	lds R24,_Start
	cpi R24,1
	brne L43
	.dbline 159
	.dbline 159
	lds R24,_WorkTime
	lds R25,_WorkTime+1
	adiw R24,1
	sts _WorkTime+1,R25
	sts _WorkTime,R24
	.dbline 159
L43:
	.dbline 160
;    if(WorkTime==1000){EndFlag=1;}
	lds R24,_WorkTime
	lds R25,_WorkTime+1
	cpi R24,232
	ldi R30,3
	cpc R25,R30
	brne L45
	.dbline 160
	.dbline 160
	ldi R24,1
	sts _EndFlag,R24
	.dbline 160
L45:
	.dbline 161
	lds R24,_JS
	cpi R24,1
	brne L47
	.dbline 161
	lds R24,_Counter
	lds R25,_Counter+1
	adiw R24,1
	sts _Counter+1,R25
	sts _Counter,R24
L47:
	.dbline -2
L38:
	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
	.area vector(rom, abs)
	.org 4
	jmp _int0_isr
	.area text(rom, con, rel)
	.dbfile d:\MYDOCU~1\ac19-1\main.c
	.dbfunc e int0_isr _int0_isr fV
;              y -> R16
	.even
_int0_isr::
	st -y,R2
	st -y,R3
	st -y,R16
	st -y,R24
	st -y,R25
	in R2,0x3f
	st -y,R2
	.dbline -1
	.dbline 167
;    if(JS==1)Counter++;	
;    
; }
; 
; #pragma interrupt_handler int0_isr:2
; void int0_isr(void)
; {
	.dbline 169
; uchar y;
; SEI();	
	sei
	.dbline 171
;  //external interupt on INT0
;  	y=PIND&0x04;
	in R16,0x10
	andi R16,4
	.dbline 172
; 	 JS=0;Counter=0;	
	clr R2
	sts _JS,R2
	.dbline 172
	clr R3
	sts _Counter+1,R3
	sts _Counter,R2
	.dbline 173
; 	 if((Start==1)&&(y==0x00))cnt++;
	lds R24,_Start
	cpi R24,1
	brne L50
	tst R16
	brne L50
	.dbline 173
	lds R24,_cnt
	lds R25,_cnt+1
	adiw R24,1
	sts _cnt+1,R25
	sts _cnt,R24
L50:
	.dbline 175
; 	 //**********************
; 	 if((Start==1)&&(y==0x04))
	lds R24,_Start
	cpi R24,1
	brne L52
	cpi R16,4
	brne L52
	.dbline 176
; 	 {  
	.dbline 177
; 	    cnt++;
	lds R24,_cnt
	lds R25,_cnt+1
	adiw R24,1
	sts _cnt+1,R25
	sts _cnt,R24
	.dbline 178
; 	    if(EndFlag==1){tx=WorkTime;cx=cnt;EndFlag=0;
	lds R24,_EndFlag
	cpi R24,1
	brne L54
	.dbline 178
	.dbline 178
	lds R2,_WorkTime
	lds R3,_WorkTime+1
	sts _tx+1,R3
	sts _tx,R2
	.dbline 178
	lds R2,_cnt
	lds R3,_cnt+1
	sts _cx+1,R3
	sts _cx,R2
	.dbline 178
	clr R2
	sts _EndFlag,R2
	.dbline 179
; 						Start=0;GICR=0x00;}//关闭INT0中断
	sts _Start,R2
	.dbline 179
	out 0x3b,R2
	.dbline 179
L54:
	.dbline 180
L52:
	.dbline -2
L49:
	ld R2,y+
	out 0x3f,R2
	ld R25,y+
	ld R24,y+
	ld R16,y+
	ld R3,y+
	ld R2,y+
	.dbline 0 ; func end
	reti
	.dbsym r y 16 c
	.dbend
	.area bss(ram, con, rel)
	.dbfile d:\MYDOCU~1\ac19-1\main.c
_EndFlag::
	.blkb 1
	.dbsym e EndFlag _EndFlag c
_disx::
	.blkb 8
	.dbsym e disx _disx A[8:4]i
_cx::
	.blkb 2
	.dbsym e cx _cx i
_tx::
	.blkb 2
	.dbsym e tx _tx i
_IntFlag::
	.blkb 1
	.dbsym e IntFlag _IntFlag c
_Flag::
	.blkb 1
	.dbsym e Flag _Flag c
_cnt::
	.blkb 2
	.dbsym e cnt _cnt i
_DisVal::
	.blkb 2
	.dbsym e DisVal _DisVal i
_Counter::
	.blkb 2
	.dbsym e Counter _Counter i
_DisTime::
	.blkb 2
	.dbsym e DisTime _DisTime i
_WorkTime::
	.blkb 2
	.dbsym e WorkTime _WorkTime i
_WorkFlag::
	.blkb 1
	.dbsym e WorkFlag _WorkFlag c
	.area lit(rom, con, rel)
L25:
	.word 0x0,0x4700
L22:
	.word 0x6000,0x46ea
L21:
	.word 0x0,0x4000

⌨️ 快捷键说明

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