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

📄 device_driver(c_language).txt

📁 驱动程序方面的经典,对想学习内核编译的人会有很大帮助
💻 TXT
📖 第 1 页 / 共 2 页
字号:
#include "d:\emc\ctools.h"

 
void SetCom(void); 
void storedata(void);
void mywrite(unsigned int Port,unsigned int value);
unsigned int myread(unsigned int Port);
 void signal(unsigned character,unsigned error);
 unsigned char songbuffer[19],recevbuffer[30];
 int kkk=0;
 int lljnum=1;
 int statusread=0;
 int commandstatus=0;
/*************************************************************************
****************** 自来水公司RTU程序 主	任	务
    读入两个流量计的数据,存入40200为首寄存器	*******************
*************************************************************************/
void main(void)
{        
	
	int i,number;  /*number为尝试发送次数*/
        int history_status;
	SetCom();number=0;history_status=0;
	
	install_handler(com1,signal);
    /*****************清接收区******************************************/
		
         for(i=0;i<31;i++)      
         {  
			recevbuffer[i]='\0';
         }

	while(TRUE)
	{  
	    interval(6,10);
	    settimer(6,20);
        while(timer(6)>0){release_processor();}
        lljnum=1;
/*****************清接收区******************************************/
		
       				  for(i=0;i<30;i++)      
        			 {  
					recevbuffer[i]='\0';
         			}
 /*****************清接收区******************************************/
        release_processor();;
     	while(lljnum<7)
     	{switch(lljnum)
     	{  /******************************流量计1瞬时流量***********************/
     	case 1:     
     	       songbuffer[0]='{';songbuffer[1]='0';songbuffer[2]='1';songbuffer[3]=0x3A;
	       songbuffer[4]='U';songbuffer[5]='P';songbuffer[6]='0';songbuffer[7]='0';
	       songbuffer[8]='0';songbuffer[9]='1';songbuffer[10]='\r';songbuffer[11]='\n';
               release_processor();;

 				if(commandstatus==0)
	           		{
				interval(15,10);            /*超时*/
	           		settimer(15,4);
	           		fputc('\n',com1);
	 		   		fputs(songbuffer,com1);
	 		   		commandstatus=1;
	 		   		}
	 		   
	 		   		release_processor();;

				while(timer(15)>0){release_processor();}
			   if(timer(15)==0)  
				{ number++;commandstatus=0;   
				}
			   if((number>0)&&(commandstatus==0))  
				{ lljnum=2;number=0;
				}
                release_processor();;

				release_processor();;

	 		   	/******************** 存储到40200起始30字节内 **********************/
         		if (statusread==1)
        		 {
        		 	if((recevbuffer[10]>45)&&(recevbuffer[11]>45)&&(recevbuffer[12]>45)
        		 			&&(recevbuffer[13]>45)&&(recevbuffer[14]>45)&&(recevbuffer[15]>45)
        		 			&&(recevbuffer[16]>45)&&(recevbuffer[10]<58)&&(recevbuffer[11]<58)
        		 			&&(recevbuffer[12]<58)&&(recevbuffer[13]<58)&&(recevbuffer[14]<58)
        		 			&&(recevbuffer[15]<58)&&(recevbuffer[16]<58))
        		 		{
        		 			for(i=0;i<30;i++)      
         					{  
							mywrite(40200+i,recevbuffer[i]);
	        			 	}
						}
					statusread=0;lljnum=2;commandstatus=0;
					/*fputs(recevbuffer,com1);	发送到com1*/

				 }
				release_processor();;

				kkk=0;
/*****************清接收区******************************************/
		
       				  for(i=0;i<30;i++)      
        			 {  
					recevbuffer[i]='\0';
         			}
 /*****************清接收区******************************************/
		       break;
/*****************流量计1累计流量******************************************/		

     	case 2 :     
     	       songbuffer[0]='{';songbuffer[1]='0';songbuffer[2]='1';songbuffer[3]=0x3A;
		 songbuffer[4]='U';songbuffer[5]='P';songbuffer[6]='0';songbuffer[7]='0';
	 	songbuffer[8]='0';songbuffer[9]='2';songbuffer[10]='\r';songbuffer[11]='\n';
               	if(commandstatus==0)
	           		{
				interval(15,10);            /*超时*/
	           		settimer(15,4);
	           		release_processor();;	
	 		   		fputs(songbuffer,com1);
	 		   		commandstatus=1;
	 		   		}
	 		   
	 		   		
			   while(timer(15)>0){release_processor();}

			   if(timer(15)==0)  
				{ number++;commandstatus=0;	
				}
			   if((number>0)&&(commandstatus==0))  
				{ lljnum=3;number=0;
				}
 				release_processor();;
				release_processor();;				  
	 		   	
	 		   	/******************* * 存储到40230起始30字节内 **********************/
         		if (statusread==1)
        		 {
        		 	if((recevbuffer[13]>47)&&(recevbuffer[14]>47)&&(recevbuffer[15]>47)
        		 			&&(recevbuffer[16]>47)&&(recevbuffer[17]>47)&&(recevbuffer[18]>47)
        		 			&&(recevbuffer[19]>47)
        		 			&&(recevbuffer[13]<58)&&(recevbuffer[14]<58)
        		 			&&(recevbuffer[15]<58)&&(recevbuffer[16]<58)&&(recevbuffer[17]<58)
        		 			&&(recevbuffer[18]<58)&&(recevbuffer[19]<58))

        		 		{
							for(i=0;i<30;i++)      
         						{  
									mywrite(40230+i,recevbuffer[i]);
	        			 		}
						}
					statusread=0;lljnum=3;commandstatus=0;
					/*fputs(recevbuffer,com1);	发送到com1*/

				 }
				release_processor();;
				kkk=0;
/*****************清接收区******************************************/
		
       				  for(i=0;i<30;i++)      
        			 {  
					recevbuffer[i]='\0';
         			}
         			release_processor();;
 /*****************清接收区******************************************/
				break;
	 	
/*****************流量计2瞬时流量******************************************/		
	  case 3 :     
     	       		songbuffer[0]='{';songbuffer[1]='0';songbuffer[2]='2';songbuffer[3]=0x3A;
			 songbuffer[4]='U';songbuffer[5]='P';songbuffer[6]='0';songbuffer[7]='0';
	 		songbuffer[8]='0';songbuffer[9]='1';songbuffer[10]='\r';songbuffer[11]='\n';
              	if(commandstatus==0)
	           		{
				interval(15,10);            /*超时*/
	           		settimer(15,4);
	           		
	 		   		fputs(songbuffer,com1);
	 		   		commandstatus=1;
	 		   		}
	 		   	release_processor();;
	 		   	
				while(timer(15)>0){release_processor();}

			   if(timer(15)==0)  
				{ number++;commandstatus=0;	
				}
			   if((number>0)&&(commandstatus==0))  
				{ lljnum=4;number=0;
				}
	 		   	release_processor();;
	 		   	/******************* * 存储到40260起始30字节内 **********************/
         		if (statusread==1)
        		 {
        		 		if((recevbuffer[10]>47)&&(recevbuffer[11]>47)&&(recevbuffer[12]>47)
        		 			&&(recevbuffer[13]>47)&&(recevbuffer[14]>47)&&(recevbuffer[15]>47)
        		 			&&(recevbuffer[16]>47)&&(recevbuffer[10]<58)&&(recevbuffer[11]<58)
        		 			&&(recevbuffer[12]<58)&&(recevbuffer[13]<58)&&(recevbuffer[14]<58)
        		 			&&(recevbuffer[15]<58)&&(recevbuffer[16]<58))
        		 		{
							for(i=0;i<30;i++)      
         						{  
									mywrite(40260+i,recevbuffer[i]);
	        			 		}
						}
					statusread=0;lljnum=4;commandstatus=0;
					/*fputs(recevbuffer,com1);	发送到com1*/
				 }
				release_processor();;
				kkk=0;
/*****************清接收区******************************************/
		
       				  for(i=0;i<30;i++)      
        			 {  
					recevbuffer[i]='\0';
         			}
 /*****************清接收区******************************************/
				break;



/*****************流量计2累计流量******************************************/		
	      case 4 :     
     	       		songbuffer[0]='{';songbuffer[1]='0';songbuffer[2]='2';songbuffer[3]=0x3A;
	 		songbuffer[4]='U';songbuffer[5]='P';songbuffer[6]='0';songbuffer[7]='0';
	 		songbuffer[8]='0';songbuffer[9]='2';songbuffer[10]='\r';songbuffer[11]='\n';
               	if(commandstatus==0)
	           		{
				interval(15,10);            /*超时*/
	           		settimer(15,4);
	           		
	 		   		fputs(songbuffer,com1);
	 		   		commandstatus=1;
	 		   		}
				release_processor();;	 		   
	 		   	
				while(timer(15)>0){release_processor();}

			   if(timer(15)==0)  
				{ number++;commandstatus=0;	
				}
			   if((number>0)&&(commandstatus==0))  
				{ lljnum=5;number=0;
				}
				release_processor();;
				release_processor();;

	 		   	
	 		   	/******************* * 存储到40290起始30字节内 **********************/
         		if (statusread==1)
        		 {
        		 	if((recevbuffer[10]>47)&&(recevbuffer[11]>47)&&(recevbuffer[12]>47)
        		 			&&(recevbuffer[13]>47)&&(recevbuffer[14]>47)&&(recevbuffer[15]>47)
        		 			&&(recevbuffer[16]>47)&&(recevbuffer[10]<58)&&(recevbuffer[11]<58)
        		 			&&(recevbuffer[12]<58)&&(recevbuffer[13]<58)&&(recevbuffer[14]<58)
        		 			&&(recevbuffer[15]<58)&&(recevbuffer[16]<58))


        		 		{

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -