............................................................ 我用的是stc89c52的单片机 自己用vb做一个发送数据的程序,单片机接收。 我想要的结果是:vb发200过来,单片机用全局变量comflag记录下来 然后等待1秒,vb再发0-3的某个数字,单片机先判断comflag的值,如果是200则 将第二次收到的数字赋给全局变量n 现在很奇怪的是,用串口调试助手,这个没问题,可是,用我自己写的vb程序就不行,但奇怪的是,vb发的数,单片机全能收到,,,,就是不进入下面的判断,,,, vb代码: Private Sub Command1_Click() '...发送数据 If MSComm1.PortOpen = False Then MsgBox ("串口没有打开!") Else Dim Num As Integer Dim outbte(0) As Byte Num = Val(200) outbte(0) = CByte(Num) '----------发送识别码------------------ MSComm1.OutBufferCount = 0 '...清空输出寄存器 Dim ByteArray() As Byte '定义动态数组 ReDim ByteArray(1) '重定义数组大小 ByteArray(0) = 0 ByteArray(1) = CByte(Num) MSComm1.Output = ByteArray Sleep 1000 '............延时50ms '-----------发送器件编码--------------- MSComm1.OutBufferCount = 0 '...清空输出寄存器 '定义动态数组 ReDim ByteArray(1) '重定义数组大小 ByteArray(0) = 0 Num = Val(Text5.Text) ByteArray(1) = CByte(Num) MSComm1.Output = ByteArray 'MSComm1.Output = &H0 '...发送数据 End If End Sub 单片机代码: #include<reg52.h> #include "intrins.h" #define uchar unsigned char #define uint unsigned int int n=0,TH,TL; void send_char(uchar txd) //串口传出一// 传送一个字符 { ES=0; SBUF = txd; while(!TI); // 等特数据传送 TI = 0; ES=1; // 清除数据传送标志 } void main() { TMOD = 0x20;// 定时器1工作于8位自动重载模式, 用于产生波特率 TH1 = 0xFD; // 波特率9600 TL1 = 0xFD; SCON = 0x50; // 设定串行口工作方式 PCON = 0x00; EA=1; ES=1; TR1 = 1; // 启动定时器1 while(1) { P2=n; } } /////////////////串行口中断/////////////////////////////////// void fun_Uart() interrupt 4 using 1 { int receive; static int comflag; ES=0; while(RI==0); //读串口数据 RI=0; receive=SBUF; P1=SBUF; if(receive>=200) comflag=receive; else { // P0=receive; if(comflag==200) { n=receive; comflag=0; } /* if(comflag==201) { TH=SBUF; P1=TH; comflag=0; } if(comflag==202) { TL=SBUF; P1=TL; comflag=0; }*/ } ES=1; } |
欢迎光临 5iMX.com 我爱模型 玩家论坛 ——专业遥控模型和无人机玩家论坛(玩模型就上我爱模型,创始于2003年) (http://wz.5imx.com/) | Powered by Discuz! X3.3 |