预览加载中,请您耐心等待几秒...
1/3
2/3
3/3

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

频率测量实际上就是在1s内对脉冲个数进行计数,计数值就是信号频率。利用已有的电路可以实现脉冲信号的频率测量。令定时器T0工作在方式1,得到50ms的定时间隔,在进行软件计数20次,形成一个1s的测量闸门信号,在测量闸门信号期间响应INT0中断,对脉冲信号加1计数来完成对输入信号的频率计数,计数值存入COUNT和COUNT+1单元,计数值通过6位动态数码管显示出来。 程序如下: ;频率计程序清单 ORG0000H LJMPSTART ORG0003H LJMPPINT0;INT0中断入口 ORG000BH;T0中断入口 LJMPT0INT ORG0040H COUNTEQU40H;定义计数单元 ;COUNT,COUNT+1对脉冲个数计数,高位在前 ;COUNT+2为秒计数单元 START;MOVSP,#40H;主程序 AGAIN;MOVCOUNT,#00H;计数单元清0 MOVCOUNT+1,#00H MOVCOUNT+2,#00H MOVTMOD,#01H;初始化T0 MOVTH0,#3CH;计数初值,50ms的定时间隔 MOVTL0,#0B0H SETBTR0;启动T0 SETBET0;允许T0中断 SETBEX0 SETBIT0;INT0为负沿触发方式 SETBEA WAIT:JNBF0,WAIT;不到1s则等待 LCALLWDISBUF;将双字节计数值转换成6位非压缩型BCD码 LCALLDISPLAY LCALLDISPLAY LJMPAGAIN ;写WDISBUF子程序 HEXEQU40H DISBUFEQU70H WDISBUF:CLRA;压缩BCD码初始化 MOVR3,A;R3R4R5暂存压缩BCD码 MOVR4,A MOVR5,A MOVR2,#16 HB1:MOVR6,HEX;数据高字节暂存于R6中 MOVR7,HEX+1;数据低字节暂存于R7中 HB2:MOVA,R7;从高端移出待转换的一位到CY中 RLCA MOVR7,A MOVA,R6 RLCA MOVR6,A MOVA,R5;BCD码带进位自身相加,相当于乘2 ADDCA,R5 DAA;十进制调整 MOVR5,A MOVA,R4 ADDCA,R4 DAA MOVR4,A MOVA,R3 ADDCA,R3 MOVR3,A;双字节十六进制数的万位数不超过6,不用调整 DJNZR2,HB1;处理完十六位 MOVR0,DISBUF+5;转换成分离BCD码存于70H~75H单元中 MOVA,#00H MOV@R0,A MOVA,R3:R3不超过6,不用转换 DECR0 MOV@R0,A MOVA,R4 SWAPA ANLA,#0FH DECR0 MOV@R0,A MOVA,R4 SWAPA ANLA,#0FH DECR0 MOV@R0,A MOVA,R4 ANLA,#0FH DECR0 MOV@R0,A MOVA,R5 ANLA,#0FH DECR0 MOV@R0,A RET ;DISPLAY显示子程序 DISPLAY:MOVR0,#70H;R0指向DISBUF首地址 MOVR3,#01H;右起第一个LED的选择字 NEXT:MOVA,#00H;取位选控制字为全灭 MOVP1,A;瞬时关显示器 MOVA,@R0;从DISBUF中取出字符 MOVDPTR,#DSEG;取段码表首地址 MOVCA,@A+DPTR;查表,取对应的字形码 MOVP0,A;输出字形码 MOVA,R3;取当前位选控制字 MOVP1,A;点亮当前LED显示位 LCALLDELAY;DELAY延时1ms INCR0;R0N指向下一个字符 JBACC.5,EXIT;诺当前显示位是第六位则结束 RLA;下一个LED的选择字 MOVR3,A SJMPNEXT EXIT:RET;返回 ;定时器T0中断服务程序 T01NT:PUSHA MOVTH0,#3CH;再次启动计数器 MOVTL0,#0B0H INCCOUNT+2;秒计数单元加1 MOVA,COUNT+2 CLRC SUBBA,#20 JCEXIT SETBF0;闸门时间到 CLREA;关中断 POPA EXIT:RETI ;INT0中断服务程序 PINT0:PUSHA MOVA,COUNT+1 ADDA,#01H;计数值+1 MOVCOUNT+1,A MOVA,COUNT ADDCA,#00H;高字节 MOVCOUNT,A POPA RETI