通过I/O方式模拟串口接收

通过I/O模拟串口方式是通过定时器 定时扫描I/O口电平,



void GPCDE_IRQHandler(void)  //下降沿中断,打开定时计数
{
	if(GPIOD->ISRC & 0x0040) {
		TIMER0->TCSR.CEN = 1;
	}
}

void TMR0_IRQHandler(void)
{
	volatile uchar vmCRS232;
	TISR.TIF =1;
	vmCRS232 = VM_UART_RX;   // #define VM_UART_RX             (GPIOD6_PIN)
	VM_Uart3_RX(vmCRS232);
}

void VM_Uart3_RX(uchar dataBit) // 模拟UART接收函数 
{ 
	static uchar GpsDotCnt=0;
	static uchar status = START;     
	static uchar cnt = 0;     
	static uchar number = 0;     
	static uchar rData; 
	    
    switch(status) 
	{         
		case START:
			if(dataBit) 
			{ 
				cnt = 0;
			} 
			else 
			{ 
				if(++cnt > 0)  
				{ 
					cnt = 0; 
					number = 0; 
					status = SDATA; 
				} 
			}
			break; 
		case SDATA: 
			if(++cnt > 3) 
			{ 
				cnt = 0; 
				if(dataBit) 
				{ 
					rData |= 0x80;
				} 
				else 
				{
					rData &= 0x7F;
				} 
				if(++number < 8) 
				{ 
					rData >>= 1;
				} 
				else 
				{ 
					number = 0; 
					status = STOP; 
				} 
			}
		break; 
		case STOP:if(++cnt > 2) 
			{ 
				cnt = 0; 
				TIMER0->TCSR.CEN = 0;
				DrvGPIO_EnableInt(E_GPD, 6, E_IO_FALLING, E_MODE_EDGE);
			    if(dataBit) 
			    { 
					//数据操作
				}
				status = START;
			}
			break; 
		default:
		{
			cnt = 0; 
			status = START;
		}
		break; 
	} 
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

minyuanxiani

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值