论文部分内容阅读
摘 要:结合实际,重点阐述了电阻、电容和电感测试仪软件程序。
关键词:电阻;电容;电感测试仪;程序设计
本设计是用汇编语言对AT89S51编程,以下是各个单元的软件设计。
1 整体程序设计
整体程序是对各个子程序的调用和组织,系统开始后,主程序负责安排初始化、系统信号的发送和读取,以及数据的处理,最后通过LED做数据显示。系统的测量选择可以由按键选择并且由发光二极管做指示。
整体程序设计如下:
ORG 0000H
LJMP START
ORG 001BH
JMP INTM1 ;定义中断地址
ORG 0030H
START : MOV A,#3H
MOV P2,A ; 初始化p2口
LOOP1: JB P2.2,DZ1; 有按键1动作则转dz1
JB P2.3,DR1; 有按键2动作则转dr1
JB P2.4,DG1; 有按键3动作则转dg1
LCALL DELAY; 延时
LJMP LOOP1; 若无按键动作,继续扫描
DZ1: MOV A,#24H
MOV P2,A; 点亮二极管1并选通电阻测量
LCALL DZ ; 调用电阻处理模块
LCALL DISPLAY; 调用显示程序
LJMP START ; 电阻处理完毕,程序返回等待下次测量
DR1: MOV A,#49H
MOV P2,A ; 点亮二极管2并选通电容测量
LCALL DR ; 调用电容处理模块
LCALL DISPLAY; 调用显示程序
LJMP START ; 电容处理完毕,程序返回等待下次测量
DG1: MOV A,#92H
MOV P2,A ; 点亮二极管3并选通电感测量
LCALL DG ; 调用电感处理模块
LCALL DISPLAY; 调用显示程序
LJMP START; 电感处理完毕,程序返回等待下次测量
程序运行顺序是先定义程序开始地址,定义T1口中断地址,初始化P2口,判断按键动作,如果有动作,则被选择电路的指示灯亮,否则继续循环扫描按键,直到有键按下。
2 初始化模块设计
初始化首先是通过单片机P2口的赋值来使CD4052按照要求选通,定义中断类型和中断地址,初始化计数定时器。
初始化P2口的赋值来使CD4052按照要求选通:
3 按键扫描和指示电路程序设计
按键通过上拉电阻给予高电平,动作时直接会给P2.2或者P2.3或者 P2.4一个高电平,通过扫描P2.2-P2.4则可以判断按键动作,如果有按键按下,通过P2.5 P2.6 P2.7分别点亮指示灯,同时P2.0 P2.1送出相应数据选通CD4052使相应的测量电路选通,数据通过CD4052的13脚进入单片机T0计数器,到此,按键扫描电路工作完成。
4 数据处理模块设计
数据处理主要是把从T0读取的频率数通过计算转换成相应的电阻、电容和电感值。图为读取频率的子程序流程图(如图1)
设计思想是通过计数定时器来计算在10ms内的频率计算,然后通过中断服务程序循环100次来达到定时1s的频率计算。部分程序如下所示:
START1:
MOV TMOD,#15H; 方式1,t0计数,t1定时10ms
MOV TH1,#0D8H;
MOV TL1,#0F0H; 初始化t1,定时10ms
MOV TH0,#0H;
MOV TL0,#0H; 初始化t0
MOV IE,#88H; 开中断
MOV R2,#0H; 循环记数器初始化
SETB TR1; 开始定时和记数
SETB TR0;
YL1: CJNE R2,#100,YL1 ; 中断100次,定时1s
CLR TR1 ; 关定时记数
CLR TR0 ;
MOV A,TL0 ; 保存记数值
MOV B,TH0;
RET
INTM1: MOV TH1,#0D8H; t0中断
MOV TL1,#0F0H; 初始化t1,定时1us
INC R2
RETI
首先计算定时时间为10ms,则定时初值为65536-10000=55536=D0F0H,所以分别赋予TH1=0D8H,TL1=0F0H,循环计算器R2初值为零,开中断,EA=1,ET1=1,开始定时计算,定时时间到,判断R2是否等于100,不等,则进中断,等,则关定时计算器,保存TL0和TH0的频率到A和B。中断程序首先初始化T1,R2自加1。整个频率读取完成。
5 数据显示模块设计
数据显示由四位数码管显示,其中第一位显示个位,第二位显示十分位,第三位和第四位显示倍数,如显示1即表示101倍。
以下是十位和个位显示程序。
DISPLAY: MOV DPTR,#NUMTAB; 指定查表启始地址
MOV R0,#4 ; 定义外循环次数
DPL1: MOV R1,#250 ; 定义内循环次数
DPLOP: MOV A,A_BIT ; 取十位数
MOVC A,@A+DPTR ; 查十位数的7段代码
MOV P0,A ; 送出十位7段代码
SETB P1.0 ; 开十位显示
ACALL DLMS ; 显示161微秒
CLR P1.0 ; 关闭十位显示,防止鬼影
MOV A,B_BIT ; 取个位数
MOVC A,@A+DPTR ; 查个位数的7段代码
MOV P0,A ; 送出个位的7段代码
SETB P1.1 ; 开个位显示
ACALL DLMS ; 显示161微秒
CLR P1.1 ; 关闭个位显示,防止鬼影
、、、、、、、、、
、、、、、、、
DJNZ R1,DPLOP ; 循环执行250次
DJNZ R0,DPL1 ; 循环执行250X4=1000次
RET
DLMS: MOV R7,#80 ; 1+2X80=161微秒,延时按12MHZ计算
DJNZ R7,$
RET
NUMTAB: DB 0CFH,03H,5DH,5BH,93H,0DAH,0DEH,43H,0DFH,0DBH
程序先指定查表启始地址,定义内、外循环次数,取要显示的数据,查表,送出7段代码,开显示,延时,关闭显示,继续显示下一位,当把四位都显示完了开始循环扫描1000次,使显示稳定。
关键词:电阻;电容;电感测试仪;程序设计
本设计是用汇编语言对AT89S51编程,以下是各个单元的软件设计。
1 整体程序设计
整体程序是对各个子程序的调用和组织,系统开始后,主程序负责安排初始化、系统信号的发送和读取,以及数据的处理,最后通过LED做数据显示。系统的测量选择可以由按键选择并且由发光二极管做指示。
整体程序设计如下:
ORG 0000H
LJMP START
ORG 001BH
JMP INTM1 ;定义中断地址
ORG 0030H
START : MOV A,#3H
MOV P2,A ; 初始化p2口
LOOP1: JB P2.2,DZ1; 有按键1动作则转dz1
JB P2.3,DR1; 有按键2动作则转dr1
JB P2.4,DG1; 有按键3动作则转dg1
LCALL DELAY; 延时
LJMP LOOP1; 若无按键动作,继续扫描
DZ1: MOV A,#24H
MOV P2,A; 点亮二极管1并选通电阻测量
LCALL DZ ; 调用电阻处理模块
LCALL DISPLAY; 调用显示程序
LJMP START ; 电阻处理完毕,程序返回等待下次测量
DR1: MOV A,#49H
MOV P2,A ; 点亮二极管2并选通电容测量
LCALL DR ; 调用电容处理模块
LCALL DISPLAY; 调用显示程序
LJMP START ; 电容处理完毕,程序返回等待下次测量
DG1: MOV A,#92H
MOV P2,A ; 点亮二极管3并选通电感测量
LCALL DG ; 调用电感处理模块
LCALL DISPLAY; 调用显示程序
LJMP START; 电感处理完毕,程序返回等待下次测量
程序运行顺序是先定义程序开始地址,定义T1口中断地址,初始化P2口,判断按键动作,如果有动作,则被选择电路的指示灯亮,否则继续循环扫描按键,直到有键按下。
2 初始化模块设计
初始化首先是通过单片机P2口的赋值来使CD4052按照要求选通,定义中断类型和中断地址,初始化计数定时器。
初始化P2口的赋值来使CD4052按照要求选通:
3 按键扫描和指示电路程序设计
按键通过上拉电阻给予高电平,动作时直接会给P2.2或者P2.3或者 P2.4一个高电平,通过扫描P2.2-P2.4则可以判断按键动作,如果有按键按下,通过P2.5 P2.6 P2.7分别点亮指示灯,同时P2.0 P2.1送出相应数据选通CD4052使相应的测量电路选通,数据通过CD4052的13脚进入单片机T0计数器,到此,按键扫描电路工作完成。
4 数据处理模块设计
数据处理主要是把从T0读取的频率数通过计算转换成相应的电阻、电容和电感值。图为读取频率的子程序流程图(如图1)
设计思想是通过计数定时器来计算在10ms内的频率计算,然后通过中断服务程序循环100次来达到定时1s的频率计算。部分程序如下所示:
START1:
MOV TMOD,#15H; 方式1,t0计数,t1定时10ms
MOV TH1,#0D8H;
MOV TL1,#0F0H; 初始化t1,定时10ms
MOV TH0,#0H;
MOV TL0,#0H; 初始化t0
MOV IE,#88H; 开中断
MOV R2,#0H; 循环记数器初始化
SETB TR1; 开始定时和记数
SETB TR0;
YL1: CJNE R2,#100,YL1 ; 中断100次,定时1s
CLR TR1 ; 关定时记数
CLR TR0 ;
MOV A,TL0 ; 保存记数值
MOV B,TH0;
RET
INTM1: MOV TH1,#0D8H; t0中断
MOV TL1,#0F0H; 初始化t1,定时1us
INC R2
RETI
首先计算定时时间为10ms,则定时初值为65536-10000=55536=D0F0H,所以分别赋予TH1=0D8H,TL1=0F0H,循环计算器R2初值为零,开中断,EA=1,ET1=1,开始定时计算,定时时间到,判断R2是否等于100,不等,则进中断,等,则关定时计算器,保存TL0和TH0的频率到A和B。中断程序首先初始化T1,R2自加1。整个频率读取完成。
5 数据显示模块设计
数据显示由四位数码管显示,其中第一位显示个位,第二位显示十分位,第三位和第四位显示倍数,如显示1即表示101倍。
以下是十位和个位显示程序。
DISPLAY: MOV DPTR,#NUMTAB; 指定查表启始地址
MOV R0,#4 ; 定义外循环次数
DPL1: MOV R1,#250 ; 定义内循环次数
DPLOP: MOV A,A_BIT ; 取十位数
MOVC A,@A+DPTR ; 查十位数的7段代码
MOV P0,A ; 送出十位7段代码
SETB P1.0 ; 开十位显示
ACALL DLMS ; 显示161微秒
CLR P1.0 ; 关闭十位显示,防止鬼影
MOV A,B_BIT ; 取个位数
MOVC A,@A+DPTR ; 查个位数的7段代码
MOV P0,A ; 送出个位的7段代码
SETB P1.1 ; 开个位显示
ACALL DLMS ; 显示161微秒
CLR P1.1 ; 关闭个位显示,防止鬼影
、、、、、、、、、
、、、、、、、
DJNZ R1,DPLOP ; 循环执行250次
DJNZ R0,DPL1 ; 循环执行250X4=1000次
RET
DLMS: MOV R7,#80 ; 1+2X80=161微秒,延时按12MHZ计算
DJNZ R7,$
RET
NUMTAB: DB 0CFH,03H,5DH,5BH,93H,0DAH,0DEH,43H,0DFH,0DBH
程序先指定查表启始地址,定义内、外循环次数,取要显示的数据,查表,送出7段代码,开显示,延时,关闭显示,继续显示下一位,当把四位都显示完了开始循环扫描1000次,使显示稳定。