你先需要验证一下软件的发送功能是否正常。将窗口的RX和TX短接,你自己发送的数据会被自己收到,这样就可以验证上位机测的发送、接收功能是否正常了。
先把自己调试好了,再去跟单片机联调。
如果你这边确认无问题,那么单片机那边需要有人调试验证是否接收到了你发送的数据。
建议你用多线程,至少两个线程,数据接受和处理一个线程,数据显示一个线程;这样至少界面不会卡住的现象。
如果数据接收和处理计算量比较大,这两个还可以分两个线程。
数据接收直接调用串口驱动或则从网上下载一个关于串口数据读取封装类就可以了。
数据处理根据发送数据的情况对串口数据包进行解析,从数据包中解析出你想要的数据。将解析好的数据放在一块共享内存中,通知界面线程来拿就可以了。
界面显示运用MFC的Timer和Draw函数进行刷新和绘制就可以了。
在你的程序里,在memcpy(pB,rxdata,k);代码的后面,把pB中存储的字符串数据转为实际的数据,你的这个字符串数据应该是ASSIC码,你按照字节把ASSIC码转为16进制数字,然后把k-2个16进制数拼成一个完整的数进行数据处理,处理出来的数在转为ASSIC码,存回pB数组中,再将pB字符串转为m_strRXData,进行更新显示。
你的m_strRXData+=strTemp1;应该放在for循环里。
VC 获取进程线程数
#include <tlhelp32h>
void EnumProcess(void)
{
HANDLE hProcessSnap;
HANDLE hProcess;
PROCESSENTRY32 pe32;
DWORD dwPriorityClass;
hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (hProcessSnap == INVALID_HANDLE_VALUE)
{
return;
}
pe32dwSize = sizeof(PROCESSENTRY32);
if (!Process32First(hProcessSnap, &pe32))
{
CloseHandle(hProcessSnap);
return;
}
do
{
//printf("%s", pe32szExeFile); //完整文件名
//printf("%d", (int)pe32cntThreads);//线程数
}while(Process32Next(hProcessSnap, &pe32));
CloseHandle(hProcessSnap);
}
如果要获取进程句柄
HANDLE hProcessHandle;
hProcessHandle = OpenProcess(0x1F0FFF, true, ProcessID);//ProcessID进程ID
这个在控制台,Win32 SDK ,MFC 都可以用的,只不过
SDK ,MFC 输出就 不用 printf 了,只要把获取的内容赋给变量就行了
LONG CCaptureAppDlg::OnComm(WPARAM ch, LPARAM port)
如果这个函数确实能被执行
且这些 m_unEditTemp 。。。值确实被改变的话,那么应该是 DDE 关联没有做对。
到底是所有的 Edit 控件都没有更新,还是仅仅某一个没有更新?
#include <reg51h>
#include <stringh>
unsigned char ch;
bit read_flag= 0 ;
void init_serialcom( void )
{
SCON = 0x50 ; //SCON: serail mode 1, 8-bit UART, enable ucvr
//UART为模式1,8位数据,允许接收
TMOD |= 0x20 ; //TMOD: timer 1, mode 2, 8-bit reload
//定时器1为模式2,8位自动重装
PCON |= 0x80 ; //SMOD=1;
TH1 = 0xFD ; //Baud:19200 fosc="11"0592MHz
IE |= 0x90 ; //Enable Serial Interrupt
TR1 = 1 ; // timer 1 run
TI=1;
}
//向串口发送一个字符
void send_char_com( unsigned char ch)
{
SBUF=ch;
while (TI== 0);
TI= 0 ;
}
//串口接收中断函数
void serial () interrupt 4 using 3
{
if (RI)
{
RI = 0 ;
ch=SBUF;
read_flag= 1 ; //就置位取数标志
}
}
main()
{
init_serialcom(); //初始化串口
while ( 1 )
{
if (read_flag) //如果取数标志已置位,就将读到的数从串口发出
{
read_flag= 0 ; //取数标志清0
send_char_com(ch);
}
}
}
这个程序由四部分组成
init_serialcom( void ) //初始化串口
send_char_com( unsigned char ch) //向串口发送字符
serial () interrupt 4 using 3 //中断串口接收字符
main() //主函数
以上就是关于VC编的程序,串口通信收单片机发过来的信息的,但是连接单片机发信息后无反应全部的内容,包括:VC编的程序,串口通信收单片机发过来的信息的,但是连接单片机发信息后无反应、求助,用VC画一个图形界面,接收从串口或者USB发送上来的数据,类似坐标;、VC++串口接收到的数据进行计算等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)