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

来源:互联网 发布:java调用js 编辑:程序博客网 时间:2024/04/29 15:01

通过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; } }



0 0