钻石会员
主题
回帖0
积分11063
阅读权限50
注册时间2009-12-25
最后登录1970-1-1
在线时间 小时
|
楼主 |
发表于 2013-1-18 19:29
|
显示全部楼层
本帖最后由 狗狗百里游 于 2013-1-18 19:55 编辑
程序是用Delphi编写的,用了Comport411f控件,Comport控件封装了串口的各种功能,用来搞串口通信很方便。
如果要用来控制10us级别的状态,就得注意一下。里面有TComLed控件,显示串口各个状态,用亮灯显示高低电平,
procedure TForm1.ComLed2Change(Sender: TObject; AState: TLedState);
begin
// ComLed2.Invalidate; //YUKI少了这行,就不能刷新 TComLed变化的图像
end;
但刷新图像会影响,判断时间的速度跟结果!!!
另一个编程的关键就是us级别的延时函数了。
function RDTSC: Int64; assembler;
asm //RDTSC是计算机硬件中的运行周期寄存器,不依赖系统,除非硬件出错
//所以我打算RDTSC用来计算代码实际运行时间,
//来优化代码实际能精确延时计时到多少us
db $0F, $31 // opcode for RDTSC
end;
function RDQPC: Int64;
begin
QueryPerformanceCounter(result); //QueryPerformanceCounter是取系统计算出来的。
//是个固定值
//所以可以推算出,在当前系统下,多核单核多线程的cpu实际用多少频率运行
end;
现在的PC系统不是win97时代了,cpu也是多核自动降频的,延时函数需要变通。
Yuki_RDTSC.pas代码里面有说明。
现在搭电路运行通过的有,红外接收电路,24Cxx,ds18b20,国产dht11(温度可以精确到个位数,湿度不准,乱跳),旋转编码器,可以识别正反步进。
SHT10传感器,人懒到现在还没有编写。
想通过LED发光管在负电压充电,然后在有光线环境中自放电的时间,当光敏管使用,用单片机可以识别,
但是用PC串口实际没有检测到LED的电容放电,估计是串口识别不出来微弱的电平。
电脑主板的串口估计是用RS232类型的芯片输出正负电平的,输入状态的电平识别,跟电平正负的设置,估计依赖芯片响应速度的。
现在没有办法测试用RDTSC延时函数在设置10us秒以下的时间,串口实际响应的时间是多少,有示波器条件的可以测试一下。
发这个帖子只是给大家一个思路,让大家平时在测试点小东西的时候,提供一点方便,这个是赶稿发布,一锅熟就行....
cportu(Rs232串口)_2013-1-18.rar
(3.63 MB, 下载次数: 361)
|
|