打印

为什么截取到的定时器值老是在变?

[复制链接]
3248|30
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
程疗匠人|  楼主 | 2009-3-1 22:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
电动车数码显示速度表DIY过程中的疑惑·~~ 

                        ORG     0000H
                        LJMP    INIT
                        ORG     0003H
                        LJMP    T0INT                   ;外中断0中断
                        ORG     0030H
;-----------------------------------------------------------------------------------
INIT:                   MOV     TMOD,#11H               ;T0方式1,16位定时,T1门控(p3.3)
                        MOV     SP,#70H                 ;堆栈区设置
                        MOV     SCON,#40H
                        MOV     RCAP2H,#0FFH
                        MOV     RCAP2L,#0DCH
                        MOV     TH2,#0FFH
                        MOV     T2CON,#34H

                        SETB    IT0                     ;外部中断0中断方式设置为下降沿
                        SETB    EA
                        SETB    EX0
                        SJMP    $
t0int:  clr     tr1
        mov     sbuf,th1
        clr     ti
        jnb     ti,$
        mov     sbuf,tl1
        clr     ti
        jnb     ti,$
        mov     th0,#0
        mov     tl0,#0
        setb    tr1
        reti
        
        end

00 A4 83 00 00 A4 8C 00 00 A4 95 00 00 A4 9E 00 00 A4 A7 00 00 A4 B0 00 00 A4 B9 00 00 A4 C2 00 00 A4 CB 00 00 A4 D4 00
00 A4 DD 00 00 A4 E6 00 00 A4 EF 00 00 A4 F8 00 00 A5 01 00 00 A5 0A 00 00 A5 13 00 00 A5 1C 00 00 A5 25 00 00 A5 2E 00
00 A5 37 00 00 A5 40 00 00 A5 49 00 00 A5 52 00 00 A5 5B 00 00 A5 64 00 00 A5 6D 00 00 A5 76 00 00 A5 7F 00 00 A5 88 00
00 A5 91 00 00 A5 9A 00 00 A5 A3 00 00 A5 AC 00 00 A5 B5 00 00 A5 BE 00 00 A5 C7 00 00 A5 D0 00 00 A5 D9 00 00 A5 E2 00
00 A5 EB 00 00 A5 F4 00 00 A5 FD 00 00 A6 06 00 00 A6 0F 00 00 A6 18 00 00 A6 21 00 00 A6 2A 00 00 A6 33 00 00 A6 3C 00

00 5E D2 00 00 5E DB 00 00 5E E4 00 00 5E ED 00 00 5E F6 00 00 5E FF 00 00 5F 08 00 00 5F 11 00 00 5F 1A 00 00 5F 23 00

00 85 7B 00 00 85 84 00 00 85 8D 00 00 85 96 00 00 85 9F 00 00 85 A8 00 00 85 B1 00 00 85 BA 00 00 85 C3 00 00 85 CC 00
00 85 D5 00 00 85 DE 00 00 85 E7 00 00 85 F0 00 00 85 F9 00 00 86 02 00 00 86 0B 00 00 86 14 00 00 86 1D 00 00 86 26 00

00 B4 F7 00 00 B5 00 00 00 B5 09 00 00 B5 12 00 00 B5 1B 00 00 B5 24 00 00 B5 2D 00 00 B5 36 00 00 B5 3F 00 00 B5 48 00
00 B5 51 00 00 B5 5A 00 00 B5 63 00 00 B5 6C 00 00 B5 75 00 00 B5 7E 00 00 B5 87 00 00 B5 90 00 00 B5 99 00 00 B5 A2 00
00 BA F1 00 00 BA FA 00 00 BB 03 00 00 BB 0C 00 00 BB 15 00 00 BB 1E 00 00 BB 27 00 00 BB 30 00 00 BB 39 00 00 BB 42 00
00 BB 4B 00 00 BB 54 00 00 BB 5D 00 00 BB 66 00 00 BB 6F 00 00 BB 78 00 00 BB 81 00 00 BB 8A 00 00 BB 93 00 00 BB 9C 00
 
 

相关帖子

沙发
程疗匠人|  楼主 | 2009-3-1 22:01 | 只看该作者

电机霍尔输出的波形

使用特权

评论回复
板凳
程疗匠人|  楼主 | 2009-3-1 22:02 | 只看该作者

轮子的速度一直保持在最高速,但是截获的定时器值为什么

为什么输入到中断的信号周期没变,截取到的定时器值一直在变?

使用特权

评论回复
地板
雁舞白沙| | 2009-3-1 22:07 | 只看该作者

班门弄斧说一下

每次进入中断后需要重新初始化定时器!

你的程序没有看!

不对之处还请见谅!

使用特权

评论回复
5
程疗匠人|  楼主 | 2009-3-1 22:21 | 只看该作者

在中断程序中有对定时器清零的,不明白为什么还是这样

t0int:  clr     tr1
        mov     sbuf,th1
        clr     ti
        jnb     ti,$
        mov     sbuf,tl1
        clr     ti
        jnb     ti,$
        mov     th0,#0
        mov     tl0,#0
        setb    tr1
        reti

使用特权

评论回复
6
jerkoh| | 2009-3-1 22:25 | 只看该作者

re

楼主的RIGOL示波器不错 
我也在用 感觉还行~

使用特权

评论回复
7
HotC51| | 2009-3-1 23:36 | 只看该作者

不知这是那个师傅教的~~~

使用特权

评论回复
8
lyjian| | 2009-3-2 08:09 | 只看该作者

使用特权

评论回复
9
xieyuanbin| | 2009-3-2 08:18 | 只看该作者

中断没有抗干扰。

还要做平均值。
电机的霍尔也不是很对称,如果数据成周期性变化的话,9.9成是这个问题
中断没有抗干扰,也是个问题。

使用特权

评论回复
10
程疗匠人|  楼主 | 2009-3-2 09:39 | 只看该作者

水平不烂也不会跟大伙求助了是不~~~~~

中断抗干扰是指硬件还是软件?xieyuanbin ?

使用特权

评论回复
11
常来21ic| | 2009-3-2 10:59 | 只看该作者

冲你ID 帮顶

哈哈

使用特权

评论回复
12
呆板书生| | 2009-3-2 11:44 | 只看该作者

冲着lz这ID

就该扁,

疗和序,视线不清

使用特权

评论回复
13
5880527| | 2009-3-2 12:09 | 只看该作者

程序有问题,外部信号也有问题

哪怕无误差的脉冲进来你这程序也检不准,再说这样的数据都是需要取平均值的。电机高速也会有很大误差的,没接触过电瓶车,但电压,电流,温度,负载...哪有那么理想啊。对了,那玩意精度要求没这么高吧

使用特权

评论回复
14
xieyuanbin| | 2009-3-2 12:25 | 只看该作者

硬件和软件都有问题

本身霍尔信号就不是那么干净,不知道你那边有没有滤波电容?
如果不那么干净的信号进入单片机,误触发中断是在所难免的,所以软件在抗干扰方面也需要增加确认次数以消除干扰。

使用特权

评论回复
15
程疗匠人|  楼主 | 2009-3-2 14:01 | 只看该作者

霍尔信号的处理是这样的:

    原来没有加电容滤波,发现一堆毛刺,后来加了104电容滤波后就是上面那张图的波形了,然后就出现了我所描述的情况,加2个104也是这样。后来干脆加1uF的电容,这下可好,电机直接发抖了。呵呵。

    程序有问题的话是什么问题呢?我不用中断用查询方式也是这样的情况,但是好些,奇怪的是经常出现只能得到一半得的速度,例如说30KM/H的时候经常跳出一些15.1KM/H的数据出来。

    那么程序应该用什么样的结构呢?

匠人说:ID只是个代号而已,只要不做坏事就行~~~

使用特权

评论回复
16
红心j| | 2009-3-2 15:38 | 只看该作者

CLR TR1太烂,后面的清零更烂,清晚了

在外部中断程序里等待发送2个串行数据,必然会跟不上高频检测

使用特权

评论回复
17
程疗匠人|  楼主 | 2009-3-2 16:07 | 只看该作者

CLR太烂,那有什么不烂的指令能让定时器停下来呢?


我认为:
    进入中断后当然要让定时器停下来,目前只能知道除了用门控位控制和TR位控制启动和停止外,不知道还有什么方法。
    清零为什么说清晚了?如果清早了岂不是连值都拿不到吗?再说定时器已经停下来了,何来清晚一说呢?
    外部中断的最高频率为130赫兹,折算成周期是大约8MS,波特率9600BPS发送4字节=40bit,也是4.16ms这样啊,测试程序没有其他任务占用CPU,加上除法等程序也不过6ms的CPU时间。


以上几个问题,小弟实在是想不通,望高人指点啊~~~

使用特权

评论回复
18
红心j| | 2009-3-2 16:45 | 只看该作者

没必要让定时器停下来

发送完数据才清定时器开始计下一脉冲宽度,当然是晚了,这还有什么好说的?

使用特权

评论回复
19
wh6ic| | 2009-3-2 17:11 | 只看该作者

怎么同一个问题到处都是?

“新手园地”转过来的:

试试波特率增加一倍看看 

 既然有T2,建议使用其捕捉功能来做这件事,不要用它做波特率发生器。INT0外部控制定时器方式只能测脉冲的高电平,万一输入信号占空比不是50%就比较麻烦了。

你现在是不是2400的波特率?
 
 

 
 

使用特权

评论回复
20
dxpol432| | 2009-3-2 18:02 | 只看该作者

你到底要对哪个timmer 操作?

你用的是8052兼容的型号,我看不懂你要干什么

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

29

主题

224

帖子

0

粉丝