[应用]单片机脉冲计数
模拟磨损试验机测定试件磨损次数装置实验
——脉冲计数实验 一,实验目的
1, 熟悉单片机定时/计数功能,掌握初始化编成方法;
2, 掌握顺序控制程序的简单编程;
, 掌握显示数据的编程方法。 3
二,实验内容
1,利用单相全波整流及直流电动机调速系统电气控制实验仪上脉冲产生电路,检测电机转动次数并显示。实验仪上有八位LED共阴极显示块,软件设定预置数,计到预置数后电机停止运行。
2,开机前,显示预置数。计数过程中在预置数范围内时,可随时停车并保持已计数值,再按启动钮继续计数或按清除钮删除计数值,重新运行并计数。
三,实验仪器、设备及材料
PC机、有关连接线、数字万用
、电气控制实验仪、直流电压表、直流电动机。
四,实验原理
计数器T0计数方式进行计数,计数脉冲通过用SST8位单片机SST89E564内部定时器/
单片机P3.4口输入,并送八位显示块显示。由于在显示块上显示的数据是十进制数,编写程序时必须进行二转十及BCD码调整。
在单相全波整流及直流电动机调速系统实验仪上显示时,把P2口作为控制字位输出,字位移动,逐位显示;P0口作为送字形代码输出。采用共阴极字形代码,每显示一位后要关闭显示,循环逐位(8位)5次。实验仪上设有按钮NK1、NK2、NK3,分别可作为启动(继续)、停车、清除按键,低电平有效,设计程序时要考虑延时。
五,实验步骤
1, 连接电气控制仪、直流电压表、直流电动机、外部脉冲输入端
2, PC机上编程,通过数据线传输至电气控制实验仪,启动电气控制实验仪,完成实验。
六,实验程序
;-----------------------------------------------------------------------------
ORG 0000H
LJMP START ;转发送主程序
;-----------------------------------------------------------------------------
ORG 001BH
LJMP STOP ;转发送中断服务
;-----------------------------------------------------------------------------
;主程序
START: MOV SP,#60H ;堆栈SP=60H
MOV TMOD,#15H ;T0为计算器,工作方式1,T1为定时器,工作方式1
MOV P0,#03FH
MOV P1,#0FFH
MOV P2,#0FFH ;P0,P1,P2口赋初值
MOV TH0,#00H
MOV TL0,#00H ;TO从0开始计数
MOV TH1,#00H
MOV TL1,#00H ;T1定时 时间为65.5ms
MOV 59H,#00H ;计数器溢出的数累计存放在59H单元
CLR 30H ;将停止标志位清零
MOV 30H,#00H ;设预置数70000
MOV 31H,#00H
MOV 32H,#00H
MOV 33H,#00H
MOV 34H,#07H
MOV 35H,#00H
MOV 36H,#00H
MOV 37H,#00H
LCALL CT6 ;显示预置数 START1: JB P1.0,START1
LCALL DELY
JB P1.0,START1 ;电机是否启动 LL0: JB 30H,STOP1 ;电机是否停止 LL1: SETB TR1 ;开定时器
SETB EA
SETB ET1 ;开中断
SETB TR0 ;开计数器
CLR P1.3 ;启动电机 LL2: LCALL CT ;显示 LL3: SETB RS1 ;选择2区工作寄存器组
CJNE R7,#00H,LL0
CJNE R6,#00H,LL0
CJNE R5,#07H,LL0
CJNE R4,#00H,LL0 ;预置数到否 LL4: SETB P1.3 ; 关电机
CLR TR0 ; 关计数器
CLR TR1 ; 关定时器
CLR ET1
CLR EA ; 关中断 LL5: JB P1.2,LL6
LCALL DELY
JB P1.2,LL6 ;清零否
LJMP START ;清零调转到START LL6: LCALL CT ; 显示
LJMP LL5 ; 不清零调转到LL5
RET
;------------------------------------------------------------------------------
STOP1: SETB P1.3 ;关电机
CLR 30H ;停止标志位清零
CLR TR0 ;关计数器
CLR TR1 ;关定时器
CLR EA
CLR ET1 ;关中断 STOP2: LCALL CT ;显示
START2: JB P1.0,ST1
LCALL DELY
JB P1.0,ST1 ; 继续启动电机否
LJMP LL1 ; 继续启动电机,调转到LL1 ST1: JB P1.2,STOP1
LCALL DELY
JB P1.2,STOP1 ; 清零否
LJMP START ; 清零后,调转到START
RET
;------------------------------------------------------------------------------
;中断子程序 STOP: JB P1.1,STP
LCALL DELY
JB P1.1,STP ;是否停止
SETB 30H ;停止,标志位置1 STP: RETI
;------------------------------------------------------------------------------
;显示子程序
CT: CLR RS1 ;选择0区通用工作寄存器组
MOV R6,TH0 ;计数器高八位传给R6
MOV R7,TL0 ;计数器低八位传给R7
JNB TF0,HB ;计数器是否溢出
INC 59H ;将溢出的数累加后存在59H单元
CLR TF0 ;溢出标志位清零
HB: MOV R5,59H ;将累加后的溢出数传给R5
SETB RS1 ;选择2区通用工作寄存器组
CLR A
MOV R4,A
MOV R5,A
MOV R6,A
MOV R7,A ;清零
MOV R2,#24 ;24次移位
H_B: CLR RS1 ;选择0区通用工作寄存器组
MOV A,R7
RLC A
MOV R7,A
MOV A,R6
RLC A
MOV R6,A
MOV A,R5
RLC A
MOV R5,A
SETB RS1 ;选择2区通用工作寄存器组
MOV A,R7
ADDC A,R7
DA A
MOV R7,A
MOV A,R6
ADDC A,R6
DA A
MOV R6,A
MOV A,R5
ADDC A,R5
DA A
MOV R5,A
MOV A,R4
ADDC A,R4
DA A
MOV R4,A
DJNZ R2,H_B ;二进制数转十进制
CT1: SETB RS1 ;选择2区通用工作寄存器组
MOV R0,#30H ;拆字,十进制数由低位到高位依次存放到30H-37H
MOV A,R7
LCALL C_T
MOV A,R6
LCALL C_T
MOV A,R5
LCALL C_T
MOV A,R4
LCALL C_T
CT6: MOV R3,#5 ;循环显示5次
CT2: MOV DPTR,#TAB ;查表
MOV R0,#30H
CT3: MOV R1,#80H
CT4: MOV A,R1
MOV P2,A ;送字位
RR A
MOV R1,A
MOV A,@R0
MOVC A,@A+DPTR
MOV P0,A ;送字形
MOV R2,#4FH
DJNZ R2,$
INC R0
CJNE R1,#80H,CT4
DJNZ R3,CT2
CT5: RET
;------------------------------------------------------------------------------
C_T: MOV R1,A ;拆字子程序
ACALL PTDS1
MOV A,R1
SWAP A
PTDS1: ANL A,#0FH
MOV @R0,A
INC R0
RET
;------------------------------------------------------------------------------
DELY: SETB RS0 ;消抖延时子程序
MOV R5,#04H
DEL1: MOV R4,#0FFH
DJNZ R4,$
DJNZ R2,DEL1
CLR RS0
RET
;------------------------------------------------------------------------------
TAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,67H
;------------------------------------------------------------------------------
END
七,实验
图
开 始
设堆栈,定时/计数器、P0、P1、P2口初始化
N 启动否,
Y
Y
停止否,
N
开定时/计数器、计数
关定时/计数器
显 示
显 示
N
预置数到否, Y
Y 继续(启动)否,
N清 零 否,
Y N
清零否,
显 示 N
Y