《频率计设计终极版》由会员分享,可在线阅读,更多相关《频率计设计终极版(13页珍藏版)》请在金锄头文库上搜索。
1、频率计设计终极版频率计设计终极版A1 EQU 40H ;现场数据低位A2 EQU 41H ;现场数据高位DBUF EQU 30H ;显示缓冲区P01 EQU 50H ;频率值低位P02 EQU 51H ;频率值中位P03 EQU 52H ;频率值高位CLK BIT P1. 6 ;显示芯片 164 的时钟信号DAT BIT P1.7 ;显示芯片 164 的数据信号SR BIT P3.4 ;频率输入端;除法中用到的标志位FLAG BIT 00H;被除数单元,商也放在这里BCSL EQU 3CHBCSH EQU 3DHBCSS EQU 3EH;除数单元CSL EQU 42HCSH EQU 43HCS
2、S EQU 44H;余数单元YSL EQU 3FHYSH EQU 40HYSS EQU 41H;除法运算中的暂存单元BUF1 EQU 45HBUF2 EQU 46HBUF3 EQU 47H;除法中的计算次数TIMES1 EQU 48HTIMES2 EQU 49HORG 0000HLJMP MAINORG 000BHLJMP T0_INTORG 001BHLJMP T1_INTORG 0100HMAIN:MOV A1,#00HMOV A2,#00HMOV R2,#00HMOV R3,#00HCLR PSW.5MOV R0,#DBUFMOV R7,#06HLOOP1:MOV R0,#00HINC
3、R0DJNZ R7,LOOP1LCALL DISPLAYMSETB EASETB ET0SETB ET1 ;中断初始化LOOP2:LCALL JISHU ;计数法初测LCALL COMPARE ;测量结果比较判断LCALL TSJB PSW.5,NEXT1 ;1000HZ,转用测周法LCALL DECI ;频率转为十进制 LCALL DISAPP ;分离显码和消隐LCALL DISPLAYM ;显示; SJMP NEXT2 ;循环SJMP LOOP2NEXT1:CLR PSW.5 ;清空标志位LCALL CEZHOU ;用测周法重测LCALL MENDT ;计算频率并转为 10 进制LCALL
4、 DISAPP ;分离显码和消隐LCALL DISPLAYT ;显示;NEXT2: LCALL YANSHISJMP LOOP2;/JISHU:MOV TMOD,#15H ;T1 定时 1S,T0 计数MOV TH1,#3CHMOV TL1,#0B0HMOV TH0,#00HMOV TL0,#00HSETB TR0SETB TR1CJNE R2,#14H,$ ;等待一秒计时结束CPL P1.0 ;计数法初测完成亮 P1.0MOV R2,#00HMOV R3,#00HCLR TR0CLR TR1MOV A1,TL0 ;存频率低位MOV A2,TH0 ;存频率高位RET;/T0_INT:INC R
5、3MOV TH0,#00HMOV TL0,#00HRETIT1_INT: INC R2MOV TH1,#3CHMOV TL1,#0B0H; 定时 50msRETI;/;T0 中计数值与 3E8H 比较大小,若大于或等于 3E8H(1000);则用高频计数法,且置标志位为 0;否则用低频测周法,且置标志位为 1COMPARE:MOV A,A2CJNE A,#03H,NEXTC3MOV A,A1CJNE A,#0E8H,NEXTC5NEXTC3:JC NEXTC1 ;低频 计数法不可用SJMP NEXTC4CLR CNEXTC5:JNC NEXTC4 ;低频 计数法不可用NEXTC1:SETB P
6、SW.5SJMP BACKCNEXTC4:CLR PSW.5BACKC:RET;/;入口参数 A1高位MOV R7,A1 ;低位LCALL H_BCD ;转 BCDMOV P03,R3 ;高位MOV P02,R4MOV P01,R5 ;低位RET;/;分离显码分离显码结束MOV R7,#06HMOV R0,#DBUFMOV A,R0ADD A,#05HMOV R0,A ;R0 指向显示缓冲区最高位LOOPD2:CJNE R0,#00H,BACKDMOV R0,#0AHDEC R0DJNZ R7,LOOPD2BACKD: RET;/DISPLAYM:MOV R0,#DBUFMOV R7,#06H
7、LOOPM2:MOV A,R0MOV DPTR,#TABMOVC A,A+DPTRINC R0MOV R6,#08HLOOP3:RRC AJC LP1CLR CLKCLR DATSETB CLKSJMP LP2LP1:CLR CLKSETB DATSETB CLKLP2: DJNZ R6,LOOP3DJNZ R7,LOOPM2RETTAB:DB 42H,0F6H,13H,92H,0A6H,8AH,0AH,0F2H,02H,82H,0FFH;/CEZHOU:CPL P1.1 ;开始测周法,亮 P1.1MOV R3,#00HMOV TMOD,#01HMOV TH0,#00HMOV TL0,#00H
8、JNB SR,$JB SR,$SETB TR0JNB SR,$JB SR,$CLR TR0MOV A1,TL0 ;时间低位MOV A2,TH0 ;时间高位 RET;/;入口参数 r3A2A1计算频率MOV R6,BCSHMOV R7,BCSLLCALL H_BCDMOV P02,R5 ;低位MOV P03,R4 ; 把商的整数部分转换为BCD 码;并存入 P02、P03MOV R1,#YSLMOV R7,#03HACALL LOOP10MOV BCSL,YSLMOV BCSH,YSHMOV BCSS,YSSLCALL DIV33MOV A,BCSLSWAP AMOV P01,A ;频率的小数部
9、分MOV R1,#YSLMOV R7,#03HACALL LOOP10MOV BCSL,YSLMOV BCSH,YSHMOV BCSS,YSSLCALL DIV33MOV A,BCSLORL P01,ARET;/DISPLAYT:MOV R0,#DBUFMOV R7,#06HLOOP12:MOV A,R0CJNE R0,#32H,NEXTDI1 ;如果是由低位数的第三位加小数点MOV DPTR,#TAB1MOVC A,A+DPTRSJMP NEXTDI2NEXTDI1:MOV DPTR,#TABMOVC A,A+DPTRNEXTDI2:INC R0MOV R6,#08HLOOP13:RRC A
10、JC LP3CLR CLKCLR DATSETB CLKSJMP NEXT11LP3:CLR CLKSETB DATSETB CLKNEXT11:DJNZ R6,LOOP13DJNZ R7,LOOP12RETTAB1:DB 40H,0F4H,11H,90H,0A4H,88H,08H,0F0H,00H,80H;/H_BCD: ;入口地址:R6R7 出口地址:R3R4R5HB2: CLR A ;BCD 码初始化MOV R3,AMOV R4,AMOV R5,AMOV R2,#10H ;转换双字节十六进制整数HB3: MOV A,R7 ;从高端移出待转换数的一位到 CY 中RLC AMOV R7,AM
11、OV A,R6RLC AMOV R6,AMOV A,R5 ;BCD 码带进位自身相加,相当于乘 2ADDC A,R5DA A ;十进制调整MOV R5,AMOV A,R4ADDC A,R4DA AMOV R4,AMOV A,R3ADDC A,R3MOV R3,A ;双字节十六进制数的万位数不超过 6,不用调整DJNZ R2,HB3 ;处理完 16bitRET;/DIV33:MOV TIMES1,#06HMOV A,CSLORL A,CSHORL A,CSSJNZ DIVD0cpl p1.1SETB OVRETDIVD0: MOV YSL,#00HMOV YSH,#00HMOV YSS,#00H
12、MOV B,#24MOV R0,#BCSLMOV TIMES1,#06HDIVD1: CLR CLPDIV33:MOV A,R0RLC AMOV R0,AINC R0DJNZ TIMES1,LPDIV33MOV R0,#BCSLMOV TIMES1,#06HMOV FLAG,CCLR CMOV A,YSLSUBB A,CSLMOV BUF1,AMOV A,YSHSUBB A,CSHMOV BUF2,AMOV A,YSSSUBB A,CSSMOV BUF3,AANL C,/FLAGJC DIVD2MOV YSL,BUF1MOV YSH,BUF2MOV YSS,BUF3INC BCSLDIVD2: DJNZ B,DIVD1CLR OVRET;/LOOP10:CLR CMOV R2,#00HLP10: MOV A,R