P89LPC932A1测脉冲宽度汇编程序

发布者:心境恬淡最新更新时间:2018-04-12 来源: eefocus关键字:P89LPC932A1  脉冲宽度  汇编程序 手机看文章 扫描二维码
随时随地手机看文章

/********************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 
;****************************************************************


关键字:P89LPC932A1  脉冲宽度  汇编程序 引用地址:P89LPC932A1测脉冲宽度汇编程序

上一篇:善用微处理器简化电源供应器设计
下一篇:基于P87C591单片机的信号采集节点的设计

推荐阅读最新更新时间:2024-03-16 15:59

[ARM裸机程序][6]ARM GNU汇编程序示例
ARM GNU汇编程序框架 .section .data 初始化的数据 .section .bss 未初始化的数据 .section .text .global _start _start: 汇编代码 入口地址 汇编程序的示例 //start.s .bass .text .global _start _start: mov r1,#1 mov r2,#2 add r3,r1,r2 _loop: b _loop //Makefile all:start.o arm-linux-ld -Ttext 0x30000000 -o start.elf start.o start.o:star
[单片机]
51单片机驱动ADC0809片内RAM存转换结果汇编程序
;入口:通道1的模拟量, ;出口:片内RAM开辟一个数据区,用于存放A/D转换结果, IN0 IN7的结果 ;分别存于30H 37H 8个单元中 AD0809: MOV R1,#01H ACALL AD0809_1 RET AD0809_1:MOV DPTR,# ;通道地址 MOV A,R1 ;送通道号 MOVX @DPTR,A;启动转换 WAIT: NOP JNB R1.7,WAIT ;P1.7为EOC信号 为1完成,0,转换中。 MOVX A,@DPTR ;转换完成 XCH A,R1 ADD A,#30H XCH A,R1 MOV @R1,A RET
[单片机]
PWM控制LED灯渐亮渐灭汇编程序
;******************************************************************* ;* 演示程序 - PWM控制LED灯渐亮渐灭 * ;* 邮箱: mcuinfo@163.com * ;* 作者: keel * ;* 时间: 2005/11/30 * ;*【版权】Copyright(C)晶格电子 All Rights Reserved* ;*【声明】此程序仅用于学习与参考,引用请注明版权和作者信息! * ;******************************************************************* ; PWM 控制 LED 灯渐亮渐灭
[单片机]
由与门和单稳态电路构成的脉冲宽度甄别器
由与门和单稳态电路构成的脉冲宽度甄别器
[模拟电子]
由与门和单稳态电路构成的<font color='red'>脉冲宽度</font>甄别器
51单片机一种精确的判断脉冲宽度的方法
学到了一种很精确测量脉冲宽度的方法。 具体思想是: 利用定时器的内部资源(当GATE = 1时,计数器的停止和开始受TR和INT的电平共同控制),我们这里用定时器0 ,将外部脉冲接在INT0上,配置定时器0和外部中断0。当脉冲是高电平时,计数器(TH0,TL0)计数,当计数器溢出时,触发定时器中断。当脉冲为下降沿时,触发外部中断,此时停止计数,所记下的时间也就是脉冲的宽度。 代码如下: #include reg51.h #include intrins.h #define uint unsigned int #define uLint unsigned long int //长整型 uLint pulse_w
[单片机]
51单片机一种精确的判断<font color='red'>脉冲宽度</font>的方法
pic单片机驱动SM311电源开关汇编程序
;LIST P=SM311, CLOCK=4MHZ, WDT=DISBALE,INT=ENABLE ;----------------------------------------------------------- ; LOUDOUT RA0 1 14 RA1 WHITE_BULB ; SIGNAL_IN RB7 2 13 RA2 BLUE_BULB ; READ RB6 3 12 RA3 BROWN_BULB ; VDD 4 11 VSS ; K1 RB5 5 10 RB0 YELLOW_BULB ; K2 RB4 6
[单片机]
一分钟看懂51控制的MT8880双音频收发器的汇编程序及源代码
ORG 0000H AJMP MAIN : : ;******************** ;* 8880 初始化 * ;******************** MAIN: MOV A, #90H MOV P0, A ; 写 8880CRA MOV P0, A ; 写 8880CRA MOV A, #98H MOV P0, A ; 写 8880CRA MOV A, #90H MOV P0, A ; 写 8880CRB MOV A, #94H MOV P0, A ; 写 8880CRA,8880 模式 1 为 DTMF ,IRQ : : ;**************** ;* 接收程序 * ;****************
[单片机]
一分钟看懂51控制的MT8880双音频收发器的<font color='red'>汇编程序</font>及源代码
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved