这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 基础知识 » 请大家帮忙看看 看了4天了,也不知道问题出那里了?

共2条 1/1 1 跳转至

请大家帮忙看看 看了4天了,也不知道问题出那里了?

院士
2006-09-17 18:14:16     打赏
请大家帮忙看看 看了4天了,也不知道问题出那里了?



关键词: 大家     帮忙     看看     看了     不知道     问题     那里    

院士
2006-12-22 22:43:00     打赏
2楼
问 START:
    MOV    SP,#60H
        CLR     CY              ;清除进位位
    MOV    p2,#11111110B   ;p2.0 是输出口
        MOV     p1,#11111111B   ;p1.0 p1.1 p1.2 p1.3是输入口
    MOV     t0_counterH,#0
    MOV     t0_counterL,#0
    MOV     t0h_record,#0
    MOV     t0l_record,#0

        MOV     TMOD,#11H       ;设置工作方式寄存器
        SETB    IT0             ;下降沿触发外部中断0
        MOV     TL0,#00H
        MOV     TH0,#00H
        MOV     TH1,#00H
        MOV     TL1,#00H

    CLR     t0_start_flag
        SETB    EX0             ;开放外部中断0
        SETB    TR1
        SETB    ET1             ;允许T1中断
        SETB    EA              ;CPU开放中断
        CLR     FLAG0
        CLR     FLAG


LOOP:  JNB   FLAG0,LOOP         ;等待INT0中断...

       CLR   EA                 ;关闭总中断
       CLR   FLAG0
       MOV   A,t0_counterL
       CJNE  A,t0l_record,ALTER
       MOV   A,t0_counterH
       CJNE  A,t0h_record,ALTER
       SETB  EA                 ;开放总中断
       LJMP  LOOP

ALTER:
       MOV   t0l_record,t0_counterL
       MOV   t0h_record,t0_counterH

       MOV   R2,#00H            ;送被除数和除数
       MOV   R3,#00H
       MOV   R4,t0_counterH
       MOV   R5,t0_counterL
       MOV   R6,#00H
       MOV   R7,#50

       LCALL NDIV1              ;调用计算子程序

       SETB  EA                 ;开放总中断
WAIT:  JNB   FLAG,WAIT          ;去抖
       CLR   EA                 ;关闭总中断

       CLR   FLAG
       CLR   TR1                ;关闭定时器1
       MOV   t0_H,R4            ;装载数据
       MOV   t0_L,R5

       MOV   A,#0FFH
       SUBB  A,R5
       MOV   t0_R5,A
       MOV   TL1,A

       MOV   A,#0FFH
       SUBB  A,R4
       MOV   t0_R4,A
       MOV   TH1,A

       SETB  TR1                ;启动定时器1
       SETB  EA                 ;开放总中断
       LJMP  LOOP

;;;;;;;;;;;;;; 外部脉冲中断子程序(/INT0);;;;;;;;;;;;;;;;;
INT0P:
        JB      t0_start_flag,NEXT
        SETB    t0_start_flag
        SETB    TR0
        LJMP    over
NEXT:
        CLR     t0_start_flag
        CLR     TR0
        MOV     t0_counterL,TL0
        MOV     t0_counterH,TH0
        MOV     TL0,#00H
        MOV     TH0,#00H
        SETB    FLAG0
over:   NOP
        RETI

;;;;;;;;;;;中断IT1子程序/输出方波中断子程序;;;;;;;;;;;;
IT1P:
       ;clr    EX0
       CLR   TR1                ;关闭定时器1
       MOV   TL1,t0_R5
       MOV   TH1,t0_R4
       CPL   P2.0
       SETB  TR1                ;启动定时器1
       SETB  FLAG
       ;setb  EX0
        RETI

;;;;;;;;;;;;;;;;;;双字节除法子程序;;;;;;;;;;;;;;;;;;;;
除以50(省略.......)
现在的问题是:输出方波是输入方波的25倍,但是频率有跳变.
比如输入方波频率40HZ,但是输出方波频率在961,1000,998之间跳变,请高手帮忙看看怎么回事?谢谢 1: 你得到T0中断时间应当用两次中断时间差求得你只用了一次中断等待,就把计时作为输入周期,这样的结果肯定是错的。解决方法如题 2: 请zysunol详细讲讲,是我/INT0中断有问题吗?我用的是T0计数器呀!

共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]