📄 z.txt
字号:
void Transmit(int c1,int c2); //发射子程序
//****************************************
main()
{unsigned char i,j;
while(1)
{while(Key); //没键按下,等待
Transmit(340,565); //发射引导码
for(i=0;i<4;i++)
for(j=0;j<8;j++) //发射帧数据
{if((Data[i]>>j)&1)
Transmit(19,205); //'1'码
else Transmit(19,70); //'0'码
}
Transmit(19,17);
while(!Key); //等待释放按键
}
}
//****************************************
void Transmit(int c1,int c2) //c1为高电平宽度
{unsigned char i; //c2为低电平宽度
do{LED=1; //产生38kHz载波
for(i=8;i>0;i--); //延时18us
LED=0;
}while(--c1);
LED=1;
while(--c2);
}
;程序2
#include<reg51.h>
sbit Rec=P3^1;
unsigned char i,ch;
unsigned int t;
main()
{TMOD=0x01;
TR0=1;
while(1)
{while(Rec); //等待接收信号
t=(TH0<<8)+TL0; //取得脉冲宽度
if(t>200&&t<800); //是'0'码
else if(t>1100&&t<1800) //'1'码
{if(i>24)//取出最后一字节
ch|=1<<(i-25);
}
else //非0、1码,重新解码
{ch=0;i=0;}
if(i++==32) P1=ch;
while(!Rec);
TL0=0; //重新计时
TH0=0;
}
原作者:世纪开发网
来 源:世纪开发网
共有218位读者阅读过此文
【告诉好友】
上篇文章:PCB板制作注意事项
下篇文章:点阵图形液晶驱动程序192x64,(C编程)
□- 本周热门文章 □- 相关文章
1.《VB6.0中通过MSChart控件...[368]
2.使用VB开发Windows环境下的串...[337]
3.VB调用C程序的方法—动态链接库法 [258]
4.SDH光传输设备的技术特色[229]
5.配置数据引擎(BDE、SQL Lin...[209]
6.ASP进阶教程:留言簿自动发E-Ma...[199]
7.VB应用程序中用DDE功能开发Aut...[175]
keil中的变量和常量定位问题
protel 打印设置
一堆4x4键盘程序。asm
P89CXX 编程器51接受程序(dhd0)
AVR精确定时的编程
用AT89C2051+R2R电阻网络制作简易6位adc
点阵图形液晶驱动程序192x64,(C编程)
--------------------------------------------------------------------------------
| 站点导航 | 关于本站 | 本站留言 | 联系方式 |
联系电话:020-85661750 88571270 E-mail:webmaster@21hf.com
广州市东强电子科技有限公司 版权所有 Copyright(C) 2003 IE4.0以上 800*600
主页 | 单片机应用设计·逻辑器件·PCB制板·DSP专栏·家电维修 | 本站商务 | 下载特区 | 世纪论坛 | 项目开发 | 收藏本站 | 设为主页
专业单片机开发!开发生产一条龙!
专业网页设计!平面设计!
| 电子类 | | 网页类 | | 软件类 | | 电脑类 |
| 软件类>>VB编程>>使用VB开发Windows环境下的串行通信程序 打印
使用VB开发Windows环境下的串行通信程序
www.21hf.com 2002-11-28 世纪开发网
随着Windows在国内的普及,特别是Windows95的推出,越来越多的微机用户转向了Windows操作系统。不过Windows应用软件的开发对于一般工程技术领域的技术人员来说并非易事,不但Windows的消息循环机制不易理解,而且要开发一个功能强、界面美观的应用软件,其编程和调试的工作量是非常大的。许多并非搞软件出身的工程技术人员对Windows编程望而生畏。然而使用微软的VisualBasic来开发这些方面的Windows应用软件就十分方便,一般工程技术人员易于掌握,设计软件界面非常方便,编程工作量相对较小,只需进行主要应用功能的编程和少量界面控制的编程。本文介绍了笔者使用VB在串行通信编程方面的一些收获,由于在报刊杂志上对Windows下串行通信编程的介绍多为用MicrosoftC++或BorlandC++,故笔者愿意就VB在该方面的应用与大家探讨。对于采用了RS-232接口进行串行通信的计算机测控系统软件的开发,具有一定的参考价值。
在该系统中使用了80C31单片机作为下位机采集惯性敏感部件的测量数据,经过一定的预处理后通过RS-232串行口将数据传送给上位PC机。在PC机上Windows环境下运行检测软件,接受串行口传来的数据,进行数据处理、显示、存盘等。数据处理结果以表格形式打印输出。
在VB3.0中,有许多专业厂商提供用户定制的控件(Customcontrol),这些控件以.VBX为后缀,其中MSCOMM.VBX即是用于串行通信的控件。对于VB3.0,启动后该控件就包含于控件工具箱(toolbox)内,否则可以通过File|AddFile将该控件加入控件工具箱。然后就可以利用该控件进行串行通信的程序设计。
下面举一个简单的例子,说明了如何进行串行通信的程序设计,该程序在Windows95环境下,使用VB3.0已经实现:
1.先建立一个项目文件,其控件如下表所示:
2.代码如下:
SubForm_Load()
comm1.CommPort=1‘使用串行口1
'波特率9600,偶校验,8个数据位,1个停止位。
comm1.Settings=“9600,E,8,1”
当使用Comm1.Input时,每次从接收缓冲区取一个字节。
comm1.InputLen=1
timer1.interval=20‘定时器的中断间隔为20ms,用于更新显示时间。
EndSub
SubcmdComm_Click()
Dimechoch%‘命令变量
Staticmaxf01&,maxf02&,minf01&,minf02&‘最大值,最小值
OnErrorResumeNext‘简单的错误处理
maxf01&=maxf02&=0‘初始化变量
minf01&=32767
minf02&=32767
label2.Caption=comm1.Settings‘显示串行口的设置。
Ifcmdcomm.Caption=“通信”Then‘若当前命令按扭的提示为“通信”则开始发送和
cmdcomm.Caption=“停止”‘接受数据,并将命令按扭提示改为“停止”,以
cmdexit.Enabled=False‘允许停止通信。使退出命令在通信中失效。
IfNotcomm1.PortOpenThen‘若串行口没有打开,则打开串行口
comm1.PortOpen=True
EndIf
Ifcomm1.PortOpenThen
Ifecho.Text<>“”Then‘若命令输入框不空,则将其转换为十六进制数值
echoch%=Val(“&H”+echo.Text)
Else
echoch%=&HF0‘否则确省命令为F0H
EndIf
comm1.Output=Chr(echoch%)‘向串行口写入一字节命令,由WINDOWS自
EndIf‘动将命令发出
label3.Caption=Hex(echoch%)‘显示刚发出的命令
DoWhilecomm1.PortOpen
Ifcomm1.InBufferCount>0Then‘若comm1.InBufferCount>0表示接受缓冲
ch$=comm1.Input‘区有数据,并读出一个字符,
IfAsc(ch$)=echoch%Then‘若与发出的命令相同,则退出当前循环
ExitDo‘进入下一循环
EndIf
Else
comm1.Output=Chr(echoch%)‘否则继续向下位机发命令,通知下位机
EndIf‘送数据
dummy=DoEvents()‘让系统处理其他消息
Loop
‘下位机接受到正确的命令,并回发命令正确时,进入下面循环
i=1
DoWhilecomm1.PortOpen
Ifcomm1.InBufferCount>5Then
ch$=comm1.Input
DoWhileAsc(ch$)<>echoch%‘以命令字节同步测试数据
ch$=comm1.Input
Loop
ch1$=comm1.Input‘从WINDOWS串行数据接受缓冲区读测试数据
ch2$=comm1.Input
ch3$=comm1.Input
ch4$=comm1.Input
newf01&=CLng(CLng(Asc(ch2$))*16*16+Asc(ch1$))‘合并为一个整数
newf02&=CLng(CLng(Asc(ch4$))*16*16+Asc(ch3$))
ifnewf01&>maxf01&Then‘判断最大值,最小值
maxf01&=newf01&
EndIf
Ifnewf01&<minf01&Then
minf01&=newf01&
EndIf
Ifnewf02&>maxf02&Then
maxf02&=newf02&
EndIf
Ifnewf02&<minf02&Then
minf02&=newf02&
EndIf
labf01.Caption=Str(newf01&)‘显示数据
labf02.Caption=Str(newf02&)
labmaxf01.Caption=Str(maxf01&)
labminf01.Caption=Str(minf01&)
labmaxf02.Caption=Str(maxf02&)
labminf02.Caption=Str(minf02&)
Else
comm1.Output=Chr(echoch%)
EndIf
dummy=DoEvents()
Loop
Else‘在通讯过程中,按下cmdCOMM按钮则停止通信,发出停止测试
cmdcomm.Caption=“通信”‘命令,关闭串行口,使退出按钮有效。
comm1.Output=Chr(&H5F)
comm1.PortOpen=False
cmdexit.Enabled=True
EndIf
EndSub
SubcmdExit_Click()
Ifcomm1.PortOpenThen‘确认关闭串行口
comm1.PortOpen=False
EndIf
End‘终止整个程序
EndSub
SubTimer1_Timer()‘更新显示时间
Iflabtime.Caption<>Time&Then
labtime.Caption=Time$
EndIf
EndSub
3.程序说明:
a.上述程序的通信协议为:波特率9600,偶校验,8个数据位,1个停止位。由上位机发送开始测试命令,下位机接收到命令后每隔500ms向上位机发送检测到的数据。每次发送5个字节,第一个字节为下位机接受到的命令,第二三字节为16Byte的值,第四五字节为16Byte的值。上位机循环接受并处理和显示数据;
b.由于在控制软件中,串行通讯发送和接受的数据多为十六进制,故在命令输入时为十六进制数,在程序中通过echoch%=Val(“&H”+echo.Text)将输入的echo.Text转换为十六进制数,并赋给变量echoch%。而在通过串行口发送时comm1.Output要求接受字符型变量,故通过语句comm1.Output=Chr(echoch%)实现;
c.接受数据时,每次要判断第一个字节是否为发出的命令,只有是后面4个字节才为正确的数据,否则查看下一字节。通过设置COMM1.InputLen=1来实现每次从接受缓冲区内读取一个字节;
d.当退出程序时,一定要关闭串行口,通过comm1.PortOpen=False完成;
e.如果需要上位机定时查询下位机,可以将串行通讯在定时器Timer1-Timer事件中进行;
f.要实现完善的功能,必须进一步改善程序,甚至要用到WindowsAPI、OLE等,上述程序只是一个简单的例子;
上面介绍了笔者在使用VB开发Windows环境下测控软件的一点收获,笔者使用上述原理开发了一个界面友好、功能全面、使用方便的卫星控制系统惯性敏感部件检测软件,实际使用效果良好,提高了工作效率,甚至实现了测试和数据处理的自动化。
原作者:阿朋
来 源:世界开发网
共有338位读者阅读过此文
【告诉好友】
上篇文章:如何在VB中制作不回显的文本框
下篇文章:用VB开发应用程序如何使用INI文件
□- 本周热门文章 □- 相关文章
1.《VB6.0中通过MSChart控件...[368]
2.使用VB开发Windows环境下的串...[338]
3.VB调用C程序的方法—动态链接库法 [258]
4.SDH光传输设备的技术特色[229]
5.配置数据引擎(BDE、SQL Lin...[209]
6.ASP进阶教程:留言簿自动发E-Ma...[199]
7.VB应用程序中用DDE功能开发Aut...[175]
Protel发展历史
从微电子学到纳电子学——电子科学技术的又一次革命
PIC系列单片机与MCS-51系列单片机的区别
利用VB实现PC机与多单片机通讯
Windows下PIC8位单片机源程序汇编和固化
C51编译器使用心得
24C04在2051系统中的使用
--------------------------------------------------------------------------------
| 站点导航 | 关于本站 | 本站留言 | 联系方式 |
联系电话:020-85661750 88571270 E-mail:webmaster@21hf.com
广州市东强电子科技有限公司 版权所有 Copyright(C) 2003 IE4.0以上 800*600
主页 | 单片机应用设计·逻辑器件·PCB制板·DSP专栏·家电维修 | 本站商务 | 下载特区 | 世纪论坛 | 项目开发 | 收藏本站 | 设为主页
专业单片机开发!开发生产一条龙!
专业网页设计!平面设计!
| 电子类 | | 网页类 | | 软件类 | | 电脑类 |
| 电子类>>单片机编程>>24C04在2051系统中的使用 打印
24C04在2051系统中的使用
www.21hf.com 2003-8-12 世纪开发网
我们以电路1说明2051对24C04的读写操作的方法和使用中应注意的问题。电路1中由C1、R1组成上电复位电路,C2、C3和6M晶振组成振荡电路。24C04的1-3脚分别为器件编址端A0、A1、A2(用于与系统中的同类器件编码),4脚为电源地,5脚为I2C总线的数据线SDA,6脚为I2C总线的时钟SCL,7脚为测试输入端,在系统中接地,8脚为电源。
要正确的对24C04进行读写操作首先要了解这两个问题1、器件寻址方法 2、翻卷现象及处理方法。器件的寻址法:如表一所示,表中的A0、A1、A2的状态与器件的A0、A1、A2脚的状态一至时并且前四位也与器件代码一至时就可以访问该器件。(24C系列器件代码为1010),当表中的A0、A1、A2被Px代替时该器件的相应管脚应悬空。R/W位为读和写状态位,为0时写,为1时读。电路1中I2C器件采用的是24C04,由于24C04的容量为512字节,而访问24C04的地址位只有1字节即只能访问256字节,这时P0是作为器内寻址时的最高位使用。这样就可以访问24C04全部的512字节了。从附表中可以看出A0位已被P0使用,所以电路1中A0脚悬空。电路1中要对24C04进行读操作时寻址字节就由:器件代码(1010)+器件A1、A2脚的状态(00)+P0(状态与访问的单元有关大于256字节时为1否则为0)+R/W(读0/写1)组成。翻卷现象及处理方法:AT24C01/02/04/08/16系列的页写地址分别是4/8/16/16/16如表2所示
表2:
24C01 B7 B6 B5 B4 B3 B2 B1 B0 4字节
24C02 B7 B6 B5 B4 B3 B2 B1 B0 8字节
24C04 B7 B6 B5 B4 B3 B2 B1 B0 16字节
24C08 B7 B6 B5 B4 B3 B2 B1 B0 16字节
24C016 B7 B6 B5 B4 B3 B2 B1 B0 16字节
画了下画线的位为页写地址位,当页写地址位最高位出现进位时它的前一位并不加一,这种现象就是翻卷现象。例:器件为24C02 当向00000111B为起始地址单元写入两个连续数据时;第二位数据会写到00000000B中去而不是写到00001000B中,这种错误就是翻卷;当出现这种情况时应在软件上进行调整。在写入字节小于或等于页写数时可像RAM一样写入,在写完一页后应有5-15ms(根据采用器件而定)的延时后才能再操作器。
本着让读者在不了解I2C的工作原理的情况下能拿来就用的原则,在这里只讲进使用模拟软件的简单工作原理和使用方法。指
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -