资源描述:
《脉冲频率测量程序清单》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、频率测量实际上就是在1s内对脉冲个数进行计数,计数值就是信号频率。利用已有的电路可以实现脉冲信号的频率测量。令定时器T0工作在方式1,得到50ms的定时间隔,在进行软件计数20次,形成一个1s的测量闸门信号,在测量闸门信号期间响应INT0中断,对脉冲信号加1计数来完成对输入信号的频率计数,计数值存入COUNT和COUNT+1单元,计数值通过6位动态数码管显示出来。程序如下:;频率计程序清单ORG0000HLJMPSTARTORG0003HLJMPPINT0;INT0中断入口ORG000BH;T0中断入口LJMPT0INTORG0040HCOUNTEQU40H;定义计数单元;COUNT,
2、COUNT+1对脉冲个数计数,高位在前;COUNT+2为秒计数单元START;MOVSP,#40H;主程序AGAIN;MOVCOUNT,#00H;计数单元清0MOVCOUNT+1,#00HMOVCOUNT+2,#00HMOVTMOD,#01H;初始化T0MOVTH0,#3CH;计数初值,50ms的定时间隔MOVTL0,#0B0HSETBTR0;启动T0SETBET0;允许T0中断SETBEX0SETBIT0;INT0为负沿触发方式SETBEAWAIT:JNBF0,WAIT;不到1s则等待LCALLWDISBUF;将双字节计数值转换成6位非压缩型BCD码LCALLDISPLAYLCALL
3、DISPLAYLJMPAGAIN;写WDISBUF子程序HEXEQU40HDISBUFEQU70HWDISBUF:CLRA;压缩BCD码初始化MOVR3,A;R3R4R5暂存压缩BCD码MOVR4,AMOVR5,AMOVR2,#16HB1:MOVR6,HEX;数据高字节暂存于R6中MOVR7,HEX+1;数据低字节暂存于R7中HB2:MOVA,R7;从高端移出待转换的一位到CY中RLCAMOVR7,AMOVA,R6RLCAMOVR6,AMOVA,R5;BCD码带进位自身相加,相当于乘2ADDCA,R5DAA;十进制调整MOVR5,AMOVA,R4ADDCA,R4DAAMOVR4,AMO
4、VA,R3ADDCA,R3MOVR3,A;双字节十六进制数的万位数不超过6,不用调整DJNZR2,HB1;处理完十六位MOVR0,DISBUF+5;转换成分离BCD码存于70H~75H单元中MOVA,#00HMOV@R0,AMOVA,R3:R3不超过6,不用转换DECR0MOV@R0,AMOVA,R4SWAPAANLA,#0FHDECR0MOV@R0,AMOVA,R4SWAPAANLA,#0FHDECR0MOV@R0,AMOVA,R4ANLA,#0FHDECR0MOV@R0,AMOVA,R5ANLA,#0FHDECR0MOV@R0,ARET;DISPLAY显示子程序DISPLAY:MO
5、VR0,#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延时1msINCR0;R0N指向下一个字符JBACC.5,EXIT;诺当前显示位是第六位则结束RLA;下一个LED的选择字MOVR3,ASJMPNEXTEXIT:RET
6、;返回;定时器T0中断服务程序T01NT:PUSHAMOVTH0,#3CH;再次启动计数器MOVTL0,#0B0HINCCOUNT+2;秒计数单元加1MOVA,COUNT+2CLRCSUBBA,#20JCEXITSETBF0;闸门时间到CLREA;关中断POPAEXIT:RETI;INT0中断服务程序PINT0:PUSHAMOVA,COUNT+1ADDA,#01H;计数值+1MOVCOUNT+1,AMOVA,COUNTADDCA,#00H;高字节MOVCOUNT,APOPARETI