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

📄 sensor.asm

📁 软件为一个传感器的应用实例,也是AD转换的有用例子,关键地方都作了注解,希望对大家有所帮助
💻 ASM
字号:
include ht47R20.inc
data .section 'data'
Rs	equ	0064h
n	db	?
count	db	?
kh	db	?
kl	db	?
th	db	?
tl	db	?
int_count	db	?
;----------------------------
code .section at 0 'code'
	org	00h
	jmp	start
	org	04h
	reti
	org	08h
	reti
	org	0ch
	reti
	org	10h
	jmp	t_int
;----------------------------
start:	clr	intc0
	clr	intc1
	clr	adcr
	set	adcr.1		;A/D转换允许
	mov	a,0fh		;TIMER A计数系统时钟
	andm	a,tmrc
	set	adcr.4		;TIMER B计数传感器电阻-参考电容
	set	adcr.5
	clr	acc		;定时/计数器初值
	mov	tmral,a
	mov	tmrah,a
	mov	tmrbl,a
	mov	tmrbh,a
	clr	int_count	;中断次数计数器
	set	tmrc.4		;开定时/计数器
	set	intc1.0		;定时/计数器中断允许
	set	intc0.0		;总中断允许
	jmp	$
;----------------------------
t_int:	inc	int_count	;定时/计数器中断服务子程序
	mov	a,int_count	;中断次数判断
	mov	count,a
	sdz	count
	jmp	next
	jmp	int1
next:	sdz	count
	jmp	int3
	jmp	int2
;----------------------------
int1:	mov	a,tmrbh		;第一次中断
	mov	kh,a		;读取TIMER B的值,记为KRT0CS
	mov	a,tmrbl
	mov	kl,a
	clr	n
	clr	tblp
scan_tab:			;查表,确定n的值
	tabrdl	acc
	sub	a,kl
	mov	a,tblh
	sbc	a,kh
	inc	n
	inc	tblp
	sz	c
	jmp	scan_over
	jmp	scan_tab
scan_over:
	dec	n
	;----------
	;mov	a,08h
	;subm	a,n
	;----------
	mov	a,high Rs
	mov	kh,a
	mov	a,low Rs
	mov	kl,a
	mov	a,n
	mov	count,a
	sz	count		;判断n是否为0
	jmp	div		;n不为0,则进行除法操作
	jmp	div_over	;n为0,则不进行除法操作
div:	clr	c		;除法操作
	rrc	kh
	rrc	kl
	sdz	count
	jmp	div
div_over:
	clr	acc		;TIMER A计数初值为0
	mov	tmral,a
	mov	tmrah,a
	mov	a,0ffh		;TIMER B计数初值为65536-KRTCS
	sub	a,kl
	mov	tmrbl,a
	mov	a,0ffh
	sub	a,kh
	mov	tmrbh,a
	set	adcr.0		;TIMER B溢出作为中断
	set	tmrc.4
	reti	
;----------------------------
int2:	mov	a,tmrah		;第二次中断
	mov	th,a		;读取TIMER A的值,记为T0
	mov	a,tmral
	mov	tl,a
	clr	adcr.0		;TIMER A溢出作为中断
	clr	adcr.5		;TIMER B计数参考电阻-参考电容
	mov	a,0ffh		;TIMER A计数初值为65536-T0
	sub	a,tl
	mov	tmral,a
	mov	a,0ffh
	sub	a,th
	mov	tmrah,a
	clr	acc		;TIMER B计数初值为0
	mov	tmrbl,a
	mov	tmrbh,a
	set	tmrc.4
	reti
;----------------------------
int3:	mov	a,tmrbh		;第三次中断
	mov	kh,a		;读取TIMER B的值,记为KRSCS
	mov	a,tmrbl
	mov	kl,a
	mov	a,n
	mov	count,a
	sz	count		;判断n是否为0
	jmp	mul		;n不为0,则进行 乘法操作
	jmp	mul_over	;n为0,则不进行乘法操作
mul:	clr	acc		;乘法操作
	rlc	kl
	rlc	kh
	sdz	count
	jmp	mul
mul_over:
	call	display
	clr	adcr.0		;TIMER A溢出作为中断
	set	adcr.5		;TIMER B计数传感器电阻-参考电容
	clr	acc		;定时/计数器初值
	mov	tmral,a
	mov	tmrah,a
	mov	tmrbl,a
	mov	tmrbh,a
	clr	int_count	;清除中断次数计数器
	set	tmrc.4
	reti
;----------------------------
display	proc			;显示子程序
	mov		a,	n
	swap	acc
	cpl		acc
	mov		pa,	a
	ret
display endp
;----------------------------
	org	700h
tab:	dc	100h,200h,400h,800h,1000h,2000h,4000h,8000h,0ffffh

⌨️ 快捷键说明

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