您当前的位置:五五电子网电子知识单片机-工控设备综合-其它P89LPC932A1测脉冲宽度汇编程序 正文
P89LPC932A1测脉冲宽度汇编程序

P89LPC932A1测脉冲宽度汇编程序

点击数:7891 次   录入时间:03-04 12:03:21   整理:http://www.55dianzi.com   综合-其它

11061418094450.rar

/********************CCU_Capture.asm***************************
;程序功能:对一方波的每一次电平跳变进行捕获,并用捕获值计算方波
的脉冲宽度,占空比,周期或其他。
;************************************************************/
$NOMOD51
$INCLUDE(REG932.INC)

ICRAH_DAT1 DATA 41H  ;第一次捕获值高字节
ICRAL_DAT1 DATA 42H  ;第一次捕获值低字节
ICRAH_DAT2 DATA 43H  ;第二次捕获值高字节
ICRAL_DAT2 DATA 44H  ;第二次捕获值低字节
ICRAH_DAT3 DATA 45H  ;第三次捕获值高字节
ICRAL_DAT3 DATA 46H  ;第三次捕获值低字节

CAP_FLAG1 BIT 10H   ;第一次捕获标志位
CAP_FLAG2 BIT 11H   ;第二次捕获标志位

KEY  BIT P0.0

  ORG 0000H
  AJMP MAIN
  ORG 005BH
  AJMP CCU_ISR
;---------------------------------------
;功能:主函数
;---------------------------------------
  ORG 0080H
MAIN:
  MOV P2M1,#40H  ;端口设置
  MOV P2M2,#40H

  MOV ICRAL_DAT1,#00H
  MOV ICRAH_DAT1,#00H
  MOV ICRAL_DAT2,#00H
  MOV ICRAH_DAT2,#00H
  MOV ICRAL_DAT3,#00H
  MOV ICRAH_DAT3,#00H 
MAIN_LOOP: 
  JB KEY,$   ;等待按键
  JNB KEY,$   ;等待按键松开
  ACALL INI_CCU   ;初始化CCU并设置中断
  ACALL DISP   ;将捕获的值输出显示
  SJMP MAIN_LOOP
  RET
;--------------------------------------
;功能:CCU初始化
;--------------------------------------
INI_CCU:
  MOV TOR2H,#00H  ;设置CCU重装高字节
  MOV TOR2L,#00H  ;设置CCU重装低字节
  MOV TPCR2H,#00H  ;设置CCU预分频控制器
  MOV TPCR2L,#5
 
  MOV CCCRA,#10H  ;设置捕获比较A通道工作方式,为上升沿捕获
  MOV TICR2,#81H  ;设置CCU中断使能控制器
  SETB ECCU   ;开CCU中断
  SETB EA   ;开所有中断
  MOV TCR20,#00000001B ;设置CCU工作方式,递增记数
  RET
;--------------------------------------
;功能:CCU中断服务程序
;--------------------------------------
CCU_ISR:
  CLR  EA

  MOV A,TISE2
  ANL A,#07H
  CJNE A,#07H,CAP  ;判断是否是CCU定时器中断
  ANL TIFR2,#7FH  ;是则清TIFR2(中断标志位)为0
  MOV A,TISE2 
CAP:  CJNE A,#06H,INTS_CEXT ;判断是否为输入捕获事件A的中断,不是则退出
  JB CAP_FLAG1,CAP2  ;判断是第二次中断么,是则跳
;------------------
CAP1:
  PUSH ACC
  MOV A,ICRAL
  MOV ICRAL_DAT1,A
  MOV A,ICRAH
  MOV ICRAH_DAT1,A
  SETB CAP_FLAG1  ;第一次捕获中断完成
  MOV CCCRA,#00H  ;设置捕获比较A通道工作方式,为下降沿捕获
  POP ACC
  AJMP INTS_CEXT
;------------------
CAP2: 
  PUSH ACC
  JB CAP_FLAG2,CAP3  ;判断是第三次中断么?是则跳到CAP3。
  MOV A,ICRAL   ;保存第二次捕获的值
  MOV ICRAL_DAT2,A
  MOV A,ICRAH
  MOV ICRAH_DAT2,A

  SETB CAP_FLAG2  ;第二次捕获中断完成
  MOV CCCRA,#10H  ;设置捕获比较A通道工作方式,为上升沿捕获
  POP ACC
  AJMP INTS_CEXT
;-------------------
CAP3:
  MOV TCR20,#00H  ;停止CCU定时器计数
  PUSH ACC
  MOV A,ICRAL   ;保存第三次捕获的值
  MOV ICRAL_DAT3,A
  MOV A,ICRAH
  MOV ICRAH_DAT3,A

  CLR CAP_FLAG1  ;清除捕获完成位
  CLR CAP_FLAG2
  POP ACC
;  AJMP INTS_CEXT
;--------------------
INTS_CEXT:
  MOV TIFR2,#00H  ;捕获中断标志位清0
  SETB EA
  RETI
;-------------------------------------
;功能:请在这里添加您的数据处理程序
;-------------------------------------
DISP:
  ;......   这里请添加你自己的语句,例 高电平脉宽=(ICRAH_DAT2,ICRAL_DAT2)-(ICRAH_DAT1,ICRAL_DAT1)
  ;......   对得到的数据进行处理,获取所需的值
  ;......   并显示或者传送给上位机

  RET
;-------------------------------------
  END 
;****************************************************************




本文关键字:暂无联系方式综合-其它单片机-工控设备 - 综合-其它