搜索
bottom↓
回复: 5

请帮我分析一下Mega48的T1定时940us的程序

[复制链接]

出0入0汤圆

发表于 2008-3-3 22:08:06 | 显示全部楼层 |阅读模式
程序如下,仿真结果,刚跳入中断程序超出1.25us,后面的中断进入均多出0.12或0.13us,请大侠提供案例程序,谢谢!

.equ    fosc      = 8                       ; FOSC=8.0 MHz
.equ    t1_940us  = 940                     ; time for pre_Vpp
.equ    t1_940init= (t1_940us-1)*8

.def    timer1_count=R19

.INCLUDE "m48def.inc"

       .ORG     $000         ;精确定时产生秒号
STRT25: RJMP    RST25   
     
       .ORG     $00b         ;T1 Capture / CTC mode
        RJMP    T1_OVFB      ;4000133=62*65536-63099=62*$10000-$F67B/故TCC=$F67B

       .ORG     $01b         
RST25:  LDI     R16,HIGH(ramend)
        OUT     SPH,R16
        LDI     R16,LOW(ramend)
        OUT     SPL,R16

        LDI     R16,$00      ;000->T/C停止  
        STS     TCCR1B,R16
        LDI     R16,$02      ;
        STS     TIMSK1,R16   ;允许T/C1的A匹配中断:

        LDI     R16,$00
        STS     TCNT1H,R16   ; C/T1从0开始
        STS     TCNT1L,R16

        LDI     R16,HIGH(t1_940init)  
        STS     OCR1AH,R16   ;写入OCR1A高8位
        LDI     R16,LOW(t1_940init)      ;
        STS     OCR1AL,R16   ;写入OCR1A低8位

        ;STS    TCCR1A, $00     ; COM1A1/COM1A0/COM1B1/COM1B0/-/-/WGM11/WGM10 (默认值:00H)     
        LDI     R16,0b00001001  ;不分頻
        ;运行到此处为4.75us

        STS     TCCR1B,R16      ; ICNC1/ICES1/-/WGM13/WGM12/CS12/CS11/CS10
                          ;WGM13, WGM12, WGM11, WGM10 = 0100 -> CTC模式(MAX=OCR0A)
                          ;CS12,CS11,CS10 = 001 -> Fosc/1 (无分频,000->T/C停止)     ;       
                                       
        SEI                    ;
HH1B:   RJMP    HH1B           ;等待中断

;*************** 中断服务程序区 ***************************
T1_OVFB:LDI     R16,HIGH(t1_940init)  ;第一次进入中断为945us(实际定时为946-4.75=941.25us),为什么多出1.25us
                                      ;第二次进入中断为1886.13us(实际定时为1886.13-946=940.13us),为什么多了0.13us
                              ;第三、四、....的时间差均为940.13或940.12us,难道就没有精确的定时设置么?
        STS     OCR1AH,R16   ;写入OCR1A高8位
        LDI     R16,LOW(t1_940init)      ;
        STS     OCR1AL,R16   ;写入OCR1A低8位
        RETI

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

 楼主| 发表于 2008-3-3 22:11:25 | 显示全部楼层
对了,上述的宏定义如下,仿真结果如上面的解析,我真不知道如何去设置精确定时,请帮忙

.equ    t1_940init= t1_940us*8

出0入0汤圆

发表于 2008-3-4 00:11:24 | 显示全部楼层
你自己先介绍一下你的设计理念和计算过程吧,如果你自己讲不清楚,请先仔细学习AVR定时器的使用.

出0入0汤圆

 楼主| 发表于 2008-3-5 08:54:06 | 显示全部楼层
回复:【2楼】 machao 老师--你自己先介绍一下你的设计理念和计算过程吧,如果你自己讲不清楚,请先仔细学习AVR定时器的使用.  
本人想输出阶段性的方波(如:1(940us)-> 0(20us) -> 1(1080us) -> 0(50us)-> 1(940us)...,所以需要较精确的定时,请马老师如何对那个T/C1进行初始化?谢谢!

出0入0汤圆

发表于 2008-3-5 18:03:21 | 显示全部楼层
如果采用4M系统时钟(要外接4M晶体),定时器计数脉冲为1分频,那么一个时钟脉冲宽度为0.25us.

T/C1工作在比较匹配触发输出方式,在每次的比较匹配中断中改变比较匹配寄存器的值,顺序如下:

1(3758) -> 0(79) -> 1(4319) -> 0(199) -> 1(3758)......

肯定100%的精确.

如果还不明白,认真学习打基础吧.

出0入0汤圆

 楼主| 发表于 2008-3-5 20:55:35 | 显示全部楼层
谢谢您!马老师
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-25 22:15

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表