单片机串口测试程序
单片机汇编 串口通信实验

一、实验项目名称串口通信实验二、实验内容现有两台单片机应用系统。
甲机发送内存中以TR_BUF为首地址的10个数据串,乙机把接收到的数据存入以RC_BUF为首地址的内存单元中。
设甲、乙两机的振荡频率为12MHz,串行口均工作在方式1下。
要求甲机用查询方式编程,乙机用中断方式编程。
三、实验原理图(纯软件部分实验报告可不要本部分)四、编程思路及算法分析流程图:五、程序清单甲机发送内存中以TR_BUF为首地址的10个数据串.org 0000hmov r2,#10mov r1,#tr_bufmov a,#0fehlp1: mov @r1,arl ainc r1djnz r2,lp1mov TMOD,#20Hmov th1,#0fdhmov tl1,#0fdhsetb tr1mov scon,#40hmov r0,#tr_bufmov r7,#100acall dy1slp: mov sbuf,@r0jnb ti,$clr tiinc r0djnz r7,lpsjmp $dy1s: mov r6,#200m1: mov r5,#0fahdjnz r5,$djnz R6,m1retEnd乙机把接收到的数据存入以RC_BUF为首地址的内存单元中org 0000hajmp mainorg 0023hajmp s20fworg 0030hmain: mov TMOD,#20Hmov th1,#0fdhmov tl1,#0fdhsetb tr1setb essetb eamov scon,#50hmov r0,#rc_bufmov r2,#10sjmp $s20fw: clr rimov @r0,sbufinc r0djnz r2,fanmov r3,#10mov r1,#rc_buflp1: mov a,@r1mov p1,aacall dy1sinc r1djnz r3,lp1fan: retidy1s: mov r6,#200m1: mov r5,#0fahdjnz r5,$djnz R6,m1retend六、实验仿真结果要有适当的图文解释。
使用Keil软件模拟调试单片机串行口

使用Keil软件模拟调试单片机串行口单片机串行口是单片机中很常见的接口之一,常用于与外界通讯,如与PC机通讯,接收或发送数据等。
Keil软件可以帮助我们模拟及调试单片机串行口,下面是详细介绍。
一、Keil软件简介Keil是一款强大的单片机编程软件,具有模拟器和仿真器。
其可支持多种嵌入式系统和多种编译器。
同时Keil具有标准C 编译器,专门用于单片机编程,而且具有与某些模拟器和编译器的集成,可提供完整的嵌入式开发环境。
二、使用Keil软件模拟1. 连接软件与硬件在开始模拟之前,需要将单片机与电脑通过串口连接好。
打开“Options for Target”对话框,选择“Debug”选项卡,选择正确的COM 端口,设置存根速度,完成调试设置。
2. 添加串行口文件在Keil软件中打开设计文件,键入“#include <reg52.h>”来添加注册头文件,其中包含了需要使用串口的相关寄存器位。
利用如下代码,可以对串行口的各项参数进行设置,例如波特率、校验位等等。
void init(){SCON = 0X50; //使串口工作在方式1,即8位数据,可变波特率TMOD |= 0X20; //TMOD的高4位设为0010,使Timer1工作在方式2TH1 = 0XF3; //波特率设为2400bpsTL1 = 0XF3;TR1 = 1; //启动Timer1ES = 1; //开启串口中断EA = 1; //打开总中断}3. 编写数据收发代码在调用串口的过程中,我们往往需要使用到接收和发送两个函数。
在接收方面,我们需要设置好接收中断模式以及缓冲区的异步处理。
编写简单的数据接收收发代码如下:void send_data(unsigned char dat){SBUF = sdat; //将数据传输到SBUF当中while(!TI); //等待发送完成TI = 0; //完成发送}unsigned char receive_data(){while(!RI); //等待接收完成RI = 0; // 完成接收return SBUF; // 返回接收缓冲区}4. 最后进行模拟完成串行口配置和数据处理之后,就可以开始模拟调试了。
单片机串口通信实验报告

单片机串口通信实验报告Abstract本实验旨在通过单片机串口通信的方式,实现两个或多个单片机之间的数据传输与交互。
通过该实验,旨在加深对串口通信的理解,以及掌握单片机串口通信的配置与应用。
1. 实验背景在现代电子产品中,单片机广泛应用于各个领域。
而串口通信作为一种常见的单片机通信方式,被广泛使用。
通过串口通信,单片机可以与其他设备或单片机进行数据传输和通信。
2. 实验目的本实验的目的如下:- 了解串口通信的基本原理和工作方式;- 掌握单片机串口通信的配置方法;- 实现两个或多个单片机之间的数据传输与交互。
3. 实验原理3.1 串口通信的基本原理串口通信通过发送和接收两个引脚实现数据的传输。
典型的串口通信包含一个发送引脚(Tx)和一个接收引脚(Rx)。
发送端将数据通过发送引脚逐位发送,接收端通过接收引脚逐位接收。
3.2 单片机串口通信的配置在单片机中进行串口通信配置,需要设置波特率、数据位、停止位和校验位等参数。
波特率用于控制数据的传输速率,数据位决定发送和接收的数据位数,停止位用于标识数据的停止位,校验位用于检测数据传输的错误。
4. 实验步骤4.1 硬件准备(描述实验所需硬件的准备,例如单片机、串口模块等)4.2 软件配置(描述实验所需软件的配置,例如开发环境、编译器等)4.3 单片机串口通信程序编写(描述如何编写单片机串口通信程序,包括发送和接收数据的代码)4.4 程序下载与调试(描述如何下载程序到单片机,并进行调试)5. 实验结果与分析(描述实验的结果,并进行相应的分析和解释)6. 实验总结通过本实验,我深入了解了串口通信的基本原理和工作方式。
通过编写单片机串口通信程序,实现了两个单片机之间的数据传输与交互。
在实验过程中,我掌握了单片机串口通信的配置方法,并解决了一些可能出现的问题。
通过实验,我加深了对单片机串口通信的理解,并提升了自己的实践能力。
参考文献:(列出参考文献,不需要链接)致谢:(感谢相关人员或机构对实验的支持与帮助)附录:(附上相关的代码、电路图等附加信息)以上为单片机串口通信实验报告,通过该实验,我掌握了串口通信的基本原理和工作方式,以及单片机串口通信的配置与应用方法。
51单片机的串口通信程序(C语言)

51单片机的串口通信程序(C语言) 51单片机的串口通信程序(C语言)在嵌入式系统中,串口通信是一种常见的数据传输方式,也是单片机与外部设备进行通信的重要手段之一。
本文将介绍使用C语言编写51单片机的串口通信程序。
1. 硬件准备在开始编写串口通信程序之前,需要准备好相应的硬件设备。
首先,我们需要一块51单片机开发板,内置了串口通信功能。
另外,我们还需要连接一个与单片机通信的外部设备,例如计算机或其他单片机。
2. 引入头文件在C语言中,我们需要引入相应的头文件来使用串口通信相关的函数。
在51单片机中,我们需要引入reg51.h头文件,以便使用单片机的寄存器操作相关函数。
同时,我们还需要引入头文件来定义串口通信的相关寄存器。
3. 配置串口参数在使用串口通信之前,我们需要配置串口的参数,例如波特率、数据位、停止位等。
这些参数的配置需要根据实际需要进行调整。
在51单片机中,我们可以通过写入相应的寄存器来配置串口参数。
4. 初始化串口在配置完串口参数之后,我们需要初始化串口,以便开始进行数据的发送和接收。
初始化串口的过程包括打开串口、设置中断等。
5. 数据发送在串口通信中,数据的发送通常分为两种方式:阻塞发送和非阻塞发送。
阻塞发送是指程序在发送完数据之后才会继续执行下面的代码,而非阻塞发送是指程序在发送数据的同时可以继续执行其他代码。
6. 数据接收数据的接收与数据的发送类似,同样有阻塞接收和非阻塞接收两种方式。
在接收数据时,需要不断地检测是否有数据到达,并及时进行处理。
7. 中断处理在串口通信中,中断是一种常见的处理方式。
通过使用中断,可以及时地响应串口数据的到达或者发送完成等事件,提高程序的处理效率。
8. 串口通信实例下面是一个简单的串口通信实例,用于在51单片机与计算机之间进行数据的传输。
```c#include <reg51.h>#include <stdio.h>#define BAUDRATE 9600#define FOSC 11059200void UART_init(){TMOD = 0x20; // 设置定时器1为模式2SCON = 0x50; // 设置串口为模式1,允许接收TH1 = 256 - FOSC / 12 / 32 / BAUDRATE; // 计算波特率定时器重载值TR1 = 1; // 启动定时器1EA = 1; // 允许中断ES = 1; // 允许串口中断}void UART_send_byte(unsigned char byte){SBUF = byte;while (!TI); // 等待发送完成TI = 0; // 清除发送完成标志位}unsigned char UART_receive_byte(){while (!RI); // 等待接收完成RI = 0; // 清除接收完成标志位return SBUF;}void UART_send_string(char *s){while (*s){UART_send_byte(*s);s++;}}void main(){UART_init();UART_send_string("Hello, World!"); while (1){unsigned char data = UART_receive_byte();// 对接收到的数据进行处理}}```总结:通过以上步骤,我们可以编写出简单的51单片机串口通信程序。
单片机测试程序

本单片机最小系统是以AT89S51单片机为控制核心,由驱动芯片ZLG7289与16键的键盘矩阵实现对两个4位一体共阴数码管LED的驱动显示,由LCD1602实现液晶显示,再通过电平转换芯片MAX232并连接到232接口实现串口通信,系统还包含有蜂鸣器,USB及适配器供电接口,JTAG程序下载接口,总线扩展等。
首先,用protel99se软件制作硬件电路原理图及绘制PCE板;其次,安装焊接单片机最小系统开发板及下载线,并且进行电路调试;再次,在Keil uVision2软件环境下调试单片机汇编程序或C语言程序,用单片机下载软件ISPLAY或STC-ISP V31实现程序下载,从而用编程实现最小系统的基本功能;最后,编写综合程序以实现系统功能的综合以及拓展功能,其中串口通信用到电脑自带的超级终端或AccessPort 软件。
单片机最小系统板焊接首先对照元件清单和电路图,检查器件是否完整,型号、规格、安装是否正确。
然后将各器件根据焊接规则焊接到电路板上,其中对于器件的摆放方向和位置需十分注意。
先焊发热器件电阻和较低的电容,再焊较大的器件,焊接JTAG线,JTAG线里面的芯片电阻,电阻电容均为贴片封装,焊接时需小心谨慎,对于各条线引的焊接也需谨慎,按照其对应的顺序进行焊接,焊接结束后,自行组装。
检查已经焊好的电路板和JTAG下载线是否无误:⑴先用万用表检查电路板焊接是否都正确。
⑵当检查没有短路,断路,虚焊,漏焊等错误后,给电路板供电,看二极管是否亮,是否有器件过热,有可能二极管或三极管会在焊接的过程中被烧坏,那样的话就要重新焊器件。
⑶再用Keil软件给板子拷正确的程序,检查是否能按功能正常工作。
单片机系统的硬件调试和软件调试是不能分开的,许多硬件错误是在软件调试中被发现和纠正的。
软件设计在Keil 软件环境下对照相关资料编写单片机最小系统开发板的有用程序,使设计好的程序编译无误,得到hex 格式文件,用程序下载软件加载到单片机芯片中,实现仿真电路,在板上得出效果。
c52单片机散件开发板串口实验简介

c52单片机散件开发板串口实验简介C52单片机是一种常用的8位单片机,具有丰富的外设和强大的处理能力。
串口通信是C52单片机常用的一种通信方式,可以实现与外部设备的数据传输。
在C52单片机散件开发板上进行串口实验,可以通过串口与计算机或其他外部设备进行数据交互。
1. 连接硬件:将C52单片机散件开发板上的串口引脚与计算机或其他外部设备进行连接。
通常,串口有两个引脚,一个是发送(TX)引脚,一个是接收(RX)引脚。
将C52的TX引脚连接到外部设备的RX引脚,将C52的RX引脚连接到外部设备的TX引脚。
同时,还需要将GND引脚连接在一起,以确保地线的连接。
2. 配置串口参数:在C52单片机的程序中,需要配置串口的工作参数,如波特率、数据位、停止位等。
这些参数需要与外部设备一致,以实现正常的数据传输。
可以通过修改相关寄存器的值来配置串口参数。
3. 编写串口通信程序:使用C语言或汇编语言编写程序,实现从单片机发送数据到外部设备,或从外部设备接收数据到单片机的功能。
一般情况下,需要编写发送数据和接收数据的函数,并在主程序中调用这些函数来完成数据的发送和接收。
4. 编译和下载程序:将编写好的程序通过编译器生成二进制文件,然后使用专门的烧录器将二进制文件下载到C52单片机的内部存储器中。
5. 测试和验证:将C52单片机散件开发板上的程序启动,通过外部设备发送数据给单片机,或者从单片机接收数据。
在开发板上观察数据的发送和接收情况,验证串口通信是否正常工作。
这些可以简单地实现C52单片机散件开发板的串口实验。
根据实际需求,也可以进行更复杂的串口通信实验,如数据的校验、中断方式的数据传输等。
51单片机串口通信程序。。含详细例子
{ P3_4=0; P3_3=1;
} void RstPro()//编程器复位 {
pw.fpProOver();//直接编程结束 SendData();//通知上位机,表示编程器就绪,可以直接用此函数因为协议号(ComBuf[0])还没被修改,下同 }
void ReadSign()//读特征字 {
} void serial () interrupt 4 using 3 //串口接收中断函数 {
if (RI) { RI = 0 ; ch=SBUF; read_flag= 1 ; //就置位取数标志 }
} main()
{ init_serialcom(); //初始化串口 while ( 1 ) { if (read_flag) //如果取数标志已置位,就将读到的数从串口发出 { read_flag= 0 ; //取数标志清 0 send_char_com(ch); } }
while(RI == 0); RI = 0; c = SBUF; // 从缓冲区中把接收的字符放入 c 中 SBUF = c; // 要发送的字符放入缓冲区 while(TI == 0); TI = 0; } }
4.//////////////// /////////////////////////////////////////////////////////
SendData(); } else break;//等待回应失败 } pw.fpProOver();//操作结束设置为运行状态 ComBuf[0]=0;//通知上位机编程器进入就绪状态 SendData(); }
void Lock()//写锁定位
{
pw.fpLock();
SendData();
串口测试方案范文
串口测试方案范文串口通信是指两个设备通过串行接口进行数据传输的通信方式。
其中,串口是计算机与其附属设备之间进行数据交换的通道,通常通过RS-232或RS-485接口进行连接。
串口通信具有简单、可靠的特点,被广泛应用于各种设备之间的数据交互。
为了确保串口通信的稳定性和可靠性,我们需要进行串口的测试。
下面是一个串口测试方案,以确保串口的正常工作:1.硬件环境准备:-准备两台计算机或设备,一台作为发送端,一台作为接收端。
-选择合适的串口线连接两台设备,确保物理连通性。
-确认串口设置,包括波特率、数据位、停止位、校验位等。
2.软件环境准备:- 在发送端和接收端分别安装串口测试工具,如RealTerm或TeraTerm等。
-打开测试工具,选择正确的串口号,设置相同的波特率、数据位等参数。
-在发送端设置发送数据的方式,可以手动输入数据或者选择发送文件。
3.基本功能测试:-首先在发送端和接收端分别打开串口。
-在发送端设定要发送的数据,点击发送按钮或者输入相应的命令。
-在接收端检查是否能够正确接收到数据,并且数据内容准确无误。
-尝试不同的波特率和校验方式,以确保适应不同的串口设置。
4.速率测试:-在发送端连续发送一定数量的数据,在接收端检查是否能够全部正确接收。
-可以通过改变发送端的发送速率,如增加发送的数据量或减小发送的时间间隔,来测试串口的吞吐量。
-检查是否存在数据丢失、错误或者乱码等问题。
5.稳定性测试:-在发送端连续发送大量数据,在接收端检查是否能够长时间稳定接收。
-观察串口通信是否会出现断开、重连、信号干扰等问题。
-可以通过在发送端和接收端同时运行其他任务或应用程序,来模拟不同的工作负载和环境。
6.异常情况测试:-模拟发送端和接收端之间的异常情况,比如断电、断开串口连接等。
-恢复正常后,检查串口是否能够自动恢复工作,并且数据传输是否正常。
7.高并发测试:-在发送端同时打开多个串口,分别向不同的接收端发送数据。
介绍利用Keil的软件仿真功能来实现51单片机串口调试用户程序的方法
介绍利用Keil的软件仿真功能来实现51单片机串口调试用户程序的方法在单片机系统中,串口(UART,通用异步收发接口)是一个非常重要的组成部分。
通常使用单片机串口通过RS232/RS485电平转换芯片与上位机连接,以进行上位机与下位机的数据交换、参数设置、组成网络以及各种外部设备的连接等。
RS232/RS485串行接口总线具有成本低、简单可靠、容易使用等特点,加上其历史悠久,所以目前应用仍然非常广泛;特别对于数据量不是很大的场合,串口通信仍然是很好的选择,有着广阔的使用前景。
在单片机编程中,串口占了很重要的地位。
传统方式串口程序的调试,往往是利用专用的单片机硬件仿真器。
在编写好程序后,利用仿真器来设置断点,观察变量和程序的流程,逐步对程序进行调试,修正错误。
使用硬件仿真器的确是很有效的方法,但是也有一些缺点:很多仿真器不能做到完全硬件仿真,因而会造成仿真时正常,而实际运行时出现错误的情况;也有仿真不能通过,但是实际运行正常的情况。
对于一些较新的芯片或者是表面贴装的芯片,要么没有合适的仿真器或仿真头;要么就是硬件仿真器非常昂贵,且不容易买到。
有时由于设备内部结构空间的限制,仿真头不方便接入。
有的仿真器属于简单的在线仿真型,仿真时有很多限制。
例如速度不高,实时性或稳定性不好,对断点有限制等,造成仿真起来不太方便。
1、调试前的准备工作下面介绍一种利用Keil的软件仿真功能来实现51单片机串口调试用户程序的方法。
使用这种方法,无需任何硬件仿真器,甚至都不需要用户电路板。
所需的只是:①硬件。
1台普通计算机(需要带有2个标准串口)和1根串口线(两头都是母头,连线关系如图1所示)。
②串口软件可以是自己编写的专用调试或上下位机通信软件,也可以是通用的串口软件(如串口助手、串口调试等),主要用来收发数据。
如果没有合适的串口调试软件,则可使。
单片机串口应用实验报告(一)
单片机串口应用实验报告(一)单片机串口应用实验报告引言•介绍单片机串口应用实验的背景和意义•提出实验的目的和重要性实验原理•串口的工作原理和基本概念•单片机与串口通信的原理和方法实验步骤1.准备实验所需材料和工具2.配置单片机与串口的连接3.编写单片机程序,完成串口通信的初始化设置4.设计并实现发送和接收数据的功能5.调试程序,验证通信是否正常实验结果与分析•描述实验过程中的观察和测量结果•对实验结果进行分析和解释实验总结•总结实验的目标、方法和结果•分析实验中可能存在的问题和改进的空间•强调实验对于学习和应用单片机串口的重要性参考资料•列出参考过的相关教材、论文或网络资源以上是关于“单片机串口应用实验报告”的相关文章,希望对您有所帮助。
抱歉,以上是一份简要的实验报告的大纲,以下是对每个部分的详细描述:引言在引言部分,可以简要介绍单片机串口应用实验的背景和意义。
可以提到单片机串口通信在电子产品中的广泛应用,以及为什么学习和掌握串口通信对于创作者和工程师来说非常重要。
实验原理在实验原理部分,可以详细介绍串口的工作原理和基本概念。
可以解释串口是如何通过串行传输数据的,以及常见的串口通信协议。
还可以介绍单片机与串口通信的原理和方法,包括如何将单片机与电脑或其他设备连接进行通信。
实验步骤在实验步骤部分,可以按照以下方式列出实验步骤: 1. 准备实验所需材料和工具:列出实验所需的单片机模块、串口模块、电脑等设备。
2. 配置单片机与串口的连接:描述如何将单片机与串口模块连接起来。
3. 编写单片机程序:详细介绍如何编写单片机程序,并完成串口通信的初始化设置,包括波特率、数据位、校验位等。
4. 设计并实现发送和接收数据的功能:介绍如何设计程序使单片机能够发送和接收数据,可以包括简单的数据收发、数据加工处理等。
5. 调试程序:描述如何进行程序调试,验证通信是否正常,可以介绍使用示波器、串口调试助手等工具。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
//注意,如您使用的MCU没有那个功能,就不要操作相应的寄存器//注意,如您使用的MCU没有那那么大的扩展SRAM,就不要操作超过范围的SRAM#include<reg51.h>#include<intrins.h>sfr S2CON = 0x9A;//S2SM0,S2SM1,S2SM2,S2REN,S2TB8,SRB8,S2TI,S2RIsfr IE2 = 0xAF;//X,X,X,X,X,X,ESPI,ES2sfr S2BUF = 0x9B;sfr AUXR = 0x8e;sfr BRT = 0x9c;sfr IAP_CONTR = 0xC7;sfr CCON = 0xD8;sfr CMOD = 0xD9;sfr CL = 0xE9;sfr CH = 0xF9;sfr CCAP0L = 0xEA;sfr CCAP0H = 0xFA;sfr CCAPM0 = 0xDA;sfr CCAPM1 = 0xDB;sbit CR = 0xDE;sbit MCU_Start_Led = P1^7;sbit S2_Interrupt_Receive_Led = P1^4;//unsigned char self_command_array[4] = {0x22,0x33,0x44,0x55};#define Self_Define_ISP_Download_Command 0x22#define RELOAD_COUNT 0xfb //18.432MHz,12T,SMOD=0,9600bpsvoid serial_port_one_initial();void send_UART_one(unsigned char);void UART_one_Interrupt_Receive(void);void serial_port_two_initial();void send_UART_two(unsigned char);void UART_two_Interrupt_Receive(void);void soft_reset_to_ISP_Monitor(void);void delay(void);void display_MCU_Start_Led(void);void send_PWM(void);void main(void){unsigned int array_point = 0;unsigned char xdata Test_array_one[512] ={0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57,0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f,0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f,0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf,0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7,0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf,0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7,0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7,0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf,0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7,0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff,0xff, 0xfe, 0xfd, 0xfc, 0xfb, 0xfa, 0xf9, 0xf8,0xf7, 0xf6, 0xf5, 0xf4, 0xf3, 0xf2, 0xf1, 0xf0,0xef, 0xee, 0xed, 0xec, 0xeb, 0xea, 0xe9, 0xe8,0xe7, 0xe6, 0xe5, 0xe4, 0xe3, 0xe2, 0xe1, 0xe0,0xdf, 0xde, 0xdd, 0xdc, 0xdb, 0xda, 0xd9, 0xd8,0xd7, 0xd6, 0xd5, 0xd4, 0xd3, 0xd2, 0xd1, 0xd0,0xcf, 0xce, 0xcd, 0xcc, 0xcb, 0xca, 0xc9, 0xc8,0xc7, 0xc6, 0xc5, 0xc4, 0xc3, 0xc2, 0xc1, 0xc0,0xbf, 0xbe, 0xbd, 0xbc, 0xbb, 0xba, 0xb9, 0xb8,0xb7, 0xb6, 0xb5, 0xb4, 0xb3, 0xb2, 0xb1, 0xb0,0xaf, 0xae, 0xad, 0xac, 0xab, 0xaa, 0xa9, 0xa8,0xa7, 0xa6, 0xa5, 0xa4, 0xa3, 0xa2, 0xa1, 0xa0,0x9f, 0x9e, 0x9d, 0x9c, 0x9b, 0x9a, 0x99, 0x98,0x97, 0x96, 0x95, 0x94, 0x93, 0x92, 0x91, 0x90,0x8f, 0x8e, 0x8d, 0x8c, 0x8b, 0x8a, 0x89, 0x88,0x87, 0x86, 0x85, 0x84, 0x83, 0x82, 0x81, 0x80,0x7f, 0x7e, 0x7d, 0x7c, 0x7b, 0x7a, 0x79, 0x78,0x77, 0x76, 0x75, 0x74, 0x73, 0x72, 0x71, 0x70,0x6f, 0x6e, 0x6d, 0x6c, 0x6b, 0x6a, 0x69, 0x68,0x67, 0x66, 0x65, 0x64, 0x63, 0x62, 0x61, 0x60,0x5f, 0x5e, 0x5d, 0x5c, 0x5b, 0x5a, 0x59, 0x58,0x57, 0x56, 0x55, 0x54, 0x53, 0x52, 0x51, 0x50,0x4f, 0x4e, 0x4d, 0x4c, 0x4b, 0x4a, 0x49, 0x48,0x47, 0x46, 0x45, 0x44, 0x43, 0x42, 0x41, 0x40,0x3f, 0x3e, 0x3d, 0x3c, 0x3b, 0x3a, 0x39, 0x38,0x37, 0x36, 0x35, 0x34, 0x33, 0x32, 0x31, 0x30,0x2f, 0x2e, 0x2d, 0x2c, 0x2b, 0x2a, 0x29, 0x28,0x27, 0x26, 0x25, 0x24, 0x23, 0x22, 0x21, 0x20,0x1f, 0x1e, 0x1d, 0x1c, 0x1b, 0x1a, 0x19, 0x18,0x17, 0x16, 0x15, 0x14, 0x13, 0x12, 0x11, 0x10,0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x08,0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00 };unsigned char i = 0;serial_port_one_initial(); //串口1初始化// serial_port_two_initial(); //串口2初始化display_MCU_Start_Led(); //点亮发光二极管表示单片机开始工作// send_UART_two(0x55); //串口2发送数据表示单片机串口正常工作// send_UART_two(0xaa); //串口2发送数据表示单片机串口正常工作/*for(array_point=0; array_point<512; array_point++){send_UART_two(Test_array_one[array_point]);}*/send_UART_one(0x34); //串口1发送数据表示单片机串口正常工作send_UART_one(0xa7); //串口1发送数据表示单片机串口正常工作for(array_point=0; array_point<512; array_point++){send_UART_one(Test_array_one[array_point]);}// send_PWM(); //6kHz PWM, 50% dutywhile(1);}void serial_port_one_initial(){SCON = 0x50; //0101,0000 8位可变波特率,无奇偶校验位// TMOD = 0x21; //0011,0001 设置顶时器1为8位自动重装计数器// TH1 = RELOAD_COUNT; //设置定时器1自动重装数// TL1 = RELOAD_COUNT;// TR1 = 1; //开定时器1BRT = RELOAD_COUNT;// BRTR = 1, S1BRS = 1, EXTRAM = 1 ENABLE EXTRAMAUXR = 0x11; // T0x12,T1x12,UART_M0x6,BRTR,S2SMOD,BRTx12,EXTRAM,S1BRSES = 1; //允许串口中断EA= 1; //开总中断}void serial_port_two_initial(){//sfr SCON = 0x98;//SM0,SM1,SM2,REN,TB8,RB8,TI,RI//sfr S2CON = 0x9A;//S2SM0,S2SM1,S2SM2,S2REN,S2TB8,S2RB8,S2TI,S2RI//sfr S2BUF = 0x9B;//sfr IE2 = 0xAF;//X,X,X,X,X,X,ESPI,ES2S2CON = 0x50; //0101,0000 8位可变波特率,无奇偶校验位,允许接收BRT = RELOAD_COUNT;// BRTR = 1, S1BRS = 1, EXTRAM = 0 ENABLE EXTRAMAUXR = 0x11; // T0x12,T1x12,UART_M0x6,BRTR,S2SMOD,BRTx12,EXTRAM,S1BRS// ES = 1; //允许串口1中断// ES2 = 1IE2 = 0x01; //允许串口2中断,ES2=1EA= 1; //开总中断}void send_UART_one(unsigned char i){ES = 0; //关串口中断TI = 0; //清零串口发送完成中断请求标志SBUF = i;while(TI ==0); //等待发送完成TI = 0; //清零串口发送完成中断请求标志ES = 1; //允许串口中断}void send_UART_two(unsigned char i){//sfr SCON = 0x98;//SM0,SM1,SM2,REN,TB8,RB8,TI,RI//sfr S2CON = 0x9A;//S2SM0,S2SM1,S2SM2,S2REN,S2TB8,S2RB8,S2TI,S2RI//sfr S2BUF = 0x9B;//sfr IE2 = 0xAF;//X,X,X,X,X,X,ESPI,ES2unsigned char temp = 0;// ES = 0; //关串口1中断IE2 = 0x00; //关串口2中断,es2=0// TI = 0; //清零串口1发送完成中断请求标志S2CON = S2CON & 0xFD; //B'11111101,清零串口2发送完成中断请求标志// SBUF = i;S2BUF = i;// while(TI ==0); //等待发送完成do{temp = S2CON;temp = temp & 0x02;}while(temp==0);// TI = 0; //清零串口发送完成中断请求标志S2CON = S2CON & 0xFD; //B'11111101,清零串口2发送完成中断请求标志// ES = 1; //允许串口1中断// ES2 = 1IE2 = 0x01; //允许串口2中断,ES2=1}void UART_one_Interrupt_Receive(void) interrupt 4{unsigned char k = 0;if(RI==1){RI = 0;k = SBUF;if(k==Self_Define_ISP_Download_Command) //是自定义下载命令{delay(); //延时1秒就足够了delay(); //延时1秒就足够了soft_reset_to_ISP_Monitor(); //软复位到系统ISP监控区}send_UART_one(k+1);}else{TI = 0;}}void UART_two_Interrupt_Receive(void) interrupt 8{//sfr SCON = 0x98;//SM0,SM1,SM2,REN,TB8,RB8,TI,RI//sfr S2CON = 0x9A;//S2SM0,S2SM1,S2SM2,S2REN,S2TB8,S2RB8,S2TI,S2RI//sfr S2BUF = 0x9B;//sfr IE2 = 0xAF;//X,X,X,X,X,X,ESPI,ES2unsigned char k = 0;k = S2CON ;k = k & 0x01;//if(S2RI==1)if(k==1){//RI = 0;S2CON = S2CON & 0xFE; //1111,1110S2_Interrupt_Receive_Led = 0;k = S2BUF;if(k==Self_Define_ISP_Download_Command) //是自定义下载命令{delay(); //延时1秒就足够了delay(); //延时1秒就足够了soft_reset_to_ISP_Monitor(); //软复位到系统ISP监控区}send_UART_two(k+1);}else{//TI = 0;S2CON = S2CON & 0xFD; //1111,1101}}void soft_reset_to_ISP_Monitor(void){IAP_CONTR = 0x60; //0110,0000 软复位到系统ISP监控区}void delay(void){unsigned int j = 0;unsigned int g = 0;for(j=0;j<5;j++){for(g=0;g<60000;g++){_nop_();_nop_();_nop_();_nop_();_nop_();}}}void display_MCU_Start_Led(void){//sbit MCU_Start_Led = P1^7;unsigned char i = 0;for(i=0;i<1;i++){MCU_Start_Led = 0; //顶亮MCU开始工作指示灯delay();MCU_Start_Led = 1; //熄灭MCU开始工作指示灯delay();MCU_Start_Led = 0; //顶亮MCU开始工作指示灯}}void send_PWM(void){CMOD = 0x00; // CIDL - - - - CPS1 CPS0 ECF Setup PCA Timer// CPS1 CPS0 = 00, Fosc/12 is PCA/PWM clock// 18432000/12/256 = 6000CL = 0x00;CH = 0x00;CCAP0L = 0x80; //Set the initial value same as CCAP0HCCAP0H = 0x80; //50% Duty CycleCCAPM0 = 0x42; //0100,0010 Setup PCA module 0 in 8BIT PWM, P3.7 CR = 1; //启动PCA/PWM 定时器}。