?? ds2174.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 + -