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

📄 uart0.c

📁 应用与c8051f020的地震波检测单片机源代码
💻 C
字号:
void time(ulong longth)//29us delay
  	{
    ulong i;
	uchar j;
    for(i=0;i<longth;i++)
      	{
        for(j=0;j<0x58;j++)    //22.11MHz==0xb0//24MHz=0xc0;
          	{
		//	WDTCN = 0xA5;
        nop();
			}
      	}
  	}

void  send(unsigned char cc)
  	{
	while(U0Tbusy);			//若发送忙标志未清,等待
	SBUF0 = cc;
	U0Tbusy = 1;
	while(U0Tbusy);			//等待发送完毕
  	}

void UART0_ISR() interrupt 4
  	{
    if(RI0)
      	{
        RS232 = SBUF0;
        RS232FLAG = 1;			//已经接收到数据
        RI0 = 0;
      	}
    if(TI0)
		{
		TI0 = 0;
		U0Tbusy = 0;
		}
 	}

void Uart0Process(void)
	{
	data uchar i = 0;
	data uchar RECEIVE_DATA[30];

	while(PrtocolNo !=0)
		{
	//	WDTCN = 0xA5;
        if(RS232FLAG)				//处理从串口读来的数据
          	{
            RS232FLAG = 0;
            switch(PrtocolNo)
              	{
                case 0:
                   	LONG=0;  PrtocolNo=0;  U0Overtimer=0;
                	break;
                case 1://DISK READY?
                	RECEIVE_DATA[LONG]=RS232;LONG++;
                	if(LONG==1)
                  		{
                    	if(RECEIVE_DATA[0]!=0)
                      		{
                        	USB_DISK_READY=0;
							USBDiamFileCreated=0;
                        	LONG=0;  PrtocolNo=0;  U0Overtimer=0;
                      		}
                  		}
                	if(LONG==2)
                  		{
                    	USB_DISK_READY=1;
                    	LONG=0;  PrtocolNo=0;  U0Overtimer=0;
                 	 	}
                	break;
                case 2:											//建立变径文件
                	RECEIVE_DATA[LONG]=RS232;LONG++;
                	if(LONG==1)
                  		{
                    	if(RECEIVE_DATA[0]!=0)
                      		{
                        	LONG=0;U0Overtimer=0;PrtocolNo=0;  
                      		}
                  		}
                	if(LONG==2)
                  		{
                    	USBDiamFileCreated=1;
                    	LONG=0;U0Overtimer=0;PrtocolNo=0;
                 		 }
                	break;
                case 3:											//写变径文件
                	RECEIVE_DATA[LONG]=RS232;LONG++;
                	if(RECEIVE_DATA[LONG-1]==0X1E)
                  		{
                    	for(i=0;i<64;i++)
							{
					//		WDTCN = 0xA5;						//看门狗
                    		send(DiamBuffer[!CurrentDmBffer][(LONG-1)*64+i]);
                  			}
						}
                	if(LONG==27)								//24个0X1E+3个返回值
                  		{
                    	LONG=0;U0Overtimer=0;PrtocolNo=0;//DiamBufferFull=0;
                  		}
                	break;
                case 4:											//打开变径文件
                	RECEIVE_DATA[LONG]=RS232;
					LONG++;
                	if(LONG==1)
                  		{
                    	if(RECEIVE_DATA[0]!=0)
                      		{
                        	LONG=0;U0Overtimer=0;PrtocolNo=0;  
                      		}
                  		}
                	if(LONG==2)
                  		{
//                    	CurrentFile=DIAM_FILE;
						FILE_END=0;
                    	LONG=0;U0Overtimer=0;PrtocolNo=0;
                  		}
                	break;

                case 5:										//将指针移动到文件尾
                	RECEIVE_DATA[LONG]=RS232;LONG++;
                	if(LONG==1)
                  		{
                    	if(RECEIVE_DATA[0]!=0)
                      		{
                        	LONG=0;U0Overtimer=0;PrtocolNo=0;  
                      		}
                  		}
                	if(LONG==2)
                  		{
				    	FILE_END=1;
                    	LONG=0;U0Overtimer=0;PrtocolNo=0;
                  		}
                	break;
       			default:
					break;
             	}//end of switch
          	}//end of if
		}//end of while
	}

⌨️ 快捷键说明

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