📄 sensor.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 + -