51单片机的串口通信程序(C语言)
#include
#include
#include
#include
#define uchar unsigned char
#define uint unsigned int
sbit Key1 = P2^3;
sbit Key2 = P2^2;
sbit Key3 = P2^1;
sbit Key4 = P2^0;
sbit BELL = P3^6;
sbit CONNECT = P3^7;
unsigned int Key1_flag = 0;
unsigned int Key2_flag = 0;
unsigned int Key3_flag = 0;
unsigned int Key4_flag = 0;
unsigned char b;
unsigned char code Num[21]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,
0x90,0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00, 0x10,0x89};
unsigned char code Disdigit[4] = {0x7F,0xBF,0xDF,0xEF};
unsigned char Disbuf[4];
void delayms(uint t)
{
uint i;
while(t--)
{
/* 对于11.0592M时钟,约延时1ms */
for (i=0;i<125;i++)
{}
}
}
//-----------------------------------------------------
void SendData(uchar Dat)
{
uchar i=0;
SBUF = Dat;
while (1)
{
if(TI)
{
TI=0;
break;
}
}
}
void ScanKey()
{
if(Key1 == 0)
{
delayms(100); if(Key1 == 0)
{
Key1_flag = 1; Key2_flag = 0; Key3_flag = 0;
Key4_flag = 0;
Key1 = 1;
}
else;
}
if(Key2 == 0)
{
delayms(100);
if(Key2 == 0)
{
Key2_flag = 1; Key1_flag = 0; Key3_flag = 0;
Key4_flag = 0;
Key2 = 1;
}
else;
}
if(Key3 == 0)
{
delayms(50);
if(Key3 == 0)
{
Key3_flag = 1; Key1_flag = 0; Key2_flag = 0;
Key4_flag = 0;
Key3 = 1;
}
else;
}
if(Key4 == 0)
{
delayms(50);
if(Key4 == 0)
{
Key4_flag = 1;
Key1_flag = 0;
Key2_flag = 0;
Key3_flag = 0;
Key4 = 1;
}
else;
}
else;
}
void KeyProc()
{
if(Key1_flag)
{
TR1 = 1;
SendData(0x55);
Key1_flag = 0; }
else if(Key2_flag)
{
TR1 = 1;
SendData(0x11); Key2_flag = 0;
}
else if(Key3_flag) {
P1=0xff;
BELL = 0;
CONNECT = 1;
Key3_flag = 0;
}
else if(Key4_flag)
{
CONNECT = 0;
BELL = 1;
Key4_flag = 0;
}
else;
}
void Initdisplay(void)
{
Disbuf[0] = 1;
Disbuf[1] = 2;
Disbuf[2] = 3;
Disbuf[3] = 4;
}
void Display() //显示
{
unsigned int i = 0;
unsigned int temp,count;
temp = Disdigit[count]; P2 =temp;
temp = Disbuf[count];
temp = Num[temp];
P0 =temp;
count++;
if (count==4)
count=0;
}
void time0() interrupt 1 using 2 {
Display();
TH0 = (65535 - 2000)/256;
TL0 = (65535 - 2000)%256;
}
void main()
{
Initdisplay();
TMOD = 0x21;
TH0 = (65535 - 2000)/256;
TL0 = (65535 - 2000)%256;
TR0 = 1;
ET0 = 1;
TH1 = 0xFD; //11.0592M
TL1 = 0xFD;
PCON&=0x80;
TR1 = 1;
ET1 = 1;
SCON = 0x40; //串口方式
REN = 1;
PT1 = 0;
PT0 = 1;
EA = 1;
while(1)
{
ScanKey();
KeyProc();
if(RI)
{
Disbuf[0] = 0;
Disbuf[1] = 20;
Disbuf[2] = SBUF>>4;
Disbuf[3] = SBUF&0x0f;
RI = 0;
}
else;
}
}
51单片机串口通信C语言程序2
**************************************************************
; 平凡单片机工作室
;ckss.asm
;功能:反复向主机送AA和55两个数
;主机使用一个串口调试软件设置19200,n,8,1
***************************************************************/
#include "reg51.h"
#define uchar unsigned char
#define uint unsigned int
//延时程序//////////////////由Delay参数确定延迟时间*/
void mDelay(unsigned int Delay)
{ unsigned int i;
for(;Delay>0;Delay--)
{ for(i=0;i<124;i++)
{;}
}
}
//////////////////// 主程序////////////////////
void main()
{ uchar OutDat; //定义输出变量
TMOD=0x20; //TMOD=0
TH1=0xf3; //12MHZ ,BPS:4800,N,8,1
TL1=0xf3;
PCON=0x80; //方式一
TR1=1; //?????????????????????????????
SCON=0x40; //串口通信控制寄存器模式一
OutDat=0xaa; //向串口发送固定数据值
for(;;) //循环程序
{
SBUF=OutDat;//发送数据
for(;;)
{ if(TI) //发送中断位当发送停止位时置1,表示发送完成
break;
}
mDelay(500);
TI=0; //清零中断位
OutDat=~OutDat; //显示内容按位取反
}
}
51单片机中断程序大全
//实例42 :用定时器T0 查询方式 P2 口8 位控制LED 闪烁 //#include
定时器的高8 }} 1KHzT1:用定时器43 实例// 音频查询方式控制单片机发出 #include
51单片机与PC机通信资料
《专业综合实习报告》 专业:电子信息工程 年级:2013级 指导教师: 学生:
目录 一:实验项目名称 二:前言 三:项目内容及要求 四:串口通信原理 五:设计思路 5.1虚拟串口的设置 5.2下位机电路和程序设计 5.3串口通信仿真 六:电路原理框图 七:相关硬件及配套软件 7.1 AT89C51器件简介 7.2 COMPIN简介 7.3 MAX232器件简介 7.4友善串口调试助手 7.5 虚拟串口软件Virtual Serial Port Driver 6.9八:程序设计 九:proteus仿真调试 十:总结 十一:参考文献 一:实验项目名称:
基于51单片机的单片机与PC机通信 二:前言 在国内外,以PC机作为上位机,单片机作为下位机的控制系统中,PC机通常以软件界面进行人机交互,以串行通信方式与单片机进行积极交互,而单片机系统根据被控对象配置相应的前向,后向信息通道,工作时作为主控机测对象,作为被控机接受PC机监督,指挥,定期或受命向上位机提供对象及本身的工作状态信息。 目前,随着集成电路集成度的增加,电子计算机向微型化和超微型化方向发展,微型计算机已成为导弹,智能机器人,人类宇宙和太空和太空奥妙复杂系统不可缺少的智能部件。在一些工业控制中,经常需要以多台单片机作为下位机执行对被控对象的直接控制,以一台PC机为上位机完成复杂的数据处理,组成一种以集中管理、分散控制为特点的集散控制系统。 为了提高系统管理的先进性和安全性,计算机工业自动控制和监测系统越来越多地采用集总分算系统。较为常见的形式是由一台做管理用的上位主计算机(主机)和一台直接参与控制检测的下位机(单片机)构成的主从式系统,主机和从机之间以通讯的方式来协调工作。主机的作用一是要向从机发送各种命令及参数:二是要及时收集、整理和分析从机发回的数据,供进一步的决策和报表。从机被动地接受、执行主机发来的命令,并且根据主机的要求向主机回传相应烦人实时数据,报告其运行状态。 用串行总线技术可以使系统的硬件设计大大简化、系统的体积减小、可靠性提高。同时,系统的更改和扩充极为容易。MCS-51系列单片机,由于内部带有一个可用于异步通讯的全双工的穿行通讯接口,阴齿可以很方便的构成一个主从式系统。 串口是计算机上一种非常通用的设备通讯协议,大多数计算机包容两个基于RS232的串口。串口同时也是仪器仪表设备通过用的通讯协议,很多GPIB兼容的设备也带有RS-232口。同时串口通讯协议也可以用于获取远程采集设备数据。所以,深入的理解学习和研究串口通信相关知识是非常必要的。此次毕业设计选题为“PC机与MCS-51单片机的串口通讯”,使用51单片机来实现一个主从式
单片机中断程序大全
单片机中断程序大全公司内部编号:(GOOD-TMMT-MMUT-UUPTY-UUYY-DTTI-
//实例42:用定时器T0查询方式P2口8位控制L E D闪烁#include
#include
汇编语言实现串口通信(PC和单片机间)教学文案
8.用C语言或汇编语言实现串口通信(PC和单片机间) 上位机和下位机的主从工作方式为工业控制及自动控制系统所采用。由于PC 机分析能力强、处理速度更快及单片机使用灵活方便等特点,所以一般都将PC 机作为上位机,单片机作为下位机,二者通过RS-232或者RS-485接收、发送数据和传送指令。单片机可单独处理数据和控制任务,同时也将数据传送给PC机,由PC机对这些数据进行处理或显示 1 硬件电路的设计 MCS-51单片机有一个全双工的串行通讯口UART,利用其RXD和TXD与外界进行通信,其内部有2个物理上完全独立的接收、发送缓冲器SBUF,可同时发送和接收数据。所以单片机和PC机之间可以方便地进行串口通讯。单片机串口有3条引线:TXD(发送数据),RXD(接收数据)和GND(信号地)。因此在通信距离较短时可采用零MODEM方式,简单三连线结构。IBM-PC机有两个标准的RS-232串行口,其电平采用的是EIA电平,而MCS-51单片机的串行通信是由TXD(发送数据)和RXD(接收数据)来进行全双工通信的,它们的电平是TTL电平;为了PC机与MCS-51 机之间能可靠地进行串行通信,需要用电平转换芯片,可以采用MAXIM公司生产的专用芯片MAX232进行转换。电路如图1所示。硬件连接时,可从MAX232中的2路发送器和接收器中任选一路,只要注意发送与接收的引脚对应关系即可。接口电路如图3.5所示。
总体设计按照整体设计思路方案绘制原理图如下所示: 2 系统软件设计 软件设计分上位机软件设计和下位机软件设计。这两部分虽然在不同的机器上编写和运行,但它们要做的工作是对应的:一个发送,另一个接收。为了保证数据通信的可靠性,要制定通信协议,然后各自根据协议分别编制程序。现约定通信协议如下:PC机和单片机都可以发送和接收。上位机和下位机均采用查询方式发送控字符和数据、中断方式接收控制字符和数据。采用RS-232串口异步通信, 1上位PC机与下位单片机异步串行通信的通信协议
C51单片机和电脑串口通信电路图
C51单片机和电脑串口通信电路图与源码 51单片机有一个全双工的串行通讯口,所以单片机和电脑之间可以方便地进行串口通讯。进行串行通讯时要满足一定的条件,比如电脑的串口是RS232电平的,而单片机的串口是TTL电平的,两者之间必须有一个电平转换电路,我们采用了专用芯片MAX232进行转换,虽然也可以用几个三极管进行模拟转换,但是还是用专用芯片更简单可靠。我们采用了三线制连接串口,也就是说和电脑的9针串口只连接其中的3根线:第5脚的GND、第2脚的RXD、第3脚的TXD。这是最简单的连接方法,但是对我们来说已经足够使用了,电路如下图所示,MAX232的第10脚和单片机的11脚连接,第9脚和单片机的10脚连接,第15脚和单片机的20脚连接。 串口通讯的硬件电路如上图所示 在制作电路前我们先来看看要用的MAX232,这里我们不去具体讨论它,只要知道它是TTL和RS232电平相互转换的芯片和基本的引脚接线功能就行了。通常我会用两个小功率晶体管加少量的电路去替换MAX232,可以省一点,效果也不错,下图就是MAX232的基本接线图。
按图7-3加上MAX232就可以了。这大热天的拿烙铁焊焊,还真的是热气迫人来呀:P串口座用DB9的母头,这样就可以用买来的PC串口延长线进行和电脑相连接,也可以直接接到电脑com口上。
为了能够在电脑端看到单片机发出的数据,我们必须借助一个WINDOWS软件进行观察,这里我们利用一个免费的电脑串口调试软件。本串口软件在本网站https://www.360docs.net/doc/721664568.html,可以找到 软件界面如上图,我们先要设置一下串口通讯的参数,将波特率调整为4800,勾选十六进制显示。串口选择为COM1,当然将网站提供的51单片机实验板的串口也要和电脑的COM1连接,将烧写有以下程序的单片机插入单片机实验板的万能插座中,并接通51单片机实验板的电源。
51单片机中断程序大全
//实例42:用定时器T0查询方式P2口8位控制LED闪烁#include
51单片机串口通信,232通信,485通信,程序
51单片机串口通信,232通信,485通信,程序代码1:232通信 #include
while(1) { if(flag==1) { ES=0; for(i=0;i<6;i++) { SBUF=table[i]; while(!TI); TI=0; } SBUF=a; while(!TI); TI=0; ES=1; flag=0; } } } void ser() interrupt 4 {
RI=0; a=SBUF; flag=1; } 代码2:485通信 #include
} void main() { init_1602(); init(); while(1) { if(flag==1) { display(0,a); } } } void ser() interrupt 4 { RI=0; a=SBUF; flag=1; }
51单片机与PC串口通讯
目录 第1章需求分析 ............................................................................................................................ - 1 - 1.1课题名称 (1) 1.2任务 (1) 1.3要求 (1) 1.4设计思想 (1) 1.5课程设计环境 (1) 1.6设备运行环境 (2) 1.7我在本实验中完成的任务 (2) 第2章概要设计 ............................................................................................................................ - 2 - 2.1程序流程图 (2) 2.2设计方法及原理 (3) 第3章详细设计 ............................................................................................................................ - 3 - 3.1电路原理 (3) 3.1.1STC89C52芯片 ............................................................................................................. - 3 -3.2串口通信协议 (4) 3.3程序设计 (5) 3.3.1主程序模块 .................................................................................................................... - 5 - 3.3.2串口通讯模块 ................................................................................................................ - 6 - 3.3.3控制部分文件 ................................................................................................................ - 8 - 3.3.4公共部分模块 .............................................................................................................. - 11 -3.4电路搭建 (12) 3.4.1电路原理图 .................................................................................................................. - 12 -第4章上位机关键代码分析 ...................................................................................................... - 12 - 4.1打开串口操作 (12) 4.2后台线程处理串口程序 (15) 4.3程序运行界面 (18) 第5章课程设计总结与体会 ...................................................................................................... - 19 -第6章致谢 .................................................................................................................................. - 19 -参考文献........................................................................................................................................... - 19 -
51单片机usart通信程序(有CRC校验)
#include
【最新编排】基于51单片机的DHT11串口通讯
//****************************************************************// // DHT 使用范例 //单片机 AT89S5 或 STC89C5 RC // 功能 串口发送温湿度数据波特率 9600 //硬件连接 P .0口为通讯口连接DHT ,DHT 地电源和地连接单片机地 电源和地 单片机串口加MAX 3 连接电脑 // 公司 济南联诚创发科技有限公司 //****************************************************************// #include
51单片机与串口通信代码
51单片机与串口通信代码 2011年04月22日 17:18 本站整理作者:佚名用户评论(0) 关键字:串口通信(35) 串口调试 1. 发送:向总线上发命令 2. 接收:从总线接收命令,并分析是地址还是数据。 3. 定时发送:从内存中取数并向主机发送. 经过调试,以上功能基本实现,目前可以通过上位机对单片机进行实时控制。 程序如下: //这是一个单片机C51串口接收(中断)和发送例程,可以用来测试51单片机的中断接收 //和查询发送,另外我觉得发送没有必要用中断,因为程序的开销是一样的 #i nclude
PCON=0x00; ES=1; TMOD=0x21; //定时器工作于方式2,自动装载方式 TH0=(65536-1000)%256; TL0=(65536-1000)/256; TL1=0xfd; TH1=0xfd; ET0=1; TR0=1; TR1=1; // TI=0; EA=1; // TI=1; RAMDATA=0x1F45; } void serial () interrupt 4 using 3 { if(RI) { RI=0; ch=SBUF; TI=1; //置SBUF空 switch(ch) { case 0x01 :printf("A"); TI=0;break; case 0x02 :printf("B"); TI=0;break; case 0x03 :printf("C"); TI=0;break;
51单片机中断程序大全
//实例42 :用定时器TO查询方式P2 口8位控制LED闪烁#include
TL0=(65536-46083)%256; // 定时器 T0 的高 8 位赋初值 } // 实例43 :用定时器T1 查询方式控制单片机发出1KHz 音频#include
51单片机 USB 接口通信 方案
************************************************************************************************************ ************************************************************************************************************
51单片机 USB 接口通信 方案 单片机
现在单片机都是串口连接的,连接不方便,也显的比较老。如果购买转接线,成本又不能控制。 其实单片机和电脑之间完全可以建立 USB 连接,只需要通过一片 USB 转串口的芯片 如图,我昨天刚实验过,效果不错~ 电路也比较简单,只需要四个电容一个晶振即可。唯一麻烦一些的是芯片是 SSOP-20封装的,很小,如果是上洞洞板需要 转接一下。 大家可以实验下,3,4口出来的就是 TTL 的信号,可以直接和单片机的 P30,P31口连接,进行串口通信~,不需要 MAX232 转换。 (如果是转成电脑串口则需要 MAX232)
注:另外也可以用 PL2303芯片构建~~但有的资料说 PL2303比较合适3.3V 系统,所以我用了这个 CH340的 [此贴子已经被作者于2009-9-25 13:13:16编辑过]
不错。 不过我还是建议用 cp2102。 楼上的片子是国产的, 不知道供货和稳定性。 另外建议玩单片机的放弃 pl2303,虽然便宜, 但是很不稳定 cp2102据说不太好焊接,所以我没选(虽然这个也不太好焊接~)
基于单片机的双机串行通信
河南机电高等专科学校2015-2016学年第1学期通信实训报告 系别:电子通信工程系 班级: xxxxxx 学号: 13xxxxxxxxx 姓名: xxxxxxx 2015年12月
基于51单片机的双机串行通信 摘要:串行通信是单片机的一个重要应用,本次课程设计就是要利用单片机来完成一个系统,实现爽片单片机床航通信,通信的结果使用数码管进行显示,数码管采用查表方式显示,两个单片机之间采用RS-232进行双击通信。在通信过程中,使用通信协议进行通信。 关键字:通信双机 一、总体设计 1设计目的 1.通过设计相关模块充分熟悉51单片机的最小系统的组成和原理; 2.通过软件仿真熟悉keil和proteus的配合使用; 3.通过软件编程熟悉51的C51编程规范; 4.通过实际的硬件电路搭设提高实际动手能力。 2.设计要求: 两片单片机之间进行串行通信,A机将0x06发送给B机,在B机的数码管上静态显示1,B机将0~f动态循环发送到A机,并在其数码管上显示。 3.设计方案: 软件部分,通过通信协议进行发送接收,A机先送0x06(B机数码管显示1)给B机(B机静态显示),当从机接收到后,向B机发送代表0-f的数码管编码数组。B收到0x06后就把数码表TAB[16]中的数据送给从机。 二、硬件设计 单片机串行通信功能 计算机与外界的信息交换称为通信,常用的通信方式有两种:并行通信和串行通信。51单片机用4个接口与外界进行数据输入与数据输出就是并行通信,并行通信的特点是传输信号的速度快,但所用的信号线较多,成本高,传输的距离较近。串行通信的特点是只用两条信号线(一条信号线,再加一条地线作为信号回路)即可完成通信,成本低,传输的距离较远。 51单片机的串行接口是一个全双工的接口,它可以作为UART(通用异步接受和发送器)用,也可以作为同步移位寄存器用。51单片机串行接口的结构如下:
51单片机串口通信的原理与应用流程解析
51单片机串口通信的原理与应用流程解析 一、原理简介 51 单片机内部有一个全双工串行接口。什么叫全双工串口呢?一般来说,只能接受或只能发送的称为单工串行;既可接收又可发送,但不能同时进行的称为半双工;能同时接收和发送的串行口称为全双工串行口。串行通信是指数据一位一位地按顺序传送的通信方式,其突出优点是只需一根传输线,可大大降低硬件成本,适合远距离通信。其缺点是传输速度较低。 与之前一样,首先我们来了解单片机串口相关的寄存器。 SBUF 寄存器:它是两个在物理上独立的接收、发送缓冲器,可同时发送、接收数据,可通过指令对SBUF 的读写来区别是对接收缓冲器的操作还是对发送缓冲器的操作。从而控制外部两条独立的收发信号线RXD(P3.0)、TXD(P3.1),同时发送、接收数据,实现全双工。 串行口控制寄存器SCON(见表1)。 表1 SCON寄存器 表中各位(从左至右为从高位到低位)含义如下。 SM0 和SM1 :串行口工作方式控制位,其定义如表2 所示。 表2 串行口工作方式控制位 其中,fOSC 为单片机的时钟频率;波特率指串行口每秒钟发送(或接收)的位数。 SM2 :多机通信控制位。该仅用于方式2 和方式3 的多机通信。其中发送机SM2 = 1(需要程序控制设置)。接收机的串行口工作于方式2 或3,SM2=1 时,只有当接收到第9 位数据(RB8)为1 时,才把接收到的前8 位数据送入SBUF,且置位RI 发出中断申请引发串行接收中断,否则会将接受到的数据放弃。当SM2=0 时,就不管第位数据是0 还是1,都将数据送入SBUF,并置位RI 发出中断申请。工作于方式0 时,SM2 必须为0。
51单片机和计算机之间实现串口通信的电路图
51单片机和计算机之间实现串口通信的电路图 串口通讯参考程序如下: 来源:深入浅出AVR单片机 #include
51单片机中断程序大全
( //实例42:用定时器T0查询方式P2口8位控制LED闪烁 #include<> // 包含51单片机寄存器定义的头文件 void main(void) { // EA=1; //开总中断 // ET0=1; //定时器T0中断允许 TMOD=0x01; //使用定时器T0的模式1 TH0=(65536-46083)/256; //定时器T0的高8位赋初值 : TL0=(65536-46083)%256; //定时器T0的高8位赋初值 TR0=1; //启动定时器T0 TF0=0; P2=0xff; while(1)//无限循环等待查询 { while(TF0==0) ; ] TF0=0; P2=~P2; TH0=(65536-46083)/256; //定时器T0的高8位赋初值 TL0=(65536-46083)%256; //定时器T0的高8位赋初值 //实例43:用定时器T1查询方式控制单片机发出1KHz音频 #include<> // 包含51单片机寄存器定义的头文件 sbit sound=P3^7; //将sound位定义为引脚 void main(void) ( {// EA=1; //开总中断 // ET0=1; //定时器T0中断允许 TMOD=0x10; //使用定时器T1的模式1 TH1=(65536-921)/256; //定时器T1的高8位赋初值 TL1=(65536-921)%256; //定时器T1的高8位赋初值 TR1=1; //启动定时器T1 TF1=0; while(1)//无限循环等待查询 — { while(TF1==0); TF1=0;