T/C0相位修正PWM模式死活就是不输出波形,
问这个问题,我都觉得不好意思,可是我搞了几天就是搞不定这个问题,只好请教各位朋友帮帮忙,看看,我到底是哪里错了?/*****************************************************
Chip type : ATtiny2313V
Clock frequency : 4.000000 MHz
Memory model : Tiny
External SRAM size: 0
Data Stack size : 32
*****************************************************/
#include "mytiny2313.h"
#include <delay.h>
#define uchar unsigned char
#define uint unsigned int
#define sei() #asm("sei")
#define cli() #asm("cli")
#define int0_enable GIMSK|=0X40
#define int0_disable GIMSK&=~(0X40)
uchar dtime=0; //已经延时的时间
uchar ttime=0; //15秒的计数次数
/*函数声明*/
void port_init(void);
void init_devices(void);
//端口初始化
void port_init(void)
{
PORTB=0x00;
DDRB=0xff;
PORTD=0x3f;
DDRD=0x43;
TCCR1A=0x00;
TCCR1B |=((1<<WGM12)|(1<<CS12)|(1<<CS10)); // 系统时钟1024分频,比较匹配清0模式 ,当匹配中断时 TIFR.4 置位
TCNT1H=0x00; //
TCNT1L=0x00;
OCR1AH=0xe4; //匹配值为 58594(E4E2)
OCR1AL=0xe2;
TCNT0=0;
OCR0A=127;
TCCR0A |=((1<<COM0A1)|(1<<COM0A0)|(1<<WGM00)); // 相位修正PWM模式,WGM=5,在升 序计数时发生比较匹配将置位 OC0A ;降序计数时发生比较
// 匹配将清零 OC0A
TCCR0B |=((1<<WGM02)|(1<<CS01)); // 系统时钟8分频
} /*不知道上面的设置有什么问题,OC0A就是不输出PWM波形,只有当OCR0A=0的时候,OC0A输出2.2v的电压
当OCR0A为别的数值的时候,OC0A的脚只是输出0V的电压,没有波形?T/C1工作正常,只是T/C0有问题?*/
/**********************************************************/
void init_devices(void)
{
cli(); //禁止所有中断
MCUCR= 0b00000010;
int0_disable;
sei(); //开全局中断
int0_enable;
}
/************************************************************/
// Timer 1 overflow interrupt service routine
interrupt void delay15s() //延时240*15s=1H
{
ttime++;
if(ttime==241) //240*15s=0.5H
{
dtime++; //够1小时,dtime的值加1
ttime=0;
};
}
// Declare your global variables here
/*********************************************************************************/
void main(void)
{
OSCCAL=0x58;
port_init();
init_devices();
while (1)
{
};
}
非常希望老师指导一下,看了N遍attiny2313的pdf手册,代码改了N次,还是不行,笨鸟啊!! 是不是问题太简单了,各位老师都懒得回答啊,
我用CVAVR自动生成了代码,可是还是不行,用PROTEUS仿真也行,实际烧到板上也不行,郁闷啊,各位大侠指点指点啊,到底是怎么回事,下面是CVAVR自动生成的代码,我只是加了一个按键的代码,按一下按键,OCR0A的值+5,在OC0A(PB2)的输出端通过330的电阻接了一个LED,可是LED不亮,只有OCR0A的值为0的时候,LED亮,PB2的端口有2.2V的电压,但是没有波形,当OCR0A的值为别的数值的时候,PB2端口的电压为0,没有波形,当按着按键不放的时候,LED一闪一闪的微亮,
各位大侠帮帮忙吧,小弟初学,自己搞了很久都不行,
Chip type : ATtiny2313V
Clock frequency : 4.000000 MHz
Memory model : Tiny
External SRAM size: 0
Data Stack size : 32
*****************************************************/
#include <tiny2313.h>
#include <delay.h>
#define key PIND.3
// Declare your global variables here
void main(void)
{
#pragma optsize-
CLKPR=0x80;
CLKPR=0x00;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif
PORTB=0x00;
DDRB=0xFF;
PORTD=0x3f;
DDRD=0x43;
TCCR0A=0xC1;
TCCR0B=0x0A;
TCNT0=0x00;
OCR0A=0x7f;
OCR0B=0x00;
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
GIMSK=0x00;
MCUCR=0x00;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;
USICR=0x00;
ACSR=0x80;
while (1)
{
if(key==0)
{
delay_ms(10);
if(key==0)
{
OCR0A=OCR0A+5;
};
};
delay_ms(800);
};
} 麻烦马老师帮忙看看怎么回事好不好,同样的程序在M16上面运行什么事都有没有,但是在ATTINY2313上面就是不行,真的郁闷啊,不知哪里问题,下面是M16的代码
#include <mega16.h>
#include <delay.h>
#define key PINB.0
void main(void)
{
PORTB=0x09;
DDRB=0x08;
TCCR0=0x72;
TCNT0=0x00;
OCR0=0x00;
while (1)
{
if(key==0)
{
delay_ms(10);
if(key==0)
{
OCR0=OCR0+5;
};
};
delay_ms(500);
};
}
下面是ATTINY2313的代码
#include <tiny2313.h>
#include <delay.h>
#define key PIND.3 //按键输入端
// Declare your global variables here
void main(void)
{
#pragma optsize-
CLKPR=0x80;
CLKPR=0x00;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif
PORTB=0x00;
DDRB=0xFF;
PORTD=0x3F;
DDRD=0x40;
TCCR0A=0xC1;
TCCR0B=0x0A;
TCNT0=0x00;
OCR0A=0x00;
OCR0B=0x00;
while (1)
{
if(key==0)
{
delay_ms(10);
if(key==0)
{
OCR0A=OCR0A+5;
};
};
delay_ms(500);
};
}
真的不知哪里问题啊,怎么就是不行呢? 小弟也刚学AVR 帮不了你! 只能顶下!
希望路过的老师帮下他吧 很造孽的!
页:
[1]