写了的, m_ctrlComm.SetCommPort(2); //选择COM1 m_ctrlComm.SetInputMode(1); //输入方式为二进制 m_ctrlComm.SetInBufferSize(512); //参数1表示每当串口接受缓冲区中有多余或等于1个字符时将引发OnComm事件; m_ctrlComm.SetSettings("4800,n,8,1"); if( !m_ctrlComm.GetPortOpen()) m_ctrlComm.SetPortOpen(TRUE); m_ctrlComm.SetRThreshold(1); //参数1表示每当串口接受缓冲区中有多余或等于1个字符时将引发OnComm事件; m_ctrlComm.SetInputLen(0); m_ctrlComm.GetInput(); return TRUE; // return TRUE unless you set the focus to a control
m_ctrlComm.SetCommPort(2); //选择COM1
m_ctrlComm.SetInputMode(1); //输入方式为二进制
m_ctrlComm.SetInBufferSize(512); //参数1表示每当串口接受缓冲区中有多余或等于1个字符时将引发OnComm事件;
m_ctrlComm.SetSettings("4800,n,8,1");
if( !m_ctrlComm.GetPortOpen())
m_ctrlComm.SetPortOpen(TRUE);
m_ctrlComm.SetRThreshold(1); //参数1表示每当串口接受缓冲区中有多余或等于1个字符时将引发OnComm事件;
m_ctrlComm.SetInputLen(0);
m_ctrlComm.GetInput();
return TRUE; // return TRUE unless you set the focus to a control
发送程序是你写的吗?给个发送程序看看。另外,把这句改下:
strtemp.Format("%c",bt); //将字符送入临时变量strtemp存放->strtemp.Format("%X",bt); //将字符送入临时变量strtemp存放
就是建立的时候我发送个数字比如“89”,接受区没有数字显示。下午我看了下位机的程序,感觉是对的啊,用串口调试助手都能发出和接受。这个是下位机程序
#include<reg52.h>#define uchar unsigned char
#define uint unsigned intvoid init();
void display(uchar);uchar code LED7Code[] = {~0x3F,~0x06,~0x5B,~0x4F,~0x66,~0x6D,~0x7D,~0x07,~0x7F,~0x6F};
uchar flag,i,a,u;
void main()
{
init();
while(1)
{
if(flag==1)
{
ES=0;
SBUF=a;
while(!TI);
TI=0;
ES=1;
flag=0;
}
}
}void init()
{
u=0;
TMOD=0x20;
PCON|= 0x80;
//TH1 = 0xFD; //baud*2 /* reload value 19200、数据位8、停止位1。效验位无 (11.0592)
TH1 = 0xF3; // //baud*2 /* 波特率4800、数据位8、停止位1。效验位无 (12M)
TL1 = 0xF3;
TR1=1;
REN=1;
SM0=0;
SM1=1;
EA=1;
ES=1;
}
void ser() interrupt 4
{
RI=0;
u=SBUF;
a=u;
flag=1;
}
float 由 4个 字节组成。typedef union
{
unsigned char bytes[4];
float df;
}IEEE;#define IEEEbyte(float,which) (((IEEE*)&float)->bytes[which])发送时就是取bytes: float a;
int x;
unsigned char byte1,byte2,byte3,byte4;
a=-4.123457;//C0 83 F3 5C
a= 4.123457;//40 83 F3 5C
byte1=IEEEbyte(a,0);
byte2=IEEEbyte(a,1);
byte3=IEEEbyte(a,2);
byte4=IEEEbyte(a,3);
0xC0,0x83,0xF3,0x5C
即:
11000000 ,10000011,11110011, 01011100
参考“C28x IQ – 数学库”0分
http://download.csdn.net/detail/schlafenhamster/4666792
“C28x IQ – 数学库。原文“Module11.pdf” 的翻译”
很 原理的 。
2/1024 v.
可能 那个都不能。我说过
“通常 AD DC 只讲位数,如 10 位 ,1024 ,根据参考电压, 把参考 分为 1024 份,如 参考电压 2v , 每份是
2/1024 v.”
还是上面条件, 那么
2/1024 =1.953125 mv
1.234v/1.953125=631所以你只要给D/A 送 631,就是 1.234 V 了 ,这里 没有 浮点数的问题。另外:
// Intel IEEE 格式: S(1bit) E(8bit) M(23bit)
// Microsoft MBF 格式: E(8bit) S(1bit) M(23bit) 过时了
应该是,MAX232 输出接 9芯 插头。PC 和 下位机的 2,3 一定要 交叉 连接, 即 PC Rx 接 下位机 TX,PC TX 接 下位机 RX。 地线 接一起。
(这种接法叫 0 调制解调器)