亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? speed check avr.c

?? 用于測量電機轉速并帶速度反饋,配增量編碼器,用AVR單片機ATMEGA48
?? C
字號:
//ICC-AVR application builder : 2006-2-24 14:20:32
// Target : M48
// Crystal: 8.0000Mhz
//本程序采用M/T法進行測速,高速時采用M法,低速時采用T法。M1、M2分別為編碼器脈沖計數和時鐘脈沖計數

#include <iom48v.h>
#include <macros.h>
//#include <slavr.h>

#define TLC5615_CS(x) if(x==1)PORTB|=BIT(PB1);else PORTB&=~BIT(PB1)
#define MAX7219_CS(x) if(x==1)PORTB|=BIT(PB2);else PORTB&=~BIT(PB2)
#define SIGB    3//B輸入接Pd3    
#define LED_NUM 5//顯示LED的個數為5
#define MAX_5615  811//輸出為10V時5615的值
#define MIN_5615  9  //輸出為-10V時5615的值
#define ZERO_5615 410//輸出為0V時5615的值
#define M_T_Point 16//M/T法的速度分界點,上一次計算得出的速度小于此值,則采取T法計算當前速度,否則采用M法計算
unsigned char led_buff[LED_NUM]={18,0,0,0,0};//led_buffer[0] is direction,other is rev  
const unsigned char Driver_table[8]={0x0c,0x01,0x0b,0x04,0x0a,0x0a,0x09,0x00};
const unsigned char seg_table[]={0x7e,0x30,0x6d,0x79,0x33,0x5b,0x5f,0x70,0x7f,0x7b,
	  		   		0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0x00};
unsigned int  Cnt_M1=1,Cnt_M1_Cur=1;//the number of pulse
unsigned int  Spd_buff[]={0,0,0,0};//速度顯示緩沖器,用來存儲轉速
unsigned int  Cnt_M2=1,Cnt_M2_Cur=1;//number of counter within Cnt_M1
unsigned int  N_Last=24;//last rev
unsigned int  N_Current=0;//current rev
unsigned char Flag_M1=0x00;//the flag of start counting
unsigned char V_Flag=0;//速度計算方法選擇標志
unsigned int  Speed_Num=0;//編碼脈沖計數值,本例中為INTO的脈沖個數
unsigned char Calc_Flag=0;//速度計算標志,需進行計算時為0xff
unsigned char Run_Dir=0;//運行方向,正轉時為0
unsigned char T1_OVF_Cnt=0;//T1溢出次數計數
unsigned char DISP_Cnt=0;//顯示刷新時間控制
unsigned int  DA_OUT=0;//DA輸出

void DA_transmit(unsigned int data);
void Refresh(void);

void port_init(void)
{
 PORTB = 0x06;
 DDRB  = 0xFF;//B口為輸出
 PORTC = 0x00; //m103 output only
 DDRC  = 0x00;
 PORTD = 0x00;
 DDRD  = 0x00;//D口為輸入
}
//TIMER1 initialize - prescale:8
// WGM: 0) Normal, TOP=0xFFFF
// desired value: 1Hz
// actual value: Out of range
void timer1_init(void)//用來計算M2值
{
 TCCR1B = 0x00; //stop
 TCNT1H = 0x00 /*INVALID SETTING*/; //setup
 TCNT1L = 0x00 /*INVALID SETTING*/;
 OCR1AH = 0x00 /*INVALID SETTING*/;
 OCR1AL = 0x00 /*INVALID SETTING*/;
 OCR1BH = 0x00 /*INVALID SETTING*/;
 OCR1BL = 0x00 /*INVALID SETTING*/;
 ICR1H  = 0x00 /*INVALID SETTING*/;
 ICR1L  = 0x00 /*INVALID SETTING*/;
 TCCR1A = 0x00;
}
//TIMER0 initialize - prescale:1024
// WGM: Normal
// desired value: 20mSec
// actual value: 19.968mSec (0.2%)
void timer0_init(void)
{
 TCCR0B = 0x00; //stop
 TCNT0 = 0x64; //set count
 TCCR0A = 0x00; 
 TCCR0B = 0x05; //start timer
}

#pragma interrupt_handler timer0_ovf_isr:17
void timer0_ovf_isr(void)
{
	SEI();//開中斷,允許中斷嵌套
	DISP_Cnt++;
	TCNT0 = 0x64; //set count //TIMER0 has overflowed
	DA_OUT=N_Current/5;//????????
	if(Run_Dir==0)
	{
		DA_OUT+=ZERO_5615;
	}
	else
	{
		DA_OUT=ZERO_5615-DA_OUT;
	}
	DA_transmit(DA_OUT);
	if(DISP_Cnt>=10)//每200MS刷新一次顯示
	{
		Refresh();
		DISP_Cnt=0;
	}
}

#pragma interrupt_handler timer1_ovf_isr:14
void timer1_ovf_isr(void)
{
	//TIMER1 has overflowed
	T1_OVF_Cnt++;
	N_Last=M_T_Point;
	N_Current=M_T_Point; //將這兩個值給0是否可以消除不回零的情況呢?????????
	V_Flag=0;//采用T法計算速度
	Calc_Flag=0xFF;//計算速度
	EIMSK&=~BIT(INT1);//INT1中斷禁止

}

void SPI_transmit(unsigned char data,unsigned char addr)
{
 unsigned char temp;
 MAX7219_CS(0);
 SPDR=addr;
 while(!(SPSR&(1<<SPIF)));
 SPDR=data;
 while(!(SPSR&(1<<SPIF)));
 MAX7219_CS(1);
}

//Refresh LED Displayer
void Refresh(void)
{
 unsigned char i,temp;
 if(Run_Dir==0)
	led_buff[0]=18;
 else
	led_buff[0]=10;
 for(i=0;i<LED_NUM;i++)
 {
  temp=led_buff[i];
  temp=seg_table[temp];
  SPI_transmit(temp,i+1);
 }
}

void init_7219(void)
{
 unsigned char cmd_code,led_addr;
 int i,j;
 for(i=0;i<4;i++)
 {
  j=i*2;
  cmd_code=Driver_table[j+1];
  led_addr=Driver_table[j];
  SPI_transmit(cmd_code,led_addr);
 }
 Refresh();  
}


//SPI initialize
// clock rate: 125000hz
void spi_init(void)
{
 SPCR = 0x52; //setup SPI
 SPSR = 0x01; //setup SPI
}

void Rev_transfer(unsigned int rev)//將速度值存儲到顯示緩沖區
{
	unsigned char i;
	for(i=1;i<5;i++)
	{
		led_buff[5-i]=rev%10;//依次取個位、十位、百位、千位
		rev/=10;
	}
}

void Calc_Speed(void)//M/T法公式為N=(60f/p)*(M1/M2)=(60*1M/600)*(M1/M2)=100000*(M1/M2)
{
	unsigned long temp=0;
	if(V_Flag==0xFF)//M法
	{
		temp=100000*Cnt_M1;
		N_Current=temp/Cnt_M2;
	}
	else
	{
		N_Current=25000/Cnt_M2;//T法,此時M1=1/4
	}
}

#pragma interrupt_handler int0_isr:2
void int0_isr(void)
{
	T1_OVF_Cnt=0;//timer1溢出中斷次數清零
	Run_Dir=PIND&(1<<SIGB);//INT0上升沿中斷時,若SIGB=0時為正向
	if(V_Flag==0)//speed low,采用T法測速
	{
		EIFR|=BIT(INTF1);//清INT1中斷標志,防止錯誤中斷
		EIMSK|=BIT(INT1);//enable INT1
		TCCR1B = 0x00; //stop
		TCNT1H = 0x00; 
		TCNT1L = 0x00;//clear timer1
		TCCR1B = 0x02; //start Timer,并且為8分頻
	}
	else
	{
		if(Flag_M1==0)//開始用M法測速
		{
			Flag_M1=0xFF;
			TCCR1B = 0x00; //stop
			TCNT1H = 0x00; 
			TCNT1L = 0x00;//clear timer1
			TCCR1B = 0x02; //start Timer
			Cnt_M1_Cur=N_Last>>3;//M1的值為上次速度的1/8
			Speed_Num=0;
		}
		else
		{
			Speed_Num++;
			if(Speed_Num>=Cnt_M1_Cur)
			{
				TCCR1B = 0x00; //stop
				Calc_Flag=0xFF;
				Cnt_M2_Cur=TCNT1L;
				Cnt_M2_Cur+=(unsigned int)(TCNT1H<<8);//讀取M2的值
				Flag_M1=0;
			}			
		}
	}
}

#pragma interrupt_handler int1_isr:3
void int1_isr(void)
{
	Calc_Flag=0xFF;//計算速度
	TCCR1B = 0x00; //stop timer1
	Cnt_M2_Cur=TCNT1L;
	Cnt_M2_Cur+=(unsigned int)(TCNT1H<<8);//讀取M2值
	EIMSK&=~BIT(INT1);//disable INT1
	TCCR1B = 0x02;//enable timer1
}

//call this routine to initialize all peripherals
void init_devices(void)
{
 //stop errant interrupts until set up
 CLI(); //disable all interrupts
 port_init();
 spi_init();
 timer0_init();
 timer1_init();

 MCUCR = 0x00;
 EICRA = 0x07; //extended ext ints,INT0為上升沿中斷,INT1為任意沿中斷
 EIMSK = 0x01;//open INT0 interrupt
 
 TIMSK0 = 0x01; //timer 0 溢出中斷使能
 TIMSK1 = 0x01; //timer 1 溢出中斷使能
 TIMSK2 = 0x00; //timer 2 interrupt sources
 
 PCMSK0 = 0x00; //pin change mask 0 
 PCMSK1 = 0x00; //pin change mask 1 
 PCMSK2 = 0x00; //pin change mask 2
 PCICR = 0x00; //pin change enable 
 PRR = 0x00; //power controller
 init_7219();
 SEI(); //re-enable interrupts
 //all peripherals are now initialized
}

void DA_transmit(unsigned int data)//將DA數據發送到5615
{
 unsigned char temp1,temp2;
 data<<=2;//5615為12位數據輸出,最低2位為無效位,所以輸出數據左移兩位
 temp1=data>>8;//DA高8位
 temp2=data;//DA低8位
 TLC5615_CS(0);
 SPDR=temp1;
 while(!(SPSR&(1<<SPIF)));
 SPDR=temp2;
 while(!(SPSR&(1<<SPIF)));
 TLC5615_CS(1);
}

void main(void)
{
	unsigned char i;
	unsigned int temp=0;
	init_devices();
	if(N_Last<M_T_Point)
		V_Flag=0;
	else
		V_Flag=0xff;
	
	while(1)
	{
		if(Calc_Flag==0xFF)
		{
			if(T1_OVF_Cnt<1)//T1無溢出
			{
				Cnt_M1=Cnt_M1_Cur;
				Cnt_M2=Cnt_M2_Cur;
				Calc_Speed();
			}
			else//Timer1 溢出
			{
				N_Current=0;
				T1_OVF_Cnt=0;
			}
			temp=0;
			for(i=1;i<4;i++)
			{
				Spd_buff[4-i]=Spd_buff[3-i];
				temp+=Spd_buff[3-i];
			}
			Spd_buff[0]=N_Current;
			temp+=N_Current;
			N_Current=temp>>2;//滑動濾波,采用4組數據
			N_Last=N_Current;
			if(N_Last<M_T_Point)
				V_Flag=0;
			else
				V_Flag=0xff;
			Calc_Flag=0;
			Rev_transfer(N_Current);			
		}
	}
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产一本一道久久香蕉| 日韩电影在线免费观看| 综合久久给合久久狠狠狠97色| 亚洲国产精品视频| 六月丁香综合在线视频| 国产精品一区二区久久精品爱涩| 福利一区福利二区| 欧美麻豆精品久久久久久| 久久久久久亚洲综合影院红桃 | 亚洲成精国产精品女| 日韩av在线发布| 成人国产精品免费观看动漫| 欧美剧情片在线观看| 国产三级精品视频| 樱花草国产18久久久久| 蜜臀av一区二区三区| 国产一区91精品张津瑜| 欧美日韩三级一区二区| 久久久久综合网| 日韩国产欧美在线播放| 99精品国产99久久久久久白柏| 在线亚洲欧美专区二区| 久久久综合视频| 日韩成人免费在线| 国产激情视频一区二区在线观看| 欧美性猛交xxxxxx富婆| 欧美国产日韩精品免费观看| 日韩激情一二三区| 色综合久久久久综合| 国产精品久久毛片| 国产精品一区久久久久| 日韩一区二区三免费高清| 久久久久久久综合狠狠综合| 日韩av高清在线观看| 色偷偷一区二区三区| 国产精品天天摸av网| 麻豆国产91在线播放| 欧美日本在线播放| 亚洲黄色av一区| av激情亚洲男人天堂| 国产欧美精品日韩区二区麻豆天美| 亚洲精品欧美激情| 在线免费观看日韩欧美| 亚洲欧美日韩国产一区二区三区 | 中文字幕在线不卡| 蜜桃免费网站一区二区三区| 日韩午夜精品电影| 午夜不卡av免费| 欧美视频一二三区| 午夜免费久久看| 色综合久久久久久久| 一区二区三区四区亚洲| 99国产精品久久久久| 国产精品久久久久久久久动漫| 国产a视频精品免费观看| 欧美裸体bbwbbwbbw| 精品一区二区三区影院在线午夜| 精品久久一区二区| 黄页网站大全一区二区| 久久九九久久九九| 国产高清精品久久久久| 亚洲人成伊人成综合网小说| 日本道免费精品一区二区三区| 亚洲视频免费看| 欧美视频在线播放| 亚洲国产视频网站| 日韩精品一区二区三区视频 | 欧美一区二区视频观看视频| 麻豆精品新av中文字幕| 久久久久久久国产精品影院| 国产精品18久久久| 中文字幕亚洲欧美在线不卡| 91麻豆蜜桃一区二区三区| eeuss鲁片一区二区三区在线观看 eeuss鲁片一区二区三区在线看 | 色婷婷亚洲综合| 麻豆精品视频在线观看| 亚洲欧美日韩中文字幕一区二区三区| 51精品国自产在线| 91网站视频在线观看| 捆绑紧缚一区二区三区视频| 亚洲裸体xxx| 精品国精品自拍自在线| 色网站国产精品| 国产二区国产一区在线观看| 亚洲成a人片综合在线| 国产亚洲成aⅴ人片在线观看| 欧美视频在线观看一区二区| 国产成人精品免费在线| 三级不卡在线观看| 亚洲激情自拍视频| 欧美国产国产综合| 精品国产污污免费网站入口 | 狠狠色狠狠色综合日日91app| 中文字幕中文字幕中文字幕亚洲无线| 在线播放欧美女士性生活| 99精品偷自拍| 国产成人精品影视| 加勒比av一区二区| 男男视频亚洲欧美| 亚洲一区二区四区蜜桃| 亚洲免费视频中文字幕| 国产日韩精品一区二区三区| 欧美一区二区在线播放| 欧美做爰猛烈大尺度电影无法无天| 成人综合在线观看| 国内精品不卡在线| 久久99精品国产麻豆婷婷| 天使萌一区二区三区免费观看| 亚洲乱码国产乱码精品精可以看| 国产免费观看久久| 欧美极品aⅴ影院| 国产亚洲视频系列| 久久久久久免费| 国产亚洲欧美激情| 久久精品一区蜜桃臀影院| 精品99久久久久久| 久久久99免费| 久久久久久久久蜜桃| 国产欧美一区二区三区在线看蜜臀| 精品欧美一区二区三区精品久久| 日韩精品综合一本久道在线视频| 日韩一级视频免费观看在线| 日韩免费观看高清完整版 | 91精品国产欧美一区二区成人| 欧美日韩黄色影视| 日韩一级高清毛片| 精品国产区一区| 中文在线一区二区| 中文字幕欧美激情| 亚洲视频狠狠干| 香蕉成人啪国产精品视频综合网 | 一区二区三区精品久久久| 樱花影视一区二区| 日韩精品亚洲专区| 精品无人码麻豆乱码1区2区| 国产福利一区在线观看| 91在线视频播放| 欧美日韩在线播放| 精品国产sm最大网站免费看 | 日韩免费视频一区| xf在线a精品一区二区视频网站| 国产精品无人区| 亚洲精品视频免费看| 日韩成人一级片| 国产乱一区二区| av中文字幕一区| 欧美日韩综合在线免费观看| 欧美岛国在线观看| 中文字幕成人av| 视频在线观看一区二区三区| 麻豆中文一区二区| 高清免费成人av| 91成人免费在线视频| 日韩午夜电影av| 国产精品你懂的在线欣赏| 一区二区三区四区视频精品免费| 日本欧美久久久久免费播放网| 国产成人av自拍| 欧美日韩精品一区二区三区蜜桃 | 国产精品久久久久7777按摩 | 久久99国产精品麻豆| eeuss影院一区二区三区 | 色综合色综合色综合色综合色综合| 欧美性色aⅴ视频一区日韩精品| 日韩欧美国产精品一区| 国产精品久久久久久久久免费樱桃 | 欧美高清一级片在线观看| 日韩毛片在线免费观看| 久久精品国产久精国产爱| 91同城在线观看| 精品对白一区国产伦| 亚洲成av人**亚洲成av**| 成人av在线资源网站| 精品少妇一区二区| 一区二区三区在线观看动漫| 国产乱码精品一区二区三区忘忧草 | 日韩av一区二区三区四区| 成人app网站| 精品久久久久久久一区二区蜜臀| 亚洲精品乱码久久久久久黑人| 国产一区在线精品| 91精品国产免费久久综合| 日韩理论电影院| 国产69精品一区二区亚洲孕妇| 制服.丝袜.亚洲.另类.中文| 亚洲视频你懂的| 丁香天五香天堂综合| 日韩精品在线一区| 午夜日韩在线观看| 欧美性受xxxx黑人xyx性爽| 椎名由奈av一区二区三区| 国产成a人亚洲精品| 久久久午夜电影| 久久国产尿小便嘘嘘尿| 日韩视频在线观看一区二区| 视频在线在亚洲| 欧美一区二区视频网站| 日本系列欧美系列| 日韩欧美一区二区免费| 裸体歌舞表演一区二区|