zn_dmu 发表于 2013-8-4 17:57:01

跪求帮助,编程问题

我用iccv编程环境下 编了如下一个程序 ,想在pa2口输出1500hz的方波信号,初值计算无误 ,为什么得到的频率是94.7khz?相差太大,而且 ,改变初值时 也没见到有什么变化,请问是怎么回事?
代码
#include<iom16v.h>
#include<iom64v.h>
#include <macros.h>
#pragma interrupt_handler miao:9
void miao()
{
    PORTA^=0X04;//PA2与1异或
TCNT1H=0XEB;//T1初值
TCNT1L=0X2A;
}
void main()
{
   DDRA|=BIT(PA2);
   PORTA|=BIT(PA2);
   
    TIMSK|=BIT(2);
SREG|=BIT(7);

   TCNT1H=0XEB;//定时器1的初值
TCNT1L=0X2A;
TCCR1B=0X01;//普通模式,无预分频,

}






PS,不知道怎么改变了什么,什么都没动啊 ,改变初值下载却成了直流信号!
求解答

longfeix86 发表于 2013-8-4 19:18:43

哥们,你的中断处理函数呢?

zn_dmu 发表于 2013-8-4 19:42:42

本帖最后由 zn_dmu 于 2013-8-4 19:44 编辑




上面那个void miao
void miao()
{
   PORTA^=0X04;//PA2与1异或
TCNT1H=0XEB;//T1初值
TCNT1L=0X2A;
}

我看学习视频是这样写的 啊。。

zn_dmu 发表于 2013-8-4 19:43:58

longfeix86 发表于 2013-8-4 19:18 static/image/common/back.gif
哥们,你的中断处理函数呢?



上面那个void miao
void miao()
{
      PORTA^=0X04;//PA2与1异或
TCNT1H=0XEB;//T1初值
TCNT1L=0X2A;
}

我看学习视频是这样写的,不正确吗

longfeix86 发表于 2013-8-4 20:03:53

你用的是AVR的PWM还是定时器产生的?

richyhuang 发表于 2013-8-4 20:06:16

中断处理函数不是这样写的吧

zn_dmu 发表于 2013-8-4 20:18:15

longfeix86 发表于 2013-8-4 20:03 static/image/common/back.gif
你用的是AVR的PWM还是定时器产生的?

定时器,

zn_dmu 发表于 2013-8-4 20:18:33

richyhuang 发表于 2013-8-4 20:06 static/image/common/back.gif
中断处理函数不是这样写的吧

求指点…

zn_dmu 发表于 2013-8-4 20:21:47

richyhuang 发表于 2013-8-4 20:06 static/image/common/back.gif
中断处理函数不是这样写的吧

采用定时器的的普通模式,利用其溢出中断给输出电平取反,正常应该是在PA2口得到方波,但是出来的是直流信号…

cdwess 发表于 2013-8-4 20:54:39

头文件不对吧,又16又64的

zn_dmu 发表于 2013-8-4 21:06:14

cdwess 发表于 2013-8-4 20:54 static/image/common/back.gif
头文件不对吧,又16又64的

他可以兼容的 。
我在想,是不是因为主函数里面没有循环语句,然后执行一次之后就停止了,不论定时器是不是在工作?教学视频里本来是有一个循环语句的,用来显示要显示的内容,
可是,我加上 while(1);这条语句也没有效果,该怎么弄呢………………………太郁闷了

cdwess 发表于 2013-8-4 21:31:44

M16的定时器1中断溢出向量是9,M64的中断溢出向量向量是15,估计是这里问题

zn_dmu 发表于 2013-8-4 21:48:52

cdwess 发表于 2013-8-4 21:31 static/image/common/back.gif
M16的定时器1中断溢出向量是9,M64的中断溢出向量向量是15,估计是这里问题

哦 ,果然,太感谢了。。文档没看仔细…十分感谢 {:hug:}
页: [1]
查看完整版本: 跪求帮助,编程问题