|
问这个问题,我都觉得不好意思,可是我搞了几天就是搞不定这个问题,只好请教各位朋友帮帮忙,看看,我到底是哪里错了?
/*****************************************************
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[TIM1_COMPA] 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次,还是不行,笨鸟啊!! |
阿莫论坛20周年了!感谢大家的支持与爱护!!
知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)
|