void CH376_PORT_INIT( void ) /* 由于使用异步串口读写时序,所以进行初始化 */ { /* 如果单片机只有一个串口,那么必须禁止通过串口输出监控信息 */ SCON = 0x50; PCON = 0x80; // TL2 = RCAP2L = 0 - 18432000/32/UART_INIT_BAUDRATE; /* 18.432MHz晶振 */ TL2 = RCAP2L = 0 - 24000000/32/UART_INIT_BAUDRATE; /* 24MHz晶振 */ /* 建议通过硬件引脚设定直接选择更高的CH376的默认通讯波特率 */ TH2 = RCAP2H = 0xFF; T2CON = 0x34; /* 定时器2用于串口的波特率发生器 */ RI = 0; } 如果是计算机通过异步串口和CH376模块连接,应该怎么改写这个函数?
这个是单片机的初始化,计算机上面会有接口函数设置波特率的。这个你只需要参考计算机的串口编程就可以了啊。
多谢 那串口写命令xWriteCH376Cmd里的TI和SBUF在计算机里要怎么表示,是依次将sbuf的数据从串口输出?
xWriteCH376Cmd( unsigned char mCmd ) /* 向CH376写命令 */ { TI = 0; SBUF = SER_SYNC_CODE1; /* 启动操作的第1个串口同步码 */ while ( TI == 0 ); TI = 0; SBUF = SER_SYNC_CODE2; /* 启动操作的第2个串口同步码 */ while ( TI == 0 ); TI = 0; SBUF = mCmd; /* 串口输出 */ while ( TI == 0 ); }
通过计算机串口发送相对应的数据。
CByteArray a; a.SetSize(3); a.SetAt(0,SER_SYNC_CODE1); a.SetAt(1,SER_SYNC_CODE2); a.SetAt(2,CMD11_CHECK_EXIST); m_ctrlComm.SetOutput(COleVariant(a)); m_ctrlComm.SetOutput(COleVariant("0x65"));
这样写测试通讯接口和工作状态,不过串口中一直没有数据返回,是不是哪里用错了,想问一下贵公司提供的ch376dbg里是怎么实现写命令和读返回数据的?