c语言串口初始化
Ⅰ 谁有上位机与下位机的串口通讯代码(c语言的)
兄弟,下面是我自己写的,希望给你帮助,把数据用send_one_uart()这个函数直接发送到串口就行了!最后求采纳,哈哈!
//-----头文件
#include<reg52.h>
//-----定义全局变量
unsigned
char
temp;
/***************************************************
**
函数名称:
uart_init
**
功能描述:
串口初始化函数
**
输
入:无
**
输
出:
无
**
说
明:
无
****************************************************/
void
uart_init(void)
{
scon
=
0x50;
//-----scon:
模式
1,
8-bit
uart,
使能接收
tmod
|=
0x20;
//-----tmod:
timer
1,
mode
2,
8-bit
重装
th1
=
0xfd;
//-----th1:
重装值
9600
波特率
晶振
11.0592mhz
tr1
=
1;
//-----tr1:
timer
1
打开
es
=
1;
//-----打开串口中断
ea
=
1;
//-----打开总中断
}
/***************************************************
**
函数名称:
sendbyte
**
功能描述:
发送字节函数
**
输
入:无
**
输
出:
无
**
说
明:
无
****************************************************/
void
sendbyte(unsigned
char
dat)
{
sbuf
=
dat;
while(!ti);
ti
=
0;
}
/***************************************************
**
函数名称:
sendstr
**
功能描述:
发送字符串函数
**
输
入:无
**
输
出:
无
**
说
明:
无
****************************************************/
void
sendstr(unsigned
char
*s)
{
while(*s!='\0')
{
sendbyte(*s);
s++;
}
}
/***************************************************
**
函数名称:
main
**
功能描述:
主函数
**
输
入:无
**
输
出:
无
**
说
明:
无
****************************************************/
void
main
(void)
{
uart_init();
//-----串口初始化
while(1)
{
if(temp=='h'&&'i')
{
temp=0;
sendstr("hello");
}
}
}
/***************************************************
**
函数名称:
uart_ser
**
功能描述:
串口中断服务子函数
**
输
入:无
**
输
出:
无
**
说
明:
无
****************************************************/
void
uart_ser
(void)
interrupt
4
//-----串行中断服务程序
{
if(ri)
//-----判断是接收中断产生
{
ri=0;
//-----标志位清零
temp=sbuf;
//-----读入缓冲区的值
}
}
Ⅱ 单片机求一个串口实验的C语言程序代码
#include <AT89X51.H>//单片机51头文件,存放着单片机的寄存器
unsigned char dat; //用于存储单片机接收发送缓冲寄存器SBUF里面的内容
sbit gewei=P2^2; //个位选通定义
sbit shiwei=P2^3; //十位选通定义
unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x67,0x77,0x7c,0x39,0x5e,0x79,0x71};
//{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x67,};// 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
void Delay(unsigned int tc) //延时程序
{
while( tc != 0 )
{unsigned int i;
for(i=0; i<100; i++);
tc--;}
}
void LED() //LED显示接收到的数据
{
shiwei=0;
P0=~table[dat/16];
Delay(8);
shiwei=1;
gewei=0;
P0=~table[dat%16];
Delay(5);
gewei=1;
}
void Init_Com(void)//功能:串口初始化,波特率9600,方式1
{
TMOD = 0x20;
PCON = 0x00;
SCON = 0x50;
TH1 = 0xFd;
TL1 = 0xFd;
TR1 = 1;
}
void main()//主程序功能:实现接收数据并把接收到的数据原样发送回去///////
{
Init_Com();//串口初始化
// P1=0xf0;
while(1)
{
if ( RI ) //扫描判断是否接收到数据,
{
dat = SBUF; //接收数据SBUF赋与dat
RI=0; //RI清零。
SBUF = dat; //在原样把数据发送回去
}
LED(); //显示接收到的数据
}
}
Ⅲ 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;
}
Ⅳ VS或者VC6.0编写的C语言程序,怎样能够实现串口数据的收发
1 、Windows API通信函数方法 。与通信有关的Windows API函数共有26个,但主要有关的有: CreateFile() 用 “comn”(n为串口号)作为文件名就可以打开串口。 ReadFile() 读串口。
2、WriteFile() 写串口。 CloseHandle() 关闭串口句柄。初始化时应注意CreateFile()函数中串兆键口共享方式应设为0,串口为不可共享设备,其它与一般文件读写类似。以下给出API实现的源代码。
3、利用端口函数直接操作 。这种方式主要是采用两个端口函数_inp(), _outp()实现对串口的读写,其中读端口函数的原型为: int _inp(unsigned shot port) 。该函数从端口读取一个字节,端口号为0~65535。 写端口的函数原型为: nt _outp(unsigned shot port, int databyte) 。
4、 MSComm控件 。MSComm控件是微软开发的专用通信控件,封装了串口的所有功能,使用很方便,但在实际应用中要小心对其属性进行配置。下面详细说明该类应用方法族坦巧。