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

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

?? nmr.c

?? TLV2544程序
?? C
字號:
/*本程序為核磁共振找水儀下位機程序*/

#include"my.h"
union u {unsigned int word;
         struct{unsigned char high;unsigned char low;}bytes;//字節順序為高位在前的2byte結構
		 };

union w { ulong dwords;
          struct {unsigned int high;unsigned int low;}words;
		  struct {unsigned char byte3;unsigned char byte2;unsigned char byte1;unsigned char byte0;}bytes;
       };
//邏輯
#define FALSE  0
#define TRUE   1
#define H      1
#define L      0    

/* 引腳定義*/

//	AD:本設計采用TI公司的TLV2544ID,12bit,四通道,200ksps
sbit SDO    =   P1^0;		   	// TLV2544片選
sbit CS     =   P1^1;           // TLV2544控制模擬輸入采樣的開始和啟動轉換
sbit SDI    =   P1^2;           // TLV2544A/D轉換結果的三態串行輸出端
sbit SCLK   =   P1^3;           // TLV2544串行數據輸入
sbit INT    =   P1^4;           // TLV2544串行時鐘輸入
sbit CSTART =   P1^5;           // TLV2544轉換結束或主處理器中斷
// DA:本設計采用TI公司的TLV5636,12bit,單通道
sbit DIN   =    P0^3;		   	// TLV5636數據輸入
sbit DSCLK =    P0^4;           // TLV5636時鐘輸入
sbit FS    =    P0^5;           // TLV5636片選
// LED
sbit LEDCLK  =  P0^0;		   	// LED時鐘
sbit LEDDATA =  P0^1;           // LED數據
sbit LEDCLR  =  P0^2;           // LED清零
//control
sbit powercon = p0^6;
sbit es485    = p1^6;
sbit STATE    = P0^7;
sbit trstate  = p1^7;
/*協議命令字定義*/
//
#define BEGIN 0x09     //起始碼
#define SOH 0x0a     //起始碼
#define END 0x0d     //結束碼
//標志號
#define NMRTYPE 'A'  //標志號
//設備號
#define EQU  'P'     //電源模塊標志
//功能碼
#define AD  'A'   //AD采集
#define DA  'D'   //DA輸出
#define EC  'E'   //設備檢測
#define CLOSEDC 'C' //關閉電源逆變器
//返回命令
#define OK  'S'     //操作成功
#define ERRBCC 'B'
#define ERRF 'W'
#define ERRC 'C'

// ADC:TLV2544操作命令
#define CHA0 '0'
#define CHA1 '1'
#define CHA2 '2'
#define CHA3 '3'

/*變量定義*/

unsigned char data ch;      //ad通道號 
unsigned char  data mode;   //mode 是模式 0為讀,1為寫 */
unsigned char data n;       //數據長度,字節

//ad[chl:各通道采集完成數據;ch:各通道采集過程換算數據]

unsigned int idata chl0,ch0;
unsigned int idata chl1,ch1;
unsigned int idata chl2,ch2;
unsigned int idata chl3,ch3;

bit flag;//電壓采集完成標志
bit kk;//校驗正確與否標志
unsigned char idata command[20] _at_  0x48;  //串口的發送緩沖區

/*碼定義*/

const unsigned char code asci[16]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x41,0x42,0x43,0x44,0x45,0x46};//ASCII
const uchar code ledcode[11]={0xEE,0x28,0xCD,0x6D,0x2B,0x67,0xE7,0x2C,0xEF,0x6F,0xFF};//LED字型

//函數聲明

void serial_init(void);    				 //串口初始化
void bcc(void);            				 //校驗
void sendcommand(void);  				 //發送命令或返回命令數據
void proc_command(void);   				 //接收命令后處理
unsigned int adx(unsigned char ch);      //
void Delay_10_uS(void);                  //10us延時
unsigned int adrdwr(unsigned int par);   //ad讀寫
void senderrbcc(void);                   //錯誤發送
void adinit(void);                       //ad初始化
void delay_ms(unsigned char i);         
void writeda(unsigned int k);            //寫da,中斷調用
void writedam(unsigned int k);           //寫da,主程序調用
void dainit(void);                       //da初始化
void LEDinitial(void);                   //led初始化,檢測數碼管
void ledout(void);                       //led顯示
void sendequok(void);
void system_init(void);
void close(void);

void main(void)
{  
unsigned int idata command1,command2;
unsigned char data i,j;
SP=0x60;
system_init();
serial_init();
adinit();
dainit();
LEDinitial();

flag=1; //未采集完成,禁止上位機讀取ad數據
while(1)
{
//
STATE=~STATE;
for (j=0;j<5;j++){//一個顯示過程

ch0=0x0000;
for(i=0;i<16;i++)//一個采集過程
{
command1=0x0000;
command2=adrdwr(command1);
while(INT==1);
CS=H;
delay_ms(1);
command2=adrdwr(command1);
while(INT==1);
CS=H;
command2=command2>>4;
ch0=ch0+command2;
}
//
ch1=0x00;
for(i=0;i<16;i++)
{
command1=0x2000;
command2=adrdwr(command1);
while(INT==1);
CS=H;
delay_ms(1);
command2=adrdwr(command1);
while(INT==1);
CS=H;
command2=command2>>4;
ch1=ch1+command2;
}
//
ch2=0x00;
for(i=0;i<16;i++)
{
command1=0x4000;
command2=adrdwr(command1);
while(INT==1);
CS=H;
delay_ms(1);
command2=adrdwr(command1);
while(INT==1);
CS=H;
command2=command2>>4;
ch2=ch2+command2;
}
///
ch3=0x00;
for(i=0;i<16;i++)
{
command1=0x6000;
command2=adrdwr(command1);
while(INT==1);
CS=H;
delay_ms(1);
command2=adrdwr(command1);
while(INT==1);
CS=H;
command2=command2>>4;
ch3=ch3+command2;
}
flag=1;
chl0=ch0;
chl1=ch1;
chl2=ch2;
chl3=ch3;
flag=0;
}
ledout();//顯示通道1和2電壓
}
}


void system_init(void)
{
powercon = H;
es485=L;
STATE=L;
trstate=H;
}
//led初始化子函數,點亮全部數碼管及其各碼段
void LEDinitial(void)
{
unsigned char data k,i,wordC;
LEDCLR=0;
LEDCLR=1;
LEDCLK=1;
for(k=0;k<6;k++)
{   
   wordC=ledcode[10];
   for(i=0;i<8;i++){
		LEDCLK=0;
		Delay_10_uS();
		if ((wordC&0x80)==0x80) LEDDATA=1;
		else LEDDATA=0;
		wordC=wordC<<1;	
		LEDCLK=1;
		Delay_10_uS();
	}
  }
  delay_ms(500);
}

void close(void) using 1
{
powercon=H;
command[0]=SOH;
command[1]=NMRTYPE;
command[2]=EQU;
command[4]=OK;
command[7]=END;
mode=1;n=8;
bcc();
sendcommand();
}
//led顯示,左數碼管顯示通道1,右數碼管顯示通道2;
void ledout(void) using 1
{
unsigned long idata V1;
unsigned char data tmp,i,j,k,wordC,ledword[6];
LEDCLR=0;
LEDCLR=1;
LEDCLK=1;
V1=chl0;
V1=V1>>4;
tmp=V1/1000;
ledword[0]=tmp&0x0f;
V1=V1-tmp*1000;
tmp=V1/100;
ledword[1]=tmp&0x0f;
V1=V1-tmp*100;
tmp=V1/10;
ledword[2]=tmp&0x0f;
//
V1=chl1;
V1=V1>>4;
tmp=V1/1000;
ledword[3]=tmp&0x0f;
V1=V1-tmp*1000;
tmp=V1/100;
ledword[4]=tmp&0x0f;
V1=V1-tmp*100;
tmp=V1/10;
ledword[5]=tmp&0x0f;
for(i=0;i<6;i++)//依次顯示六個數碼管
	{
	k=ledword[5-i];
	wordC=ledcode[k];
    for(j=0;j<8;j++){//依次發送各數碼管碼段
		LEDCLK=0;  
		if ((wordC&0x80)==0x80) LEDDATA=1;
	    else LEDDATA=0;
		wordC=wordC<<1;
		LEDCLK=1;
	    Delay_10_uS();
	}
  }
}

void  Delay_10_uS(void) using 1
{
unsigned char data  i=10;
while(i--);
}

void delay_ms(unsigned char ms_number)
{ 
unsigned int  idata i;
unsigned char data j;
for(j=0;j<ms_number;j++)
for(i=0;i<229;i++);
}
/*********************************************/
//向上位機發送數據
void sendcommand(void) using 1
{
  unsigned char data j=0;
  unsigned char data tmp=0;
es485 =H;
trstate=L;
TH0=0xa0;  TL0=0x00;  TF0=0;
TR0=1;
while(TF0==0) {  }

tmp=command[j];
TI=0;
while(tmp!=0x0d)
{
tmp=command[j];
SBUF=tmp;
j=j+1;
while(!TI);
TI=0;
}
//
es485 =L;
trstate=H;
TH0=0xa0;  TL0=0x00;  TF0=0;
TR0=1;

while(TF0==0) {  }
//

}	
/*********************************************/

//串口初始化:晶振采用22。1184M,波特率38400,方式一
void serial_init()
{
  SCON=0x50;   TMOD=0x21;   PCON=0x80;   TR0=0;                                                                                                                                                                                                                                                                 0;
  TH1=0xff;  TL1=0xff;  TR1=1;    ET0=0;  ES=1;  EA=1;
  es485=L;
} 
void serial(void) interrupt 4 using 1
{
 	unsigned char data  temp,j;
    ES=0;
    j=0;
    RI=0;
    temp=SBUF;
    trstate=L;
  if(temp==BEGIN)
   {
    command[j]=temp;
    j=j+1;
    while((j<20)&(temp!=0x0d))
    {
    while(!RI);
    RI=0;
    temp=SBUF;
    command[j]=temp;
    j=j+1;
    }
       mode=0;n=j;
       bcc();
   if(kk){
    	proc_command();
	     }
	  else{
          senderrbcc();
	    }
  }
  ES=1;
  trstate=H;
}
//數據傳送錯誤返回指令
void senderrbcc(void) using 1
{
command[0]=SOH;
command[1]=NMRTYPE;
command[2]=EQU;
//
command[7]=END;
command[4]=ERRBCC;


mode=1;n=8;
bcc();
sendcommand();	
}
//AD寫配置寄存器及控制通道,并讀取數據
unsigned int  adrdwr(unsigned int par) 
{
unsigned char data i;
unsigned int idata parp,parp1;
parp=par;
parp1=0x00;
SCLK=L;
CS=H;
Delay_10_uS();
CS=L;
for(i=0;i<16;i++)
{
if((parp&0x8000)==0x8000) {SDI=H;}else {SDI=L;}
parp=parp<<1;
SCLK=H;
Delay_10_uS();
parp1=parp1<<1;
if(SDO==H){parp1=parp1|0x0001;}
SCLK=L;
Delay_10_uS();
}
Delay_10_uS();
CS=H;
return (parp1);
}
//寫da,中斷調用
void writeda(unsigned int k) using 1
{
unsigned char data i;
unsigned int idata dat;
dat=k;
FS=L;
Delay_10_uS();
for(i=0;i<16;i++)
{
DSCLK=H;
Delay_10_uS();
if((dat&0x8000)==0x8000)DIN=H;else DIN=L;
dat=dat<<1;
DSCLK=L;
Delay_10_uS();
}
FS=H;
}
//da初始化
void dainit(void) using 1
{
DSCLK=L;
DIN=H;
FS=H;
//writeda(0xd002);//內部參考
writeda(0xd000);

}
//ad初始化
void adinit(void)
{
unsigned int idata command1;
CS=H;
SCLK=L;
CSTART=H;
SDI=H;
SDO=H;
INT=H;
command1=0xA000;  //power up 
command1=adrdwr(command1);
delay_ms(10);
command1=0xA000;
command1=adrdwr(command1);
delay_ms(10);
}
//ad發送數據
void sendadc(void) using 1
{
union u idata kk;
unsigned char data k,m;
while(flag==1);
switch(ch){
case '0': kk.word=chl0;
break;
case '1': kk.word=chl1;
break;
case '2': kk.word=chl2;
break;
case '3': kk.word=chl3;
break;
default: kk.word=chl0;
break;
}
command[0]=SOH;
command[1]=NMRTYPE; //type號
command[2]=EQU; //設備號
//command[3]:功能碼[A];command[4]:通道號
command[5]= OK; //確認命令,選擇通道正確,并返回數據
command[11]=END;
k=kk.bytes.high;
m=k;
k=k>>4;
k=k&0x0f;
command[6]=asci[k];
k=m;
k=k&0x0f;
command[7]=asci[k];
k=kk.bytes.low;
m=k;
k=k>>4;
k=k&0x0f;
command[8]=asci[k];
k=m;
k=k&0x0f;
command[9]=asci[k];
mode=1;n=12;
bcc();
sendcommand();
}
//校驗
void  bcc(void) using 1
{ 
  unsigned char data jj,jj1;
  unsigned char idata bcc1,bcc2;
  kk=0;
if (mode==0x0)
    {
    bcc1=0;
    for(jj=0;jj<n-3;jj++)
     {
    bcc1=bcc1^command[jj];
      }
     jj1=bcc1&0x0f;
     bcc2=asci[jj1];
     bcc1=bcc1>>4;
     jj1=bcc1&0x0f;
     bcc1=asci[jj1];
      if(bcc1==command[jj]&(bcc2==command[jj+1]))
           {
        	kk=1;
            }
	       else
           {
        	kk=0;
           }
        }
    else
      {
      bcc1=0;
      for(jj=0;jj<n-3;jj++)
      {
       bcc1=bcc1^command[jj];
       }
      bcc2=asci[bcc1&0x0f];
      jj=jj+1;
      command[jj]=bcc2;
       bcc1=asci[(bcc1&0xf0)>>4];
       jj=jj-1;
       command[jj]=bcc1;
       kk=1;
   }
}	 
      
//功能碼錯誤返回子程序
void senderrf(void) using 1
{
command[0]=SOH;
command[1]=NMRTYPE;
command[2]=EQU;
command[4]=command[3];
command[3]=ERRF;
command[7]=END;
mode=1;n=8;
bcc();
sendcommand();
}

//通道選擇錯誤返回子程序
void senderrc(void) using 1
{
command[0]=SOH;
command[1]=NMRTYPE;
command[2]=EQU;
//command[3]:功能碼[A];command[4]:通道號
command[5]=ERRC; //錯誤命令,選擇通道不正確,返回通道號
command[8]=END;
mode=1;n=9;
bcc();
sendcommand();
}

//da輸出
void daout(void) using 1
{
unsigned char data h,m,l;
union u idata kk;
unsigned int idata dat;

h=command[4];
m=command[5];
l=command[6];
if(h<0x41){h=h-0x30;}else{h=h-0x41+0xa;}
if(m<0x41){m=m-0x30;}else{m=m-0x41+0xa;}
if(l<0x41){l=l-0x30;}else{l=l-0x41+0xa;}
h=h&0x0f;
h=h|0x40;
m=m&0x0f;m=m<<4;
l=l&0x0f;m=m|l;
kk.bytes.high=h;
kk.bytes.low=m;
dat=kk.word;
writeda(dat);
writeda(dat);
powercon=L;
//
command[0]=SOH;
command[1]=NMRTYPE;
command[2]=EQU;
command[7]=command[6]; //DH
command[6]=command[5]; //DM
command[5]=command[4]; //DL
command[4]=OK;    //成功標志位:S
//
command[10]=END;
mode=1;n=11;
bcc();
sendcommand();
}

void sendequok(void) using 1
{
command[0]=SOH;
command[1]=NMRTYPE;
command[2]=EQU;
command[4]=OK;
command[7]=END;
mode=1;n=8;
bcc();
sendcommand();

}

//主處理程序
void proc_command() using 1
{  
    if (command[1]==NMRTYPE &command[2]==EQU){//電源模塊
		switch(command[3]){
			case AD://ad
               switch(command[4]){
               case CHA0 :
			   ch='0';sendadc();break;
			   case CHA1 :
			   ch='1';sendadc();break;
				case CHA2 :
			   ch='2';sendadc();break;
				case CHA3 :
			   ch='3';sendadc();break;
			   default:senderrc();break;//通道錯誤返回
			   }
             break;
			case DA://da
            daout();
			break;
			case EC://設備檢測
			sendequok();
			break;
            case CLOSEDC://關閉高壓電源,再次調整電壓時,系統自動開啟該模塊!軟件需先寫0電壓值,在調用此函數!
            close();
            break;
			default:senderrf();//功能碼錯誤返回
			break;
    }
  }
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产福利电影一区二区三区| www.久久久久久久久| 国产精品久久久久婷婷| 欧美日本精品一区二区三区| 国产精品中文有码| 午夜国产精品一区| 亚洲欧美在线aaa| 精品国产乱码久久久久久浪潮| 91国内精品野花午夜精品| 国产主播一区二区| 日韩一区精品字幕| 亚洲人一二三区| 国产三级一区二区| 日韩免费观看高清完整版| 欧美视频在线观看一区二区| 成人av网站在线观看免费| 精品影视av免费| 日韩影视精彩在线| 亚洲一级电影视频| 亚洲视频每日更新| 亚洲国产成人自拍| 久久久精品综合| 欧美一区二区三区小说| 欧美日韩黄色影视| 欧美午夜一区二区三区| 97se亚洲国产综合自在线| 国产精品资源站在线| 久久精品国产99| 麻豆一区二区99久久久久| 亚洲成人精品一区| 亚洲国产精品久久久久秋霞影院| 亚洲美女屁股眼交3| 一区免费观看视频| 亚洲欧洲日韩在线| 中文字幕永久在线不卡| 国产精品免费视频一区| 欧美国产精品久久| 国产精品色噜噜| 国产精品久久久久久久久动漫 | 国产suv一区二区三区88区| 免费高清不卡av| 美女脱光内衣内裤视频久久影院| 天天影视涩香欲综合网| 午夜精品成人在线| 日本最新不卡在线| 老司机午夜精品| 极品少妇一区二区| 国产91丝袜在线播放| 成人动漫视频在线| 色综合久久久久久久| 色婷婷久久99综合精品jk白丝| 色吊一区二区三区| 欧美丝袜丝交足nylons图片| 欧美日韩国产影片| 欧美成人福利视频| 久久久久亚洲综合| 国产精品拍天天在线| 亚洲日本电影在线| 亚洲成a人片在线不卡一二三区| 天天色 色综合| 久久99日本精品| 懂色av一区二区在线播放| 91视频www| 欧美肥大bbwbbw高潮| 精品999在线播放| 国产精品欧美一区喷水| 亚洲一区在线视频观看| 天天操天天综合网| 国产成人aaa| 在线观看免费一区| 日韩精品一区二区三区swag| 日本一区二区三区视频视频| 亚洲精品v日韩精品| 日本亚洲天堂网| 国产91清纯白嫩初高中在线观看| 在线中文字幕一区二区| 日韩一级免费观看| 国产精品视频第一区| 一区二区三区在线播| 奇米精品一区二区三区在线观看 | 欧美精品九九99久久| 精品日韩成人av| 亚洲精品视频在线观看网站| 日本不卡中文字幕| 波多野洁衣一区| 日韩一区二区三区电影在线观看 | 狠狠网亚洲精品| 色菇凉天天综合网| 欧美精品一区在线观看| 亚洲精品高清在线| 国产福利一区二区三区视频| 欧美在线播放高清精品| 国产视频亚洲色图| 日韩和欧美的一区| 972aa.com艺术欧美| 精品成人在线观看| 亚洲一二三四区| 成人午夜免费av| 日韩欧美国产系列| 一区二区三区精密机械公司| 国产高清无密码一区二区三区| 欧美在线观看18| 国产精品家庭影院| 精品亚洲成av人在线观看| 欧美亚洲一区二区三区四区| 日本一区二区高清| 久久99久久精品欧美| 欧美探花视频资源| 亚洲人成网站精品片在线观看| 激情欧美一区二区| 制服丝袜亚洲精品中文字幕| 亚洲理论在线观看| 成人午夜碰碰视频| 久久综合久久鬼色中文字| 视频一区欧美日韩| 色吊一区二区三区| 综合激情网...| 懂色av一区二区三区蜜臀| 欧美videossexotv100| 日本欧美一区二区三区| 欧美色男人天堂| 一区二区三区色| 91黄视频在线| 亚洲蜜桃精久久久久久久| 成人av在线影院| 国产精品久久久久影院老司| 国产精品一区二区黑丝| 精品国产乱码久久久久久老虎| 蜜臀av性久久久久蜜臀aⅴ流畅 | 国产日产欧美一区二区视频| 免费人成网站在线观看欧美高清| 精品1区2区3区| 亚洲自拍偷拍欧美| 91成人在线精品| 亚洲综合免费观看高清完整版在线 | 久久综合九色综合久久久精品综合| 日本不卡一二三区黄网| 欧美一卡二卡三卡| 蜜臀av一级做a爰片久久| 日韩视频一区二区| 狠狠v欧美v日韩v亚洲ⅴ| 精品久久久久久久久久久久包黑料 | 亚洲激情六月丁香| 在线一区二区三区四区| 亚洲国产精品一区二区www在线| 欧美亚洲综合网| 日本最新不卡在线| 日韩精品一区二区三区视频播放| 久久99国产乱子伦精品免费| 337p粉嫩大胆色噜噜噜噜亚洲| 国产在线麻豆精品观看| 国产亚洲一区二区在线观看| 豆国产96在线|亚洲| 亚洲人一二三区| 欧美色电影在线| 毛片av一区二区三区| 国产亚洲精久久久久久| 99精品热视频| 亚洲午夜精品17c| 欧美一二区视频| 国产露脸91国语对白| 国产精品久久久久影院色老大| 一本大道综合伊人精品热热| 五月激情综合婷婷| 日韩视频在线永久播放| 国产福利一区在线| 一区二区三区美女视频| 日韩欧美一区二区免费| 国产黄人亚洲片| 一区二区三区不卡视频在线观看 | 欧美一区二区三区四区视频| 久久99日本精品| 亚洲欧美成人一区二区三区| 欧美一区二区三区视频在线 | www.亚洲色图.com| 亚洲成人精品一区二区| wwww国产精品欧美| 色狠狠桃花综合| 黄一区二区三区| 一区二区三区欧美久久| 日韩三级伦理片妻子的秘密按摩| 不卡的电视剧免费网站有什么| 亚州成人在线电影| 国产欧美日产一区| 91精品综合久久久久久| 成人精品鲁一区一区二区| 亚洲成年人影院| 国产精品―色哟哟| 日韩一区二区在线观看视频 | 久久综合九色综合欧美亚洲| 色婷婷精品大在线视频 | 香蕉av福利精品导航| 国产日产亚洲精品系列| 欧美精品一卡两卡| 99视频精品在线| 狠狠色综合播放一区二区| 亚洲国产精品一区二区www在线| 久久欧美一区二区| 在线播放91灌醉迷j高跟美女| 成a人片国产精品|