导航:首页 > 操作系统 > 单片机串口流程图

单片机串口流程图

发布时间:2022-08-27 23:08:41

单片机串口中断执行流程

流程是:(主程序中)发送数据―等待中断―发送成功产生中断―进入中断清除TL,再次发送―中断返回―等待中断―发送成功产生中断―进入中断清除TL,再次发送。。。。循环而已。

⑵ 我想问下关于单片机与单片机之间串口通信的电路图

1、最简单的话,如果距离不是太远,直接两个单片机的RXD和TXD交叉相连就行了。

2、如果距离远一点,用串口也行,你可以查一下RS232电路,TTL转RS232电平。

⑶ 单片机串口通信步进电机控制程序流程

一楼的说的有道理啊,还是得靠自己的
给你个类似的你参考一下吧!我也不会的
实验实现的功能主要是:用PC上的一个软件通过串口通讯控制单片机I/O口的输出。本次实验主要涉及PC端上位机的程序编写(用VC)与单片机程序的编写(用Keil)。为了简化实验,PC端软件设计成具有8个按钮的对话框,每个按钮分别控制单片机P2口的一个引脚的高低电平。为了体现直观的结果,P2口上接上8个发光二极管。

PC与单片机的通讯协议如下:采用4800波特率,无校验位,8个数据位,1个停止位,一次传输一个控制字节。

一、上位机软件的编写

本来控制单片机只需单向传输数据即可,为了熟悉PC端接受数据的功能,在应用软件将控制数据传输到单片机端后,单片机端回传数据给应用软件,并用16进制格式显示在编辑控件中。

VC实现对串口的控制主要有两种方式:mscomm控件与api函数。由于mscomm控件实现简单,本实验采用该方式。

1. 在VC中创建一个基于对话框的应用程序,在该程序中插入Mscomm控件。修改对话框资源,增加Mscomm及8个按钮控件与一个编辑框。并为Mscomm控件增加一个控件变量m-com。

2. 在对话框的OnInitDialog()函数中初始化串口,代码如下:

if(m_com.GetPortOpen())

m_com.SetPortOpen(FALSE);

m_com.SetCommPort(1);//选择com1

if(!m_com.GetPortOpen())

m_com.SetPortOpen(TRUE);//打开串口

else

MessageBox("无法打开串口!");

m_com.SetSettings("4800,n,8,1");//波特率4800,无校验,8个数据位,1个停止位

m_com.SetInputMode(1); //1:表示以二进制方式检取数据

m_com.SetRThreshold(1);//参数1表示每当串口接收缓冲区中有多于

//或等于1个字符时将引发一个接收数据的OnComm事件

m_com.SetInputLen(0); //设置当前接收区数据长度为0

m_com.GetInput();//先预读缓冲区以清除残留数据

3.为每个按钮添加命令函数。下面为其中一个函数的代码,其他与此类似。

void CComDlg::OnP20()

{

// TODO: Add your control notification handler code here

Output.Format("%c",0x01);

m_com.SetOutput(COleVariant(Output));

}

4.接受数据时采用Mscomm控件的响应函数进行对事件的捕捉。处理代码如下:

void CComDlg::OnComm()

{

// TODO: Add your control notification handler code here

VARIANT Input;

CString temp;

long k,len;

COleSafeArray OleArray;

BYTE rxdata[10];

if (2==m_com.GetCommEvent())

{

Input=m_com.GetInput();

OleArray=Input;

len=OleArray.GetOneDimSize();

for (k=0;k<len;k++)

{

OleArray.GetElement(&k,rxdata+k);

BYTE bt=*(char *)(rxdata+k);

temp.Format("%02X ",bt);

m_recv+=temp;

}

}

UpdateData(FALSE);

}

二、单片机程序的编写。

单片机程序编写相对容易,只需进行初始话串口,接受数据,发送数据等工作即可。代码如下:

#i nclude <reg51.h>

unsigned char inbuf;

unsigned char flag;

//初始化函数

void init_serialcomm(void)

{

SCON = 0x50; //SCON: serail mode 1, 8-bit UART, enable ucvr,0101000b

TMOD |= 0x20; //TMOD: timer 1, mode 2, 8-bit reload,0010000b

PCON |= 0x80; //SMOD=1;10000000b

TH1 = 0xF4; //Baud:4800 fosc=11.0592MHz

IE |= 0x90; //Enable Serial Interrupt

TR1 = 1; // timer 1 run

inbuf=0;

P2=0;

// TI=1;

}

//向串口发送一个字符

void send_char_com(unsigned char ch)

{

SBUF=ch;

while(TI==0);

TI=0;

}

//串口接收中断函数

void serial () interrupt 4 using 3

{

if(RI)

{

RI = 0;

inbuf=SBUF;

}

flag=1;

}

main()

{

init_serialcomm(); //初始化串口

while(1)

{

if(flag)

{

P2=inbuf;

send_char_com(inbuf);

flag=0;

}

}

}

⑷ 单片机程序流程图,速求。只要流程图,不要太复杂,简单点最好。

1开机初始化
2串口中断接收
3当串口接收到 + 号 P1最低位 输出高 延时加5US --关P1最低位
4当串口接收到 - 号 P1最低位 输出高 延时减5US --关P1最低位
5重复3,4步骤

此处不能画图,只能这样描述

⑸ 51单片机和计算机之间实现串口通信的电路图

串口通讯参考程序如下:

来源:深入浅出AVR单片机

#include<reg51.h>

unsignedcharUART_RX;//定义串口接收数据变量

unsignedcharRX_flag;//定义穿行接收标记

/*********************************************************************************************

函数名:UART串口初始化函数

调用:UART_init();

参数:无

返回值:无

结果:启动UART串口接收中断,允许串口接收,启动T/C1产生波特率(占用)

备注:振荡晶体为12MHz,PC串口端设置[4800,8,无,1,无]

/**********************************************************************************************/

voidUART_init(void){

EA=1;//允许总中断(如不使用中断,可用//屏蔽)

ES=1;//允许UART串口的中断

TMOD=0x20;//定时器T/C1工作方式2

SCON=0x50;//串口工作方式1,允许串口接收(SCON=0x40时禁止串口接收)

TH1=0xF3;//定时器初值高8位设置

TL1=0xF3;//定时器初值低8位设置

PCON=0x80;//波特率倍频(屏蔽本句波特率为2400)

TR1=1;//定时器启动

}

/**********************************************************************************************/

/*********************************************************************************************

函数名:UART串口接收中断处理函数

调用:[SBUF收到数据后中断处理]

参数:无

返回值:无

结果:UART串口接收到数据时产生中断,用户对数据进行处理(并发送回去)

备注:过长的处理程序会影响后面数据的接收

/**********************************************************************************************/

voidUART_R(void)interrupt4using1{//切换寄存器组到1

RI=0;//令接收中断标志位为0(软件清零)

UART_RX=SBUF;//将接收到的数据送入变量UART_data

RX_flag=1;//标记接收

//用户函数内容(用户可使用UART_data做数据处理)

//SBUF=UART_data;//将接收的数据发送回去(删除//即生效)

//while(TI==0);//检查发送中断标志位

//TI=0;//令发送中断标志位为0(软件清零)

}

/**********************************************************************************************/

/*********************************************************************************************

函数名:UART串口发送函数

调用:UART_T(?);

参数:需要UART串口发送的数据(8位/1字节)

返回值:无

结果:将参数中的数据发送给UART串口,确认发送完成后退出,采用非中断方式

备注:

/**********************************************************************************************/

voidUART_T(unsignedcharUART_data){//定义串口发送数据变量

ES=0;//禁止穿行中断

SBUF=UART_data;//将接收的数据发送回去

while(TI==0);//检查发送中断标志位

TI=0;//令发送中断标志位为0(软件清零)

ES=1;//打开穿行中断

}

/*********************************************************************************************

函数名:UART串口发送字符串函数

调用:UART_S(?);

参数:需要UART串口发送的数据(8位/1字节)

返回值:无

结果:将参数中的数据发送给UART串口,确认发送完成后退出,采用非中断方式

备注:

/**********************************************************************************************/

voidUART_S(unsignedchar*str)

{

while(1)

{

if(*str=='')break;

UART_T(*str++);

}

}

/*********************************************************************************************

函数名:主函数

调用:main();

参数:

返回值:无

结果:

备注:

/**********************************************************************************************/

voidmain()

{

unsignedcharBuf_data[]={"welcometoMCUworld. "};

UART_init();

UART_S(Buf_data);

while(1){

if(RX_flag==1)

{

UART_T(UART_RX);

RX_flag=0;

}

}

}

祝愿楼主马到功成

⑹ 怎样编写单片机的串口通信的程序,一般的步骤是怎么样

编写串口通讯程序步骤为:

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;
}
}

⑺ 单片机程序,需要程序流程图

这个程序main()函数都没有,你还需要什么样的程序框图?就一个初始化加串口中断程序和发送程序。

阅读全文

与单片机串口流程图相关的资料

热点内容
zigbee加密算法 浏览:461
柏杨版资治通鉴pdf 浏览:393
事业编程序员下班时间 浏览:8
linux中命令大全 浏览:36
pic单片机学习网站 浏览:163
843除6的算法 浏览:376
arduino编程视频 浏览:744
pdf背景绿色 浏览:612
记事本dos命令 浏览:274
服务器如何搭建多个节点 浏览:326
acx算法 浏览:258
幽冥诡匠漫画全集用什么app可以看 浏览:1002
租用服务器为什么越来越慢 浏览:962
算法创新就业方向 浏览:424
算法最优解作者 浏览:869
通达信红绿宝塔线指标源码 浏览:668
app是什么东西合法吗 浏览:233
怎么锁app视频教程 浏览:842
迅捷pdf注册码生成器 浏览:750
androidsdkosx 浏览:304