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

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

?? ser_232.cpp

?? 利用c實現單板機上串口的程序。單板機底層的串口驅動程序。
?? CPP
字號:
/*
			 LDS-1310 工裝測試程序
*/
#include "dos.h"
#include "bios.h"
#include "stdio.h"
#include "time.h"
#include "stdlib.h"

#define BASE_ADDR1    0x320         //基地址
#define BASE_ADDR2    0x340
#define BASE_ADDR3    0x240
#define BASE_ADDR4    0x380
#define RBR           0x0000
#define THR           0x0000
#define DLL           0x0000
#define DLM           0x0001
#define IER           0x0001
#define FCR           0x0002
#define IIR           0x0002
#define LCR           0x0003
#define MCR           0x0004
#define LSR           0x0005
#define MSR           0x0006
#define SCR           0x0007

#define SEND_NUM      2             //串口發送的BYTE數
#define SEND_NUM_MASTER    2
#define SEND_NUM_PC     66


#define I8259 0x21
#define T8259 0xa1

#define IRQ3  3
#define IRQ4  4
#define IRQ7  7
#define IRQ8  0
#define IRQ9  1
#define IRQ10 2
#define IRQ11 3
#define IRQ12 4
#define IRQ13 5
#define IRQ14  6
#define IRQ15  7


#ifdef __cplusplus
	 #define  __CPPARGS...
#else
	 #define __CPPARGS
#endif

void all_deal();
void init_ram();
void init_int();
int  read_peizhi();
void init_com_all();
void init_com1(unsigned int address_port);
void init_com_other(unsigned int address_port);
void test_send_com_all();
void interrupt test_rec_com_all(__CPPARGS);
void test_send_com1(unsigned int address_port,unsigned int port);
void test_send_com_other(unsigned int address_port,unsigned int port);
void test_rec_com1(unsigned int address_port,unsigned int port);
void test_rec_com_other(unsigned int address_port,unsigned int port);
void test_send_com_master(int address_port);
void input_master_buff();
void test_rec_all(int address_port);
void ser_232();
void RestoreCom();
void rec_other();

int com_err_time[16];               //各串口出錯次數
unsigned char peizhi[30];         //配置:1--站號,2--波特率,3--數
int state[4];                    //  四個串口狀態
int send_buff_master[10];        //主485發送緩存區
int send_point_master;           //主485發送指針
int send_buff[20];               //各子485發送緩存區
int send_point[16];              //各子485發送指針
int rec_point[16];              //各子485接收指針
int rec_buff[16][20];           //各子485接收緩存區

struct  time tnew;
unsigned char sec_old;
int sec_task;
int station_code;
int send_code;                  //向各子485發送的數據
int ser_flag;



void ser_232()
{
int i,k;
unsigned char value,t,t1;
//讀配置文件
      if(read_peizhi()==0) {
	  printf("'peizhi.txt' is not exist!");
	  return;
	  }
      init_ram();
      init_int();//中斷和串口初始化
       value=0;
      for(;;){
	  if(bioskey(1)){
	      value=bioskey(0);
	      if(value=='?') {
		RestoreCom();
		break;
		}
	   }


	  enable();
	  gettime(&tnew);
	  if(tnew.ti_hund!=sec_old){
	      sec_old=tnew.ti_hund;
	      sec_task++;
		}

	  if(sec_task>=10){                                     // 1秒任務
	      sec_task=0;
	      input_master_buff();                              //填主485緩存區
		    }

	  test_send_com_master(0x320);  //發送主485緩存區數據
	  test_send_com_all();                  //測試發送各串口數據
//	  rec_other();

      }
}

void interrupt (*oldintcom0)(__CPPARGS);
void interrupt (*oldintcom1)(__CPPARGS);
void interrupt (*oldintcom2)(__CPPARGS);
void interrupt (*oldintcom3)(__CPPARGS);


//中斷初始化
void init_int()
{
int i;
unsigned char en;
unsigned char MIRQ[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f} ;
//第一塊 串口IRQ3
//		en=inp(I8259);
//		en |=~MIRQ[IRQ3];
		delay(1);
		disable();
		oldintcom0 = _dos_getvect(0x0b);
		_dos_setvect(0x0b,test_rec_com_all);
		en = inp(I8259);
		en &= MIRQ[IRQ3];
		outp(I8259,en);

//第二塊 串口IRQ4
//		en=inp(I8259);
//		en |=~MIRQ[IRQ4];
		delay(1);
		oldintcom1 = _dos_getvect(0x0c);
		_dos_setvect(0x0c,test_rec_com_all);
		en = inp(I8259);
		en &= MIRQ[IRQ4];
		outp(I8259,en);


//第三塊 串口IRQ7
//		en = inp(I8259);
//		en |= ~MIRQ[IRQ7];
		delay(1);
		oldintcom2 = _dos_getvect(0x0f);
		_dos_setvect(0x0f,test_rec_com_all);
		en = inp(I8259);
		en &= MIRQ[IRQ7];
		outp(I8259,en);


//第四塊 串口IRQ12
//		en = inp(T8259);
//		en |= ~MIRQ[IRQ12];
		delay(1);
		oldintcom3 = _dos_getvect(0x74);
		_dos_setvect(0x74,test_rec_com_all);
		en = inp(T8259);
		en &= MIRQ[IRQ12];
		outp(T8259,en);
		init_com_all();
		enable();
}


//恢復串口原中斷向量
void RestoreCom()
{
	disable();
	_dos_setvect(0x0b,oldintcom0);
	_dos_setvect(0x0c,oldintcom1);
	_dos_setvect(0x0f,oldintcom2);
	_dos_setvect(0x74,oldintcom3);

	enable();
	}


//初始化
void  init_ram()
{
int i;

      for(i=0;i<4;i++){
	  state[i]=0;
	  }
      for(i=0;i<16;i++){
	  send_point[i]=0;                //各CPU發送指針
	  }
      send_buff[0]=0;                     //串口號
      send_buff[1]=1;                     //發送數據
      station_code=1;
      send_code=0x10;
      ser_flag=0;
      input_master_buff();
}


//填主485發送緩存區
void input_master_buff()
{
int i,j;

//接收站號與發送站號是否相同,接收數據與發送數據是否相同,
   if((rec_buff[0][0]==station_code)&&(rec_buff[0][1]==send_code)){
	   printf("OK MASTER REC_STATION%d=%x,",station_code,rec_buff[0][0]);             //打印接收字符
	   printf("%x",rec_buff[0][1]);
	   printf(" error=%x",com_err_time[station_code]);
	   printf("\n");
	   printf("\n");
			}
   else{                                                                        //有一個不等則出錯
	  if(ser_flag!=0){
	      printf("Err MASTER REC_STATION%d=",station_code);
	      for(i=0;i<rec_point[0];i++){
		      printf("%x,",rec_buff[0][i]);
			}
	      com_err_time[station_code]++;                     //相應串口接收出錯次數+1
	      printf(" error=%x",com_err_time[station_code]);
	      printf("\n");
	      printf("\n");

			}
		    }
   ser_flag=0xaa;
   station_code++;                                              //站號+1
   if(station_code>=4){                               //>串口總數,站號=2
	station_code=1;

	send_code++;
	if(send_code>=0xf0) send_code=0x10;
	 for(i=0;i<16;i++){                                             //清各從485接收緩存區
		for(j=0;j<3;j++){
			 rec_buff[i][j]=0xff;
			}
		 }
	 }

   send_buff_master[0]=station_code;                            //填發送站號
   send_buff_master[1]=send_code;                               //填發送碼值
   send_point_master=0;                                         //清主485發送指針
   for(i=0;i<16;i++){                                           //清各從485接收指針
      rec_point[i]=0;
      }

   for(i=0;i<16;i++){                                           //清各從485發送指針
      send_point[i]=0xff;
      }
}


//功能:讀配置
//返回:=1讀成功  =0讀失敗
int  read_peizhi()
{
FILE *fp;
unsigned char buffer[30];
int i,k;

    fp=fopen("peizhi.txt","rb");
    if(fp!=NULL){
	  //獲得文件名
	  fgets(buffer,10,fp);
	  k=0;
	  peizhi[0]=0;                                   //站號
	  for(i=0;i<10;i++){
	     if((buffer[i]>=0x30)&&(buffer[i]<0x3a)){
		 peizhi[0]=peizhi[0]*10+(buffer[i] & 0x0f);
		 k++;
		  }
	      else{
		  if(k>=1) break;
			}
	      }

	  fgets(buffer,10,fp);
	  k=0;
	  peizhi[1]=0;                           //波特率
	  for(i=0;i<10;i++){
	     if((buffer[i]>=0x30)&&(buffer[i]<0x3a)){
		 peizhi[1]=peizhi[1]*10+(buffer[i] & 0x0f);
		 k++;
		  }
	      else{
		  if(k>=1) break;
			}
	      }
	  fgets(buffer,10,fp);
	  k=0;
	  peizhi[2]=0;                               //四串口卡的個數
	  for(i=0;i<10;i++){
	     if((buffer[i]>=0x30)&&(buffer[i]<0x3a)){
		 peizhi[2]=peizhi[2]*10+(buffer[i] & 0x0f);
		 k++;
		  }
	      else{
		  if(k>=1) break;
			}
	      }

	  fgets(buffer,10,fp);
	  k=0;
	  peizhi[3]=0;                               //以太個數
	  for(i=0;i<10;i++){
	     if((buffer[i]>=0x30)&&(buffer[i]<0x3a)){
		 peizhi[3]=peizhi[3]*10+(buffer[i] & 0x0f);
		 k++;
		  }
	      else{
		  if(k>=1) break;
			}
	      }

	  fgets(buffer,10,fp);
	  k=0;
	  peizhi[4]=0;                               //以太個數
	  for(i=0;i<10;i++){
	     if((buffer[i]>=0x30)&&(buffer[i]<0x3a)){
		 peizhi[4]=peizhi[4]*10+(buffer[i] & 0x0f);
		 k++;
		  }
	      else{
		  if(k>=1) break;
			}
	      }
	  fclose(fp);
	  if((peizhi[1]>12) || (peizhi[1]<1)) peizhi[1]=3;      //波特率超范圍
	  return 1;
     }
    else{                                       //讀配置文件出錯
	return 0;
	    }
}

//初始化各串
void init_com_all()
{
      state[0]=0xaa;                            //置投運標志
      init_com1(0x320);                         //初始化第一犻串口
}


/*baud,8,無,1*/
/*address_port--地址 */
void init_com1(unsigned int address_port)
{
int baud,i,t1;
int value;
      baud=0x180;
      for(i=0;i<peizhi[1]-1;i++){
	    baud=baud/2;
	}
/*串0--4800 8 none 1*/
      value=0x83;
      outportb(address_port+LCR,value);
      value=baud%0x100;
      outportb(address_port+DLL,value);
      value=baud/0x100;
      outportb(address_port+DLM,value);
      value=0x03;
      outportb(address_port+LCR,value);
//      outportb(address_port+IIR,0xff);
      outportb(address_port+MCR,0x08);
  	  value=0x01;
      outportb(address_port+IER,value);                  //允許接受中斷

/*其它三個串    */
      for(i=1;i<4;i++){
	  value=0x83;
	  outportb(address_port+i*8+LCR,value);
	  value=baud%0x100;
	  outportb(address_port+i*8+DLL,value);
	  value=baud/0x100;
	  outportb(address_port+i*8+DLM,value);
	  value=0x03;
	  outportb(address_port+i*8+LCR,value);
//	  outportb(address_port+i*8+IIR,0x01);
	  outportb(address_port+i*8+MCR,0x08);
	  value=0x01;
	  outportb(address_port+i*8+IER,value);                  //允許接受中斷
      }

}


//主485發送程序
void test_send_com_master(int address_port)
{
int t,aa,i,t1;
	    if(send_point_master<SEND_NUM_MASTER){                //判斷是否發送完畢
	      t=inport(address_port+LSR);
	      if((t& 0x20)==0x20){
		  aa=send_buff_master[send_point_master];
		outp(address_port+THR,aa&0xff);
		if(send_point_master==0){
			 printf("If you input'?',Quit\n");
			 printf("Mastersend=");                 //顯示發送字符
			 for(i=0;i<SEND_NUM_MASTER;i++){
				printf("%x,",send_buff_master[i]);
				}
			 printf("\n");  //一個命令發送完
			 }
		   send_point_master++;                          //發送指針+1
		      }
		}
}

//各從485發送程序
void test_send_com_all()
{
     test_send_com1(BASE_ADDR1,0);                      //串口一發送程序
}

//address_port--口地址,port--口號
void test_send_com1(unsigned int address_port,unsigned int port)
{
int t,i,j;
int aa;

      for(i=1;i<4;i++){
	  if(send_point[4*port+i]<SEND_NUM){
	      rec_point[4*port+i]=0;
	      t=inport(address_port+i*8+LSR);
	      if((t& 0x20)==0x20){
		  aa=rec_buff[4*port+i][send_point[4*port+i]];
		  send_point[4*port+i]++;                       //發送指針+1
		  outp(address_port+i*8+THR,aa);
		  if(send_point[4*port+i]==SEND_NUM){
			 printf("station%d send=",4*port+i);             //顯示發送字符
			 for(j=0;j<SEND_NUM;j++) printf("%x,",rec_buff[4*port+i][j]);             //顯示發送字符
			 printf("\n");
			   }
		      }
		}
	  }

}

//各串口接收程序
void interrupt test_rec_com_all (__CPPARGS)
{
      disable();
      test_rec_all(BASE_ADDR1);                         //主485接收程序
      test_rec_com1(BASE_ADDR1,0);                      //串口一從485接收程序
      rec_other();
      outp(0x20,0x20);                                  // 串口中斷結束
      outp(0xa0,0x20);
      enable();
}

//主485接收程序
void test_rec_all(int address_port)
{
int t;
int aa;

      t=inport(address_port+LSR);
      if((t & 01)){
	    aa=inport(address_port+RBR) & 0xff;
	    if(aa>0xf0) return;
	    rec_buff[0][rec_point[0]]=aa;
	    rec_point[0]++;
	    }
} 

//串口一從485接收程序
// 輸入:address_port--口起始地址,port--串口號
void test_rec_com1(unsigned int address_port,unsigned int port)
{
int i,t;
int aa;

       for(i=1;i<4;i++){
	      t=inport(address_port+8*i+LSR);
	      if((t & 01)){
		  aa=inport(address_port+8*i+RBR)&0xff;
		  if(aa>0xf0) continue;
		  if(rec_point[4*port+i]==0){
			if(aa!=(4*port+i)){
			    continue;
			       }
			    }
		  rec_buff[4*port+i][rec_point[4*port+i]]=aa;
		  rec_point[4*port+i]++;
		  if(rec_point[4*port+i]>=SEND_NUM_MASTER){
			send_point[4*port+i]=0;
			    }
			}
	      }
}

void rec_other()    //對硬中斷時沒有響應的采用掃描方式(軟中斷)接收。
{int i0,i1,i2,i3;
 i0=inport(0x320+LSR)&0x01;
 i1=inport(0x328+LSR)&0x01;
 i2=inport(0x330+LSR)&0x01;
 i3=inport(0x338+LSR)&0x01;
 if(i0||i1||i2||i3)
   test_rec_com_all();
   }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美三日本三级三级在线播放| 精品久久人人做人人爱| 麻豆免费精品视频| 亚洲激情校园春色| 亚洲色图欧洲色图婷婷| 国产精品美日韩| 欧美韩国日本不卡| 国产精品久久久久精k8| 国产精品国产精品国产专区不片| 国产日韩视频一区二区三区| 国产欧美日韩中文久久| 欧美国产成人在线| 亚洲人妖av一区二区| 亚洲欧洲av色图| 亚洲欧美日韩精品久久久久| 亚洲综合无码一区二区| 日日摸夜夜添夜夜添亚洲女人| 婷婷成人综合网| 韩国一区二区视频| 成人18视频在线播放| 色综合久久久久| 91精品在线一区二区| 久久先锋影音av鲁色资源| 国产精品国产精品国产专区不片| 一区二区视频免费在线观看| 免费观看日韩av| 成人午夜短视频| 欧美午夜电影在线播放| 精品乱人伦小说| 中文字幕亚洲视频| 日本午夜精品一区二区三区电影 | 午夜精品久久一牛影视| 美日韩一级片在线观看| 成人高清在线视频| 欧美精品成人一区二区三区四区| 2021久久国产精品不只是精品| ㊣最新国产の精品bt伙计久久| 丝袜亚洲精品中文字幕一区| 成人激情免费网站| 欧美一区二区在线不卡| 亚洲人成在线播放网站岛国| 另类综合日韩欧美亚洲| 欧美亚洲禁片免费| 日本一区二区三区电影| 免费精品视频最新在线| 91美女在线看| 国产欧美日产一区| 婷婷久久综合九色国产成人| 91在线精品秘密一区二区| 日韩一区二区不卡| 亚洲一区二区三区影院| 丁香婷婷深情五月亚洲| 精品少妇一区二区三区免费观看| 亚洲精品欧美激情| 成人美女在线视频| 久久综合色之久久综合| 日韩不卡免费视频| 91麻豆免费在线观看| 欧美成人一区二区三区片免费| 亚洲综合激情网| 色综合色狠狠综合色| 国产欧美精品一区二区色综合 | 亚洲一区在线观看免费| 成人免费va视频| 久久伊人蜜桃av一区二区| 亚洲国产美女搞黄色| 国产精品123区| 26uuu国产在线精品一区二区| 天堂成人国产精品一区| 欧美日韩精品一区二区三区| 中文字幕一区二区三中文字幕| 久久国产精品72免费观看| 日韩一级片网址| 日本视频免费一区| 欧美日韩国产精品成人| 中文子幕无线码一区tr| 成人深夜福利app| 国产精品美女久久久久久久久| 国产精品 日产精品 欧美精品| 久久久久久日产精品| 国产精品一区二区在线观看网站| 精品久久久久久综合日本欧美| 老司机免费视频一区二区三区| 日韩视频不卡中文| 美女视频黄a大片欧美| 日韩午夜在线观看视频| 男人操女人的视频在线观看欧美 | 91激情在线视频| 中文字幕一区二区三区蜜月| 94-欧美-setu| 亚洲欧美影音先锋| 91国模大尺度私拍在线视频| 亚洲国产视频直播| 日韩午夜在线播放| 国产一区二区三区在线观看免费| 国产欧美日韩亚州综合| 91视频免费播放| 视频一区欧美精品| 亚洲精品一区二区三区香蕉 | 综合分类小说区另类春色亚洲小说欧美| 国产成人免费视频精品含羞草妖精| 欧美电影一区二区三区| 亚洲狠狠爱一区二区三区| 日韩一区二区在线观看| 丁香五精品蜜臀久久久久99网站 | 久久久国产午夜精品| 97精品久久久久中文字幕| 亚洲成人福利片| 久久青草欧美一区二区三区| 91美女精品福利| 狠狠色狠狠色综合| 亚洲美女视频在线观看| 日韩美女一区二区三区| 99re6这里只有精品视频在线观看 99re8在线精品视频免费播放 | 亚洲成av人**亚洲成av**| 久久久久久免费网| 欧美日韩一区二区不卡| 国产成人亚洲精品青草天美| 依依成人综合视频| 久久免费看少妇高潮| 欧美日韩一区 二区 三区 久久精品| 国产美女娇喘av呻吟久久| 亚洲色图欧美在线| 久久久久久电影| 欧美一区二区播放| 欧美这里有精品| 99久久精品免费精品国产| 精品写真视频在线观看| 日韩综合一区二区| 一区二区在线看| 国产精品久久久久永久免费观看| 日韩精品一区二区三区中文精品| 在线视频欧美区| 91色九色蝌蚪| 岛国精品一区二区| 国产福利一区二区| 麻豆一区二区三区| 青草av.久久免费一区| 亚洲综合一区二区精品导航| 中文字幕一区二区三区精华液 | 成人永久aaa| 精品一区二区三区免费| 蜜臀国产一区二区三区在线播放| 一区二区三区四区高清精品免费观看| 国产清纯在线一区二区www| 日韩欧美国产三级| 欧美一区二区三区免费视频| 欧美体内she精高潮| 在线免费观看日韩欧美| 99亚偷拍自图区亚洲| 风间由美一区二区三区在线观看| 狠狠网亚洲精品| 麻豆91精品91久久久的内涵| 青娱乐精品在线视频| 日本va欧美va欧美va精品| 久久精品噜噜噜成人88aⅴ| 美国欧美日韩国产在线播放| 免费在线成人网| 国产中文一区二区三区| 国产精品系列在线播放| 成人爽a毛片一区二区免费| 99久久免费国产| 91福利资源站| 欧美巨大另类极品videosbest| 欧美色手机在线观看| 日韩三级.com| 国产婷婷一区二区| 亚洲日本在线天堂| 亚洲第一久久影院| 加勒比av一区二区| 成人综合婷婷国产精品久久| 99精品热视频| 欧美美女直播网站| 精品国产制服丝袜高跟| 日本一二三四高清不卡| 日韩理论片在线| 五月婷婷欧美视频| 久久国产精品色| 成人av电影免费观看| 99久久精品久久久久久清纯| 欧美视频一区在线| 精品国产乱码久久久久久久| 国产精品高潮呻吟久久| 日本成人中文字幕在线视频 | 欧美午夜宅男影院| 日韩免费一区二区| 一区二区三区国产精华| 久久精品国产**网站演员| av电影一区二区| 精品免费国产二区三区| 亚洲精品写真福利| 国产精品一区二区在线观看不卡| 色综合久久久久网| 2020日本不卡一区二区视频| 玉足女爽爽91| 成人小视频免费观看| 91麻豆精品国产| 一区二区三区欧美亚洲| 国产成人一区二区精品非洲| 91精品欧美福利在线观看|