📄 sivo3.c
字号:
#include <avr/io.h>//中断头文件#include <avr/signal.h>#define uchar unsigned char#define uint unsigned int//规定开始减速时的剩余点数#define speed_low 560//最高速度,9位PWM#define speed_hi 510//how much moto runningint run,speed_add=0; //run ,电机要走过的点数uint a;unsigned int howlong=0; //run how muchvoid delay(unsigned int t){ for(;t>0;t--);}void init(){ run=1000; DDRB=0XFF; //PORTB is setting on out DDRD=0X20; //设置OC1A为输出 PORTB=0X7F; //PORTB is "1" TCCR1A=0x82; //OC1A is "0",9 BITS PWM C3,1;;;83,0 TCCR1B=0X42; //噪声消除,上升捕获 bu neng yong ping bi TCNT1=0; //initial volue SREG=0X80; //总中断开 TIMSK=0X20; //open the capture interrupt OCR1A=510; //全速启动}void uart_init(void){ UCSRB|=(1<<RXEN)|(1<<TXEN)|(1<<RXCIE); //允许发送和接收 //UBRRL=0X19; //[fosc/16(BAUD+1)]%256 UBRRH=0X00; //[fosc/16(BAUD+1)]/256 UCSRC|=(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0); //8位数据+1位停止位 // UCR=6<<TXCIE; //开发送中断 UBRRL=0X38;}int uart_putchar(char c){ //if(c=='\n') uart_putchar('\end'); UDR=c; loop_until_bit_is_set(UCSRA,UDRE); sbi(UCSRA,UDRE); return 0;}SIGNAL(SIG_INPUT_CAPTURE1) //T1捕获中断 { TIMSK=00; //close capture interrupt //howlong++; //if(howlong==stop){howlong=0;PORTB=0XFF;delay(65000);delay(65000);PORTB=0X7F;} PORTB=0X00; //PB灯闪亮 delay(3); PORTB=0X7f; if(run<=840) OCR1A=300; //2圈内中速启动, //else if(run>560)&(run<1400) OCR1A=300; //超过2圈全速启动 if((speed_low<run)&(OCR1A<508))OCR1A+=2; //加速 if(run<=speed_low) //9 bit PMW,speed_low=280(1圈) 减速值 { if(OCR1A<40)OCR1A-=1; //限制最低转速 if(run>1)run--; //每次中断减一 else if(run==0) //规定的点数走完停,等待给run送新值 { run=0; OCR1A=0; PORTB=0XFF; delay(10000); while(run==0); } } TIMSK=0X20; //open capture interrupt }//============================================== int main (void){ init(); uart_init();// while(1); while(1) { /* // if(OCR1A<508) OCR1A+=2; //加速 if(run<=speed_low) //a 9 bit PMW { while(run>=60) { run-=5; delay(3000); OCR1A=run; //定义占空比 } run=0; OCR1A=0; PORTB=0XFF; delay(10000); while(run==0); //TIMSK=0X20; } delay(5000);*/ // if((b%200)==0)uart_putchar(0xff); //发送测试数据 } }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -