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

📄 motor.c

📁 AVR单片机应用开发指南及实例,包含许多实例,挺不错
💻 C
字号:
/*******************************************/
/*            广州天河双龙电子公司         */
/*            http://www.sl.com.cn         */
/*功能:  PA口控制八路伺服电机。           */
/*注意:伺服电机数据线是I/O-VCC-GND        */
/*******************************************/
//         ATMEGA16  晶振 8MHz             //
#include <iom16v.h>
#include <macros.h>
#include <diy0206.c>
#pragma interrupt_handler timer1:9

//*********************************************************************
#define  delay_time 0xb1e0			//延时20 ms

//以下常量对应的角度(n为负)			 n90     n45	0	   45	  90
//const  unsigned char loc_angle[10]={0x01f4,0x03e8,0x05dc,0x07d0,0x0904};
const  unsigned int loc_angle[8]={0x01f4,0x03e8,0x05dc,0x07d0,0x0904,0x07d0,0x05dc,0x03e8};
unsigned char pwm_number=0;	//脉冲数
unsigned char pwm_outword=1;	//输出命令
unsigned int  delay_timel,delay_timeh;	//低电平延时时间,高电平延时时间
//********************************************************************
void timer1(void) 	//T0定时中断服务子程序
{
	
	if (pwm_outword!=0x80)
	{
		
		TCNT1=delay_timeh;
		PORTA=pwm_outword;        	//输出控制命令
		pwm_outword<<=1;		//控制命令左移一位
		
	}
	else 
	{
		
		pwm_outword=1;
		TCNT1=delay_timel;
		PORTA=0x00;			//输出低电平
		pwm_number++;			//低电平输出完成,脉冲数++
		
	}
	
	

}
//*******************************************************************
void  time1_init()			//定时器初始化
{
	TCCR1A=0x00;
	TCCR1B=0x00;          //停止定时器1
	TIMSK=0x04;           //TIMER1溢出中断使能
	TCNT1H=0x44;			//设置中断初值
	TCNT1L=0x44;
	SEI();				//使能全局中断
	TCCR1B=0x02;	//启动T1,8分频
}
//**********************************************************************
void  main(void)
{
	unsigned char i_temp;	//临时变量
	unsigned int temp;  //临时变量
//********************************************************************
	DDRA=0xff;              //PA口输出
	PORTA=0xff;
	mic_startup();			//调用声控
	for(i_temp=0;i_temp<10;i_temp++)	//灯闪烁10次
	{	
		PORTA=0xff;			//灯灭
		delay_ms(500);	//延时0.5S
		PORTA=0x00;			//灯亮
		delay_ms(500);	//延时0.5S
	}
	time1_init();
	while(1)
	{      
	  for (i_temp=0;i_temp<8;i_temp++)	//8个位置依次切换
		 {
			delay_timeh=0xffff-loc_angle[i_temp];
			delay_timel=delay_time+loc_angle[i_temp]*8;			
			while(pwm_number<8);
			pwm_number=0;
		
	      }			//for 结束
		    
		
	      }			//while 结束
	     
	  
}						//main函数结 

⌨️ 快捷键说明

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