欢迎来到天天文库
浏览记录
ID:14291256
大小:45.50 KB
页数:5页
时间:2018-07-27
《附录2:16路舵机驱动器代码》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、附录2:16路舵机驱动器代码/********************************************************工程名:SERVO-SYSTEM1.0*文件名:servo-sysetm.c主函数文件*功能:提供底层16路PWM信号*CPU:M8*其余主器件:74HC595B1、4N25、40106*当前版本:1.0*作者:YY*完成日期:2008--3-12********************************************************///
2、#include"servo-system.h"#include#include"common.h"#include"servo.h"#include"usart.h"externunsignedcharusart_ok;externunsignedcharpwm_temp_i;intmain(void){wdt_disable();cli();usart_init();io_init();T1A_init();reset_595();sei();while(1){if(1==us
3、art_ok){usart_ok=0;if(1==inceput_pwm()){//while(0==(UCSRA&(1<4、008--3-4********************************//************************************当前版本1.1*完成日期2008-3-6*修改:SIGNAL(SIG_OUTPUT_COMPARE0)函数*增加:reset_595()***********************************//***********************************当前版本1.2*完成日期2008-3-7*修改:用T1_A代替T0***5、********************************/#include"servo.h"unsignedcharpwm_i;unsignedintpwm[10]={742,252,476,1008,346,882,700,322,1000,50000};/*********IO口初始化***************/voidio_init(void){DDRC=_BV(PC1)6、_BV(PC0);//PC0提供595的移位脉冲,PC1提供595数据输入DDRB7、=(1<8、留}/***************************************定时器1初始化*工作模式CTC;通道A比较匹配中断开;8分频;**************************************/voidT1A_init(void){OCR1A=0xffff;//延时后输出信号TCCR1A=(1<9、(0<10、(0<11、(0<12、(0<13、(1<14、(0<15、)16、(1<17、(0<18、(1<19、(0<20、(0<21、=0x2;asm("nop");//加了光偶和反向器后需要延时PORTC22、=0x1;pwm_i=0;OCR1A=pwm[pwm_i];PORTC&=0xfe;asm("n23、op");//加了光偶和反向器后需要延时PORTC&=0xfd;}//*****OCR1A比较匹配中断,产生16路PWM高电平部分***************SIGNAL(SIG_OUTPUT_COMPARE1A){//sei();//允许串口嵌套中断if(10==pwm_i){reset_595();}else{PORTC24、=0x1;OCR1A=pwm[pwm_i++];//asm("nop");//加了光偶和反向器后需要延时PORTC
4、008--3-4********************************//************************************当前版本1.1*完成日期2008-3-6*修改:SIGNAL(SIG_OUTPUT_COMPARE0)函数*增加:reset_595()***********************************//***********************************当前版本1.2*完成日期2008-3-7*修改:用T1_A代替T0***
5、********************************/#include"servo.h"unsignedcharpwm_i;unsignedintpwm[10]={742,252,476,1008,346,882,700,322,1000,50000};/*********IO口初始化***************/voidio_init(void){DDRC=_BV(PC1)
6、_BV(PC0);//PC0提供595的移位脉冲,PC1提供595数据输入DDRB
7、=(1<8、留}/***************************************定时器1初始化*工作模式CTC;通道A比较匹配中断开;8分频;**************************************/voidT1A_init(void){OCR1A=0xffff;//延时后输出信号TCCR1A=(1<9、(0<10、(0<11、(0<12、(0<13、(1<14、(0<15、)16、(1<17、(0<18、(1<19、(0<20、(0<21、=0x2;asm("nop");//加了光偶和反向器后需要延时PORTC22、=0x1;pwm_i=0;OCR1A=pwm[pwm_i];PORTC&=0xfe;asm("n23、op");//加了光偶和反向器后需要延时PORTC&=0xfd;}//*****OCR1A比较匹配中断,产生16路PWM高电平部分***************SIGNAL(SIG_OUTPUT_COMPARE1A){//sei();//允许串口嵌套中断if(10==pwm_i){reset_595();}else{PORTC24、=0x1;OCR1A=pwm[pwm_i++];//asm("nop");//加了光偶和反向器后需要延时PORTC
8、留}/***************************************定时器1初始化*工作模式CTC;通道A比较匹配中断开;8分频;**************************************/voidT1A_init(void){OCR1A=0xffff;//延时后输出信号TCCR1A=(1<9、(0<10、(0<11、(0<12、(0<13、(1<14、(0<15、)16、(1<17、(0<18、(1<19、(0<20、(0<21、=0x2;asm("nop");//加了光偶和反向器后需要延时PORTC22、=0x1;pwm_i=0;OCR1A=pwm[pwm_i];PORTC&=0xfe;asm("n23、op");//加了光偶和反向器后需要延时PORTC&=0xfd;}//*****OCR1A比较匹配中断,产生16路PWM高电平部分***************SIGNAL(SIG_OUTPUT_COMPARE1A){//sei();//允许串口嵌套中断if(10==pwm_i){reset_595();}else{PORTC24、=0x1;OCR1A=pwm[pwm_i++];//asm("nop");//加了光偶和反向器后需要延时PORTC
9、(0<10、(0<11、(0<12、(0<13、(1<14、(0<15、)16、(1<17、(0<18、(1<19、(0<20、(0<21、=0x2;asm("nop");//加了光偶和反向器后需要延时PORTC22、=0x1;pwm_i=0;OCR1A=pwm[pwm_i];PORTC&=0xfe;asm("n23、op");//加了光偶和反向器后需要延时PORTC&=0xfd;}//*****OCR1A比较匹配中断,产生16路PWM高电平部分***************SIGNAL(SIG_OUTPUT_COMPARE1A){//sei();//允许串口嵌套中断if(10==pwm_i){reset_595();}else{PORTC24、=0x1;OCR1A=pwm[pwm_i++];//asm("nop");//加了光偶和反向器后需要延时PORTC
10、(0<11、(0<12、(0<13、(1<14、(0<15、)16、(1<17、(0<18、(1<19、(0<20、(0<21、=0x2;asm("nop");//加了光偶和反向器后需要延时PORTC22、=0x1;pwm_i=0;OCR1A=pwm[pwm_i];PORTC&=0xfe;asm("n23、op");//加了光偶和反向器后需要延时PORTC&=0xfd;}//*****OCR1A比较匹配中断,产生16路PWM高电平部分***************SIGNAL(SIG_OUTPUT_COMPARE1A){//sei();//允许串口嵌套中断if(10==pwm_i){reset_595();}else{PORTC24、=0x1;OCR1A=pwm[pwm_i++];//asm("nop");//加了光偶和反向器后需要延时PORTC
11、(0<12、(0<13、(1<14、(0<15、)16、(1<17、(0<18、(1<19、(0<20、(0<21、=0x2;asm("nop");//加了光偶和反向器后需要延时PORTC22、=0x1;pwm_i=0;OCR1A=pwm[pwm_i];PORTC&=0xfe;asm("n23、op");//加了光偶和反向器后需要延时PORTC&=0xfd;}//*****OCR1A比较匹配中断,产生16路PWM高电平部分***************SIGNAL(SIG_OUTPUT_COMPARE1A){//sei();//允许串口嵌套中断if(10==pwm_i){reset_595();}else{PORTC24、=0x1;OCR1A=pwm[pwm_i++];//asm("nop");//加了光偶和反向器后需要延时PORTC
12、(0<13、(1<14、(0<15、)16、(1<17、(0<18、(1<19、(0<20、(0<21、=0x2;asm("nop");//加了光偶和反向器后需要延时PORTC22、=0x1;pwm_i=0;OCR1A=pwm[pwm_i];PORTC&=0xfe;asm("n23、op");//加了光偶和反向器后需要延时PORTC&=0xfd;}//*****OCR1A比较匹配中断,产生16路PWM高电平部分***************SIGNAL(SIG_OUTPUT_COMPARE1A){//sei();//允许串口嵌套中断if(10==pwm_i){reset_595();}else{PORTC24、=0x1;OCR1A=pwm[pwm_i++];//asm("nop");//加了光偶和反向器后需要延时PORTC
13、(1<14、(0<15、)16、(1<17、(0<18、(1<19、(0<20、(0<21、=0x2;asm("nop");//加了光偶和反向器后需要延时PORTC22、=0x1;pwm_i=0;OCR1A=pwm[pwm_i];PORTC&=0xfe;asm("n23、op");//加了光偶和反向器后需要延时PORTC&=0xfd;}//*****OCR1A比较匹配中断,产生16路PWM高电平部分***************SIGNAL(SIG_OUTPUT_COMPARE1A){//sei();//允许串口嵌套中断if(10==pwm_i){reset_595();}else{PORTC24、=0x1;OCR1A=pwm[pwm_i++];//asm("nop");//加了光偶和反向器后需要延时PORTC
14、(0<15、)16、(1<17、(0<18、(1<19、(0<20、(0<21、=0x2;asm("nop");//加了光偶和反向器后需要延时PORTC22、=0x1;pwm_i=0;OCR1A=pwm[pwm_i];PORTC&=0xfe;asm("n23、op");//加了光偶和反向器后需要延时PORTC&=0xfd;}//*****OCR1A比较匹配中断,产生16路PWM高电平部分***************SIGNAL(SIG_OUTPUT_COMPARE1A){//sei();//允许串口嵌套中断if(10==pwm_i){reset_595();}else{PORTC24、=0x1;OCR1A=pwm[pwm_i++];//asm("nop");//加了光偶和反向器后需要延时PORTC
15、)
16、(1<17、(0<18、(1<19、(0<20、(0<21、=0x2;asm("nop");//加了光偶和反向器后需要延时PORTC22、=0x1;pwm_i=0;OCR1A=pwm[pwm_i];PORTC&=0xfe;asm("n23、op");//加了光偶和反向器后需要延时PORTC&=0xfd;}//*****OCR1A比较匹配中断,产生16路PWM高电平部分***************SIGNAL(SIG_OUTPUT_COMPARE1A){//sei();//允许串口嵌套中断if(10==pwm_i){reset_595();}else{PORTC24、=0x1;OCR1A=pwm[pwm_i++];//asm("nop");//加了光偶和反向器后需要延时PORTC
17、(0<18、(1<19、(0<20、(0<21、=0x2;asm("nop");//加了光偶和反向器后需要延时PORTC22、=0x1;pwm_i=0;OCR1A=pwm[pwm_i];PORTC&=0xfe;asm("n23、op");//加了光偶和反向器后需要延时PORTC&=0xfd;}//*****OCR1A比较匹配中断,产生16路PWM高电平部分***************SIGNAL(SIG_OUTPUT_COMPARE1A){//sei();//允许串口嵌套中断if(10==pwm_i){reset_595();}else{PORTC24、=0x1;OCR1A=pwm[pwm_i++];//asm("nop");//加了光偶和反向器后需要延时PORTC
18、(1<19、(0<20、(0<21、=0x2;asm("nop");//加了光偶和反向器后需要延时PORTC22、=0x1;pwm_i=0;OCR1A=pwm[pwm_i];PORTC&=0xfe;asm("n23、op");//加了光偶和反向器后需要延时PORTC&=0xfd;}//*****OCR1A比较匹配中断,产生16路PWM高电平部分***************SIGNAL(SIG_OUTPUT_COMPARE1A){//sei();//允许串口嵌套中断if(10==pwm_i){reset_595();}else{PORTC24、=0x1;OCR1A=pwm[pwm_i++];//asm("nop");//加了光偶和反向器后需要延时PORTC
19、(0<20、(0<21、=0x2;asm("nop");//加了光偶和反向器后需要延时PORTC22、=0x1;pwm_i=0;OCR1A=pwm[pwm_i];PORTC&=0xfe;asm("n23、op");//加了光偶和反向器后需要延时PORTC&=0xfd;}//*****OCR1A比较匹配中断,产生16路PWM高电平部分***************SIGNAL(SIG_OUTPUT_COMPARE1A){//sei();//允许串口嵌套中断if(10==pwm_i){reset_595();}else{PORTC24、=0x1;OCR1A=pwm[pwm_i++];//asm("nop");//加了光偶和反向器后需要延时PORTC
20、(0<21、=0x2;asm("nop");//加了光偶和反向器后需要延时PORTC22、=0x1;pwm_i=0;OCR1A=pwm[pwm_i];PORTC&=0xfe;asm("n23、op");//加了光偶和反向器后需要延时PORTC&=0xfd;}//*****OCR1A比较匹配中断,产生16路PWM高电平部分***************SIGNAL(SIG_OUTPUT_COMPARE1A){//sei();//允许串口嵌套中断if(10==pwm_i){reset_595();}else{PORTC24、=0x1;OCR1A=pwm[pwm_i++];//asm("nop");//加了光偶和反向器后需要延时PORTC
21、=0x2;asm("nop");//加了光偶和反向器后需要延时PORTC
22、=0x1;pwm_i=0;OCR1A=pwm[pwm_i];PORTC&=0xfe;asm("n
23、op");//加了光偶和反向器后需要延时PORTC&=0xfd;}//*****OCR1A比较匹配中断,产生16路PWM高电平部分***************SIGNAL(SIG_OUTPUT_COMPARE1A){//sei();//允许串口嵌套中断if(10==pwm_i){reset_595();}else{PORTC
24、=0x1;OCR1A=pwm[pwm_i++];//asm("nop");//加了光偶和反向器后需要延时PORTC
此文档下载收益归作者所有