⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 samespeed.c

📁 avr常用功能程序中包含了pwm、adc、中断、定时、i2c等各程序可供开发者直接使用
💻 C
字号:
#include <avr/io.h>
#include <avr/signal.h>
#define stopnum 5
#define delay_time 10000
#define stop_speed 500
unsigned int a,b=0;
unsigned char low,hi;
unsigned int howlong=0,mid1,mid2;			//mid 为脉冲间隔时间
void delay(unsigned int t)
{
	for(;t;t--);
}
SIGNAL(SIG_INPUT_CAPTURE1)
	{    
		 TIMSK=00;                 //close capture interrupt
		 low=ICR1L;					//先读低8位
		 hi=ICR1H;
		 //mid2=mid1;					//mid2为上次值
		 mid1=hi;					//mid1为本次值
		 mid1=mid1<<8;
		 mid1=mid1+low;
		 if(mid1<=65000) OCR1A-=2;
			else OCR1A+=2;
		 //if(ICR1>40000)OCR1A+=2;
		 //if(ICR1<40000)OCR1A-=2;
		 howlong++;
		 //if(howlong==stopnum){PORTB=0X01;howlong=0;delay(65000);}
       	 TIMSK=0X20;          //open capture interrupt
	}
 void main (void)
{    
	DDRB=0XEF;                //PORTB is setting on out and PB4 input
	DDRD=0X20;         		 //设置OC1A为输出
	PORTB=0Xfe;
	TCCR1A=0x82;       		 //OC1A(PD5) is "0",9 BITS PWM   C3,10 bit PWM;c1,8 bit PWM
							//0XC~ 初始电平为1;0X8~ 初始电平为0
	TCCR1B=0X41;       		 //上升捕获   ck/1
	TCNT1=0;               	 //初值
	TIMSK=0X20;          	 //open the capture interrupt捕捉中断开
	OCR1A=500;		 		//占空比=OCR1A/1023
	SREG=0X80;           	 //enable  total interrupt
//当PB4为高时,电机先刹车再短路停止,直到PB4为低;
//当PB4为低时,电机先加速后以最大速度匀速运动,直到PB4再次为高刹车停;
	while(1)
	{ 	
			  	
	};
	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -