51单片机串口max232通信程序
- 格式:doc
- 大小:26.50 KB
- 文档页数:2
采用MA232实现MCS51单片机与PC机的通信一、本文概述随着微处理器技术的飞速发展,单片机作为一种集成度高、功能强大的微控制器,在工业自动化、智能仪表、嵌入式系统等领域得到了广泛应用。
MCS51单片机作为其中的佼佼者,以其稳定的性能和广泛的适应性受到了工程师们的青睐。
然而,单片机与PC机之间的通信一直是困扰工程师们的难题之一。
本文旨在探讨采用MA232串口通信模块实现MCS51单片机与PC机之间通信的方法,为工程师们提供一种可靠的解决方案。
本文将首先介绍MCS51单片机的特点及其在嵌入式系统中的应用,然后详细阐述MA232串口通信模块的工作原理及其与MCS51单片机的接口方法。
在此基础上,本文将重点分析采用MA232实现MCS51单片机与PC机通信的硬件电路设计和软件编程实现。
通过实例演示和测试结果分析,验证采用MA232实现MCS51单片机与PC机通信的可行性和可靠性,为工程师们在实际项目中应用提供参考和借鉴。
通过本文的学习,读者可以深入了解MCS51单片机与PC机通信的原理和实现方法,掌握采用MA232串口通信模块实现通信的关键技术,为实际应用提供有力的技术支持。
二、MCS51单片机简介MCS51单片机,又称为Intel 8051微控制器,是Intel公司在1980年代初推出的一款8位CISC(复杂指令集计算机)单片机。
自推出以来,由于其出色的性能、合理的价格和广泛的应用场景,MCS51单片机在全球范围内得到了广泛的使用,成为了嵌入式系统领域的经典之作。
MCS51单片机采用了典型的微处理器结构,包括中央处理器(CPU)、内部数据存储器(RAM)、外部数据存储器(外部RAM)、各种I/O 接口电路以及时钟电路等。
其中,CPU是单片机的核心部分,负责执行程序中的指令,进行数据的运算和处理。
内部数据存储器用于存放程序和数据,而外部数据存储器则提供了更大的存储空间,用于存放更多的数据或程序。
MCS51单片机还提供了丰富的I/O接口电路,包括并行I/O口、串行通信口、定时/计数器、中断系统等,使得单片机可以与外部设备进行通信和控制。
单片机串口通信程序#include <reg52.h>#include<intrins.h>#include <stdio.h>#include <math.h>#define uchar unsigned char#define uint unsigned intsbit 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,0x 02,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.0592MTL1 = 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单片机串口通信(相关例程) 51单片机串口通信(相关例程)一、简介51单片机是一种常用的微控制器,它具有体积小、功耗低、易于编程等特点,被广泛应用于各种电子设备和嵌入式系统中。
串口通信是51单片机的常见应用之一,通过串口通信,可以使单片机与其他外部设备进行数据交互和通信。
本文将介绍51单片机串口通信的相关例程,并提供一些实用的编程代码。
二、串口通信基础知识1. 串口通信原理串口通信是通过串行数据传输的方式,在数据传输过程中,将信息分为一个个字节进行传输。
在51单片机中,常用的串口通信标准包括RS232、RS485等。
其中,RS232是一种常用的串口标准,具有常见的DB-9或DB-25连接器。
2. 串口通信参数在进行串口通信时,需要设置一些参数,如波特率、数据位、停止位和校验位等。
波特率表示在单位时间内传输的比特数,常见的波特率有9600、115200等。
数据位表示每个数据字节中的位数,一般为8位。
停止位表示停止数据传输的时间,常用的停止位有1位和2位。
校验位用于数据传输的错误检测和纠正。
三、串口通信例程介绍下面是几个常见的51单片机串口通信的例程,提供给读者参考和学习:1. 串口发送数据```C#include <reg51.h>void UART_Init(){TMOD = 0x20; // 设置计数器1为工作方式2(8位自动重装) TH1 = 0xFD; // 设置波特率为9600SCON = 0x50; // 设置串口工作方式1,允许串行接收TR1 = 1; // 启动计数器1}void UART_SendChar(unsigned char dat){SBUF = dat; // 发送数据while (!TI); // 等待发送完成TI = 0; // 清除发送完成标志}void main(){UART_Init(); // 初始化串口while (1){UART_SendChar('A'); // 发送字母A}}```2. 串口接收数据```C#include <reg51.h>void UART_Init(){TMOD = 0x20; // 设置计数器1为工作方式2(8位自动重装) TH1 = 0xFD; // 设置波特率为9600SCON = 0x50; // 设置串口工作方式1,允许串行接收TR1 = 1; // 启动计数器1}void UART_Recv(){unsigned char dat;if (RI) // 检测是否接收到数据{dat = SBUF; // 读取接收到的数据 RI = 0; // 清除接收中断标志// 处理接收到的数据}}void main(){UART_Init(); // 初始化串口EA = 1; // 允许中断ES = 1; // 允许串口中断while (1)// 主循环处理其他任务}}```3. 串口发送字符串```C#include <reg51.h>void UART_Init(){TMOD = 0x20; // 设置计数器1为工作方式2(8位自动重装) TH1 = 0xFD; // 设置波特率为9600SCON = 0x50; // 设置串口工作方式1,允许串行接收TR1 = 1; // 启动计数器1}void UART_SendString(unsigned char *str){while (*str != '\0')SBUF = *str; // 逐个发送字符while (!TI); // 等待发送完成TI = 0; // 清除发送完成标志str++; // 指针指向下一个字符}}void main(){UART_Init(); // 初始化串口while (1){UART_SendString("Hello, World!"); // 发送字符串}}```四、总结本文介绍了51单片机串口通信的基础知识和相关编程例程,包括串口发送数据、串口接收数据和串口发送字符串。
以下程序通过实践检测完全可以放心使用不过注意硬件电路的连接单片机的串口通信主要理解SCON的状态控制寄存器的用法波特率的设定1 两个单片机一个为主机一个为从机,又主机控制从机的LED灯得简单程序入手注意硬件的连线将单片机串口的第二引脚与另一单片机串口的第三引脚相连同时另一单片机的第二串口引脚也与前一个单片机的第三引脚相连主机部分的程序设计//主机程序发送控制信号的#include〈reg52。
h〉#define uchar unsigned char#define uint unsigned intsbit KEY=P3^0;//按键sbit ledA=P1^1;//定义了三个灯来指示发送的字符是什么sbit ledB=P1^3;sbit ledC=P1^5;sbit ledstop=P1^6;uchar KEY_number=0;//按键计数void delay(unsigned int z)//延时函数{unsigned int x,y;for(x=z;x〉0;x—-)for(y=240;y〉0;y-—);}void init(){SCON=0x40;//主机串口工作方式1 REN=0 之允许发送不能接收TMOD=0x20;PCON=0x00;TH1=0xfd;TL1=0xfd;T1=RI=0;//必须要做来保证可以顺利进入终端TR1=1;EA=1;ES=1;}void Put_charToSBUF(uchar c) //把一个字符写入SBUF{SBUF=c;while(TI==0); //巧妙的等待处理等带发送完毕TI=0;}void main(){init();while(1){if(KEY==0){delay(5);if(KEY==0){ P1=0xff;while(!KEY);KEY_number++;if(KEY_number==4) KEY_number=0;}}switch (KEY_number){case 0: ledstop=0; break;case 1: ledA=~ledA; Put_charToSBUF(’A’);break;case 2: ledB=~ledB; Put_charToSBUF('B'); break;case 3: ledC=~ledC; Put_charToSBUF('C'); break;}delay(100) ;}}从机部分的程序#include<reg52.h>#define uchar unsigned char#define uint unsigned intsbit d1=P1^0;sbit d2=P1^1;sbit d3=P1^2;void delay(unsigned int z)//延时函数{unsigned int x,y;for(x=z;x〉0;x—-)for(y=240;y〉0;y—-);}void init(){SCON=0x50;//允许串口接收 TMOD=0x20;PCON=0x00;TH1=0xfd;TL1=0xfd;RI=0;TR1=1;EA=1;ES=1;}void main(){init();while(1){if(RI){RI=0;switch(SBUF){case 'A’: d1=~d1;break;case 'B’: d1=1; d2=~d2;break;case ’C’: d2=1; d3=~d3; break;}}else d1=d2=d3=1;delay(100) ;}}上面的程序是一主一从单片机之间也可以建立一个双向的通信过程//甲机程序发送控制信号的同时接收乙机发来的串口信息并//且显示在数码管上#include〈reg52。
一个单片机串行数据采集/传输模块的设计西安第二炮兵工程学院180分队(710025)吴勇军陈祥初赵军红刘政波摘要以GMS97C2051单片机为核心,采用TLC2543 12位串行A/D转换器,设计了一个串行数据采集/传输模块,给出了硬件原理图和主要源程序。
关键词串行A/D转换器串行数据传输GMS97C2051单片机在微机测控系统中,经常要用到A/D转换。
常用的方法是扩展一块或多块A/D采集卡。
当模拟量较少或是温度、压力等缓变信号场合,采用总线型A/D卡并不是最合适、最经济的方案。
这里介绍一种以GNS97C2051单片机为核心,采用TLC2543 12位串行A/ D转换器构成的采样模块,该模块的采样数据由单片机串口经电平转换后送到上位机(IBM PC兼容机)的串口COM1或COM2,形成一种串行数据采集串行数据传输的方式。
经实践调试证实:该模块功耗低、采样精度高、可靠性好、接口简便,有一定实用价值。
1 主要器件介绍1.1 TLC2543串行A/D转换器模块采用TI公司的TLC2543 12位串行A/D转换器,使用开关电容逐次逼近技术完成A/D转换过程。
由于是串行输入结构,能够节省51系列单片机I/O资源,且价格适中。
其特点有:(1)12位分辨率A/D转换器;(2)在工作温度范围内10μs转换时间;(3)11个模拟输入通道;(4)3路内置自测试方式;(5)采样率为66kbps;(6)线性误差+1LSB(max)(7)有转换结束(EOC)输出;(8)具有单、双极性输出;(9)可编程的MSB或LSB前导;(10)可编程的输出数据长度。
TLC2543的引脚排列如图1所示。
图1中AIN0~AIN10为模拟输入端;为片选端;DIN 为串行数据输入端;DOUT为A/ D转换结果的三态串行输出端;EOC为转换结束端;CLK为I/O时钟;REF+为正基准电压端;REF-为负基准电压端;V CC为电源;GND为地。
1.2 GMS97C2051单片机GMS97C2051是武汉力源公司和韩国LG公司联合推出的一种性能价格比极高的 8位单片机,其指令系统与MCS-51系列完全兼容。
//工作晶振为11.0592MHz,否则出现返回值错误,一个字节的发送#include<regx52.h〉#define uchar unsigned char#define uint unsigned intuchar a,flag;uchar table[]={”very good "};//-———---—-——初始化定时器和串口-void inital_timer1(){TMOD=0X20;//必须使用定时器1,串口使用规定TH1=0Xfd;//定时器1,工作方式2,8位自动重装TL1=0Xfd;//高8位与低8位数值必须相同TR1=1; //定时器1允许位REN=1; //串口使能SM0=0;//串口工作方式设置,工作方式1SM1=1;ES=1; //串口中断使能EA=1; // 总中断使能}//——-—-—————串口中断——--—--—-void gorpe() interrupt 4{RI=0;//接受中断标志位,硬件置1,必须软件置0 a=SBUF;// 特殊功能寄存器flag=1;// 检测标志位}//————-接收数据,并向上位机作出反应(即发送返回数据)—--void display(){uchar i;if(flag==1){ES=0;//关闭串口中断,接下来要发送数据,否则发送完一个数据仍会产生中断,产生死循环for(i=0;i〈10;i++){SBUF=table[i];while(!TI);//判断是否发送完成TI=0;//发送中断标志位}SBUF=a;while(!TI);TI=0;ES=1;flag=0;}}。
51单片机串口通信程序51单片机是我国自主研发的一款微控制器,在国内广泛应用于各种电子设备中。
在很多应用场景中,需要通过串口进行通信,以实现数据传输。
本文将介绍51单片机串口通信程序的编写方法。
一、串口介绍串口是一种通信接口,用于在电子设备之间传输数据。
其主要特点是一条通信线路同时只能传输一位数据,因此称为串口。
串口和并口属于不同的通信接口标准。
串口的优点是具有通信距离远、传输速率快、可靠性高等优点,因此广泛应用于各种场合中。
串口有两种工作模式:同步模式和异步模式。
在实际应用中,异步串口通信更为常见。
二、异步串口通信原理在异步串口通信中,数据的传输是通过发送端和接收端的时钟信号不同步实现的。
在发送数据时,发送端会发出一个起始位,接下来是数据位,最后是一个或多个停止位。
在接收端,当检测到起始位时,开始接收数据。
根据通信协议,在接收完数据位后,接收端会判断是否正确,然后再结束本次通信。
1. 硬件连接在51单片机和电脑之间进行串口通信,需要用到串口转USB线。
将串口转USB线的TxD接口与51单片机的P3.1接口相连,RxD接口与P3.0接口相连。
此外,需要一个5V的电源供给51单片机。
2. 准备工作在编写程序之前,需要进行一些准备工作:(1)将P3口设为外部中断P3口的最低2位是外部中断的2个输入端,需要将它们设为中断输入。
EA=1;EX0=1;(2)设置波特率串口通信需要设置波特率。
常见的波特率有9600、19200、38400等。
对应的波特率常数为0xFD、0xFA、0xF4等。
TH1=0xFD;//波特率9600(3)使能串口中断在发送和接收数据时,会不断产生中断,需要将中断使能。
ES=1;//允许串口中断3. 编写程序(1)发送数据void SendData(unsigned char SendBuff[],unsigned int ULength){unsigned int i;for(i=0;i<ULength;i++){SBUF=SendBuff[i];//发送数据while(TI==0); //等待,直到发送完成TI=0;}}(2)接收数据(3)主函数TMOD|=0x20;//定时器1工作方式2TH1=0xFD;//波特率9600TR1=1;//打开定时器1SCON=0x50;//串口方式1,8位数据,无校验,1停止位EA=1;//开总中断ES=1;//开串口中断while(1){SendData(pSendData,4);//发送数据 RecvData(pRecvData,4);//接收数据if(pRecvData[0]=='K'){P0=0x01;//点亮LED}else{P0=0x00;//关闭LED}}}四、总结。
一.max232资料简介该产品是由德州仪器公司(TI)推出的一款兼容RS232标准的芯片。
由于电脑串口rs232电平是-10v +10v,而一般的单片机应用系统的信号电压是ttl电平0 +5v,max232就是用来进行电平转换的,该器件包含2驱动器、2接收器和一个电压发生器电路提供TIA/EIA-232-F电平。
该器件符合TIA/EIA-232-F标准,每一个接收器将TIA/EIA-232-F电平转换成5-V TTL/CMOS电平。
每一个发送器将TTL/CMOS电平转换成TIA/EIA-232-F电平。
主要特点1、单5V电源工作2、 LinBiCMOSTM工艺技术3、两个驱动器及两个接收器4、±30V输入电平5、低电源电流:典型值是8mA6、符合甚至优于ANSI标准 EIA/TIA-232-E及ITU推荐标准V.287、ESD保护大于MIL-STD-883(方法3015)标准的2000V下图为MX232双串口的连接图,可以分别接单片机的串行通信口或者实验板的其它串行通信接口:题相关图片如下:三.max232应用电路,注意电容接法。
232是电荷泵芯片,可以完成两路TTL/RS-232电平的转换,它的的9、10、11、12引脚是TTL电平端,用来连接单片机的。
制作at89s51单片机器编程器的电路图MAX232获得正负电源的另一种方法在单片机控制系统中,我们时常要用到数/模(D/A)或者模/数(A/D)变换以及其它的模拟接口电路,这里面要经常用到正负电源,例如: 9V,-9V; 12V,-12V.这些电源仅仅作为数字和模拟控制转换接口部件的小功率电源。
在控制板上,我们有的只是5V电源,可又有很多方法获得非5V电源。
1.外接;2.DC-DC变换......在这里我介绍一块大家常用的芯片:MAX232. MAX232是TTL--RS232电平转换的典型芯片,按照芯片的推荐电路,取振荡电容为uF的时候,若输入为5V,输出可以达到-14V左右,输入为0V ,输出可以达到14V,在扇出电流为20mA的时候,处处电压可以稳定在 12V和-12V.因此,在功耗不是很大的情况下,可以将MAX232的输出信号经稳压块后作电源使用。
MAX232与单片机通信电路图2009-11-13 21:27实验板加个串行接口吧。
借助电脑转件直观的看单片机的输出结果,以后我还会用一些简单的实例讲解单片机和PC串口通讯的简单应用和编程。
如果你用的是成品实验板或仿真器,那你就可以跳过这一段了。
在制作电路前我们先来看看要用的MAX232,这里我们不去具体讨论它,只要知道它是TTL和RS232电平相互转换的芯片和基本的引脚接线功能就行了。
通常我会用两个小功率晶体管加少量的电路去替换MAX232,可以省一点,效果也不错。
下图就是MAX232的基本接线图。
图为MAX232在上两课的电路的基础上按下面的图加上MAX232就可以了。
这大热天的拿烙铁焊焊,还真的是热气迫人来呀:P串口座用DB9的母头,这样就可以用买来的PC串口延长线进行和电脑相连接,也可以直接接到电脑com口上。
图为DB9接头图为加上了MAX232的实验电路做好后我们就先用回第一课的"Hello World!"程序,用它来和你的电脑说声Hello!把程序烧到芯片上,把串口连接好。
嘿嘿,这时要打开你的串口调试软件,没有就赶快到网上DOWN一个了。
你会用Windows的超级中端也行,不过我从不用它。
我用的是comdebug,它是个不错的软件,我喜欢它是因为它功能好而且还有"线路状态"功能,这对我制作小玩意时很有用。
串口号,波特率调好,打开串口,单片机上电,就可以在接收区看到不断出现的"Hello World!"。
一定要先打开软件的串口,再把单片机上电,否则可能因字符不对齐而看到乱码哦。
做好后我们就先用回第一课的"Hello World!"程序,用它来和你的电脑说声Hello!把程序烧到芯片上,把串口连接好。
嘿嘿,这时要打开你的串口调试软件,没有就赶快到网上DOWN一个了。
你会用Windows的超级中端也行,不过我从不用它。
单片机实训(论文)说明书题目:基于232的串口通信技术院(系):专业:学生姓名:学号:指导教师:2010年12月26日摘要此设计项目是由AT89C51单片机为控制核心基于max232的串口通信技术.系统是由单片机系统、按键控制电路、串口通信模块、1602液晶显示模块模块组成。
它能实现对PC机与单片机的数字与字符串的发送与接收,1602能把要发送或接收的内容出来。
关键词:单片机;1602液晶显示;字符串的发送和接收AbstractTo the design was picked by at89c51 monolithic integrated circuits to control the core max232 based on the serial communication technology. the system is monolithic integrated circuits systems, key control circuit, serial communication modules and lcd modules, that was composed of modules. it can achieve the pc and monolithic integrated circuits figures with a string to send and receive, was to be sent or received the. contents.Keywords:monolithic integrated circuits; lcd display; was a string to send and receive引言串口是计算机上一种非常通用设备通信的协议。
大多数计算机包含两个RS232的串口。
串口同时也是仪器仪表设备通用的通信协议;很多GPIB兼容的设备也带有RS-232口。
51单片机与PC的RS232接口串行通信实现研究-大学毕业论文毕业设计学位论文范文模板参考资料目录一概述 ................................................ ........... 41.1 引言 ................................................ ............41.2 设计目的和意义 ................................................ ..4二方案功能详述及论证 ............................................. 52.1 方案功能详述 ................................................ ....52.1.1 总体功能设计 ................................................ ..52.1.2 具体功能模块设计 (52).2 方案论证 ................................................ ........5三系统硬件设计 ................................................ ... 93.1 选用设备和设计总框图 ............................................93.2串行接口通信硬件线路图 .........................................93.3 电源电路 ................................................ .......113.4 主要芯片说明 ................................................ ...113.4.1 单片机 AT89C51 概述...........................................113.4.2 MAX232 芯片简介: (14)3.4.3 RS232 串行接口简介 ..........................................16四系统软件设计 ................................................ .. 184.1 波特率的设置 ................................................ ...184.2 系统软件设计参考程序如下 .......................................194.3 系统软件仿真 ................................................ ...204.4 系统程序流程图 .................................................22五结论与展望 ................................................ .... 23参考文献 ................................................ ......... 23 摘要本文设计了一种采用 51 系列单片机与采用了 MAX232 芯片的 PC 通过标准的RS232 接口实现串行通信的功能。
串行通信设计课程设计MAX232一、课程目标知识目标:1. 让学生理解串行通信的基本原理,掌握MAX232芯片的功能与应用。
2. 学生能够解释串行通信的标准协议,如RS-232、RS-485,并了解其差异。
3. 学生能够阐述MAX232芯片内部结构及其在电平转换中的作用。
技能目标:1. 学生能够运用所学知识,设计简单的串行通信电路,并正确连接MAX232芯片。
2. 学生能够编写基本的串行通信程序,实现数据的发送与接收。
3. 学生通过实践操作,掌握使用示波器、逻辑分析仪等工具对串行通信信号进行分析。
情感态度价值观目标:1. 培养学生对电子通信领域的兴趣,激发创新意识。
2. 培养学生团队协作精神,学会在项目中承担责任和分工合作。
3. 增强学生的环保意识,注重电子废弃物的合理处理。
课程性质:本课程为电子技术专业课程,以实践操作为主,理论讲授为辅。
学生特点:学生具备一定的电子基础知识,对通信原理有一定了解,但实际操作能力有待提高。
教学要求:注重理论与实践相结合,充分调动学生的主观能动性,提高学生的动手能力和创新能力。
通过课程学习,使学生在掌握基本知识的基础上,能够独立完成串行通信电路的设计与调试。
二、教学内容1. 串行通信原理概述:介绍串行通信的基本概念、分类及特点,重点讲解RS-232、RS-485标准协议。
- 教材章节:第三章“串行通信原理”- 内容:串行通信的基本概念、分类、特点;RS-232、RS-485标准协议及其应用场景。
2. MAX232芯片原理与应用:讲解MAX232芯片的内部结构、工作原理及在串行通信中的应用。
- 教材章节:第四章“MAX232芯片及应用”- 内容:MAX232芯片内部结构、工作原理、电平转换功能;MAX232在串行通信电路中的应用。
3. 串行通信电路设计:指导学生设计简单的串行通信电路,并正确连接MAX232芯片。
- 教材章节:第五章“串行通信电路设计”- 内容:串行通信电路设计原理;MAX232芯片的连接方法;电路的调试与优化。
#include <reg52.h>#include<intrins.h>#include <stdio.h>#include <math.h>#define uchar unsigned char#define uint unsigned intsbit 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.0592MTL1 = 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=0TH1=0xf3; //12MHZ ,BPS:4800,N,8,1TL1=0xf3;PCON=0x80; //方式一TR1=1; //?????????????????????????????SCON=0x40; //串口通信控制寄存器模式一OutDat=0xaa; //向串口发送固定数据值for(;;) //循环程序{SBUF=OutDat;//发送数据for(;;){ if(TI) //发送中断位当发送停止位时置1,表示发送完成break;}mDelay(500);TI=0; //清零中断位OutDat=~OutDat; //显示内容按位取反}}。
//工作晶振为11.0592MHz,否则出现返回值错误,一个字节的发送
#include<regx52.h>
#define uchar unsigned char
#define uint unsigned int
uchar a,flag;
uchar table[]={"very good "};
//-----------初始化定时器和串口-
void inital_timer1()
{
TMOD=0X20; //必须使用定时器1,串口使用规定
TH1=0Xfd; //定时器1,工作方式2,8位自动重装
TL1=0Xfd; //高8位与低8位数值必须相同
TR1=1; //定时器1允许位
REN=1; //串口使能
SM0=0; //串口工作方式设置,工作方式1
SM1=1;
ES=1; //串口中断使能
EA=1; // 总中断使能
}
//----------串口中断---------
void gorpe() interrupt 4
{
RI=0; //接受中断标志位,硬件置1,必须软件置0
a=SBUF; // 特殊功能寄存器
flag=1; // 检测标志位
}
//-----接收数据,并向上位机作出反应(即发送返回数据)---
void display()
{
uchar i;
if(flag==1)
{
ES=0; //关闭串口中断,接下来要发送数据,否则发送完一个数据仍会产生中断,产生死循环
for(i=0;i<10;i++)
{
SBUF=table[i];
while(!TI); //判断是否发送完成
TI=0; //发送中断标志位
}
SBUF=a;
while(!TI);
TI=0;
ES=1;
flag=0;
}
}。