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

📄 ds2174.c

📁 低速误码仪测试代码
💻 C
字号:
#include"DS2174.h"
#include<stdint.h>
#include<util/delay.h>
#include<avr/io.h>
#include<stdio.h>
#include"uart.h"
extern uint8_t Tx_Data_Pos;
extern uint8_t Tx_Data_Len;
extern uint8_t Rx_Data_Pos;
extern uint8_t Rx_Data_Len;

extern uint8_t Send_Buf[16];
extern uint8_t Recv_Buf[16];
Num ResultTemp;
void BER_Write_DS2174(uint8_t Address,uint8_t Data)
{
	DDRD|=WR_DISABLE|RD_DISABLE|LE_ENABLE|CS_DISABLE;
  LE_DISABLE;	
	_delay_ms(10);
	PORTD=LE_ENABLE;
	PORTD|=CS_DISABLE;
	_delay_ms(10);
	CS_ENABLE;	
	RD_ENABLE;
	_delay_ms(10);
	PORTD|=RD_DISABLE;
	_delay_ms(10);
	PORTD|=WR_DISABLE;
	_delay_ms(10);
	WR_ENABLE;
	// printf("portd is %d",PORTD);
	DDRA=0x0F;
	PORTA=Address;
	_delay_ms(50);
	LE_DISABLE;
	PORTA=0x00;
	_delay_ms(10);
	DDRA=0xFF;
	PORTA=Data;
	_delay_ms(50);
	DDRA=0x00;
	PORTD|=WR_DISABLE|CS_DISABLE;	
}
uint8_t BER_Read_DS2174(uint8_t Address)
{
	uint8_t Data;
	DDRD|=WR_DISABLE|RD_DISABLE|LE_ENABLE|CS_DISABLE;	
	LE_DISABLE;	
	_delay_ms(10);
	PORTD=LE_ENABLE;
	_delay_ms(10);
	PORTD|=CS_DISABLE;
	_delay_ms(10);
	CS_ENABLE;	
	_delay_ms(10);
	RD_ENABLE;
	_delay_ms(10);
	PORTD|=RD_DISABLE;	
	_delay_ms(10);
	PORTD|=WR_DISABLE;
	_delay_ms(10);
	WR_ENABLE;
	DDRA=0x0F;
	PORTA=Address;
	_delay_ms(50);
	LE_DISABLE;
	_delay_ms(10);
	PORTD|=WR_DISABLE;
	_delay_ms(10);
	RD_ENABLE;
	_delay_ms(10);
	DDRA=0x00;
	//PORTA=0xFF;
	Data=PINA;
	PORTD|=RD_DISABLE|CS_DISABLE;	
	return Data;
} 
void BER_Interrupt_DS2174(void)
{
	uint8_t TempIntStatus,IntVector;
	IntVector=0;
	while((TempIntStatus=BER_Read_DS2174(SR))!=0)
	{
			TempIntStatus=TempIntStatus<<1;
			 IntVector++;
			if(TempIntStatus&0x80)
			 {
			 	switch(IntVector)
			 	{
			 	case 1:fprintf(stdout,"40 consecutive 1s are received......");
			 		break;
			 	case 2:fprintf(stdout,"40 consecutive 0s arer received......");
			 		break;
			 	case 3:fprintf(stdout,"bit error count is non-zero......");
			 		break;
			 	case 4:fprintf(stdout,"bit error counter overflows......");
			 		break;
	      case 5:fprintf(stdout,"bit counter overflows......");
	      	break;
        case 6:fprintf(stdout,"receiver is searching for synchronization......");
        	break;
	    default :
	     	  break;
	      }	
	    }
	}
}

Point BER_ResultNum_DS2174(void)
{
	uint8_t Data,TempData;
	TempData=BER_Read_DS2174(CONTROLR4);
	TempData&=~_BV(COUNT);
	BER_Write_DS2174(CONTROLR4,TempData);
  if((Data=BER_Read_DS2174(CONTROLR1))&0x20)
		{
			Data&=~_BV(LC);
			BER_Write_DS2174(CONTROLR1,Data);
			_delay_ms(100);
			Data|=_BV(LC);
			BER_Write_DS2174(CONTROLR1,Data);
	
		}
	 else
		{
			_delay_ms(100);
			Data|=_BV(LC);
			BER_Write_DS2174(CONTROLR1,Data);
		
			}		
  Uart_Recv(1);
  while(!Is_Recv_Complete());
  for(int i=0;i<1000;i++)
   {
  _delay_ms(Recv_Buf[0]);
   }
	Data&=~_BV(LC);
	BER_Write_DS2174(CONTROLR1,Data);
	Data|=_BV(LC);
	BER_Write_DS2174(CONTROLR1,Data);
		  
  ResultTemp.NumResult[0]=BER_Read_DS2174(COUNTR0);
  ResultTemp.NumResult[1]=BER_Read_DS2174(COUNTR1);
  ResultTemp.NumResult[2]=BER_Read_DS2174(COUNTR2);
  ResultTemp.NumResult[3]=BER_Read_DS2174(COUNTR3);
  ResultTemp.NumResult[4]=BER_Read_DS2174(COUNTR4);
  ResultTemp.NumResult[5]=BER_Read_DS2174(COUNTR5);
  
  TempData&=~_BV(COUNT);
  BER_Write_DS2174(CONTROLR4,TempData);
  
  ResultTemp.ErrorResult[0]=BER_Read_DS2174(COUNTR0);
  ResultTemp.ErrorResult[1]=BER_Read_DS2174(COUNTR1);
  ResultTemp.ErrorResult[2]=BER_Read_DS2174(COUNTR2);
  ResultTemp.ErrorResult[3]=BER_Read_DS2174(COUNTR3);
  ResultTemp.ErrorResult[4]=BER_Read_DS2174(COUNTR4);
  ResultTemp.ErrorResult[5]=BER_Read_DS2174(COUNTR5);	  
  
  return &ResultTemp;
}
void Result_Send_DS2174(void)
{
 	  	uint8_t Data,TempData;
	TempData=BER_Read_DS2174(CONTROLR4);
	TempData&=~_BV(COUNT);
	BER_Write_DS2174(CONTROLR4,TempData);
if((Data=BER_Read_DS2174(CONTROLR1))&0x20)
		{
			Data&=~_BV(LC);
			BER_Write_DS2174(CONTROLR1,Data);
			_delay_ms(100);
			Data|=_BV(LC);
			BER_Write_DS2174(CONTROLR1,Data);
		
		}
	 else
		{
			_delay_ms(100);
			Data|=_BV(LC);
			BER_Write_DS2174(CONTROLR1,Data);
	
			}	
			for(int i=0; i<1000;i++)
			{	
			_delay_ms(Recv_Buf[0]);
			}
  Data&=~_BV(LC);
	BER_Write_DS2174(CONTROLR1,Data);
	Data|=_BV(LC);
	BER_Write_DS2174(CONTROLR1,Data);
	
	Send_Buf[0]=BER_Read_DS2174(COUNTR0);
 	Send_Buf[1]=BER_Read_DS2174(COUNTR1);
	Send_Buf[2]=BER_Read_DS2174(COUNTR2);
  Send_Buf[3]=BER_Read_DS2174(COUNTR3);
  Send_Buf[4]=BER_Read_DS2174(COUNTR4);
	Send_Buf[5]=BER_Read_DS2174(COUNTR5);
	
	  TempData&=~_BV(COUNT);
  BER_Write_DS2174(CONTROLR4,TempData);
  
	Send_Buf[6]=BER_Read_DS2174(COUNTR0);
  Send_Buf[7]=BER_Read_DS2174(COUNTR1);
	Send_Buf[8]=BER_Read_DS2174(COUNTR2);
	Send_Buf[9]=BER_Read_DS2174(COUNTR3);  
	Send_Buf[10]=BER_Read_DS2174(COUNTR4);
	Send_Buf[11]=BER_Read_DS2174(COUNTR5);
	Uart_Send(12);
	while(!Is_Send_Complete());
}	


		
	
	

⌨️ 快捷键说明

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