下面贴出一个舵机 的控制程序 。。多路。只需要在 中断程序中加代码就行
//头文件
#include <ioM16v.h>
#include <macros.h>
/*------宏定义------*/
#define uchar unsigned char
#define uint unsigned int
uint pwm1,pwm2,pwm3,pwm4,base;
//端口初始化
void port_init(void)
{
PORTA = 0xF0;
DDRA = 0xF0;
PORTB = 0x00;
DDRB = 0x00;
PORTC = 0x00;
DDRC = 0x00;
PORTD = 0x00;
DDRD = 0x00;
}
//定时器T2初始化
void timer2_init(void)
{
TCCR2 = 0x00;//停止定时器
ASSR = 0x00;//异步时钟模式
TCNT2 = 0xE2;//初始值
OCR2 = 0xE1;//匹配值
TIMSK |= 0x40;//中断允许
TCCR2 = 0x02;//启动定时器
}
//T2溢出中断服务程序
#pragma interrupt_handler timer2_ovf_isr:5
void timer2_ovf_isr(void)
{
TCNT2 = 0xE2;
base++;
if((base*20)<pwm1)
PORTA|=BIT(4);
else PORTA&=~BIT(4);
if(base==1000)
{
base=0;
PORTA|=BIT(4);
}
}
void init_devices(void)
{
CLI(); //禁止所有中断
MCUCR = 0x00;
MCUCSR = 0x80;//禁止JTAG
GICR = 0x00;
port_init();
timer2_init();
SEI();//开全局中断
}
//主函数
void main(void)
{
init_devices();
pwm1=1500;
while(1)
{
NOP();
}
}
用户377235 2012-11-3 00:32
用户521115 2011-3-10 11:08
用户521115 2011-3-10 11:07
用户521115 2011-3-10 11:05
用户521115 2011-3-10 11:05
用户521115 2011-3-10 11:03
用户521115 2011-3-10 11:02
用户521115 2011-3-10 10:58
用户521115 2011-3-10 10:58
用户521115 2011-3-10 10:57