|
#include<avr/io.h>
#include<avr/interrupt.h>
#include<stdint.h>
#include<util/delay.h>
#define _NOP() do { __asm__ __volatile__ ("nop"); } while (0)
#define SET_BIT(x,y) ((x)|=(0x01<<(y))) //置X的第Y位为1
#define CLR_BIT(x,y) ((x)&=~(0x01<<(y))) //清X的第Y位为0
#define CPL_BIT(x,y) ((x)^=(0x01<<(y))) // X的第Y位取反
#define GET_BIT(x,y) (((x)&(0x01<<(y)))==0? 0:1) // 读取X的第Y位,返回(0或1)
#define LET_BIT(x,y,z) ((x)=(x)&((~(1<<(y)))|((z)<<(y)))) //将X的第Y写上Z(0或
#define Y0_ON() CLR_BIT(PORTB, PB0) //
#define Y0_OFF() SET_BIT(PORTB, PB0) //
#define Y1_ON() CLR_BIT(PORTB, PB4) //
#define Y1_OFF() SET_BIT(PORTB, PB4) //
#define X0 GET_BIT(PINB,PB1) //
#define X1 GET_BIT(PINB,PB2) //
#define X3 GET_BIT(PINB,PB5) //
#define X2 GET_BIT(PINB,PB3) //
uint16_t TIME_Count=0;//计数
void T0_RTC_Init(void)
{
asm("cli");// 关中断
TCCR0B=0X00;//STOP
//OCROA=0x5D;
//OCROA=0x5D;
TCNT0=0x5D;//定时T0值
TCCR0A=0X00;//启用
TCCR0B=0X05;//1024分频
MCUCR=0X00;
TIMSK0=_BV(TOIE0);//T0 溢出方式
GIMSK=0X00;
asm("sei");//中断开
}
int main(void )
{
PORTB=0XFF;
DDRB=0x11; //0,3为输出,1235输入!
TIME_Count=0;
T0_RTC_Init();
while(1)
{
if(TIME_Count>=20){ Y0_ON(); } //没有计数 Y0 没有信号
}
}
ISR(TIM0_OVF_vect)
{
TCNT0=0X5D;//245重装10MS
TIME_Count++;
CPL_BIT(PORTB, PB4);//取反
}
以上为原程序!
PB4 脉冲有信号 说明中断没有问!但是TIME_Count 不能自++,,怪啦!!
是不是中断设置有问题!望大神指点!
|
阿莫论坛20周年了!感谢大家的支持与爱护!!
一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。
|