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

📄 sivo3.c

📁 avr常用功能程序中包含了pwm、adc、中断、定时、i2c等各程序可供开发者直接使用
💻 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 + -