|
程序如下,仿真结果,刚跳入中断程序超出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周年了!感谢大家的支持与爱护!!
曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……
|