打印

求助单片机定时器小问题

[复制链接]
2506|18
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yxcool08|  楼主 | 2007-5-29 16:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
 
     fosc为6MHz。用t0,p1.0产生一个矩形波,高电平宽50微秒,低电平宽300微秒
                
                                                       谢谢了

相关帖子

沙发
conwh| | 2007-5-29 17:18 | 只看该作者

可惜书白念了

使用特权

评论回复
板凳
yxcool08|  楼主 | 2007-5-29 17:25 | 只看该作者

我是正在学的学生,定时器中断不是很熟

使用特权

评论回复
地板
z_no1| | 2007-5-29 17:35 | 只看该作者

不熟就要学,找书,查以前的贴。

没有谁一开始就会。但有的人肯下工夫去找,有的只指望别人。要别人帮助,自己要让人认为已经努力找过资料了。没有人有兴趣把书上的东西抄到网上。

使用特权

评论回复
5
diannaoza| | 2007-5-29 17:44 | 只看该作者

定时0产生50us_300us占空比的频率。

     fosc为6MHz。用t0,p1.0产生一个矩形波,高电平宽50微秒,低电平宽300微秒
方法1:标志50us计数
方法2:装入不同时间到定时0,50us装一次,300us装一次

org 0h
ajmp beg
org 000bh
ajmp time00
reti
beg:
mov tmod,#01;;time0方式1
mov tcon,#55h;;
mov ea,#82h

mov p1,#0ffh
setb p1.0
loop:
    jnb p1.0,cod2
    code1:mov th0,#(65536-25)/256;;;50us;;h
          mov tl0,#(65536-25)mod 256;;50us;;h
    cod2:


mov pcon,#01h

ajmp loop

time00:
cpl p1.0
mov th0,#(65536-150)/256;;300us;;l
mov tl0,#(65536-150)mod 256;;300us;;l
reti



使用特权

评论回复
6
conwh| | 2007-5-29 17:51 | 只看该作者

要对的起学费呀

TIME*50uS        EQU    25
;==================================================================
MAIN-PROGRAM:
        MOV    TMOD,            #22H
        MOV    TL0,            #TIME*50uS
        MOV    TH0,            #TIME*50uS
        MOV    TIME_COUNT,        #6
        CLR    LOW.OUTPUT
        SETB    EA
        SETB    ET0
        SETB    TR0
MAIN-PROGRAM-LOOP:
        SJMP    MAIN-PROGRAM-LOOP
TIMER-0:
        JB    LOW.OUTPUT,        TIMER-0-LOW-OUTPUT
        CLR    PORT.OUTPUT
        SETB    LOW.OUTPUT
        RETI
TIMER-0-LOW-OUTPUT:
        DJNZ    TIME_COUNT,        TIMER-0-END
        MOV    TIME_COUNT,        #6
        SETB    PORT.OUTPUT
        CLR    LOW.OUTPUT
TIMER-0-END:
        RETI

使用特权

评论回复
7
gyt| | 2007-5-29 19:07 | 只看该作者

这相当于一道习题吧?

使用特权

评论回复
8
yxcool08|  楼主 | 2007-5-29 19:34 | 只看该作者

o

不好意思,让各位精英破笔了,我是自学的,没有老师教,请各位指

使用特权

评论回复
9
5880527| | 2007-5-29 19:35 | 只看该作者

吹毛求疵

唠叨两句,这么小的时间单位,最小指令时间单位都是2us了,所以上面的程序应该考虑一下中断响应时间延迟,否则精度不高,想要在程序方面达到理论上的50us和300us不是两句话能解决的,我估计太钻牛角尖了哈:)

使用特权

评论回复
10
yxcool08|  楼主 | 2007-5-29 19:41 | 只看该作者

en

使用特权

评论回复
11
yxcool08|  楼主 | 2007-5-29 19:45 | 只看该作者

恩,那是不是还要考虑指令本身的执行时间呢,我想的话,如果考虑的话,又该怎么样计算啊?是不是就是按照每条指令占几个指令周期啊?



使用特权

评论回复
12
gyt| | 2007-5-29 19:46 | 只看该作者

就是要算这个

使用特权

评论回复
13
conwh| | 2007-5-29 20:10 | 只看该作者

不知道时钟的工作方式吧?不知道自动重装的模式吧?

自己好好看看书

使用特权

评论回复
14
5880527| | 2007-5-29 20:48 | 只看该作者

再罗嗦一下

对于LZ的问题来说定时器自动重装也不准,需要在中断响应后的T0值每次都一样的时候执行输出才可以准确,呵呵,有点钻进牛角尖了哈

使用特权

评论回复
15
conwh| | 2007-5-29 23:58 | 只看该作者

固定的几个指令周期还是可以调整过来的。

如果你嫌麻烦,还可以使用具有PWM的51芯片来做,这样基本可以满足你的要求。这个就是一个小习题,课堂的习题,几分钟的事情。

使用特权

评论回复
16
cjf512| | 2007-6-1 00:05 | 只看该作者

re

刚开始学更要自己动手调试一下!自学也有书的吧!好好看点书!
如果真的自己弄过了,还搞不懂,再问别人,那样收获会更大!
我以前也是自学的,但是,以前都不知道有21IC这个网(让大家见笑了).
都是靠自己慢慢调试出来的!
大虾们,别抛砖!小虾的一点点经验而已!不对之出,欢迎指教!

使用特权

评论回复
17
conwh| | 2007-6-1 05:31 | 只看该作者

刚开始都走过弯路的

使用特权

评论回复
18
gyt| | 2007-6-1 09:53 | 只看该作者

那是

必由之路

使用特权

评论回复
19
nevsayno| | 2007-6-1 13:40 | 只看该作者

慢慢来

使用特权

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

本版积分规则

9

主题

20

帖子

0

粉丝