|
我的问题是在写超声波测距实验中碰到的。我的思路是:让从超声波接收电路得到的高电平经单片机的AIN0与AIN1的0.5V电压进行比较,使模拟比较器控制和状态寄存器ACSR的ACO置位,比较器的输出被直接连接到输入捕捉的前端逻辑,从而使得比较器可以利用T/C1 输入捕捉中断逻辑的噪声抑制器及触发沿选择功能。
这是部分程序,已经用CVAVR编译通过,并用VMLAB仿真到T/C1中的模拟比较器控制和状态寄存器ACSR中的ACO位已经有高电平输出,却在输入捕捉寄存器中ICR1中检测不到捕获到的时间值?如果这样写不对,应该怎样使用输入捕获使能功能?请CVAVR高手多多指教!
/*****************************************************
This program was produced by the
CodeWizardAVR V1.24.1d Standard
Automatic Program Generator
Chip type : ATmega8515L
Clock frequency : 3.686400 MHz
*****************************************************/
#include <mega8515.h>
unsigned int rising_time;
unsigned char mid=0;
interrupt[TIM1_CAPT] void timer1_capt_isr(void)
{
mid=ACSR&0x20;
if(mid)
{
rising_time=(256*ICR1H)+ICR1L;
}
ACSR=0x07;
}
void main(void)
{
TCCR1A=0x00; //普通模式
TCCR1B=0xC1; ////输入噪声抑制,上升沿触发,无分频系数
ACSR=0x07;//模拟比较器触发输入捕获使能
TIMSK=0x08;// T/C1 capture :on
#asm("sei");
while (1)
{
..............
}
} |
阿莫论坛20周年了!感谢大家的支持与爱护!!
一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。
|