?? motor.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 + -