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

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

?? new2_uart.c

?? 磁流變阻尼器控制器的源程序
?? C
字號:
//加定時器已完成 現在的采樣頻率為32Hz
//主體部分已經完成,Ka已經計算正確,給P2端口賦值能正確顯示,但通過Ka給P2傳遞
//增益時,P2輸出亦正確,調整PI算法已調整,振級表是使用自己編寫的一個,P0輸出
//正確了(實施辦法是將P0賦值位置提前就解決了)
#include<stdio.h>
#include<aduc842.h>
#include<math.h>

#define KP 0.5//暫定Kp=5
#define KI 0.5//暫定Ki=5

sfr templ=0x86;
sfr temph=0x85;

void DELAY(int length);
void adc_chan(int chan);// 選擇通道
void adc_ini();
void adc_start();
void config();
void uart_ini();
void dac_ini();
void port_ini();
//void TIC_ini();
//void TIC_start();
void readval();//讀取AD轉換值并轉為10進制數子函數
void pi();//PI算法子程序
float Lookuptab(unsigned char voltab);//查表子程序

int		K;
int   Kout1=0;//將Ka1值進行翻轉準備輸出到P0口
int   Kout2=0;//將Ka2值進行翻轉準備輸出到P2口

int   xdata num1[8];//用作暫時存儲Ka1值以便今后進行翻轉方便
int   xdata num2[8];//用作暫時存儲Ka2值以便今后進行翻轉方便
int   xdata i;
int   Ka1,Ka2;
int   tempval;
float code Table[18]={0.3,0.6,1.0,1.3,1.6,2.0,2.3,2.6,3.0,3.3,3.6,4.0,4.3,4.6,5.0,5.3,5.6,6.0};//自己暫定的振級表,可以根據實際值修改
//float code Table[6]={1,2,3,4,5,6};
float UDA;//UDA為DAC0輸出
float UIK=0;//UI的初值設為0 
float xdata MK;//該值為采樣保存的電壓值

float RK;
float EK;
float UPK;
float UK;
int xdata level1;
int xdata level2;


void adc_int() interrupt 6  //ADC轉換完,進入中斷
{
	I2CCON=0x0C8;//燈滅
	DELAY(2000);
	I2CCON=0x048;//燈亮  
	temph=ADCDATAH;
	templ=ADCDATAL;//轉換值暫存到temp中
	ADCI = 0;//可要可不要,如果不進入ADC中斷,則須用戶手動清零
	return;
}

void uart_int() interrupt 4
{
	Ka1 = SBUF;
	RI = 0;
}



void adc_chan(int chan)
{
ADCCON2 = chan;
}



void adc_ini()
{
ADCCON1 = 0x02C;            // 暫停AD
EA	    = 0;				// 中斷不使能
EADC	= 0;				// ADC中斷不使能

}

void adc_start()
{
ADCCON1 = 0x0AC;            // 啟動AD,使用內部參考電壓
EA	    = 1;				// 中斷使能
EADC	= 1;				// ADC中斷使能
}

void config()
{
CFG842 = 0x41;      //暫定
PLLCON = 0x03;		//工作頻率=2.097152 MHz


}

void uart_ini()		//串口初始化
{
T3CON = 0x083;
T3FD  = 0x02D;
SCON  = 0x050;
}

void dac_ini()
{
DACCON = 0x0D;//DAC0 12位異步 0-Cref=5v
//DACCON = 0x2D;//DAC0 12位異步 0-Vdd
}

void port_ini()//根據需要設置AD7520增益值
{
P0&=0x00;
P2&=0x00;
//P2|=0x64;//0110,0100
//P2|=0xC4;//1110,0101
}



void readval()
{
tempval=(int)temph*256;//強制轉換為整形數
tempval+=(int)templ;//此時計算的是十進制的AD結果,比如若temph:templ=03ff,則對應于1023

}

float Lookuptab(unsigned char voltab)
 {
 return Table[voltab];
 }

void pi()
{
	
	
	//UDA=5;//UDA為方便計算設置的一個變量
	//UK=UDA;//調試時先可直接把Uk=5v來計算,等到完成后在應用下面的PI算法
//	DELAY(500);
//	     if(level2 == 0)  {RK=Lookuptab(0);}
//	else if(level2 == 1)  {RK=Lookuptab(1);}
//	else if(level2 == 2)  {RK=Lookuptab(2);}
//	else if(level2 == 3)  {RK=Lookuptab(3);}
//	else if(level2 == 4)  {RK=Lookuptab(4);}
//     	else                  {RK=Lookuptab(5);}//這段程序目的是查表確定振動的給定參考值以便與采集來的數據比較
	
	DELAY(500);//進入PI運算
	switch (level2)
{
case 0:
{
	if      (0<=MK&MK<=0.3)  {//Ka2=0x55;
							 RK = Lookuptab(0);}
	else if (0.3<MK&MK<=0.6){//Ka2=0xAB;
							 RK = Lookuptab(1);}
	else                    {//Ka2=0xFF;
							 RK = Lookuptab(2);}
	break;
}
case 1:
{
	if      (1<MK&MK<=1.3)  {//Ka2=0x55;
							 RK = Lookuptab(3);}
	else if (1.3<MK&MK<=1.6){//Ka2=0xAB;
							 RK = Lookuptab(4);}
	else                    {//Ka2=0xFF;
							 RK = Lookuptab(5);}
	break;
}
case 2:
{
	if      (2<MK&MK<=2.3)  {//Ka2=0x55;
							 RK = Lookuptab(6);}
	else if (2.3<MK&MK<=2.6){//Ka2=0xAB;
							 RK = Lookuptab(7);}
	else                    {//Ka2=0xFF;
							 RK = Lookuptab(8);}
	break;
}
case 3:
{
	if      (3<MK&MK<=3.3)  {//Ka2=0x55;
							 RK = Lookuptab(9);}
	else if (3.3<MK&MK<=3.6){//Ka2=0xAB;
							 RK = Lookuptab(10);}
	else                    {//Ka2=0xFF;
							 RK = Lookuptab(11);}
	break;
}
case 4:
{
	if      (4<MK&MK<=4.3)  {//Ka2=0x55;
							 RK = Lookuptab(12);}
	else if (4.3<MK&MK<=4.6){//Ka2=0xAB;
							 RK = Lookuptab(13);}
	else                    {//Ka2=0xFF;
							 RK = Lookuptab(14);}
	break;
}
default:
{
	if      (5<MK&MK<=5.3)  {//Ka2=0x55;
							 RK = Lookuptab(15);}
	else if (5.3<MK&MK<=5.6){//Ka2=0xAB;
							 RK = Lookuptab(16);}
	else                    {//Ka2=0xFF;
							 RK = Lookuptab(17);}
	break;
}
}
	EK=RK-MK;
	UPK=KP*EK;
	if (UPK>=0.1&UPK<=0.15) {Ka2=0xBB;}
	else if(UPK>=0&UPK<=0.1) {Ka2=0xE1;}
	//K=(UPK/UDA*1024);//現將()內表達式的值取整,此值處理后即為送往AD7520的增益值,
    printf("K=%04X\n",K);
	//Ka2=K>>2;//因為電路板上低兩位已拉高,所以只需要高8位
	//Ka2 = 0xAA;
	//Ka2=0x00;
	//Ka&=0x00FF;//只用了低八位
	//Ka = 0x0064;//為測試方便


}


void main(void)//主程序開始
{	
	DELAY(100);
	config();
	adc_ini();
	adc_chan(0);
	uart_ini();
	dac_ini();
	
	port_ini();//p0和p2的初始化
	printf("P0=%02BX\n",P0);
	
	//DELAY(2000);
	//TIC_ini();
	//DELAY(2000);
	//P0&=0x00;//如果要調整P0口增益值,則打開此句
	//DELAY(2000);
	//P0|=0xFF;//第一級AD7520增益先設為不放大,即放大倍數為(1023/1024)
	//DELAY(2000);
	//printf("P0=%02BX\n",P0);
	//printf("UIK=%f\n",UIK);
	DAC0H=0x07;
    DAC0L=0xFF;//AC0輸出恒值2.5v
	//i=0;
	//adc_start();
	//SCONV = 1;				        //啟動AD轉換
	/////////////////初始化
	for (i=0;i<8;i++)
	{
		num1[i] = 1;
	}
	level2 = 1;//初始設定等級為等級1
	MK=1.1;//初始設定值為1.1v
	K=0xFF;
	Ka1=0xFF;//初始化p0口的值
	Ka2=0xFF;//初始化p2口的值
	//Ka = 0x0064;//0110,0100 用于測試用,并不是實際值

	//////////////////////////////初始化完成

	while(1){	//連續進行AD轉換
	
	adc_start();
	SCONV = 1;				//開始一次轉換
	DELAY(1000);			//調延遲,等待轉換完畢
	if (ADCI == 0)			//中斷處理完畢標志,進行輸出
	{
	printf("temph=%02BX,templ=%02BX\n",temph,templ);//串口輸出轉換值
	printf("UIK=%f\n",UIK);
	
	readval();
	DELAY(500);
	MK=(float)tempval*5/4096;//必須強制轉換為浮點數,否則結果不對

	//     if(0<=MK&MK<=1)  {level2 = 0;	Ka1=0x2A;}//Ka1的值未確定,暫時以0x00代替
	//else if(1<MK&MK<=2)  {level2 = 1;	Ka1=0x55;}
	//else if(2<MK&MK<=3)  {level2 = 2;	Ka1=0x80;}
	//else if(3<MK&MK<=4)  {level2 = 3;	Ka1=0xAB;}
	//else if(4<MK&MK<=5)  {level2 = 4;	Ka1=0xD5;}
   	//else           	     {level2 = 5;	Ka1=0xFF;}//這段程序目的是查表確定振動的給定參考值以便與采集來的數據比較
	
	DELAY(80000);
	if     (Ka1==0x2A) {level2 = 0;}
	else if(Ka1==0x55) {level2 = 1;}
	else if(Ka1==0x80) {level2 = 2;}
	else if(Ka1==0xAB) {level2 = 3;}
	else if(Ka1==0xD5) {level2 = 4;}
	else               {level2 = 5;}
	pi();
	
	printf("MK=%f\n",MK);
	printf("RK=%f\n",RK);
	printf("EK=%f\n",EK);
	printf("UPK=%f\n",UPK);
	//printf("UIK=%f\n",UIK);
	//printf("UK=%f\n",UK);

	printf("Ka1=%04X\n",Ka1);
	printf("Ka2=%04X\n",Ka2);

	/////將Ka值進行翻轉并輸出到P0口
	//方法一

	num1[0]=Ka1&0x01;
	num1[1]=Ka1&0x02;
	num1[2]=Ka1&0x04;
	num1[3]=Ka1&0x08;
	num1[4]=Ka1&0x10;
	num1[5]=Ka1&0x20;
	num1[6]=Ka1&0x40;
	num1[7]=Ka1&0x80;

	for (i=0;i<8;i++)
	{
		if (num1[i]==pow(2,i))
		   num1[i]=1;
		else num1[i]=0;
	}
	Kout1 = 0;
	for (i=0;i<8;i++)
	{	
		
		Kout1 +=pow(2,(7-i))*num1[i];
	}
	P0 = Kout1; //本應該為此句,再次利用下句做以簡單替代用于測試

	num2[0]=Ka2&0x01;
	num2[1]=Ka2&0x02;
	num2[2]=Ka2&0x04;
	num2[3]=Ka2&0x08;
	num2[4]=Ka2&0x10;
	num2[5]=Ka2&0x20;
	num2[6]=Ka2&0x40;
	num2[7]=Ka2&0x80;

	for (i=0;i<8;i++)
	{
		if (num2[i]==pow(2,i))
		   num2[i]=1;
		else num2[i]=0;
	}
	Kout2 = 0;
	for (i=0;i<8;i++)
	{	
		
		Kout2 +=pow(2,(7-i))*num2[i];
	}
	P2 =Kout2; //本應該為此句,再次利用下句做以簡單替代用于測試
	
	//P2|=Ka;//正式給端口賦值,產生AD7520增益
	//P2^=Ka;//正式給端口賦值,產生AD7520增益
	DELAY(500);
	printf("P2=%02BX\n",P2);//顯示P2口置位是否正確
	printf("P0=%02BX\n",P0);
	printf("num1[0]=%d\n",num1[0]);
	printf("num1[1]=%d\n",num1[1]);
	printf("num1[2]=%d\n",num1[2]);
	printf("num1[3]=%d\n",num1[3]);
	printf("num1[4]=%d\n",num1[4]);
	printf("num1[5]=%d\n",num1[5]);
	printf("num1[6]=%d\n",num1[6]);
	printf("num1[7]=%d\n\n",num1[7]);
	DELAY(1000);


	}
			}
}

void DELAY(int length)//延遲函數
{
while (length >=0)
    length--;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久99国产精品免费| 成人18视频在线播放| 91精品国产乱码久久蜜臀| 亚洲午夜国产一区99re久久| 色嗨嗨av一区二区三区| 亚洲精品日韩专区silk| 欧美影院午夜播放| 亚洲午夜精品网| 91麻豆精品国产91久久久久 | 国产精品久久久久久亚洲毛片| 成人午夜电影久久影院| 日韩理论在线观看| 欧美日韩一级大片网址| 精品中文字幕一区二区| 国产精品第一页第二页第三页| 91麻豆福利精品推荐| 性做久久久久久免费观看| 久久女同精品一区二区| 91尤物视频在线观看| 天天操天天干天天综合网| 精品国产一区二区在线观看| 99re在线视频这里只有精品| 亚洲国产欧美在线| 26uuu色噜噜精品一区| 色呦呦国产精品| 麻豆一区二区三区| 亚洲视频一区二区在线观看| 91精品视频网| 99久久久久久| 精品在线观看视频| 亚洲人成在线播放网站岛国| 欧美一级欧美三级在线观看| 成人激情黄色小说| 麻豆专区一区二区三区四区五区| 亚洲婷婷综合色高清在线| 欧美一级免费观看| 色伊人久久综合中文字幕| 精品综合免费视频观看| 亚洲国产日韩a在线播放性色| 久久久久综合网| 欧美日韩精品欧美日韩精品一| 国产成人自拍网| 免费国产亚洲视频| 一区二区三区在线免费播放| 中文字幕免费不卡在线| 91精品国产一区二区三区蜜臀 | 精品久久人人做人人爽| av中文字幕在线不卡| 精品一区二区三区欧美| 亚洲成av人片www| 亚洲欧美aⅴ...| 国产日韩欧美制服另类| 91精品国产一区二区| 欧美日韩视频在线第一区| 9人人澡人人爽人人精品| 久久精品国产77777蜜臀| 亚洲一级片在线观看| 国产精品午夜久久| 国产亚洲视频系列| 欧美大尺度电影在线| 欧美在线视频全部完| 91在线视频观看| 成人一级黄色片| 国产自产v一区二区三区c| 男女激情视频一区| 婷婷一区二区三区| 亚洲国产视频在线| 亚洲国产一区二区三区| 亚洲丝袜精品丝袜在线| 1000部国产精品成人观看| 欧美国产丝袜视频| 国产欧美日韩另类一区| 国产欧美日韩视频在线观看| 国产人成亚洲第一网站在线播放| 97精品国产露脸对白| 亚洲国产cao| 久久人人爽爽爽人久久久| 欧美性猛片xxxx免费看久爱| 日本韩国欧美一区| 欧洲中文字幕精品| 欧美日韩一级二级三级| 欧美日韩精品专区| 制服丝袜成人动漫| 欧美电视剧免费全集观看| 精品99一区二区| 欧美精品一区二区三区蜜臀| 国产视频在线观看一区二区三区| 久久综合成人精品亚洲另类欧美| 久久综合狠狠综合久久激情| 久久精品欧美一区二区三区不卡| 欧美国产一区二区在线观看 | 精品美女一区二区三区| 日韩精品一区二区三区中文不卡 | 日韩电影在线免费观看| 日韩成人一级大片| 精品制服美女丁香| 国产精品 欧美精品| 成+人+亚洲+综合天堂| 欧美日韩在线直播| 日韩欧美一级二级三级久久久| 欧美一级在线视频| 国产日产欧美一区| 亚洲九九爱视频| 视频一区二区中文字幕| 久久99久久精品欧美| 国产福利一区二区三区视频在线| 高清国产午夜精品久久久久久| 99久久伊人久久99| 欧美另类z0zxhd电影| 久久久一区二区三区捆绑**| 亚洲美女电影在线| 免费视频最近日韩| 波多野结衣中文字幕一区| 欧美色视频一区| 26uuu亚洲婷婷狠狠天堂| 亚洲精品视频在线看| 麻豆中文一区二区| 99久久精品免费看| 欧美一区二区三区四区高清 | 精品国产成人在线影院| 国产精品午夜在线| 婷婷国产在线综合| 东方欧美亚洲色图在线| 欧美精品免费视频| 国产精品乱子久久久久| 久久99精品久久久久久国产越南| 成人免费精品视频| 欧美大尺度电影在线| 一区二区不卡在线播放| 国产成人在线视频播放| 7777女厕盗摄久久久| 亚洲视频免费在线观看| 精品亚洲免费视频| 香蕉乱码成人久久天堂爱免费| 91蜜桃视频在线| 不卡av在线网| 精品sm在线观看| 午夜亚洲福利老司机| 91美女在线观看| 久久久久久久久岛国免费| 丝袜亚洲另类欧美| 色一情一伦一子一伦一区| 久久精品亚洲麻豆av一区二区| 午夜天堂影视香蕉久久| 色吊一区二区三区| 中文字幕亚洲区| 成人美女视频在线观看18| 久久久久久久免费视频了| 日韩av中文在线观看| 欧美中文一区二区三区| 亚洲人吸女人奶水| 99久久综合国产精品| 国产精品福利影院| 国产成人免费xxxxxxxx| 精品久久久久久久久久久久包黑料 | 国产剧情一区在线| 欧美综合亚洲图片综合区| 亚洲日本护士毛茸茸| 国产麻豆视频一区二区| 久久综合久久综合九色| 天堂一区二区在线免费观看| 欧美日韩视频专区在线播放| 亚洲一区二区三区美女| 99精品国产一区二区三区不卡 | 欧美一区二区视频在线观看2022 | 亚洲一区成人在线| 欧美性大战久久久久久久蜜臀| 欧美国产成人精品| 9色porny自拍视频一区二区| 亚洲福利一区二区| 欧美日韩免费一区二区三区| 国产女人aaa级久久久级| 国产福利一区在线观看| 国产精品午夜在线| 成人午夜大片免费观看| 国产精品美女久久久久aⅴ | 美女www一区二区| 欧美日韩精品一区二区三区四区| 无吗不卡中文字幕| 欧美三级电影在线看| 美女任你摸久久| 韩国v欧美v亚洲v日本v| 国产免费成人在线视频| 欧美综合在线视频| 亚洲午夜影视影院在线观看| 国产一区二区调教| 日本人妖一区二区| 国产福利一区二区三区在线视频| 精品处破学生在线二十三| 日本不卡在线视频| 精品剧情在线观看| 成人av电影观看| 亚洲女同女同女同女同女同69| 欧美久久久久中文字幕| 日韩国产欧美三级| 欧美激情一区在线观看| 国产一区二区三区在线观看免费视频| 中日韩av电影| 欧美日韩卡一卡二| 伦理电影国产精品|