附录三系统整体程序.docx
- 文档编号:17816139
- 上传时间:2023-08-04
- 格式:DOCX
- 页数:15
- 大小:17.66KB
附录三系统整体程序.docx
《附录三系统整体程序.docx》由会员分享,可在线阅读,更多相关《附录三系统整体程序.docx(15页珍藏版)》请在冰点文库上搜索。
附录三系统整体程序
附录三:
系统整体程序
;*****************************数字频率计************************
;版本:
1.0日期:
2008/06/15作者:
关林宝
;******************************************************************
;程序功能说明:
;1.通过IO口P1.0,P1.1控制74ls153四选一译码器,对待测频率选择合适的频率衰减档位,
;计数并显示在LED上面.
;2.频率检测范围:
1Hz-1MHz.
;其中:
1Hz-2kHz,CPU直接检测;2KHz-20KHz,衰减10倍测量;
;20KHz-200KHz,衰减100倍测量;200KHz-999KHz,衰减1000倍测量。
;3.显示数据更新:
每1S刷新一次。
;******************************************************************
;P153_BA,00衰减1000倍,01衰减100倍,10衰减10倍,11衰减0倍。
P153_AEQUP1.1
P153_BEQUP1.0
FREQ_LOSSEQU30H;用于存放当前的频率衰减档位0--3
PORT_LEDEQUP0;LED驱动端口
PORT_LED_138EQUP2;LED位选择口
DISPLAY_DATA_ADDREQU31H;用于存放算好的显示代码首地址
DISPLAY_DATA0EQU31H;用于存放算好的显示代码
DISPLAY_DATA1EQU32H;
DISPLAY_DATA2EQU33H;
DISPLAY_DATA3EQU34H;
DISPLAY_DATA4EQU35H;
DISPLAY_DATA5EQU36H;
COUNTER_DISPLAYEQU37H;用于存放当前显示的是第几位
DATA_ADDREQU38H;
DATA0EQU38H;用于存放计数器所计数据转10进制后的数据
DATA1EQU39H
DATA2EQU3AH
DATA3EQU3BH
DATA4EQU3CH
DATA5EQU3DH
TEMP1EQU40H
TEMP2EQU41H
TEMP3EQU42H
TEMP4EQU43H
COUNTER_BUF_HEQU50H;用于存放计数器的值
COUNTER_BUF_LEQU51H
TIMES_50MSEQU53H;50毫秒计数器,每50毫秒加1
TIMES_1SEQU54H;1秒计数器,每秒加1
COUNT_DELAY1EQU55H;用于延时计数
COUNT_DELAY2EQU56H;用于延时计数
;********BITRAM(20~2F)flagdefined********
B_T1IFEQU00H;定时器1溢出标记位
;==========================================================
;==========================================================
;***********************************PROGRAM*******************
ORG0
LJMPINITIAL
ORG1BH
LJMPTIMER1_INT;T0FORIR
;******************************************************************
;-------------------------------TIMER1_INT----------------------------------
;******************************************************************
;定时器1中断,中断周期:
50ms。
读取一次计时器内容,50ms中断次数累加器TIMES_50MS加1
;50ms中断溢出标记置1
TIMER1_INT:
PUSHACC
PUSHPSW
MOVTH1,#03CH
MOVTL1,#0AFH;50mstimebase
MOVCOUNTER_BUF_H,TH0
MOVCOUNTER_BUF_L,TL0
CLRC
MOVA,TH0
CJNEA,COUNTER_BUF_H,INT1
SJMPINT2
INT1:
MOVCOUNTER_BUF_H,A
INT2:
INCTIMES_50MS
SETBB_T1IF;50ms中断溢出标记置1
POPPSW
POPACC
RETI
;******************************************************************
;-------------------------------INITIAL-------------------------------------
;******************************************************************
INITIAL:
MOVIE,#00H
MOVSP,#0E0H
MOVR0,#01H
CLR_RAM:
MOV@R0,#00H;clrRAM(01H~FFH)
INCR0
CJNER0,#00H,CLR_RAM
MOVP0,#0FFH
MOVP1,#0FFH
MOVP2,0
MOVTMOD,#00010101B;SetT0as16bitsTimer,T1as16bitscounter
MOVTH0,#00H
MOVTL0,#00H
MOVTH1,#03CH
MOVTL1,#0AFH;50mstimebase
SETBTR0;T0RUN
SETBTR1;T1RUN
CLRET0;EnableT0int
SETBET1;EnableT1int
SETBEA
SETBP153_A
SETBP153_B
CLRA
MOVFREQ_LOSS,A
;******************************************************************
;-------------------------------MAIN-------------------------------------
;******************************************************************
MAIN:
NOP
CALLDISPLAY0;LED动态显示刷新
CALLDELAY100
JNBB_T1IF,MAIN;每50ms处理一次。
;======================================
CLRB_T1IF
MOVA,TIMES_50MS
CJNEA,#20,NO_1S
JMPYES_1S;满20次即为一秒钟
;=====================================
NO_1S:
MOVA,TIMES_50MS
CJNEA,#1,NO_1S_END;TIMES_50MS不为1,返回
;当TIMES_50MS为1时,判断当前所选档位是否过高或者过低
;若计数器BUF大于100,则说明满1秒时必然大于2000,则提前调高频率衰减档位,
;并清零各计数值,重新在新档位测量
MOVA,COUNTER_BUF_H
JNZNO_1S_1;计数器高位不为0,说明超100
MOVA,COUNTER_BUF_L
CJNEA,#100,NO_1S_0
NO_1S_0:
JCNO_1S_LOW;计数器BUF小于100,继续跳转到NO_1S_LOW判断是否需要调低档位
NO_1S_1:
MOVA,FREQ_LOSS;超量程,判断当前频率衰减档位,若小于3则加一档
CJNEA,#3,NO_1S_2
JMPNO_1S_END
NO_1S_2:
JCNO_1S_3
MOVA,#3
MOVFREQ_LOSS,A;档位大于3,则修正为3
NO_1S_3:
INCFREQ_LOSS;频率衰减档位加1
MOVA,FREQ_LOSS
CJNEA,#1,NO_1S_4
SETBP153_B;FREQ_LOSS=1
CLRP153_A
JMPNO_1S_20
NO_1S_4:
CJNEA,#2,NO_1S_5
CLRP153_B;FREQ_LOSS=2
SETBP153_A
JMPNO_1S_20
NO_1S_5:
CLRP153_B;FREQ_LOSS=3
CLRP153_A
JMPNO_1S_20
;========================================
NO_1S_LOW:
MOVA,COUNTER_BUF_L
CJNEA,#10,NO_1S_10
NO_1S_10:
JNCNO_1S_END
;偏低,则判断是否需要降低频率衰减档位
MOVA,FREQ_LOSS;
JZNO_1S_END;已经是最低档,无需调整
DECFREQ_LOSS;减一档
MOVA,FREQ_LOSS
CJNEA,#0,NO_1S_11
SETBP153_B;FREQ_LOSS=0
SETBP153_A
JMPNO_1S_20
NO_1S_11:
CJNEA,#1,NO_1S_12
SETBP153_B;FREQ_LOSS=1
CLRP153_A
JMPNO_1S_20
NO_1S_12:
CLRP153_B;FREQ_LOSS=2
SETBP153_A
JMPNO_1S_20
NO_1S_20:
;调整档位后,重新计数
CLRA
MOVTIMES_50MS,A
MOVCOUNTER_BUF_L,A
MOVCOUNTER_BUF_H,A
NO_1S_END:
JMPMAIN
;===================================
;===================================
YES_1S:
;把计数器的数转换成10进制,并根据当前档位设定好要显示的6个数字,
;存放在DISPLAY_DATA1-DISPLAY_DATA6中。
;
MOVA,COUNTER_BUF_H
MOVR7,A
MOVA,COUNTER_BUF_L
MOVR6,A
CALLCHANGE16_10
;====================================
;在频率衰减控制下,计数器数据不会超出2000多少,因此只取转换后的低4位转换成数据显示
MOVA,R3
ANLA,#0FH
MOVTEMP1,A
MOVA,R3
ANLA,#0F0H
SWAPA
MOVTEMP2,A
MOVA,R4
ANLA,#0FH
MOVTEMP3,A
MOVA,R4
ANLA,#0F0H
SWAPA
MOVTEMP4,A
;====================================
;根据频率衰减档位调整数位
MOVA,FREQ_LOSS
CJNEA,#0,LOSS_1
CLRA
MOVDATA4,A
MOVDATA5,A
JMPLOSS_END
LOSS_1:
CJNEA,#1,LOSS_2
MOVA,DATA3
MOVDATA4,A
MOVA,DATA2
MOVDATA3,A
MOVA,DATA1
MOVDATA2,A
MOVA,DATA0
MOVDATA1,A
CLRA
MOVDATA0,A
MOVDATA5,A
JMPLOSS_END
LOSS_2:
CJNEA,#2,LOSS_3
MOVA,DATA3
MOVDATA5,A
MOVA,DATA2
MOVDATA4,A
MOVA,DATA1
MOVDATA3,A
MOVA,DATA0
MOVDATA2,A
CLRA
MOVDATA0,A
MOVDATA1,A
JMPLOSS_END
LOSS_3:
MOVA,DATA2
MOVDATA5,A
MOVA,DATA1
MOVDATA4,A
MOVA,DATA0
MOVDATA3,A
CLRA
MOVDATA0,A
MOVDATA1,A
MOVDATA2,A
LOSS_END:
;高位若为0,则置为11,取出显示代码为LED全灭
MOVR0,#DATA5;取最高位数据地址
MOVR2,#5
LOOP_CLR:
MOVA,@R0
JNZDISCD
MOVA,#11
MOV@R0,A
DECR0
DJNZR2,LOOP_CLR
;====================================
;取表找相应显示代码
DISCD:
MOVR0,#DATA_ADDR;
MOVR1,#DISPLAY_DATA_ADDR;
MOVR2,#6;
MOVDPTR,#TAB
DILP:
MOVA,@R0
MOVCA,@A+DPTR
MOV@R1,A
INCR0
INCR1
DJNZR2,DILP
;=======================================
;重新计数
CLRA
MOVTIMES_50MS,A
MOVCOUNTER_BUF_L,A
MOVCOUNTER_BUF_H,A
JMPMAIN
TAB:
;/显示码码表/
DB3FH,06H,5BH,4FH,66H;
DB6DH,7DH,07H,7FH,6FH,0FFH;
RETI
;********************************************************************************
;-------------------------------显示子程序----------------------------------
;********************************************************************************
DISPLAY0:
MOVA,#0FFH
MOVPORT_LED,A;变换数据前先灭LED,以消除闪动
MOVA,COUNTER_DISPLAY
MOVPORT_LED_138,A
MOVR1,#DISPLAY_DATA_ADDR
ADDA,#DISPLAY_DATA_ADDR;计算当前要显示数据的地址,初始地址+相应位数
MOVR1,A
MOVA,@R1;取出要显示的相应位的数据
MOVPORT_LED,A;送出显示数据
MOVA,COUNTER_DISPLAY
INCA
CJNEA,#6,DISPLAY1
DISPLAY1:
JCDISPLAY2
CLRA
DISPLAY2:
MOVCOUNTER_DISPLAY,A;显示位加1
RETI
;******************************************************************
;-------------------------------DELAY----------------------------------
;******************************************************************
DELAY100:
MOVA,#2000
DELAY1:
JBB_T1IF,DELAY2
DECA
JNZDELAY1
DELAY2:
RETI
;******************************************************************
;-------------------------------16进制转10进制----------------------------
;******************************************************************
;双字节十六进制整数转换成双字节BCD码整数
;入口条件:
待转换的双字节十六进制整数在R6、R7中。
;出口信息:
转换后的三字节BCD码整数在R3、R4、R5中。
;影响资源:
PSW、A、R2~R7堆栈需求:
2字节
CHANGE16_10:
CLRA;BCD码初始化
MOVR3,A
MOVR4,A
MOVR5,A
MOVR2,#10H;转换双字节十六进制整数
CHANG_1:
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,CHANG_1;处理完16bit
RET
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 附录三 系统整体程序 附录 系统 整体 程序