一个c语言的串口通信程序范例
标签: 分类: 技术笔记
c语言
串口通信
通信程序
it
最近接触一个项目,用HL-C1C激光位移传感器+易控组态软件完成生产线高度跳变检测,好久没有接触c c#,一些资料,找来做个记录,也许大家用的着 #include <stdio.h>
#include <dos.h>
#include <conio.h>
#include <string.h>
#define COM232 0x2f8
#define COMINT 0x0b
#define MaxBufLen 500
#define Port8259 0x20
#define EofInt 0x20
static int comportaddr;
static char intvectnum;
static unsigned char maskb;
static unsigned char Buffer[MaxBufLen];
static int CharsInBuf,CircIn,CircOut;
…… …… 余下全文
#include<reg52.h> //包含头文件,头文件一般不需改动 //头文件包含特殊功能寄存器的定义 #define uchar unsigned char
#define uint unsigned int
uchar a;
sbit K1=P3^7;
//串口初始化程序
void chuankou1()
{
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
TR1=1;
EA=1;
ES=1;
SCON=0x50;
}
//延迟函数
void delay(uint z)
{
uint x, y;
for(x=0;x<z;x++)
for(y=110;y>0;y--);
}
//主函数
void main()
{
chuankou1();
delay(5);
K1=1;
while(1)
{
if(K1==0)
{
while(!K1);
ES=0;
SBUF=0x55;
while(!TI);
…… …… 余下全文
/*write*/
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <termio.h>
#define MAX_SIZE 30
void set_speed(int,int);
int main(int argc,char **argv)
{
int fd;
int flag;
int write_num=0;
struct termios term;
speed_t baud_rate_i;
speed_t baud_rate_o;
char buff[MAX_SIZE]="hello,beautiful day!";
fd=open(argv[1],O_RDWR|O_NONBLOCK); if(fd<0)
printf("open the COM1 error!\n"); else
…… …… 余下全文
#include<STC12C5A60S2.h>
#include<delay.h>
#define XTAL 32000000 // CUP 晶振频率
#define baudrate 4800 // 通信波特率
int c[20];
unsigned char js=0;
unsigned char i=0,bz=0;
unsigned int nn=0;
void jieshou()
{
ES=0;
c[i]=SBUF;
nn=nn*10+c[i]; P0=c[i];
i++; RI=0; ES=1;
bz=1;
}
void send()
{
unsigned char m;
js=0;
for(m=0;m<i;m++)
{
SBUF=c[m];
while(!TI)
;
TI=0;
}
i=0;ES=1;bz=0; P0=nn;
}
void main(void)
{
TMOD = 0x20; // 定时器1工作于8位自动重载模式, 用于产生波特率
TH1=(unsigned char)(256 - (XTAL / (32L * 12L * baudrate)));
…… …… 余下全文
用Win32 API实现串行通信
2003-7-9 7:56:18 PCVC.NET wangxi 阅读次数: 11366
给大家说明一下
我用word编辑的时候出了些问题
文章中凡是象GENERICREAD的都是中间有下划线的如:GENERIC_READ 还有这一句是这样的if(dwEventMask & EV_ERR)==EV_ERR)
串口是常用的计算机与外部串行设备之间的数据传输通道,由于串行通信方便 易行,所以应用广泛。我们可以利用Windows API 提供的通信函数编写出高可移植性的 串行通信程序。
在Win16中,可以利用OpenComm、CloseComm和WriteComm等函数打开、关闭和 读写串口。但在Win32中,串口和其他通信设备均被作为文件处理,串口的打开、关闭 和读写等操作所用的API函数与操作文件的函数相同。可通过CreateFile函数打开串口 ,通过CloseFile函数关闭串口,通过CommProp、DCB结构、GetCommProperties、 SetCommProperties、GetCommState及SetCommState等函数设置串口状态,通过函数 ReadFile和WritFile读写串口。
…… …… 余下全文
#include <stdio.h>
#include <string.h>
#include <dos.h>
#include <stdarg.h>
#include <stdlib.h>
#define TRUE 1
#define FALSE 0
#define COM 0x3f8 /* COM1=0x3f8, COM2=0x2f8 */ #define RBR 0 /* Receive Buffer Register */ #define THR 0 /* Transmit Holding Reg. */ #define DLL 0 /* Divisor Latch LSB */ #define DLM 1 /* Divisor Latch MSB */ #define IER 1 /* Interrupt Enable Reg. */ #define IIR 2 /* Interrupt ID Register */ #define FCR 2
…… …… 余下全文
最近在研究一个东西要用到串口的读写,通过读取串口COM2获取一个指令,然后根据该指令通过配置文件获取其他的信息再通过串口COM1进行做下一步的一系列操作。 java读写串口要用到的是javax扩展类库javacomm,它是一系列的标准,该类库在sun的官网上只提供linux版本。由于我所应用的平台是win32,所以找了个win32的实现。在此过程中遇到了一系列的问题,后来终于解决问题并完成了通过读写串口进行通信的功能。在此对其java读写串口的情况做个简要说明:
首先下载javacomm包,然后将其解压,解压后需要做的就是配置串口通信相关东西,下面是自己使用的时候的配置:
1.把javax.comm.properties文件拷贝到Java运行时环境的lib目录中,即:
C:\Program Files\Java\jdk1.5.0_12\lib\javax.comm.properties
C:\Program Files\Java\jdk1.5.0_12\jre\lib\javax.comm.properties
2.把win32com.dll拷贝到C:\windows\system32\ 和 C:\Program Files\Java\jdk1.5.0_12\jre\bin\下
…… …… 余下全文
对编写单片机与欧姆龙PLC串口通信遇到问题做一些小结
20xx-07-15 11:28:31| 分类: | 标签: |字号大中小 订阅
1,程序发的数据包太多了,并且数据包的定义是RAM的,很容易造成单片机的RAM不够,因为单片机默认的RAM是128个字节,不过可以扩展高的128个字节,范围在80H -FFH,定义是这样定义的,char idata
XX[]:
如果这样不够的话就只能在想办法来解决这个问题,找一些规律啊,或是改成查表的形式,定义成code 类
型:uchar code XX[]:
2.程序中的要对一些数据进行掉电保存,我这里用到了单片机内部自带的EEROM,在编写程序中也遇到
一些问题,只能保存一个数据,
后面:后面调了一下程序:发现一个问题,就是每个对数据进行更新的话,都要对你定义的所以地址的内
容进行,然后在写入,单对某个地址的话就是不行,:
//=======================对保存的四个数据位进行清除扇区
Sector_Erase(add1);
Sector_Erase(add2);
Sector_Erase(add3);
…… …… 余下全文