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

📄 占空比.asm

📁 本单片机设计的数字频率计 能够准确测量频率为1HZ-15MHZ
💻 ASM
字号:
;频率计量程0~16MHZ,当晶振24MHZ外电路16分频时
;作者:汤益军
led1 equ 30h
led2 equ 31h
led3 equ 32h
led4 equ 33h
led5 equ 34h
led6 equ 35h
led7 equ 36h
led8 equ 37h
div1 equ 40h
div2 equ 41h
div3 equ 42h
divc1 equ 43h
divc2 equ 44h
divc3 equ 45h
divy1 equ 46h
divy2 equ 47h
divy3 equ 48h
buff0 equ 49h
buff1 equ 4ah
buff2 equ 4bh
buff3 equ 4ch
buff4 equ 4dh
buff5 equ 4eh
buffth1 equ 3bh
bufftl1 equ 3ch
control equ 3dh  ;判断是否需要软件16分频

org 0000h
ajmp main
org 000bh
ajmp cont
org 001bh
ajmp clock


main:
mov sp,#54h
mov led1,#00H    ;初始化
mov led2,#00H
mov led3,#00H
mov led4,#00H
mov led5,#00H
mov led6,#00H
mov led7,#00H
mov led8,#00H
mov r5,#32h
mov r3,#10h
mov control,#00h
mov tmod,#15h
mov th0,#00h
mov tl0,#00h
mov buffth1,#63h
mov bufftl1,#0dfh
mov th1,buffth1
mov tl1,bufftl1
clr p2.0
clr p2.1
clr ex1
clr ex0
setb et0
setb tr0
setb et1
setb tr1
setb ea
dis:call display    ;重复调用显示子程序
sjmp dis





clock:push psw      ;20000u秒定时中断
push acc
clr ea
clr et1
clr tr1
mov th1,buffth1      ;t1初始化
mov tl1,bufftl1
clr ex1
clr ex0
setb et1
setb tr1
djnz r5,over1        ;循环50次为1秒
ajmp goo
over1:
ljmp over
goo:
clr et0
clr tr0
clr c
setb p2.6
jnb p2.6,deal
mov a,th0             ;判断当计数器高位前6位为零频率小于16368时停止16分频
jnz deal
mov buffth1,#63h        ;t1初始化
mov bufftl1,#0dfh
mov control,#00h
clr p2.0
clr p2.1
deal:mov a,tl0   ;把频率累加入数据缓冲
addc a,buff0
mov buff0,a
mov a,th0
addc a,buff1
mov buff1,a
mov a,#00h
addc a,buff2
mov buff2,a
mov th0,#00h      ;t0初始化
mov tl0,#00h
setb et0
setb tr0
mov r5,#32h
mov a,control
jz divcon
djnz r3,over1
setb p2.6
jnb p2.6,divcon1
MOV R4,#4
loop9:clr c
mov a,buff0
rlc a
mov buff0,a
mov a,buff1
rlc a
mov buff1,a
mov a,buff2
rlc a
mov buff2,a
djnz r4,loop9
ajmp divcon
divcon1:
clr c
mov a,buff2
rrc a
mov buff2,a
mov a,buff1
rrc a
mov buff1,a
mov a,buff0
rrc a
mov buff0,a

divcon:
mov buff5,buff2  ;送数
mov buff4,buff1
mov buff3,buff0
setb p2.5
jb p2.5,clock1    ;判断是否为计算周期否则为计算频率
mov divc1,buff2  ;送数
mov divc2,buff1
mov divc3,buff0
mov div1,#098h  ;放入被除数10000000
mov div2,#096h
mov div3,#080h
call BINDIV     ;调用除法子程序
mov buff0,div3
mov buff1,div2
mov buff2,div1
clock1:setb p2.6
jb p2.6,bcd1    ;判断是否为计算占空比否则为计算频率或计算周期
mov tmod,#19h
mov buffth1,#0f6h
mov bufftl1,#4ch
mov control,#0ffh
clr p2.0
clr p2.1
ajmp bcd
bcd1:mov tmod,#15h
mov buffth1,#63h        ;t1初始化
mov bufftl1,#0dfh
mov control,#000h
clr p2.0
clr p2.1
bcd:call change16bcd
mov r3,#10h
over:setb ea
pop acc
pop psw
reti



BINDIV:   ;3位带4舍5入的移位除法
	CLR	A		;部分余数单元清0
        MOV	divy1,A
        MOV	divy2,A
	MOV	divy3,A
	MOV	r4,#18H		;除法移位次数(24)
LP:	CLR	C
	MOV	A,div3		;被除数低位字节送到A中
	RLC	A
	MOV	div3,A
	MOV	A,div2
	RLC	A
	MOV	div2,A
        MOV	A,div1
	RLC	A
	MOV	div1,A
	MOV	A,divy3
	RLC	A
	MOV	divy3,A
	MOV	A,divy2
	RLC	A		;A的内容左移一位(带进位)
	MOV	divy2,A
        MOV	A,divy1
	RLC	A		;A的内容左移一位(带进位)
	MOV	divy1,A
LP1:	MOV	A,divy3		;部分余数减除数
	SUBB	A,divc3
	MOV	38h,A
	MOV	A,divy2
	SUBB	A,divc2
        MOV	39h,A
	MOV	A,divy1
	SUBB	A,divc1
	JC	SMALL
	MOV	divy1,A
        MOV	A,39h
	MOV	divy2,A
	MOV	A,38h
	MOV	divy3,A
	INC	div3		;商加1
	SJMP	LP1
SMALL:	DJNZ	R4,LP		;除法移位次数完否?未完继续
	MOV	20H,divy1		;四舍五入
	JB	07H,ADD1
	CLR	C
	MOV	A,divy3
	RLC	A
	MOV	divy3,A		;余数低位字节存divy3中
	MOV	A,divy2
	RLC	A
	mov	divy2,a
        MOV	A,divy1
	RLC	A
	SUBB	A,divc1
	JC	RETURN2
        JNZ	ADD1
	MOV	A,divy2
	SUBB	A,divc2
	JC	RETURN2
	JNZ	ADD1
	MOV	A,divy3
	SUBB	A,divc3
	JC	RETURN2
ADD1:	MOV	A,div3		;商加1
	ADD	A,#01H
	MOV	div3,A		;商的低位字节存div3中
	MOV	A,div2
	ADDC	A,#00H
	MOV	div2,A
        MOV	A,div1
	ADDC	A,#00H
	MOV	div1,A		;商的高位字节存div2中
RETURN2:
ret



change16bcd:
MOV R4,#24 ;16进制转成压缩bcd码
MOV 50H,#00H
MOV 51H,#00H
MOV 52H,#00H
MOV 53H,#00H
LOOP1:CLR C
MOV A,buff0
RLC A
MOV buff0,A
MOV A,buff1
RLC A
MOV buff1,A
MOV A,buff2
RLC A
MOV buff2,A
MOV A,50H
ADDC A,50H
DA A
MOV 50H,A
MOV A ,51H
ADDC A,51H
DA A
MOV 51H,A
MOV A,52H
ADDC A,52H
DA A
MOV 52H,A
MOV A,53H
ADDC A,53H
DA A
MOV 53H,A
DJNZ R4,LOOP1
SWAP A
ANL A,#0FH
MOV DPTR ,#numtab  ;译码
MOVC A,@A+DPTR
MOV led8,A
MOV A,53H
ANL A,#0FH
MOVC A,@A+DPTR
MOV led7,A
MOV A,52H
SWAP A
ANL A,#0FH
MOVC A,@A+DPTR
MOV led6,A
MOV A,52H
ANL A,#0FH
MOVC A,@A+DPTR
MOV led5,A
MOV A,51H
SWAP A
ANL A,#0FH
MOVC A,@A+DPTR
MOV led4,A
MOV A,51H
ANL A,#0FH
MOVC A,@A+DPTR
MOV led3,A
MOV A,50H
SWAP A
ANL A,#0FH
MOVC A,@A+DPTR
MOV led2,A
MOV A,50H
ANL A,#0FH
MOVC A,@A+DPTR
MOV led1,A
RET

cont:        ;计数器溢出进行16分频
push psw
push acc
clr ea
cont1:
clr et1
clr tr1
clr et0
clr tr0
clr ex1
clr ex0
mov buffth1,#0f6h
mov bufftl1,#4ch
mov control,#0ffh
setb p2.0
setb p2.1
mov r3,#10h
mov th1,buffth1
mov tl1,bufftl1
mov th0,#00h
mov tl0,#00h
setb et0
setb tr0
setb et1
setb tr1

over2:setb ea
pop acc
pop psw
reti




display:
mov r0,#32
dpl1: mov r1,#100
dplop:
mov p0,led8
setb p2.5
jb p2.5,display1
clr p0.6
display1:mov p1,#01h
acall d1ms
mov p0,led7
setb p2.6
jb p2.6,display2
clr p0.6
display2:mov p1,#02h
acall d1ms
mov p0,led6
mov p1,#04h
acall d1ms
mov p0,led5
mov p1,#08h
acall d1ms
mov p0,led4
mov p1,#10h
acall d1ms
mov p0,led3
mov p1,#20h
acall d1ms
mov p0,led2
mov p1,#40h
acall d1ms
mov p0,led1
mov p1,#80h
acall d1ms
djnz r1,dplop
djnz r0,dpl1
ret


D1ms:
MOV R7,#0afh
DJNZ R7,$
RET

numtab: DB 60H, 0fcH, 52H, 58H, 0ccH, 49H,41H, 7cH, 40H, 48H

⌨️ 快捷键说明

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