本帖最后由 笨笨笨笨小孩 于 2015-12-23 15:02 编辑
#include "io2uart.h"
#include "stdio.h"
#include "string.h"
unsigned char bbb;
#define RXD_IN (GPIO_PIN_4) //RXD PD4
#define TXD_OUT (GPIO_PIN_3) //TXD PD3
void IOInit(void)
{
GPIO_Init(GPIOD, RXD_IN, GPIO_MODE_IN_PU_NO_IT);
GPIOD->DDR |= TXD_OUT;//输出模式
GPIOD->CR1 |= TXD_OUT;//推挽输出
GPIO_Init(GPIOD,TXD_OUT,GPIO_MODE_OUT_PP_HIGH_FAST);
}
void Delay_us(unsigned int nCount)
{
for (; nCount != 0; nCount--);
}
void SEND_1(void)
{
GPIOD->ODR |=0x08; //PD3=1,TXD
}
void SEND_0(void)
{
GPIOD->ODR &=0xFE; //PD3=0,TXD
}
void WriteByte(unsigned char sdata) //波特率4800
{
unsigned char i;
unsigned char value=0;
static int xxx = 550;
//发送起始位
SEND_0();
Delay_us(xxx);//45
//发送数据位
for(i=0;i<8;i++)
{
value=(sdata&0x01); //先传低位
if(value)
{
SEND_1();
}
else
{
SEND_0();
}
Delay_us(xxx);//40
sdata=sdata>>1;
}
//停止位
SEND_1();
Delay_us(xxx); //50
}
unsigned char ReadByte(void)
{
unsigned char i,value=0;
while(1)
{
if(!(GPIO_ReadInputData(GPIOD)&0x10)) //RXD_IN
{
//等过起始位
Delay_us(550);
//接收8位数据位
for(i=0;i<8;i++)
{
value>>=1;
if((GPIO_ReadInputData(GPIOD)&0x10)) //RXD_IN
{
value|=0x80;
}
Delay_us(550);
}
Delay_us(550);
return value;
}
}
}
unsigned char ReadAndWrite(unsigned char *RBuf)
{
GPIOD->ODR |= RXD_IN;
RBuf[0]=ReadByte();
WriteByte(RBuf[0]);
return 1;
}
void main( void )
{
IOInit();
__enable_interrupt();
while(1)
{
ccc=ReadAndWrite(ReadBuf);
}
}
目前实现了使用延时能够接收、发送数据,可是一直调用ReadAndWrite(ReadBuf); 是不行的,求个使用中断、下降沿来触发 |