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

📄 ht46r47.asm

📁 一个用电磁炉测试式
💻 ASM
字号:
;MCU=HT46R47
;PB3/AN3=I ;PB2/AN2=TOPRT ;PB1/AN3=IGBTRT ;PBO/AN0=U 
;PD0/PWM=ENABLE ;PA5/INT=ENABLE
;pa0=hc164_ab ;pa1=hc164_clk
;600w-1200w
	include 	"Ht46r47.inc"
	.nolist

	timx		equ		00fh			;延时外时间
	timy		equ		002h			;延时内时间
	tmrdata		equ		0feh			;定时中断时间
	sdata		equ		040h			;设定一秒钟的计数
	keytimdata	equ		007h			;设定键盘去抖动值
	
	hcab		equ		pa.7
	hcabc		equ		pac.7
	hcclk		equ		pa.6
	interrbit	equ		pa.5
	interrbitc	equ		pac.5
	lockbit		equ		pa.4
	q1bit		equ		pa.3
	q2bit		equ		pa.2
	q3bit		equ		pa.1
	q4bit		equ		pa.0
;///////////////////////////////////////////////////////////////////////
	data .section 'data'
		timerx			db ?			;延时外时间寄存器
		timery			db ?			;延时内时间寄存器
		
		addata			db ?			;比较回来的A/D数据
		
		dataa			db ?			;用作工作寄存
		datab			db ?			;用作中断工作寄存
		datac			db ?			;用作中断重要数据寄存
		datad			db ?			;用作中断重要数据寄存
		
		hc164data		db ?			;要发出164的数据
		s				db ?
		
		keyc			db ?
		keyinbit		db ?
		keytimer		db ?
		keyinerrbit		dbit	
		
		led1			db ?
		led2			db ?
		led3			db ?
		led4			db ?
		leddata			db ?
		ledc			db ?
		interrdata		db ?	
		
		pwmdata			db ?	
	
;/////////////////////////////////////////////////////////////////////	
	code .section  'code'
	.nolist					
	ORG     00H	            
 			JMP     reset         		;程式开始 	
	ORG     04H	            
			jmp		interrup 			;外部中断向量       
	ORG     08H             	      
    		jmp     timeover  			;定时中断向量     	
	ORG     0CH	            
			RETI	                	;A/D中断向量
;//////////////////////////////////////////////////////////////////////
	ORG		010H
	reset:
			mov		a,03h				;int and timer err
			mov		intc,a				;设置中断许可

			;mov		a,87h 
			;mov		tmrc,a
			;mov		a,20h
			;mov		tmr,a
			;set		ton					;打开定时器
			
			clr			pac				;设置口
			clr			lockbit			
			
			clr				pdc.0
			clr				pd.0
			
			clr				pwm			;开pwm
			
			clr			addata			;清用户数据	

			mov			a,01h
			mov			keyc,a
			mov			ledc,a
			clr			led3
			clr			keyinerrbit

			mov     	a,20h  			
    		mov     	adcr,a
			mov			a,01h	  		
			mov			acsr,a
			mov			a,045h
			mov			pwmdata,a
			mov			pwm,a
			clr			interrdata
			set			pd.0
;////////////////////////////main////////////////////////////////////
	main:
			call		timerd	
			call		keyin
			call		ledgan
			call		keyinerr
			
			sdz			s
			jmp			endtimerr
			mov			a,sdata
			mov			s,a
			sz			led3
			jmp			szled35
			jmp			endtimerr
	szled35:
			mov			a,led3
			sub			a,05h
			sz			z
			jmp			endtimerr
			mov			a,addata
			mov			leddata,a
			clr			addata
	endtimerr:		
			jmp			main
;//////////////////////////time中断程式/////////////////////////////////
	timeover:
			mov			datac,a
			mov			a,status
			mov			datad,a
			;mov			a,tmrdata
			;mov			tmr,a
			;sdz			s
			;jmp			endtimerr
			;mov			a,sdata
			;mov			s,a
			;sz			led3
			;jmp			szled35
			;jmp			endtimerr
	;szled35:
			;mov			a,led3
			;sub			a,05h
			;sz			z
			;jmp			endtimerr
			;mov			a,addata
			;mov			leddata,a
			;clr			addata
	;endtimerr:		
			mov			a,datad
			mov			status,a
			mov			a,datac
		reti
;//////////////////////////int中断程式/////////////////////////////////
	interrup:
			nop
			inc			interrdata
			nop
		reti
;////////////////////////A/D转换程式///////////////////////////////
	alladcon		proc		
			clr			emi
			clr			start			
			set			start			
			clr			start			
			nop
	alladcon1:
			
			sz			adcr.6			
			jmp			alladcon1
			clr			adf
			mov			a,adrh
			sub			a,addata
			snz			c
			jmp			endalladcon
			mov			a,adrh
			mov			addata,a
	endalladcon:
			set			emi			
			ret
	alladcon		endp 
;////////////////////////////延时程式////////////////////////////
	timerd		 	proc
			mov 		a,timx
			mov			timerx,a
	timtop:
			mov			a,timy
			mov			timery,a
			sdz			timerx
			jmp			timdecy
			jmp			endtim
	timdecy:
			call		alladcon			;进行A/D并比较值
			sdz			timery
			jmp			timdecy
			jmp			timtop		
	endtim:
			ret
	timerd			endp	

;////////////////////////////hc164位数据输出/////////////////////////
	hc164out		proc					;mov hc164data call
			set			q1bit
			set			q2bit
			set			q3bit
			set			q4bit

			mov			a,08h
			mov			dataa,a
	hctop:
			sz			hc164data.0
			jmp			hc164abl
			set			hcab
			jmp			hcdatarr
	hc164abl:
			clr			hcab
	hcdatarr:
			rr			hc164data
			clr			hcclk
			set			hcclk
			sdz			dataa
			jmp			hctop
			ret
	hc164out		endp
;/////////////////////////////led数据分离/////////////////////////
	leddataf		proc
			mov			a,leddata
			and			a,0fh
			mov			led1,a
			mov			a,leddata
			and			a,0f0h
			mov			led2,a
			rr			led2
			rr			led2
			rr			led2		
			rr			led2		
			ret
	leddataf		endp
;//////////////////////////////led 输出数据比较///////////////////
	ledoutdatab		proc
			
	sz0h:
			sz			dataa
			jmp			sz1h
			mov			a,0fch
			mov			hc164data,a
			jmp			endledoutdatab
	sz1h:
			sdz			dataa
			jmp			sz2h
			mov			a,060h
			mov			hc164data,a
			jmp			endledoutdatab
	sz2h:
			sdz			dataa
			jmp			sz3h
			mov			a,0dah
			mov			hc164data,a
			jmp			endledoutdatab
	sz3h:
			sdz			dataa
			jmp			sz4h
			mov			a,0f2h
			mov			hc164data,a
			jmp			endledoutdatab
	sz4h:
			sdz			dataa
			jmp			sz5h
			mov			a,066h
			mov			hc164data,a
			jmp			endledoutdatab
	sz5h:
			sdz			dataa
			jmp			sz6h
			mov			a,0b6h
			mov			hc164data,a
			jmp			endledoutdatab
	sz6h:
			sdz			dataa
			jmp			sz7h
			mov			a,0beh
			mov			hc164data,a
			jmp			endledoutdatab
	sz7h:
			sdz			dataa
			jmp			sz8h
			mov			a,0e0h
			mov			hc164data,a
			jmp			endledoutdatab
	sz8h:
			sdz			dataa
			jmp			sz9h
			mov			a,0feh
			mov			hc164data,a
			jmp			endledoutdatab
	sz9h:
			sdz			dataa
			jmp			szah
			mov			a,0f6h
			mov			hc164data,a
			jmp			endledoutdatab
	szah:
			sdz			dataa
			jmp			szbh
			mov			a,0eeh
			mov			hc164data,a
			jmp			endledoutdatab
	szbh:
			sdz			dataa
			jmp			szch
			mov			a,03eh
			mov			hc164data,a
			jmp			endledoutdatab

	szch:
			sdz			dataa
			jmp			szdh
			mov			a,09ch
			mov			hc164data,a
			jmp			endledoutdatab
	szdh:
			sdz			dataa
			jmp			szeh
			mov			a,07ah
			mov			hc164data,a
			jmp			endledoutdatab
	szeh:
			sdz			dataa
			jmp			szfh
			mov			a,09eh
			mov			hc164data,a
			jmp			endledoutdatab
	szfh:
			mov			a,08eh
			mov			hc164data,a
	endledoutdatab:
			call		hc164out
			ret
	ledoutdatab		endp	
;//////////////////////////////led输出管理///////////////////////////////
	ledgan		proc
			sdz			ledc
			jmp			szledc1h
	
			mov			a,led4
			mov			hc164data,a
			call		hc164out
			clr			q4bit
			mov			a,02h
			mov			ledc,a
			jmp			endledgan
	szledc1h:
			sdz			ledc
			jmp			szledc2h
			call		leddataf
			mov			a,led1
			mov			dataa,a
			call		ledoutdatab
			clr			q1bit
			mov			a,03h
			mov			ledc,a
			jmp			endledgan	
	szledc2h:
			sdz			ledc
			jmp			szledc3h
			call		leddataf
			mov			a,led2
			mov			dataa,a
			call		ledoutdatab
			clr			q2bit
			mov			a,04h
			mov			ledc,a
			jmp			endledgan	
	szledc3h:
			mov			a,led3
			mov			dataa,a
			call		ledoutdatab
			clr			q3bit
			mov			a,01h
			mov			ledc,a			
	endledgan:	
			ret
	ledgan		endp	
;////////////////////////////键盘测试和去抖动/////////////////////
	keyin			proc
			mov			a,keyc
			mov			hc164data,a
			call		hc164out
			nop
			set			hcabc
			nop
			nop
			nop
			nop
			nop
			nop
			nop
			nop
			nop
			nop
			nop
			nop
			nop
			sz			hcab
			jmp			nopin
			sz			keytimer
			jmp			intimon
			mov			a,keyc
			mov			keyinbit,a
			mov			led4,a

			jmp			endkeyin
	intimon:
			dec			keytimer
			jmp			endkeyin
	nopin:
			rr			keyc
			clr			led4

			clr			keyinbit
			mov			a,keytimdata
			mov			keytimer,a
	endkeyin:
			clr			hcabc
			ret
	keyin			endp
;///////////////////////////key处理程式//////////////////////////
	keyinerr		proc
			sz			keyinbit
			jmp			szup
			clr			keyinerrbit
			jmp			snzkeybit6
	szup:
			sz			keyinerrbit
			jmp			endkeyinerr

			snz			keyinbit.7
			jmp			snzkeybit4
			mov			a,05h
			sub			a,led3
			sz			z
			jmp			outaddata
			inc			led3
			set			keyinerrbit
			jmp			outaddata
	snzkeybit4:
			snz			keyinbit.4
			jmp			snzkeybit2
			sz			led3
			jmp			decled3
			jmp			outaddata
	decled3:
			dec			led3
			set			keyinerrbit
			jmp			outaddata
	snzkeybit2:
			snz			keyinbit.2
			jmp			snzkeybit6
			sz			lockbit
			jmp			clrlock
			set			lockbit
			clr			interrbitc
			nop
			set			interrbit
			call		timerd
			set			interrbitc
			set			keyinerrbit
			jmp			outaddata
	clrlock:
			clr			lockbit
			set			keyinerrbit
			jmp			outaddata
	snzkeybit6:		
			sz			led3
			jmp			outaddata
			mov			a,pwmdata
			mov			leddata,a
			snz			keyinbit.6
			jmp			snzkeybit3
			set			keyinerrbit
			sub			a,0e0h
			sz			z
			jmp			endkeyinerr
			inc			pwmdata
			mov			a,pwmdata
			mov			pwm,a
			jmp			endkeyinerr
	snzkeybit3:
			snz			keyinbit.3
			jmp			endkeyinerr
			sz			pwmdata
			jmp			decpwmdata
			jmp			endkeyinerr
	decpwmdata:
			dec			pwmdata
			mov			a,pwmdata
			mov			pwm,a
			set			keyinerrbit
			jmp			endkeyinerr
	outaddata:
			mov			a,led3
			sub			a,01h
			snz			z
			jmp			outad1
			clr			acs0
			clr			acs1
			clr			acs2
			jmp			endkeyinerr
	outad1:
			mov			a,led3
			sub			a,02h
			snz			z
			jmp			outad2
			set			acs0
			clr			acs1
			clr			acs2
			jmp			endkeyinerr
	outad2:
			mov			a,led3
			sub			a,03h
			snz			z
			jmp			outad3
			clr			acs0
			set			acs1
			clr			acs2
			jmp			endkeyinerr	
	outad3:
			mov			a,led3
			sub			a,04h
			snz			z
			jmp			outinterr
			set			acs0
			set			acs1
			clr			acs2
			jmp			endkeyinerr
	outinterr:
			mov			a,led3
			sub			a,05h
			snz			z
			jmp			endkeyinerr
			mov			a,interrdata
			mov			leddata,a
	endkeyinerr:
			ret
	keyinerr		endp
			
							
;////////////////////////////codeend//////////////////////////////
	end

⌨️ 快捷键说明

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