金牌会员
- 积分
- 1460
- 金钱
- 1460
- 注册时间
- 2022-4-1
- 在线时间
- 123 小时
|
楼主 |
发表于 2022-4-2 14:25:56
|
显示全部楼层
void DQ_MODE_OUT( void )
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init( GPIOC, &GPIO_InitStructure );
}
void DQ_MODE_IN( void )
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init( GPIOC, &GPIO_InitStructure );
}
//发送一字节
void bus_sendbyte(u8 dat)
{
u8 count;
DQ_MODE_OUT();
DQ_OUT=1;
for(count=0;count<8;count++)
{
if((dat&(0x01<<count))==0)
{
DQ_OUT=1;
DQ_OUT=0;
delay_us(65);
DQ_OUT=1;
delay_us(6);
}
else
{
DQ_OUT=1;
DQ_OUT=0;
delay_us(6);
DQ_OUT=1;
delay_us(65);
}
}
DQ_OUT=1;
DQ_MODE_IN();
delay_us(10000);
}
//接收一字节
uint8_t bus_getbyte(void)
{
uint8_t dat=0;
uint8_t count;
for(count=0;count<8;count++)
{
DQ_MODE_OUT() ;
DQ_OUT=1;
delay_us(1);
DQ_OUT=0;
delay_us(6);
DQ_OUT=1;
DQ_MODE_IN();
delay_us(10);
dat >>= 1;
if( DQ_READ==1 )
{
dat |= 0x80;
}
/*
if(DQ_READ==1)
{
dat|=(0x01<<count);
}
*/
delay_us(55);
}
delay_us(10000);
return dat;
}
//复位
u8 bus_reset(void)
{
DQ_MODE_OUT() ;
DQ_OUT=1;
delay_ms(5);
DQ_OUT=0;
delay_us(550);
DQ_OUT=1;
delay_us(100);
DQ_MODE_IN();
delay_us(10);
if(DQ_READ==0)
{
delay_us(500);
return 1;
}
else
{
return 0;
}
}
//*******************************************************************************//
int main(void)
{
u8 rs485buf[255];
u8 key;
delay_init();
RS485_Init(9600); //RS485
//复位正常
key=bus_reset();
rs485buf[0]=key;
RS485_Send_Data(rs485buf,1);
//读序列号正常
bus_sendbyte(0x33);
for(i=0;i<8;i++)
{
rs485buf[i] = bus_getbyte();
}
RS485_Send_Data(rs485buf,8);
//写缓存 00 地址 8字节
key=bus_reset();
bus_sendbyte(0xCC);
bus_sendbyte(0x0F);
bus_sendbyte(0x00);
bus_sendbyte(0x00);
for(i=0;i<8;i++)
{
bus_sendbyte(i+16);
}
key=bus_getbyte();
rs485buf[0]=key;
key=bus_getbyte();
rs485buf[1]=key;
RS485_Send_Data(rs485buf,2);
//读缓存省略
//写入存储区
key=bus_reset();
bus_sendbyte(0xcc);
bus_sendbyte(0x55);
bus_sendbyte(0x00);
bus_sendbyte(0x00);
bus_sendbyte(0x07);
delay_ms(20);
//读出正常
key=bus_reset();
bus_sendbyte(0xcc);
bus_sendbyte(0xf0);
bus_sendbyte(0x00);
bus_sendbyte(0x00);
for(i=0;i<8;i++)
{
rs485buf[i] = bus_getbyte();
}
RS485_Send_Data(rs485buf,8);
key=bus_reset();
}
|
|