avr或51单片机pwm控制小车左右电机并调速
avr或51单片机pwm控制小单左右单机单速~单外单管单单的程序并 // Crystal: 8.0000Mhz
#include
#include
#define uchar unsigned char
#define uint unsigned int
uint discrepancy=0;
//function declaration
void port_init(void);
void motor(uchar index, uchar speed);//input PWM wave
void sensor_state(void);//get the running condition
void revise_to_line(void );//0=run forward,1=left,2=right,3=sever left,4=sever
right
void delayms(uint MS) ;
//call this routine to initialize all peripherals
void init_devices0(void)
{
//stop errant interrupts until set up
CLI(); //disable all interrupts
timer0_init();
MCUCR = 0x00;
GICR = 0x00;
TIMSK = 0x02; //timer interrupt sources
SEI(); //re-enable interrupts
//all peripherals are now initialized}
//initialize T/C1
void timer1_init(void)
{
TCCR1B = 0x00;//停止定单器
TIMSK |= 0x00;//中允单断
TCNT1H = 0x00;
TCNT1L = 0x00;//初始单
OCR1AH = 0x00;
OCR1AL = 0xF0;//匹配A单
OCR1BH = 0x00;
OCR1BL = 0xF0;//匹配B单
ICR1H = 0xFF;
ICR1L = 0xFF;//单入捕捉匹配单
TCCR1A = 0xA1;
TCCR1B = 0x01;//启单定单器
}
//call this routine to initialize all peripherals
void init_devices1(void){
CLI(); //禁止所有中断
timer1_init( );
MCUCR = 0x00;
MCUCSR = 0x80;//禁止JTAG
GICR = 0x00;
SEI();//单全局中断
}
//PWM 单速,通单改单占空比~周期性地单单使能端~单单单机的有效单单。
//use PD4,PD5 to output PWM,speed(0~255)
void motor(uchar index, uchar speed)
{
if(index==1)
{OCR1AH = 0x00;
OCR1AL =speed;
}
if(index==2)
{OCR1BH = 0x00;
OCR1BL =speed;
}
}
//delay time by ms
void delayms(uint MS) {
uint i,j;
for( i=0;i