这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 8051单片机测频的程序

共2条 1/1 1 跳转至

8051单片机测频的程序

高工
2011-09-19 09:07:16     打赏
我要测试5000-8000hz的频率信号,哪位大哥给个程序啊!!



关键词: 单片机     测频     程序    

菜鸟
2011-09-19 11:15:49     打赏
2楼

下面是我大学时用过的一个频率计程序,你可以只使用T0和T1的部分代码,使用12MHz晶体,测量频率范围为:0Hz-400KHz,精度为1Hz。

STATE_8279 EQU 0301H ;命令口地址
DATA_8279 EQU 0300H ;数据口地址
TIME_STATE_8279 EQU 32H ;20分频
KEY_DISP_STATE EQU 00H ;显示方式命令字,8字符左边输入,编码扫描键盘,双键锁定
CLR_STATE EQU 0D1H ;清除命令字
READ_FIFO_RAM EQU 40H ;

OUPT EQU P3.0
CLK EQU P3.1
TIME DATA 30H
ORG 0000H
LJMP START1
ORG 000BH ;定时器/计数器0 用于计数
INC 41H ;用于计数溢出累加
RETI
ORG 001BH ;定时器/计数器1 用于定时
LJMP STOP
;初始化8279
START1:
INIT8279: MOV DPTR, #STATE_8279
MOV A, #CLR_STATE
MOVX @DPTR,A
WAIT: MOVX A, @DPTR
JB ACC.7,WAIT
MOV A, #TIME_STATE_8279
MOVX @DPTR,A
MOV A, #KEY_DISP_STATE
MOVX @DPTR,A
;8279初始结束
;|---------------------------------------|
MOV TMOD, #15H ;|GATE| C/T| M1 | M0 |GATE| C/T| M1 | M0 |
MOV TH1 , #4CH ;15535
MOV TL1 , #0AFH
MOV TIME, #20 ;50ms*20=1000ms
MOV 42H , #0
MOV TH0 , #00H
MOV TL0 , #00H
MOV IE , #8AH ;开T0、T1的中断
MOV TCON, #50H ;定时计数开始
MOV SP , #80H
MOV A , #0
MOV R0 , #10 ;显示缓冲个数
MOV R1 , #7FH ;清显示缓冲区
CLR 22H
CLR 23H
CLR 24H
CLR_DAT: MOV @R1 , A
DEC R1
DJNZ R0 , CLR_DAT
MOV 7FH , #00H
LCALL DISP
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
CONT_D:
LCALL DIVRAT
HELLO: LCALL DISP
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
TEXT_D: JBC 20H , CONT_D ;数据刷判断
SJMP TEXT_D
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 定时器/计数器1中断子程序 ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
STOP: DJNZ TIME, OUT ;一秒时间到了没了,没到继续计时
MOV TCON, #0 ;时间到了停止时时
MOV 42H , 41H ;频率的高字节
MOV 43H , TH0 ;频率的中间字节,保存计数值
MOV 44H , TL0 ;频率的低字节
MOV TH0 , #0 ;计数器重赋初值
MOV TL0 , #0
MOV 41H , #0 ;计数溢出累加单元清零,为一下次测量做准备
MOV TL1 , #0AFH
MOV TH1 , #3CH
MOV TCON, #50H ;重新开启计数和定时
MOV TIME, #20 ;50ms*20=1000ms
SETB 20H ;设置显示刷新位,防止刷新次数过多,只有在测量后才刷新一次
;;;;;;;;;;;;;;;;;;;;;;;;;;; ;运行状态显示,即每测量一次刷新一次
MOV A , #9
CJNE A , 7FH , FLG;
MOV 7FH , #255
FLG: INC 7FH
RETI
;;;;;;;;;;;;;;;;;;;;;;;;;;;
OUT: MOV TL1 , #0B6H ;0AF+2+2+2+1
MOV TH1 , #3CH
RETI
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; ____________ 计 数 值 转 BCD 码 处 理 ____________;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DIVRAT: MOV R0 , #24 ;处理三字节24B的数据

MOV 48H , #0 ;频率计算内存变量区清零
MOV 47H , #0
MOV 46H , #0
MOV 45H , #0

MOV R1 , 44H ;低字节,数据处理缓冲单元
MOV R2 , 43H ;
MOV R3 , 42H ;高字节

SHIF_1: CLR C ;对二进制数进行乘二加余运算
MOV A , R1
RLC A
MOV R1 , A
MOV A , R2
RLC A
MOV R2 , A
MOV A , R3
RLC A
MOV R3 , A

MOV A , 45H ;压缩BCD码处理
ADDC A , 45H
DA A
MOV 45H , A ;个 - 十单元
MOV A , 46H
ADDC A , 46H
DA A
MOV 46H , A ;千 - 百单元
MOV A , 47H
ADDC A , 47H
DA A
MOV 47H , A ;十万-万单元
MOV A , 48H
ADDC A , 48H
DA A
MOV 48H , A
DJNZ R0 , SHIF_1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MOV A , 45H
ANL A , #0FH
MOV 78H , A ;个位
MOV A , 45H
SWAP A
ANL A , #0FH
MOV 79H , A ;十位
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MOV A , 46H
ANL A , #0FH
MOV 7AH , A ;百位
MOV A , 46H
SWAP A
ANL A , #0FH
MOV 7BH , A ;千位
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MOV A , 47H
ANL A , #0FH
MOV 7CH , A ;万位
MOV A , 47H
SWAP A
ANL A , #0FH
MOV 7DH , A ;十万位
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MOV A , 48H
ANL A, #0FH
MOV 7EH, A ;百万位
MOV A, 48H
SWAP A
ANL A, #0FH
MOV A, #7FH ;千万位
;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;小数点处理
MOV A , 7EH ;百万位
JZ NEXT_0
JMP POINT_OUT

NEXT_0: MOV 7EH , #16
MOV A , 7DH ;十万位
JZ NEXT_1
JMP POINT_OUT
NEXT_1: MOV 7DH , #16
MOV A , 7CH ;万位
JZ NEXT_2
JMP POINT_OUT
NEXT_2: MOV 7CH , #16
MOV A , 7BH ;千位
JZ NEXT_3
JMP POINT_OUT
NEXT_3: MOV 7BH , #16
MOV A , 7AH ;百位
JZ NEXT_4
RET
NEXT_4: MOV 7AH , #16
MOV A , 79H ;十位
JNZ POINT_OUT1
MOV 79H , #16
RET

POINT_OUT:
MOV A , 7BH
ADD A , #17
MOV 7BH , A
POINT_OUT1:
RET

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; ________________ 显 示 处 理________________ ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DISP: MOV R1, #78H
MOV R7, #08H
MOV DPTR, #STATE_8279
MOV A, #90H
MOVX @DPTR,A
DISP_LOOP:
MOV A, @R1
MOV DPTR, #LEDSEG
MOVC A, @A+DPTR
MOV DPTR, #DATA_8279
MOVX @DPTR,A
INC R1
DJNZ R7, DISP_LOOP
RET
LEDSEG:
DB 03FH,06H,5BH,4FH,66H,6DH,7DH,07H,07FH,6FH,77H,7CH,39H,5EH,79H,40H,00H; 共阴极数码管段码!
;0 1 2 3 4 5 6 7 8 9 A B C D E - 不亮
DB 0BFH , 86H, 0DBH, 0CFH, 0E6H, 0EDH, 0FDH, 87H, 0FFH,0EFH
END


共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]