打印

ATMEGA16输出线性可调方波程序问题

[复制链接]
2571|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
2001myp|  楼主 | 2009-10-16 17:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
知道很多高手讨厌菜鸟直接上传一大段程序,但小弟实在比较菜,怕有任何问题,另外程序很小,所以希望高手指点下
我这里用的是ATMEGA16,输入利用AD转换功能,通过电位器调节电压,读取AD值,并将所得的AD转换值高八位赋值给定时器高八位,同理第八位赋值给定时器第八位,旋转电位器,AD值变化,则定时器初值变化,实现周期和频率的变化。
程序如下:
#include <iom16.h>   
#include<intrinsics.h>
#define uchar unsigned char
#define uint  unsigned int
uint GAOWEI,DIWEI;  
uchar i,status,cnt=0;   
/************************************************/
void port_init(void)  
{     
PORTA = 0xFF;   
DDRA  = 0xFF;   
PORTB = 0xFF;   
DDRB  = 0xFF;   
PORTC = 0xFE;     
DDRC  = 0xFE;   
PORTD = 0xFF;  
DDRD  = 0xFF;   
}      
/************************************************/
void adc_init(void)   
{     
ADCSRA = 0xE3;     
ADMUX = 0xc7;   
}     
//***************************
void timer1_init(void)         
{     
TCNT1H = 0xCF;     
TCNT1L = 0x2C;     
TCCR1B = 0x03;  
//定时器0的计数预分频取64
}
/***************************************************/
#pragma vector=TIMER1_OVF_vect
__interrupt void timer1_ovf_isr(void)
{
TCNT1H = GAOWEI;   
TCNT1L = DIWEI;
do {status=TIFR&0x04;}while(status!=0x04);
  TIFR=0x04;
                if(cnt>=0) {cnt++;PORTB = ~PORTB;}
  if(cnt>=116) {PORTB = 0x00;}
                if(cnt>=120)  {cnt=0; }   
}
/*********************************************/
void init_devices(void)  //芯片的初始化子函数
{      
port_init();   
timer1_init();   
adc_init();
TIMSK=0x04;
SREG=0x80;   
}      
//=========================
uint ADC_Convert11(void)  
{uint temp1;   
temp1=ADCL;
return(temp1);   
}
//=========================
uint ADC_Convert12(void)  
{uint temp2;  
temp2=ADCH;
return(temp2);  
}
/***********************/
void delay(uint k)   
{
uint i,j;
  for(i=0;i<k;i++)
  {  
  for(j=0;j<140;j++);
  }
}
/***********************/
void main(void)   
{      
init_devices();   
  while(1)     
  {  GAOWEI =ADC_Convert12();
                DIWEI =ADC_Convert11();
     
delay(10); }
}

相关帖子

沙发
2001myp|  楼主 | 2009-10-16 17:55 | 只看该作者
上面的程序烧录后输出是一个固定频率方波,不可调,郁闷中

使用特权

评论回复
板凳
gaohq| | 2009-10-16 22:46 | 只看该作者
ADC设置为连续模式?

使用特权

评论回复
地板
2001myp|  楼主 | 2009-10-17 06:54 | 只看该作者
是啊,设置为自由连续模式

使用特权

评论回复
5
2001myp|  楼主 | 2009-10-17 18:31 | 只看该作者
这么快沉了啊

使用特权

评论回复
6
gaohq| | 2009-10-18 13:12 | 只看该作者
帮顶。

使用特权

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

本版积分规则

59

主题

210

帖子

0

粉丝