串口通信编程
㈠ 串口通信程序
根据你的要求,写了几个简单的子函数。 #include<reg52.h>
#define N 6 //方便修改密码的长度
sbit key=P1^0; //确定发送密码,发送完后将密码清0
unsigned char i,a[N]; //定义数组来存放密码 void serial_init()//串口初始化
{
TMOD=0x20;//设置定时器1为工作方式2
TH1=0xfd; //波特率为9600,标准波特率
TL1=0xfd;
TR1=1; //启动定时器1
PCON&=0x7f; //SMOD=0,这里不需要倍频
SCON=0x40; //设置串口为工作方式1
} void serial_send() //串口发送函数
{
for(i=0;i<N;i++)
{
TI=0; //串口发送完毕标志位清0
SBUF=a[i]; //发送数组中存放的密码字符
while(!TI); //等待发送完毕
}
} void keyscan() //键盘扫描
{
if(!key) //用独立键盘简单举例,按下为低电平
{
delay(10);//延时10毫秒,去抖。delay()函数省略
if(!key)
{ while(!key); //松手监测
serial_send(); //发送密码
for(i=0;i<N;i++) //发送完毕清0
a[i]=0;
}
}
} void main(){ serial_send() ; while(1) { keyscan() ; }}大概就是这个思路,你可以把密码键盘的值都写在keyscan()函数里,可以加删除键(密码输错可以退格),最好加个显示,密码虽然不能显示出来,但还是要显示输入的个数吧。还有个要提醒你的,就是上位机软件的编写,下位机发送的格式要与上位机接收的格式对应(字符或者数字)。
#include<conio.h>
#include<stdio.h>
#include<bios.h>
#define true 1
main( )
{
char ch;int i;
char a[50];
clrscr();
for(i=0;i<50;i++)
{
a[i]='a'+i;
}
i=0;
outportb(0x3fb,0x80);
outportb(0x3f8,0);
outportb(0x3f9,0x06);
outportb(0x3fb,0x03);
outportb(0x3fc,0x03);
outportb(0x3f8,a[i]);
while (true)
{
ch=inportb(0x3fd);
if(ch&0x01)
{
ch=inportb(0x3f8);
if(ch=='\r')
{printf("jikejlm");
outportb(0x3f8,a[i+1]);i++;
}
else
{ putch(ch);putch('\n');}
}
if(bioskey(1))
{
ch=bioskey(0)&0x0ff;
if(ch=='\r')
{
outportb(0x3f8,ch);
putch(ch);
}
}
}
}
㈢ RS232串口通信的程序怎么写啊
c或vb中有mscomm控件很好用,我常用,以下是我用delphi写的
with mscomm1 do begin
commport:=1; //端口号
settings:=9600,n,8,1; //端口设置
InputMode:=0; //设置或返回Input属性取回的数据的类型 0:文本 1:二进制
RThreshold:=1; //每次接收到字符即产生OnComm事件
SThreshold:=0; //传输缓冲区允许最小字符数
InBufferCount:=0; //清空接收缓冲区内容
InputLen:=0; //为0时 Input一次读取整个缓冲区内容
DTREnable:=true; //数据终端准备好
RTSEnable:=true; //发送请求
end;
mscomm1.Output:=edit1.text;//发送
str:=mscomm1.input; //接收
㈣ 51单片机串口通信c语言编程
#include <REG52.H>
#define uchar unsigned char
#define uint unsigned int
sbit ring=P3^7;
sbit CASE1=P2^0;
sbit CASE2=P2^1;
sbit CASE3=P2^2;
sbit CASE4=P2^3;
uchar se=0,re=0;
uchar temp=0;
void wait(uint cnt)
{
while(--cnt);
}
//串口发送程序
void send(uchar se)
{
SBUF=se; //发送数据
while(TI == 0);
TI = 0;
}
//串口接收程序
uchar receive(void)
{
re=SBUF; //接收数据
while(RI==0);
RI=0;
return re;
}
//串口初始化
void sinti(void)
{
SCON = 0x50;
TMOD |= 0x20;
TH1 = 0xFD;
TR1 = 1;
EA = 1;
ES = 1;
}
void delay(int cnt)
{
while(--cnt);
}
//主程序
int main (void)
{
int i;
sinti(); //串口初始化程序
ring=1;
while(1)
{
while (1)
{
if(CASE1==0)
{
send('a');
ring=0;
break;
}
if(CASE2==0)
{
send('b');
ring=0;
break;
}
if(CASE3==0)
{
send('c');
ring=0;
break;
}
if(CASE4==0)
{
send('d');
ring=0;
break;
}
}
if(ring==0)
{
wait(60000);
ring=1;
}
for(i=0;i<10000;i++);
}
}
//串口中断程序
void UART_SER (void) interrupt 4 //串行中断服务程序
{
if(RI) //判断是接收中断产生
{
RI=0; //标志位清零
temp=SBUF;
}
if(TI) //如果是发送标志位,清零
TI=0;
}
㈤ RS232串口通信程序(VC++实现)
visual
c++_turbo
c串口通信编程实践
㈥ 关于串口通信编程的疑问
上位机以PC,下位机以单片机为例,两者在进行通信时一般用串口通信,而数据通过串口时是以16进制来传送的,为了发送、接收处理方便,建议通过函数做一下处理,使发送的数据为16进制,这样,通过串口接收到的数据也是相同的16进制,方便查看。
如果想让下位机做某事,则需要上位机给下位机发送指令,也就是数据帧,这个要根据协议来写,比如移动GSM、联通GSM协议,里边都有数据帧的格式以及具体定义。
补充:这个协议不是说串口通信协议,那个协议是根据用途或要求来采用的,比如说,要用单片机做一个联通GSM协议的数据通信,那么数据帧的格式必须是X开头,X结尾的,有固定的格式。再比如移动的,数据帧格式有7E开头7E结尾的,也有!开头!结尾的,如果你的数据帧格式不正确,将无法识别而不能做出相关的动作。
你如果只是自己弄着玩,数据帧可以自己定义,但如果要做项目,最好根据要求协议来编写。
㈦ 怎样编写单片机的串口通信的程序,一般的步骤是怎么样
编写串口通讯程序步骤为:
1、设置波特率
2、设置串口工作方式
3、收发数据。
比如:
main()
{
unsignedchardat;
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
TR1=1;
SCON=0x50;
while(1)
{
while(RI==0);
RI=0;
dat=SBUF;
SBUF=~dat;
while(TI==0)
TI=0;
}
}
㈧ KEIL编程 串口通信程序
如果使用51系列单片机如STC89C52,它用的是串行通信方式的在线烧写功能,和单片机里面编程的串行通信无关,是硬件本身的功能,你连接串口的两根线和共地线,用STC-ISP 4.8,选择单片机型号与程序位置,关闭单片机开发板,点击程序下载后再上电就可以完成烧写。通常可采用MAX232,台式机后面的串口线或USB+PL2303这两种形式,这个功能AT89C52或是AVR系列都是不具备的。
㈨ c++ 编写串口通信程序
c++ 编写串口通信程序
推荐 看书
Visual C++_Turbo C串口通信编程实践
㈩ vb串口通信程序实例
我也是自己摸索开发出来的每一款VBtoCOM通讯,有具体的思路如下:
给你推荐一个工具“com串口测试工具 ComTone V1.0 中文绿色版”
1、打开你的噪音计的测试软件,调整好串口号、通讯频率等等,我用温度计举例说明。