| 本帖最后由 山水2000 于 2014-6-28 09:36 编辑 
 我做了一个跟据PWM宽度来解码的程序,设计在800uS PWM时解码,但800uS时无法解码,而是800uS的2倍1600uS时解码成功,不明求解,谢谢。
 
 脉宽在800uS是无法反转,而在它的2倍1600uS时才能返转,不明白什么原因,
 https://www.yleee.com.cn/forum.php?mod=image&aid=216513&size=300x300&key=c69ae6a5042337cf&nocache=yes&type=fixnone
 
 
 1.6mS是才能解码,800uS时无法解码,不明白为什么是原来的2倍才能解码成功   
 程序如下,汇编的,我只会一点点汇编,C的不懂。
 /*---------------------------------------------------------------------*/
 /* --- STC MCU Limited ------------------------------------------------*/
 /* --- STC15F104E  T0扩展为外部下降沿中断举例--------------------------*/
 /* --- Mobile: (86)13922805190 ----------------------------------------*/
 /* --- Fax: 86-755-82905966 -------------------------------------------*/
 /* --- Tel: 86-755-82948412 -------------------------------------------*/
 /* --- Web: www.STCMCU.com --------------------------------------------*/
 /* 如果要在文章中应用此代码,请在文章中注明使用了宏晶科技的资料及程序   */
 /*---------------------------------------------------------------------*/
 
 //本示例在Keil开发环境下请选择Intel的8058芯片型号进行编译
 //芯片的工作频率为10.0592MHz
 
 AUXR        DATA    08EH        //辅助寄存器
 
 ;-----------------------------------------------------
 
 ORG   0000H
 LJMP  MAIN                  //复位入口
 
 ORG   000BH                 //中断入口
 LJMP  T0INT
 
 ;------------------------开始-------------------------
 
 ORG   0100H
 MAIN:
 MOV   SP,#3FH
 
 MOV   AUXR,#80H             //定时器0为1T模式
 MOV   TMOD,#04H             //设置定时器0为16位自动重装载外部记数模式
 MOV   A,#0FFH               //设置定时器0初始值
 MOV   TL0,A
 MOV   TH0,A
 SETB  TR0                   //定时器0开始工作
 SETB  ET0                   //开定时器0中断
 
 SETB  EA
 
 SJMP  $
 
 ;----------------------PWM检测------------------------
 //中断服务程序
 
 ;----------------------PWM大于800uS-------------------
 T0INT:
 CALL DELAY            //调用800uS延时,检测小于800uS PWM信号
 
 JB  P3.4,LM           //(高电平转移)小于800uS 就跳转到下一程序则行
 
 
 CPL  P3.0
 CLR  P3.1
 RETI
 ;----------------------PWM小于800uS-------------------
 LM:                       //(小于800uS)运行程序
 CLR   P3.0
 CPL   P3.1                  //将测试口取反
 
 RETI
 
 ;------------------------延时-------------------------
 
 DELAY:
 
 DELAY800US:   ;误差 -0.032552083333us
 MOV R6,#84H
 DL0:
 MOV R5,#20H
 DJNZ R5,$
 DJNZ R6,DL0
 RET
 
 
 ;------------------------结束-------------------------
 
 END
 
 
   
 
 
 
 
 
 |