51单片机简单程序实例编程题

5151单片机简单程序实例程序练习题,51單片机简单程序实例程序,51单片机简单程序实例流水灯程序,51单片机简单程序实例中断程序,51单片机简单程序实例定时器程序,51单片机简单程序实唎双机通信程序,51单片机简单程序实例汇编程序实例,51单片机简单程序实例如何烧程序,51单片机简单程序实例延时程序,51单片机简单程序实例拆字程序

  • 此压缩包内包含完整C5151单片机简单程序实例联系实例包含各大模块,是学习51单片机简单程序实例不可或缺的练习实例好不好,谁用谁知道~

  • 包含很多代码很好用,包括朂初的流水灯矩阵键盘,继电器等等,有c代码和核心文件

  • 包括的是一些简单的基于C5151单片机简单程序实例实例程序;例如全双工通信基于中断的跑马灯程序

  • 51单片机简单程序实例C语言程序设计实训100例—基于8051+Proteus仿真》案例

  • C5151单片机简单程序实例C语言程序100例_Keil 适合自己学习實践c5151单片机简单程序实例 主要内容包括MCS-5151单片机简单程序实例内部资源的编程及使用,MCS-5151单片机简单程序实例扩展资源的方法和编程MCS-5151单片机簡单程序实例外围接口的设计和编程,最后讲解了跑马灯、矩形波发生器...

  • 本书可帮助读者快速学习和应用C5151单片机简单程序实例,对C5151单片机简單程序实例的内部资源和常用的外围接口器件实施程序模板化,使读者在这一基础上编写自己的功能程序代码,不再重复编写基础代码本书嘚最大特点即将程序模块贯穿于工程应用的...

  • 400例 C51/5251单片机简单程序实例C语言实例,收集各种模块的例程有详细注解,一看便懂【更新-->已降低所需积分】

  • 本书以学习C51编程为主线,系统的介绍了5151单片机简单程序实例硬件结构、51单片机简单程序实例内部资源及其常用外围器件的驱動方法通过结合实例由浅入深的进行讲解,使读者在系统地学习 C51编程的同时又能学习常用器件的应用,大大提高了...

  • 熟练学会这100道5151单片機简单程序实例的题,基本的小项目是没啥问题了,要精进,需掌握好电子基础知识.

  • C51 51单片机简单程序实例 SPI 双机通信 从机可控制ISD4004(也为SPI的控制程序)和LCD12864 峩调试过,可以用,不过由于从机要完成上次所下达的任务,必需等到完成任务后才能接下一个任务主机的延时等待不够长,也就不能顺着主機的...

  • 150例程STC 89C52/51系列例程,从简单到复杂的都有平台要分,赚点积分共享交流!

  • 5151单片机简单程序实例的开发程序 实例 稍微修改 对应本机即鈳 可调式 使用keil uv4编译

  • 400例5151单片机简单程序实例开发程序,可供新手学习研究可自己更改自主学习。

  • 由开发板配套提供的系列配套程序可以使初学者轻松掌握51单片机简单程序实例的各个功能

  • C5151单片机简单程序实例控制的交通灯,仿真很成功,很好的51实例值得一看!

  • 第一章基础知识 第二章51单片机简单程序实例基本原理 第三章51单片机简单程序实例汇编程序设计 第四章51单片机简单程序实例C语言程序设计 第五章MCS-5151单片机簡单程序实例内部资源及编程 ...第十一章51单片机简单程序实例应用系统设计实例 第十二章KEIL C51集成环境的使用

  • 《5151单片机简单程序实例C语言开发与實例》,利用Keil公司最新版的(Vision3集成开发环境从应用的角度,全面地介绍了用C51开发调试51单片机简单程序实例程序的方法、过程和应注意的事項书中列举了大量应用实例,着重介绍了5151单片机简单程序实例的一些新...

  • 包含各种51单片机简单程序实例实验制作含原理图,汇编程序和C語言程序资料齐全,适合51单片机简单程序实例学习者使用

       声明:本篇文章只是个人知识盲區、知识弱点、重点部分的归纳总结望各位大佬不喜勿喷。梳理顺序是按照书籍的实际顺序梳理转载请注明出处。

      随着51单片机简单程序实例系统的广泛应用和计算机网络技术的普及51单片机简单程序实例的通信功能愈来愈显得重要。51单片机简单程序实例通信是指51单片机簡单程序实例与计算机或51单片机简单程序实例与51单片机简单程序实例之间的信息交换通常51单片机简单程序实例与计算机之间的通信我们鼡的较多。
      通信有并行和串行两种方式在51单片机简单程序实例系统以及现代51单片机简单程序实例测控系统中,信息的交换多采用串行通信方式

并行通信通常是将数据字节的各位用多条数据线同时进行传送,每一位数据都需要一条传输线如下图所示,8位数据总线的通信系统一次传送8位数据(1个字节),将需要8条数据线此外,还需 要一条信号线和若干控制信号线这种方式仅适合于短距离的数据传输,洳比较老式的打印机就是通过并口方式与计算机连接现在都用传输速度非常快的USB
2.0接口通信了。由于并口通信已经用得较少因此我们在這里也仅做简单介绍,大家只需了解即可
      并行通信控制简单、相对传输速度快,但由于传输线较多长距离传送时成本高且收、 发方的各位同时接收存在困难。
      串行通信是将数据字节分成一位一位的形式在一条传输线上逐个地传送此时只需要一条数据线,外加一条公共信号地线和若干控制信号线因为一次只能传送一位,所以对于一个字节的数据至少要分8位才能传送完毕,如下图所示

      串行通信的必偠过程是:发送时,要把并行数据变成串行数据发送到线路上去接收时,要把串行信号再变成并行数据这样才能被计算机及其他设备處理。
      串行通信传输线少长距离传送时成本低,且可以利用电话网等现成的设备但数据的传送控制比并行通信复杂。
      异步串行通信是指通信的发送与接收设备使用各自的时钟控制数据的发送和接收过程为使双方收、发协调,要求发送和接收设备的时钟尽可能一致如丅图所示。
      异步通信是以字符(构成的帧)为单位进行传输字符与字符之间的间隙(时间间隔) 是任意的,但每个字符中的各位是以固萣的时间传送的即字符之间不一定有“位间隔"的 整数倍关系, 但 同 一字符内的各位之间的距离均为“       异步通信一帧字符信息由 4 部分组荿: 起始位、数据位、奇偶校验位和停止位如下图所示。有的字符信息也有带空闲位形式 在字符之间有空闲字符。
      异步通信的特点:不要求收发双方时钟的严格一致实现容易,设备开销较小但每个字符要附加2~3位,用于起止位、校验位和停止位各帧之间还有间隔,因此传输效率不高
      在51单片机简单程序实例与51单片机简单程序实例之间,51单片机简单程序实例与计算机之间通信时通常采用异步串行通信方式。
      同步通信时要建立发送方时钟对接收方时钟的直接控制使双方达到完全同步。此时传输数据的位之间的距离均为"位间隔"的整数倍,同时传送的字符间不留间隙即保持位同步关系,也保持字符同步关系发送方对接收方的同步可以通过外同步和自同步两種方法实现,分别如下图左和下图右所示
      此时,传送的数据和控制信息都必须由规定的字符集(如ASCII码)中的字符所组成图6.1.7中帧头为1个戓2个同步字符SYN(ASCII码为16H)。SOH为序始字符(ASCII码为OlH),表示标题的开始标题中包含源地址、目标地址和路由指示等信息。STX为文始字符(ASCII码为02H),表示传送的数据塊开始数据块是传送的正文内容,由多个字符组成数据块后面是组终字符ETB(ASCII码为17H)或文终字符ETX(ASCII码为03H),然后是校验码,典型的面向字符的同步規程如IBM的二进制同步规程BSC
      此时,将数据块看做数据流并用序列作为开始和结束标志。为了避免在数据流中出现序列时引起的混乱发送方总是在其发送的数据流中每出现5个连续的1就插入一个附加的0;接收方则每检测到5个连续的1并且其后有一个0时,就删除该0
      面向位的同步通信的特点是以特定的位组合作为帧的开始和结束标志,所传输的一帧数据可以是任意位它传输的效率较高,但实现的硬件设备比异步通信复杂
      (3)全双工。全双工是指数据可以同时进行双向传输三种制式分别如下图左、下图中和下图右所示。
      在发送数据时数据位尾随嘚1位为奇偶校验位(1或0)。奇校验时数据中1的个数与校验位1的个数之和应为奇数;偶校验时,数据中1的个数与校验位1的个数之和应为偶数接收字符时,对1的个数进行校验若发现不一致,则说明传输数据过程中出现了差错
      代码和校验是发送方将所发数据块求和(或各字节異或),产生一个字节的校验字符(校验和)附加到数据块末尾接收方接收数据时同时对数据块(除校验字节外)求和(或各字节异或),将所得的结果与发送方的“校验和“进行比较相符则无差错,否则即认为传送过程中出现了差错
      这种校验是通过某种数学运算实現有效信息与校验位之间的循环校验,常用于对磁盘信息的传输、存储区的完整性校验等这种校验方法纠错能力强,广泛应用于同步通信中

75189等芯片可实现RS-232电平到TTL电平的转换。但是现在用的较多的是MAX232, MAX202, HIN232等芯片它们同时集成了RS-232电平和TTL电平之间的互转。为丰富大家的知识下媔首先讲解在没有M心(232这种现成电平转换芯片时,如何用二极管、三极管、电阻、电容等分立元件搭建一个简单的RS-232电平与TTL电平之间的转换电蕗
      集成芯片内部都是由最基本电子元件组成,如电阻、电容、二极管、三极管等元件为了方便用户使用,制造商把这些具有一定功能嘚分立元件封装到一个芯片内这样就制成了我们使用的各种芯片。学会本电路后我们也就基本搞清了MAX232芯片内部的大致结构。
V之间分析图下图,首先TTL电平TXD发送数据时,若发送低电平0,这时Q3导通PCRXD由空闲时的低电平变高电平(如PC用中断接收的话会产生中断),满足条件发送高电平1时,TXD为高电平Q3截止,由于PCRXD内部高阻而PCTXD平时是-3~-15V,通过D1和R7将其拉低PCRXD至-3-15V,此时计算机接收到的就是1下面再反过来,PC发送信号由51单片機简单程序实例来接收信号。当PCTXD为低电平-3-(-15V)时Q4截止,51单片机简单程序实例端的RXD被R9拉到5V高电平;当PCTXD变高时Q4导通,RXD被Q4拉到低电平这样便实現的双向转换,这是一个很好的电路值得大家学习。

      MAX232芯片是MAXIM公司生产的、包含两路接收器和驱动器的IC芯片它的内部有一个电源电压变換器,可以把输入的+5V电源电压变换成为RS-232输出电平所需的+10V电压所以,采用此芯片接口的串行通信系统只需单一的+5V电源就可以了对千没有+12V電源的场合,其适应性更强加之其价格适中,硬件接口简单所以被广泛采用。
      图6.2.5中上半部分电容C1,C2,C3,C4及V+,V-是电源变换电路部分在实际应用Φ,器件对电源噪声很敏感因此Vee必须要对地加去耦电容Cs,其值为0.l?F。按芯片手册中介绍电容C1,C2,C3,C4应取1.0?F/16V的电解电容,经大量实验及实际应用这4个电容都可以选用O.l?F的非极性瓷片电容代替1.0?F/16V的电解电容,在具体设计电路时这4个电容要尽量靠近MAX232芯片,以提高抗干扰能力
2脚RXD端,至此计算机接收到数据PC机发送数据时从PC机串口座第3脚TXD端发出数据,再逆向流向51单片机简单程序实例的RXD端P3.0接收数据
      这里需要注意的是,MAX232与串口座连接时无论是数据输出端,还是数据输入端连接串口座的第2引脚或第3引脚都可以,选用不同的连接方法时51单片机简单程序实例与计算机之间的串口线都要谨慎选择,是选择平行串口线还是交叉串口线、是选择母头对母头串口线还是母头对公头串口线这些都偠非常注意每种选择都有对应的电路,但无论哪种搭配方式大家必须要明白,在51单片机简单程序实例与计算机之间必须要有一条数据能互相传输的回路只要把握好每个交接点就一定能通信成功。

      51单片机简单程序实例或计算机在串口通信时的速率用波特率表示它定义為每秒传输二进制代码的位数,即1波特=1位/秒单位是bps(位/秒)。如每秒钟传送240个字符而每个字符格式包含10位(1个起始位、1个停止位、8个數据位),这时的波特率为10位X240个/秒=2400bps
      串行接口或终端直接传送串行信息位流的最大距离与传输速率及传输线的电气特性也有关。当传输線使用每0.3m(约1英尺)有50pF电容的非平衡屏蔽双绞线时传输距离随传输速率的增加而减小。当比特率超过1000bps时最大传输距离迅速下降,如9600bps时最夶距离下降到只有76m(约250英尺)因此我们在做串口通信实验选择较高速率传输数据时,尽量缩短数据线的长度为了能使数据安全传输,即使是在较低传输速率下也不要使用太长的数据线
      在串行通信中,收、发双方对发送或接收数据的速率要有约定通过编程可对51单片机简單程序实例串行口设定为4种工作方式,其中方式0和方式2的波特率是固定的而方式1和方式3的波特率是可变的,由定时器T1的溢出率来决定
      串行口的4种工作方式对应三种波特率。由于输入的移位时钟的来源不同所以各种方式的波特率计算公式也不相同,以下是4种方式波特率嘚计算公式
式中,fosc为系统晶振频率通常为12MHz或11.0592MHz; SMOD是PCON寄存器的最高位(关于PCON寄存器请看下一个知识点);T1溢出率即定时器Tl溢出的频率。

知识點:电源管理寄存器PCON

      电源管理寄存器在特殊功能寄存器中字节地址为87H,不能位寻址,PCON用来管理51单片机简单程序实例的电源部分包括上电複位检测、掉电模式、空闲模式等。51单片机简单程序实例复位时PCON全部被清0其各位的定义如下表所示。
PD=0:51单片机简单程序实例处于正常工作狀态
PD=1:51单片机简单程序实例进入掉电(PowerDown)模式,可由外部中断低电平触发或由下降沿触发或者硬件复位模式唤醒进入掉电模式后,外部晶振停振CPU、定时器、串行口全部停止工作,只有外部中断继续工作
IDL=0:51单片机简单程序实例处于正常工作状态。
IDL=1:51单片机简单程序实例进入空闲(Idle)模式除CPU不工作外,其余仍继续工作在空闲模式下可由任一个中断或硬件复位唤醒。
      T1溢出率就是T1定时器溢出的频率只要算出T1定时器每溢出一次所需的时间T,那么T的倒数1/T就是它的溢出率。这个问题还是比较容易理解的在第3章讲解过定时器T0和T1方式1的操作方法,若我们设定定時器T1每50ms溢出一次那么其溢出率就为20Hz,再将20代入串口波特率计算公式中即可求出相应的波特率,当然也可根据波特率反推出定时器的溢出率进而计算出定时器的初值。通常51单片机简单程序实例在通信时波特率都较高,因此T1溢出率也必定很高如果我们使用定时器1的工作方式1在中断中装初值的方法来求T1溢出率的话,在进入中断、装值、出中断这个过程中很容易产生时间上微小的误差当多次操作时微小的误差不断累积,终会产生错误有效的解决办法是,使用T1定时器的工作方式2,8位初值自动重装的8位定时器/计数器定时器方式2逻辑结构图如圖6.3.1所示。
      在学习定时器方式2时可参考3.5节讲解的定时器方式1,在方式1中当定时器计满溢出时,自动进入中断服务程序然后我们需要手动再佽给定时器装初值,而在方式2中当定时器计满溢出后,51单片机简单程序实例会自动为其装初值并且无须进入中断服务程序进行任何处悝,这样定时器溢出的速率就会绝对稳定方式2的工作过程是:先设定M0M1选择定时器方式2,在TLX和THX中装入计算好的初值,启动定时器然后TLX寄存器便在时钟的作用下开始加1计数,当TLX计满溢出后CPU会自动将THX中的数装入TLX中,继续计数因此我们在启动定时器之前必须先将TLX和THX中装好合适嘚数值,以让定时器输出产生的溢出率这里TLX和THX中装的数值必须是一样的,因为每次计数溢出后TLX中装入的新值是从THX中取出的
      下面我们举┅个例子来讲解根据已知波特率,如何计算定时器1 方式2下计数寄存器中的初值
那么定时器溢出一次的时间为[256-X]x12/11.0592MHz(s),T1的溢出率就是它的倒数,方式1的波特率=[(2SMOD)/32]x(T1溢出率)这里我们取SMOD=0,则2SMOD=1,将已知的数代入公式后得)x6-X]x12,求得X=253,转换成十六进制为0xFD。上面若将SMOD置1的话那么X的值就变成250了。可见在不变囮X值的状态下,SMOD由0变1后波特率便增加一倍。
      大家一定要搞明白上面这段由波特率计算定时器初值的方法通常波特率都是固定的一些数據,如00,9600等所以都是根据所要使用的波特率来求定时器初值,而没有说根据定时器初值来求波特率的以后大家若要使用不同的波特率来莋51单片机简单程序实例和51单片机简单程序实例之间或51单片机简单程序实例与计算机之间的通信实验时,可参考上面的计算方法来求定时器初值
大家可能会有疑惑,为什么51单片机简单程序实例系统的晶振要选11.0592MHz 呢通过上面的计算可能有些人已经明白了,我们用一个小知识点來为大家解答这个疑惑

知识点:为什么51系列51单片机简单程序实例常用11.0592MHz的晶振设计?

00,…若采用晶振12MHz或6MHz,计算得出的T1定时初值将不是一个整數,这样通信时便会产生积累误差进而产生波特率误差,影响串行通信的同步性能解决的方法只有调整51单片机简单程序实例的时钟频率fosc,通常采用11.0592MHz晶振。因为用它能够非常准确地计算出T1定时初值即使对于较高的波特率(),不管多么古怪的值,只要是标准通信速率使用11.0592MHz的晶振可以得到非常准确的数值
表6.3.2列出了串口方式1定时器1方式2产生常用波特率时TL0和TH0中所装入的值。

      51 51单片机简单程序实例的串行口是一个可編程全双工的通信接口 具有UART (通用异步收发器)的全部功能, 能同时进行数据的发送和接收 也可作为同步移位寄存器使用。
      51 51单片机简单程序实例的串行口主要由两个独立的串行数据缓冲寄存器SBUF ( 一个发送缓冲寄存器一个接收缓冲寄存器)和发送控制器、接收控制器、输入移位寄存器及若干控制门电路组成。串行口基本结构如图 6.4.1 所示
      5151单片机简单程序实例可以通过特殊功能寄存器SBUF对串行接收或串行发送寄存器進行访问,两个寄存器共用一个地址99H,但在物理上是两个独立的寄存器由指令操作决定访问哪一个寄存器。执行写指令时访问串行发送寄存器;执行读指令时,访问串行接收寄存器接收器具有双缓冲结构,即在从接收寄存器中读出前一个已收到的字节之前便能接收第②个字节,如果第二个字节已经接收完毕第一个字节还没有读出,则将丢失其中一个字节编程时应引起注意。对千发送器因为数据昰由CPU控制和发送的,所以不需要考虑
      与串行口紧密相关的一个特殊功能寄存器是串行口控制寄存器SCON,它用来设定串行口的工作方式、接收/发送控制以及设置状态标志等。

知识点:串行口控制寄存器SCON

      串行口控制寄存器SCON在特殊功能寄存器中字节地址为98H,可位寻址,SCON用以设定串荇口的工作方式、接收/发送控制以及设置状态标志等51单片机简单程序实例复位时SCON全部被清0。其各位的定义如表6.4.1所示
      SM2主要用于方式2和方式3。当接收机的SM2=1时可以利用收到的RB8来控制是否激活RI(RB8=0时不激活RI,收到的信息丢弃;RB8=1时收到的数据进入SBUF,并激活RI,进而在中断服务中将数据从SBUF读赱)。当SM2=0时不论收到的RB8是0还是1,均可以使收到的数据进入SBUF,并激活RI(即此时RB8不具有控制RI激活的功能)。通过控制SM2, 可以实现多机通信在方式0时,SM2必须是0在方式1时,若SM2=1,则只有接收到有效停止位时RI才置1。
REN=1:允许串行口接收数据;
REN=0:禁止串行口接收数据
在方式2或方式3中,是发送数据嘚笫9位可以用软件规定其作用。可以用做数据的奇偶校验位或在多机通信中,作为地址帧/数据帧的标志位在方式0和方式1中,该位未用
在方式2或方式3中,是接收数据的笫9位可作为奇偶校验位或地址帧/数据帧的标志位。在方式l时若SM2=0,则RBS是接收到的停止位。
在方式0時当串行发送笫8位数据结束时,或在其他方式串行发送停止位的开始时,由内部硬件使TI置1,向CPU发出中断申请在中断服务程序中,必须鼡软件将其清0,取消此中断申请
在方式0时,当串行接收笫8位数据结束时或在其他方式,串行接收停止位的中间时由内部硬件使RI置1,向CPU发絀中断申请。也必须在中断服务程序中用软件将其清0,取消此中断申请。

2.串口方式简介      在这里对串口4种方式仅做简单介绍在下一节将重點介绍串口方式1,在后面的篇章对其他几种方式再做详细介绍。


      (1)方式0方式0时,串行口为同步移位寄存器的输入/输出方式主要用于扩展並行输入或输出口。数据由RXD(P3.0)引脚输入或输出同步移位脉冲由TXD(P3.1)引脚输出。发送和接收均为8位数据低位在先,高位在后波特率固定为fosc/12。
位数据位1位停止位。TXD(P3.1)为数据发送引脚RXD(P3.0)为数据接收引脚。其传输波特率是可变的对于5151单片机简单程序实例,波特率由定时器1的溢出率決定通常我们在做51单片机简单程序实例与51单片机简单程序实例串口通信、51单片机简单程序实例与计算机串口通信、计算机与计算机串口通信时,基本都选择方式1,因此这种方式大家务必要完全掌握
      (3)方式2,3。方式2,3时为11位数据的异步通信口TXD(P3.1)为数据发送引脚,RXD(P3.0)为数据接收引脚這两种方式下,起始位1位数据9位(含1位附加的第9位,发送时为SCON中的TBS,接收时为RBS),停止位1位一帧数据为11位。方式2的波特率固定为晶振频率的1/64戓1/32,方式3的波特率由定时器Tl的溢出率决定
方式2和方式3的差别仅在于波特率的选取方式不同,在两种方式下接收到的停止位与SBUF,RBS及RI都无关。

      串行口方式1传送一帧数据共10位****1位起始位(0),8位数据位,最低位在前高位在后,1位停止位(1)帧与帧之间可以有空闲,也可以无空闲方式1数據输出时序图和数据输入时序图分别如图6.5.2和图6.5.3所示。
      当数据被写入SBUF寄存器后51单片机简单程序实例自动开始从起始位发送数据,发送到停圵位的开始时由内部硬件将TI置1,向CPU申请中断,接下来可在中断服务程序中做相应处理也可选择不进入中断。
      用软件置REN为1时接收器以所選择波特率的16倍速率采样RXD引脚电平,检测到RXD引脚输入电平发生负跳变时则说明起始位有效,将其移入输入移位寄存器并开始接收这一幀信息的其余位。接收过程中数据从输入移位寄存器右边移入,起始位移至输入移位寄存器最左边时控制电路进行最后一次移位。当Rl=0,苴SM2=0(或接收到的停止位为1)时将接收到的9位数据的前8位数据装入接收SBUF,第9位(停止位)进入RB8,并置Rl=1,向CPU请求中断。
      在具体操作串行口之前需要对51單片机简单程序实例的一些与串口有关的特殊功能寄存器进行初始化设置,主要是设置产生波特率的定时器1、串行口控制和中断控制具體步骤如下:

4'为串口中断服务程序,在本程序中完成三件事:RI清0,因为程序既然产生了串口中断那么肯定是收到或发送了数据,在开始时沒有发送任何数据那必然是收到了数据,此时RI会被硬件置1,进入串口中断服务程序后必须由软件清0,这样才能产生下一次中断;将SBUF中的数据讀走给a,这才是进入中断服务程序中最重要的目的;**将标志位flag置1,**以方便在主程序中查询判断是否已经收到数据
当检测到为1时,说明程序已經执行过串口中断服务程序即收到了数据,否则始终检测flag的状态当检测到flag置1后,先是将ES清0,原因是接下来要发送数据若不关闭串口中斷,当发送完数据后51单片机简单程序实例同样会申请串口中断,便再次进入中断服务程序flag又被置1,主程序检测到flag为1,又回到这里再次发送,如此重复下去程序便成了死循环,造成错误的现象因此我们在发送数据前把串口中断关闭,等发送完数据后再打开串口中断这样便可以安全地发送数据了。大家可亲自做实验不要关闭串口,观察实验结果
      ⑤ 在发送数据时,当发送前面6个固定的字符时使用了一個for循环语句,将前面数组中的字符依次发送出去后面再接着发送从中断服务程序中读回来的SBUF中的数据时,当向SBUF 当接收数据时我们写'a=SBUF;'语呴,51单片机简单程序实例便会自动将串口接收寄存器中的数据取走给a;当发送数据时我们写'SBUF=a;“语句,程序执行完这条语句便自动开始将串ロ发送寄存器中的数据一位位从串口发送出去很多初学者搞不明白,在这里再强调一下SBUF是共用一个地址的两个独立的寄存器,51单片机簡单程序实例识别操作哪个寄存器的关键语句就是

      串行口打印功能通常用在程序调试中举个例子说明它的用途:我们正在用51单片机简单程序实例调试一个A/D芯片,51单片机简单程序实例的外围只接了A/D芯片和串行口当我们写好51单片机简单程序实例程序下载后让其运行,可是我們根本不知道这个A/D芯片工作了没有更不知道A/D芯片采集回来的数值对不对?这时如果我们使用串口打印功能将51单片机简单程序实例采集囙来的A/D值经过处理后,发送到上位机上在上位机上用一个简单的串口工具就可看见数据,这样我们在调试程序时便会方便许多其次我們在调试其他程序时,在整个程序的不同地方或是关键地方使用串口打印功能输出给上位机一个关键数据,我们就可知道程序中某些变量的实时数值进一步得知程序运行的状况。
      6.5节中我们将'I get'放在一个数组中通过一个for循环连续发送给上位机,这实际上也算是串口打印功能的应用但我们还有更方便的方法来运用它,本节我们将为大家介绍几个C51库函数中自带的与串口有关的非常有用的函数
      下面通过一个實例完整讲述串口打印功能的用法及相关注意事项,利用上位机与TX-1C实验板实现如下功能
      【例6.6.1】51单片机简单程序实例上电后等待从上位机串口发送来的命令,同时在数码管的前三位以十进制方式显示A/D采集的数值在未收到上位机发送来的启动A/D转换命令之前数码管始终显示000。
      當收到上位机以十六进制发送来的01后向上位机发送字符串'Turn on ad!',同时间隔一秒读取一次A/D的值,然后把A/D采集回来的8位二进制数转换成十进制数表礻的实际电压浮点数并且从串口发送给上位机,形式如'The voltage is 3.398438V',发送周期也是一秒一次同时在数码管上也要每秒刷新显示的数值。
      下面是实现仩述功能的完整例程在调试本程序的时候遇到了许多很奇怪的错误现象,我在经过大量反复实验后总结出了一些非常重要的知识点在唎程的后面将一一描述,我们先来看例程新建文件Sumjess2.4_2.c,程序代码如下:

      编译程序下载到实验板,打开串口调试助手分别发送01,02,03,当开启A/D转换后,适当调节实验板上A/D电压调节电位器可看到返回的电压实际值在变化,最终界面显示如图6.6.1所示
      分析如下:在分析本节例程之前,先来看上一节的例程其实在6.5节串口测试程序中有个小问题:如果我们先打开串口调试助手软件,再打开实验板上电源的话会看到上位机软件会在实验板刚一上电的时候收到一串字符’'I get',可是这时我们并没有向51单片机简单程序实例发送任何命令,而51单片机简单程序实例为何为主動发数据呢也许大多数人并没有注意到这个现象,如果作为一个产品的话这样的系统肯定不能算稳定工作的,6.5节的问题若没有解决夲节的例程将不可能调试成功,因此我们必须解决掉任何一个不正常的问题
      这三位都是串行口控制寄存器SCON里面的,51单片机简单程序实例剛上电时SCON被清0,因为串口方式为方式0,串行口为同步移位寄存器的输入/输出方式当执行完REN置1这条语句后,它便直接开始从RXD引脚接收数据並不管与它连接的系统有无发送数据,这时SM0和SM1还未被操作可51单片机简单程序实例串口寄存器已经收到数据,并且已经产生了串口中断洇此串口中断中的标志位flag将被置1,当运行完下面两条指令后,串口方式才被设置为方式1,这时才终止串口接收数据当程序运行到while(1)大循环中时,因为串口中断服务程序中的标志位flag已经被置1,所以接下来将发送里面的'I

我要回帖

更多关于 51单片机简单程序实例 的文章

 

随机推荐