#include<iom16v.h>
#include<macros.h>
#define uint unsigned int
void port_init(void)
{DDRD&=~0X02;//PD1输入
PORTD|=0X02;
}
void pwm_init(void)
{
DDRD|=0X70;//PD4 5 6输出
PORTD|=0X40;//PD6置位 作驱动器方向信号
TCCR1A|=0xb2;//ocra 比较匹配清零 ocrb 比较匹配置位
TCCR1B|=0x1b;//模式14,TOP值由ICR1决定 时钟64分频
ICR1H=0X01;//计300个数
ICR1L=0X2C;
OCR1AH=0X00;
OCR1AL=0X3C;//OCRA 60 20%占空比
OCR1BH=0X00;
OCR1BL=0X78;//OCRB 120 40%
TIMSK|=0X1C;//使能中断
SREG|=0X80;//开全局中断
}
void delay(void)
{
uint a,b;
for(a=0;a<2000;a++)
for(b=0;b<1000;b++)
;
}
void inter_init(void)
{
DDRC|=0X01;//PD3输出 接继电器引脚
PORTC&=~0X01;//PD3清零
MCUCR|=0X02;//外部中断0,下降沿触发
GICR|=BIT(6);//使能外部中断0
DDRD&=~BIT(2);//引脚初始化,PD2输入
PORTD|=(1<<2);//上拉电阻
SREG|=BIT(7);//总中断开关
}
void main(void)
{
port_init();
inter_init();
pwm_init();
while(1)
{if(!(PIND&0X02))
{PORTC&=~0X01;
}
}
}
#pragma interrupt_handler inter0:2
void inter0(void)
{
PORTC|=BIT(0);
}
|