文档库 最新最全的文档下载
当前位置:文档库 › (完整版)基于51单片机的无线数据收发系统设计(带电路图和代码)

(完整版)基于51单片机的无线数据收发系统设计(带电路图和代码)

(完整版)基于51单片机的无线数据收发系统设计(带电路图和代码)
(完整版)基于51单片机的无线数据收发系统设计(带电路图和代码)

1 引言

伴随着短距离、低功率无线数据传输技术的成熟,无线数据传输被越来越多地应用到新的领域。与有线通信方式相比,无线通信以其不需铺设明线,使用便捷等一系列优点,在现代通信领域占重要地位。

但以往的无线产品存在范围和方向上的局限。例如,一些无线产品在使用时,无法将信息反馈给控制者;还有一些无线产品不能很好地显示参数或状态信息,如果能在系统中增加一块小型液晶显示电路,产品不仅能向用户显示其状态或状态的改变,而且可以大大降低成本。正如人们所发现的,只要建立双向无线通信-双工通信并且选择成本低的收发芯片,就会出现许多新应用。

本次设计主要是利用无线收发电路,加上单片机控制与液晶显示制成一套完整的数据收发系统。考虑到目前市场上的一些需求,设计的主要要求是方案成本低,体积小,低功耗,集成度高,尽量无需调外部元件,传输时间短,接口简单。nRF401是国外最新推出的单片无线收发一体芯片,它在一个20脚的芯片中包括了高频发射、高频接收、PLL合成、FSK调制、多频道切换等功能,并且外围元件少,便于设计生产,功耗极低,集成度高,是目前集成度较高的无线数传产品,它为低速率低成本的无线技术提出了解决方案。

2 无线数据收发系统

2.1 系统组成

无线数据传输系统有点对点,点对多点和多点对多点三种。本系统由于实际应用的需要,接收器和数据终端之间的数据传输通过nRF401进行,构成点对点无线数据传输系统。整个系统中,两数据终端之间的无线通信采用433MHz的频段作为载波频率,收发通过串口通信。

无线数据收发系统可以分为无线收发控制电路、单片机控制电路、显示电路和按键电路四部分组成,系统原理如图2-1所示:

图2-1 无线数据收发系统原理图

2.2 实现过程

当我们需要发送数据时,使用按键来输入所需发送的信息。按键与单片机AT89S52的P3.2-P3.5口相接,单片机的 P1.0口控制信息的发送与接收,并且TXD 端与收发器输入端相连,通过TXD将数据传入收发器,收发器接收到数据后,通过FSK调制,将信号发送出去;接收端的收发器通过解调,将载波信号转换为数字信号,完成信息传输过程;收发器的输出端通过RXD端将数字信号输入到单片机;单片机将数据传送到显示器,这样就完成了一次数据发送与接收并显示的过程。

本系统采用的是半双工传送方式。所谓半双工就是通信的双方均具有发送和接收信息的能力,信道也具有双向传输性能,但是,通信的任何一方都不能同时既发送信息又接收信息,即在指定的时刻,只能沿某一个方向传送信息。所以上述实现过程只介绍了由一方传送到另一方的过程,而相反方向与其原理相同。无线数据收发系统的电路图见附录3。

3 收发部分原理与设计

nRF401是一种基于短程无线通信技术的芯片。收发部分采用nRF401芯片,其引脚DIN与单片机的TXD相连,需要发射的数字信号通过DIN输入;引脚DOUT与单片机的RXD相连,解调出来的信号经过DOUT输出进入单片机。

3.1 无线收发芯片nRF401介绍[1]

3.1.1 主要引脚功能

图3-1 nRF401引脚图

(1) 9脚及10脚分别是DIN输入数字信号和DOUT输出数字信号均为标准的逻辑电平信号,需要发射的数字信号通过DIN输入,解调出来的信号经过DOUT输出。

(2) 12脚为通道选择,FREQ =“0”为通道#1(433.92MHz),FREQ =“1”为通道#2(434.33MHz)。

(3) 18脚为电源开关,PWR_UP =“1”为工作模式,PWR_UP =“0”为待机模式。

(4) 19脚TXEN:高电平允许发送数据,低电平允许接收数据。

(5) ANT1、ANT2:天线接入端。

3.1.2 内部结构与工作原理

nRF401无线收发芯片的结构框图如图3-2所示:芯片内包含有发射功率放大器(PA)、低噪声接收放大器(LNA),晶体振荡器(OSC),锁相环(PLL),压控振荡器(VCO),混频器(MIXER)等电路[2]。

图3-2 内部结构方框图

在接收模式中,RF输入信号被低噪声放大器(LNA)放大,经由混频器(MIXER)变换,这个被变换的信号在送入解调器(DEM)之前被放大和滤波,经解调器解调,解调后的数字信号在DOUT端输出。在发射模式中,压控振荡器(VCO)的输出信号是直接送入到功率放大器(PA),DIN端输入的数字信号被频移键控后馈送到功率放大器输出。由于采用了晶体振荡器和PLL合成技术,频率稳定性极好。

3.1.3 特点

nRF401是一个单片RF收发芯片,工作频率为国际通用的数传频率433MHz;具有FSK调制和解调能力,抗干扰能力强,特别适合工业控制应用;采用PLL频率合成技术,频率稳定性好;最大发射功率达+10dBm,数据速率可达20kb/s;具有2个信号通道,适合需要多信道工作的特殊场合;工作电压在+3~5V之间,最低工作电压为2.7V;它还提供进一步降低电流消耗的待机模式,接收待机状态仅为8μA;仅需外接一个晶体和几个阻容、电感元件,即可构成一个完整的射频收发器。nRF401接收机使用频移键控(FSK)调制方式,改善了噪声环境下的系统性能。与幅移键控(ASK)方式相比,这种方式的通信范围更广,特别是在附近有类似设备工作的场合。

3.2 FSK调制[3]

本系统中的nRF401是具备FSK调制的无线收发芯片。所谓FSK调制,就是频移键控,又称数字频率调制,是数字通信调制方式的一种,由于其方法简单、易于实现、抗噪声和抗衰落性能较强以及解调不须恢复本地载波等优点而在现代数字通信系统的低、中速数据传输中得到广泛得应用。

3.2.1 产生原理

频率键控法就是利用矩形脉冲序列控制的开关电路,对于两个不同的独立频率源进行选通。它有两个独立的振荡器,数字基带信号控制开关,选择不同频率的高频振荡信号实现FSK调制。图3-3为频率键控法原理框图。

1

01

0信号

FS K 21

f 2

f 1

f 2

f 调频器

模拟)

(FSK 2t e )

(t s 振荡器

(二进信息NRZ 倒相

振荡器

相加

2f 1

f )

(b )

(a )

(FSK 2t e

图3-3 频率键控法原理框图

以二进制数字频率调制为例,当数字信号为“1”时,正脉冲是控制门 1 接通,门 2 断开,输出频率 f1 ;数字信号为“0”时,门 1 断开,门 2 接通,输出频率 f2 。如果产生 f1,f2 的两个震荡器是互相独立的,则输出 2FSK 信号的相位是不连续的。震荡器的频率 f1,f2 可以直接是所需的载频,也可以是低频范围通过混频、倍频方式搬移到载频范围。 3.2.2 FSK 信号波形图

已调信号的时域表达式为

()??

?="0"cos "

1"cos 212t A t A t e FSK ωω

图3-4 2FSK 信号的波形

3.3 时序参数

nRF401有3种工作模式:接收模式(RX )、发射模式(TX )和等待模式(Standby )。工作模式可由2个引脚设定,分别是TXEN 和PWR_UP 。因此通过单片机控制nRF401的工作模式,使其在接收、发射、等待任一种状态之间转换。 (1) TX ?RX 之间的切换

当从RX →TX 模式时,数据输入脚(DIN )必须保持为高至少1ms 才能发送数据,时序如图3-5(a )。当从TX →RX 模式时,数据输出脚(DOUT )至少3ms 以后有数据输出,如图3-5(b )。

(3.1)

图3-5 TX 与RX 转换的时序图

(2) Standby →RX 、Standby →TX 的切换

从待机模式到接收模式,当PWR_UP 输入设成1时,经过t SR 时间后,DOUT 脚输出数据才有效。对nRF401来说,t SR 最长的时间是3ms ,如图(a )。

从待机模式到发射模式,所需稳定的最大时间是t ST ,如(b )。

图3-6 Standby →RX 、Standby →TX 的时序图

(3) Power Up →TX 、Power Up →RX 的切换

从上电到发射模式过程中,为了避免开机时产生干扰和辐射,在上电过程中TXEN 的输入脚必须保持为低,以便于频率合成器进入稳定工作状态。当由上电进入发射模式时,TXEN 必须保持1ms 以后才可以往DIN 发送数据。

从上电到接收模式过程中,芯片将不会接收数据,DOUT 也不会有数据输出,直到电压稳定达到2.7V 以上,并且至少保持5ms 。

0 Std. by to TX

Std. by to RX VDD VDD PWR-UP PWR-UP

T XEN

DOUT

DIN

ms ms

2 4 2 0 4

2 0 DOUT

TXEN PWR-UP VDD TX to RX ms 4 2 0 DIN

TXEN PWR-UP VDD RX to TX RX to TX 4

(a)

ms

(b)

(a)

(b)

TXEN

图3-7 Power Up →TX 、Power Up →RX 时序图

3.4 应用电路设计

3.4.1 电路组成

nRF401无线收发芯片的应用电路[5],如图3-8所示:

22pF

C122pF

C2820pF

C315nF

C4 2.2uF

C522nF

C61nF

C7100pF

C8100pF C9 3.3pF

C105.6pF

C114M

X1

1M R14.7K

R222K

R3DN DOUT

TXEN PWR_UP

FREQ

+3V

XC11VDD 2VCC 3FILT14VCO15VCO26VSS 7VDD 8DIN 9DOUT 10

RF_PWR

11

FREQ 12VDD 13VSS 14ANT215ANT116VSS 17PWR_UP

18TXEN 19XC220nRF401

U1JQ4

*

图3-8 nRF401的433Mhz 应用电路 (1) 输入输出

当nRF401是接收模式时,ANT1和ANT2引脚端提供射频输入到低噪声放大器(LNA );当nRF401为发射模式时,从功率放大器提供射频输出到天线。 (2) PLL 环路滤波器

PLL 环路滤波器,是一个单端二阶滤波器,滤波器元件参数值:C3=820pF ,C4=15nF ,R2=4.7k Ω (3) VCO 电感

芯片的VCO 电路需要外接一个VCO 电感,这个电感是非常关键的,需要一个高质量的片式电感,Q 值大于45,最大误差±2%。

VDD=0 to RX

VDD=0 to TX

VDD PWR-UP

T XEN

DOUT

(b)

ms

6

4 2

0 ms 4

2 0 (a)

DIN

T XEN PWR-UP

VDD

(4) 晶振电路

晶体振荡器需要外接晶振,晶振的特性要求是:并联谐振频率f=4MHz ,并联等效电容C 0<5pF ,晶振等效串联电阻R ESR <150Ω,全部负载电容,包括印制板电容C L <14pF 。负载电容C L 如下式所示:

(3.2)

式中222PCB C C C +='和111PCB C C C +=', 1PCB C 和2PCB C 是电路板的寄生电容。

(5) RF 输出功率

连接在RF_PWR 端和VSS 之间的电阻R3可以设置输出功率,最大发射功率可以调整到+10dBm 。

3.4.2 印刷电路板设计

(1) nRF401电路的PCB 板设计过程[9]

利用 Protel DXP 软件设计制作nRF401无线收发电路部分,按本论文中的图3-8所示。

① 在Protel DXP 软件中按照设计电路制作连接电路,并封装电路。制作PCB 板,设置布局范围,加载网络表和元件库,自动布局并做好调整电路,自动布线过程,最后调整整个电路板,将其实现 3D 功能。 ② 查看模拟的 PCB 板后,实现制作[10]。

首先生成报表和网络表,设置电路图中已有的仿真模型的器件。在Protel DXP 软件中运行电路仿真。并观察记录有关电路仿真过程中的波形图。

再进行对电路板 1:1的打印。

最后,将加工成形的 PCB 电路板打孔,并焊接元器件,实现nRF401应用电路,检测并调试其电路使之正常工作。nRF401应用电路印刷电路板,如下图所示:

图3-9 应用电路印制电路板图

2121'

+''

?'=C C C C C L

(2) PCB板设计要求

印刷电路板(PCB)的设计直接关系到射频性能,为了获得较好的RF性能,PCB 设计至少需要两层板来实现,PCB分成射频电路和控制电路两部分布置。nRF401采用PCB天线,在天线的下面没有接地层。射频部分的电源与数字电路部分的电源分离。为了减少分布参数的影响,在PCB应该避免长的电源走线,所有元件地线,VDD连接线必须离nRF401尽可能的近。nRF401的电源必须经过很好的滤波,并且与数字电路供电分离,在离电源脚VDD尽可能近的地方用高性能的电容去耦。PCB板顶层和底层最好敷铜接地,把这两层的敷铜用较多的过孔紧密相连,再将VSS脚连接到敷铜面。所有开关信号和控制信号都不能经过PLL环路滤波器元件和VCO电感附近。

4 控制部分原理

控制电路主要组成部分为单片机AT89S52,通过AT89S52与nRF401进行串行通信,并用其控制nRF401的TXEN端,来调整收发状态。AT89S52还控制液晶屏的显示和按键等一些工作。

4.1 AT89S52功能介绍

AT89S52是一个低功耗高性能单片机,40个引脚,32个外部双向输入/输出(I/O)端口,片内含8k bytes的可重复编程的Flash存储器和256 bytes的随机存取数据存储器(RAM),3个16位可编程定时计数器,1个全双工串行通信口,器件采用ATMEL 公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统。AT89S52可以按照常规方法进行编程,也可以在线编程。其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成本。

4.1.1 内部结构

AT89S52单片机包含中央处理器、程序存储器(ROM)、数据存储器(RAM)、定时器/计数器、并行I/O口、串行I/O口和中断系统等几大单元以及数据总线、地址总线和控制总线三大总线构成。图4-1为单片机内部结构框图[13]。

(1) 中央处理器

中央处理器(CPU)是整个单片机的核心部件,能处理8位二进制数据或代码,CPU 负责控制、指挥和调度整个单元系统协调的工作,完成运算和控制输入输出功能等操作。

(2) 程序存储器

AT89S52共有8KB个E2PROM,用于存放用户程序,原始数据或表格。

(3) 数据存储器(RAM)

AT89S52内部有128个8位用户数据存储单元和128个专用寄存器单元,它们是统一编址的,专用寄存器只能用于存放控制指令数据,用户只能访问,而不能用于存放用户数据,所以,用户能使用的RAM只有128个,可存放读写的数据,运算的中间结果或用户定义的字型表。

P~P P~P

图4-1内部结构框图

(4) 并行输入输出口

AT89S52共有4组8位I/O口(P0、 P1、P2或P3),用于对外部数据的传输。

(5) 串行输入输出口

AT89S52内置一个全双工串行通信口,用于与其它设备间的串行数据传送,该串行口既可以用作异步通信收发器,也可以当同步移位器使用。

(6) 定时/计数器

AT89S52有三个16位的可编程定时/计数器,以实现定时或计数功能,并以其定时或计数结果对单片机进行控制。

(7) 中断系统

AT89S52具备较完善的中断功能,有两个外中断、三个定时/计数器中断和一个串行中断,可满足不同的控制要求,并具有两级的优先级别选择。

4.1.2 引脚功能

图4-2 AT89S52芯片引脚图

(1) 电源和晶振

VCC:供电电压。

GND:接地。

XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。

XTAL2:来自反向振荡器的输出。

(2) I/O口

① P0口

P0口的字节地址为80H,位地址为80H~87H。P0口既可以作为通用I/O口使用,也可以作为单片机系统的地址/数据线使用。当作为输出口使用时,由于输出电路是漏极开路,必须外接上拉电阻才能有高电平输出。

② P1口

P1口的字节地址为90H,位地址为90H~97H。P1口只能作为通用I/O口使用。当作为输出口使用时,已能对外提供推拉电流负载,外电路无需再接上拉电阻;当作为输入口使用时,应先向其锁存器写入“1”,使输出驱动电路的FET截止。

③ P2口

P2口的字节地址为0A0H,位地址为0A0H~0A7H。P2口用于为系统提供高位地址,但只作为地址线使用而不作为数据线使用。此外,P2口也可作为通用I/O口使用。

④ P3口

P3口的字节地址为0B0H,位地址为0B0H~0B7H。P3口可以作为通用I/O口使用,但在实际应用中它的第二功能信号更为重要。

P3口引脚的第二功能,如下所示:

P3.0 RXD(串行输入口)

P3.1 TXD(串行输出口)

P3.2 /INT0(外部中断0)

P3.3 /INT1(外部中断1)

P3.4 T0(计时器0外部输入)

P3.5 T1(计时器1外部输入)

P3.6 /WR(外部数据存储器写选通)

P3.7 /RD(外部数据存储器读选通)

(3) 4根控制线

① RST:复位信号。保持RST脚两个机器周期以上的高电平,就可以完成CPU系统复位操作,使系统的一些单元内容回到规定值。

② /PSEN:外部程序存储器读选通信号。在读外部ROM时,/PSEN有效(低电平),以实现外部ROM单元的读操作。

③/EA/VPP:访问程序存储器控制信号。当/EA信号为低电平时,对ROM的读操作限定在外部程序存储器;而当/EA为高电平时,则对ROM的读操作是从内部程序存储器开始,并可延续至外部程序存储器。

④ALE/PROG:地址锁存控制信号。在系统扩展时,ALE用于控制P0口输出的低8位地址送入锁存器锁存起来,以实现低位地址和数据的分时传送。此外由于ALE是以六分之一晶振频率的固定频率输出的正脉冲,因此也可作为外部时钟或外部定时脉冲使用。

4.2 串口通信

通信主要有两种方式:并行通信和串行通信。并行通信是在传送数据过程中每个字节的各位同时进行传送的通信方式,而串行通信[14]是指每个字节的各位分别进行传送的通信方式。

4.2.1 串口通信方式

AT89S52串行口可设置四种工作方式,可有8位、10位和11位帧格式。本系统中,AT89S52采用串行口工作于方式1,即每帧10位的异步通信格式:1位起始位,8位数据位(低位在前),1位停止位。当SM0=0,SM1=1时,串行口选择方式1。其帧格式为:

图4-3 帧格式图

4.2.2 串行通信控制寄存器

(1) 串行控制寄存器(SCON)

SCON的地址为98H,用于选择串行口的工作方式和指示串行口的工作状态。

各位含义如下:

① SM0、SM1:串行口工作方式选择位。 ② SM2:多机通信选择位。

③ REN :串行口允许接收位。‘1’时允许接收,‘0’时禁止接收。

④ TI : 串行口发送中断标志位。在方式1中,于发送停止位之前,由硬件置位。因此TI=1,表示帧发送结束。

⑤ RI : 串行口接收中断标志位。在方式1中,当接收到停止位时,该位由硬件置位。RI=1,表示帧接收结束。 (2) 串行数据缓冲器(SBUF)

串行数据缓冲器SBUF 的地址为99 H ,用来存放需发送和接收的数据,它由两个独立的寄存器组成,一个是发送缓冲器,另一个是接收缓冲器,它们占用同一地址(99H )。当执行写SBUF 指令时,数据写入到串行口发送缓冲器中,读SBUF 就是读串行口接收缓冲器。

(3) 电源控制寄存器(PCON)

PCON 的地址为87H ,该寄存器的最高位(SMOD )是串行口波特率的倍增位,当SMOD=1时,串行口波特率加倍。系统复位时,SMOD=0。 (4) 中断允许寄存器(IE )

在IE 中,ES 位为串行中断允许控制位。ES=0时禁止串行中断,ES=1时允许串行中断。

4.2.3 数据发送与接收 (1) 数据发送

在不发送数据时,TXD 端保持高电平。当执行写SBUF 的指令时,便启动一次发送过程;发送数据时,先发送一个起始位,该位通知接收端开始接收,也使发送和接收过程同步。接下来发送8位数据,先发送低位,最后发送的是高电平的停止位。 (2) 数据接收

REN=1,CPU 允许串行口接收数据,接收数据开始于检测到RXD (P3.0)端发生一个“1”到“0”的跳变。先接收起始位,然后依次将采样RXD 端并将数据移入移位寄存器中。

若满足条件RI=0且SM2=0或接收到停止位,则将前8位数据送入SBUF 并置位RI ;如果上述条件不满足,则数据丢失。 (3) 波特率的设定

串口方式1的波特率是可变的,由定时器T1的溢出率决定:

其中,SMOD 为PCON 寄存器最高位的值。

溢出率

定时器波特率1322T SMOD

?

=

溢出率为溢出周期的倒数,假定计数初值为X ,则计数溢出周期为

其中,fosc 为晶振频率。 则波特率计算公式为:

由波特率算出计数初值,以便进行定时器的初始化。初值X 确定如下:

5 显示部分

HY-12864

[12]是使用HD61202作为列驱动器,同时使用HD61203作为行驱动器的液晶模块,共有两片HD61202和一片HD61203。由于HD61203不与MPU 发生联系,只要提供电源就能产生行驱动信号和各种同步信号,比较简单,所以不做介绍。

HD61202是一种带有列驱动输出的液晶显示控制器,它可与行驱动器HD61203配合使用,组成液晶显示驱动控制系统。

5.1 HD61202功能简介

5.1.1 特点

(1) 内藏64×64=4096位显示RAM ,RAM 中每位数据对应LCD 屏上一个点的亮、暗状态;

(2) HD61202是列驱动器,具有64路列驱动输出; (3) HD61202的占空比为1/32--1/64。 5.1.2 引脚功能

CS1,CS2:芯片片选端,CS1和CS2低电平选通;

E :读写使能信号,在E 下降沿,数据被锁存(写)入HD61202;在E 高电平期间,数据被读出;

R/W: 读写选择信号,R/W=1为读选通,R/W=0为写选通;

RS :数据、指令选择信号,RS=1为数据操作,RS=0为写指令或读状态; DB0-DB7:数据总线;

RST :复位信号,复位信号有效时,关闭液晶显示,使显示起始行为0,RST 可跟MPU 相连,由MPU 控制;也可直接接VDD ,使之不起作用。

)256(12

X fosc -?=溢出周期()X fosc SMOD -??=25612322波特率波特率??-

=3842256SMOD

fosc X

5.2 HD61202的指令系统

(1) 显示开/关指令

当DBO=1时,LCD显示RAM中的内容;DBO=0时,关闭显示。

该指令设置了对应液晶屏最上一行的显示RAM的行号,有规律的改变显示起始行,可以使LCD实现显示滚屏的效果。

显示RAM共64行,分8页,每页8行。

(4) 地址(Y Address)设置指令

设置了页地址和列地址,就唯一确定了显示RAM中的一个单元,这样MPU就可以用读、写指令读出该单元中的内容或向该单元写进一个字节数据。

该指令用来查询HD61202的状态,各参量含义如下:

BUSY: 1-内部在工作 0-正常状态

ON/OFF:1-显示关闭 0-显示打开

REST: 1-复位状态 0-正常状态

在BUSY和REST状态时,除读状态指令外,其它指令均不对HD61202产生作用。

在对HD61202操作之前要查询BUSY状态,以确定是否可以对HD61202进行操作。

(7) 读数据指令

读、写数据指令每执行完一次读、写操作,列地址就自动增1,必须注意进行读操作之前,必须有一次空读操作,紧接着再读才会读出所要读的单元中的数据。5.3 显示电路

在AT89S52的P3.6和P3.7口接入四-二输入与非门芯片74LS00来控制显示器的读写使能信号端;显示器的8根数据总线接在AT89S52的P0口,实现数据传输;在显示器的V0口接一电位器,由于液晶的对比度会随着温度的变化而相应变化,所以加电位器可以调节液晶的对比度。

图5-1 收发系统显示电路

6 软件设计

无线数据传输主要由无线数据收发器、AT89S52单片机、显示器和按键组成,收发器与AT89S52间用串行口通信。整个系统的各个部分都是服务于无线数据传输这个目的。所以,在整个系统的软件设计中,无线数据的传输是最为重要的。这里使用汇编语言编写单片机控制程序。控制系统CPU采用AT89S52单片机,nRF401芯片发射/接收模式由程序控制,当有控制发送的按键按下时,nRF401为发射状态,其余的时候nRF401始终处于接收状态。DOUT、DIN分别和单片机的RXD和TXD端相连,作为发射和接收时的数据传输。TXEN和P1.0端相连,由单片机的P1.0端对其发射还是接收进行程序控制。

6.1 主程序流程图

当单片机上电开始执行之后,对液晶和单片机寄存器进行初始化,同时设置串口控制字及波特率,接着进入键盘扫描程序和接收程序。若有某个按键按下,则执行相应的键盘子程序;若单片机判断接收到数据,则开始进行CRC校验[14],如果数据正确就通过液晶显示传送的信息。主程序流程图见图6-1。

图6-1 主程序流程图

6.2 液晶显示子程序流程图

液晶显示模块HY-12864内有一个忙标志位ACC.7,它反映了控制器HD61202内部运行时序状态。当ACC.7=1时,表示内部操作正在运行,不能接受外部数据;当ACC.7=0时,表示已准备好接收,可以随时接收单片机发来的数据和命令,这是HY-12864向单片机发出的唯一联络信号。液晶显示子程序流程图见图6-2。

图6-2 液晶显示子程序流程图

6.3 数据收发子程序流程图

单片机AT89S52控制nRF401的收发状态、完成编解码等工作。nRF401芯片“PWR-UP”端接高电平,“FREQ”端接低电平,分别表示系统在上电后始终处于“正常工作模式”和“工作频道为通道1”。单片机AT89S52控制nRF401,使其一直为接收状态。当按键4按下时,AT89S52接收到输入的低电平信号,从脚送出高电平至P1.0脚,使nRF401进入发射状态。数据收发子程序流程图见图6-3。

图6-3 数据收发子程序流程图

6.4 键盘子程序流程图

下图为键盘子程序流程图,此流程图的含义是:当有按键按下时,程序开始进行判断是哪个按键按下,判断完毕后则转向相应的键处理子程序,进行字符的输入或命令的处理,并通过按键4把要发送的数据进行CRC校验编码,再把编码后的数据发送出去。

图6-4 键盘子程序流程图

7 测试结果及分析

7.1 硬件电路测试

本设计中将控制模块和无线射频模式分开设计,控制模块通过一只单排7脚的接口控制射频模块,测试的步骤如下:

(1) 将控制模块和无线射频模块焊好,检查确认无虚焊、粘焊;

(2) 先对控制模块上电进行测试,主要是测试控制模块的串口能否收发数据,测试方法是将控制模块的串口与PC机的串口通过RS232标准相连接,并将串口的程序写到AT89S52上,然后用串口测试软件测试,如果串口能收发数据,便可开始对无线射频模块进行测试;

(3) 将无线收发模块与控制模块连接起来,上电进行测试,按照程序,上电时处于接收状态,看是否与程序吻合;

(4) 确认射频模块上电处于接收状态后,可测试nRF401的第4管脚是否为1.1V左右,如果是,则说明VCO电感设计合理,否则要重新设计PCB板,此外,nRF401在没有数据接收时,仍会自动从DOUT发送随机数据,使用万用表进行测试时,该引脚电压应为2.5V左右。

7.2 系统测试

7.2.1 测试方法

(1) 首先让电路正常工作,把接收器放在一定的位置,将发射器从远处逐渐靠近接收器,可测到传送的最远距离。

(2) 在距离接收器一定的距离时,间隔一段时间就发送数据信息,可测出接收器的接收灵敏度。

(3) 比较发射器和接收器的数据显示是否相同,以测试传输数据的正确性。

7.2.2 功能测试及分析

由于无线通信环境的不确定性,各种环境下的传输效果是不尽相同的,路径损耗、建筑物影响、人体影响、外界干扰、多径现象和周围环境的吸收等都会对传输的距离产生一定的影响,只能在一个给定的条件下进行测试和评估。因此,分别选择了不同的试验场地来进行实验。

(1) 当建筑物很多的时候,数传模块两端均离地面 1.5m(2.0m)高时,能够达到的最佳通信距离为5~10m;接收灵敏度为2~3秒;当发送端发送MESSAGE时,接收端能准确显示MESSAGE这段英文字符。

(2) 在空旷场地,数传模块两端均离地面1.5m高时,最远的通信距离能够达到50m;接收灵敏度为3~5秒;当发送端发送字母A时,接收端能准确显示。

但测试中的通信距离与数据手册上的说明相差较大,原因可能源于调谐天线。在实验中发现,当有人员走动或其它信号出现的时候,通信的距离会变得不稳定,这是由于天线是一个辐射器件,任何环境的改变都会影响天线的性能。

测试中还发现,在现场即使没有任何发送器,在nRF401的DOUT引脚上也会观察到微小的连续数字“噪声”。后来通过研究发现,当接收器打开时,环境中的任何信号(数据或噪声)都会被天线捕捉到并被解调。这就是所看到的系统中没有工作的发送器却存在“噪声”的原因。

通过对系统数据传输能力的测试,该系统发送和接收数据正确、可靠,各元件工作正常。在硬件连接正确的基础上,利用nRF401进行串行数据接收及发送,收到了较好效果。

西南科技大学单片机原理实实验四及代码

2.1 实验四中断实验 一、实验目的 加深对MCS-51单片机中断系统基础知识的理解。 二、实验设备 Keil C单片机程序开发软件。 Proteus仿真软件 DP51-PROC单片机综合实验仪。 三、实验内容和步骤 内容: 利用外部中断输入引脚(以中断方式)控制步进电机的转动。要求:每产生1次中断,步进电机只能步进1步。 实验程序: 使用INT0的中断服务程序控制步进电机正向步进;使用INT1中断服务程序控制步进电机反向步进。 设计思路: ①主程序在完成对INT0和INT1的设置后,可进入死循环(等待中断请求)。 ②为便于实验观察和操作,设INT0和INT1中断触发方式为边沿。 ③步进电机的转动控制由外部中断的服务程序来实现。 ④当前步进电机的相位通电状态信息可以使用片内RAM中的一个字节单元来存储。 设计参考: ①主程序需要设置的中断控制位如下: IT0和IT1 外部中断触发方式控制 0=电平 1=边沿(下降沿) EX0和EX1 外部中断允许控制0=屏蔽 1=允许 PX0和PX1 中断优先级级别控制0=低级 1=高级 在同级别(PX0=PX1)时INT0的优先级高于INT1 EA 中断允许总控制0=屏蔽 1=允 许 ②外部中断服务程序的入口地址: 0003H 外部中断0 0013H 外部中断1 预习: 1)编写好实验程序。 2)根据编写的程序和实验步骤的要求制定调试仿真的操作方案。

实验单元电路: 1) 步进电机驱动电路。 步进电机共有4相,当以A →B →C →D →A →B …的顺序依次通电时,电机就会正转,若按相反的顺序依次通电,电机就会反转。每顺序切换一相(1步),电机旋转18°,切换的频率决定电机的转速(切换的频率不能超过电机的最大响应频率)。根据图 2.4中的电路,当BA (插孔)输入为高时,对应的A 相通电。 2) SW 电路 开关SW X 拨在下方时,输出端SWX 输出低电平,开关SW X 拨在上方时,输出端SWX 输出高电平。其中SW1和SW3具备消除抖动电路,这样,SW1或SW3每上下拨动一次,输出端产生单一的正脉冲(上升沿在前,下降沿在后)。 3) LED 和KEY 电路 步骤: 1) 在S : \ STUDY \ Keil 文件夹中新建Ex04文件夹(该文件夹用于保存本次实验的所 有内容),通过网上邻居将服务器上本次实验共享文件夹下的所有文件拷贝到S : \ STUDY \ Keil \ Ex04文件夹中。 2) 在Keil C 中创建一个新工程,新工程保存为S : \ STUDY \ Keil \ Ex04\Ex04.uv2,然 后选择单片机型号为Generic 中的8051。 图2.5 单脉冲电路原理图 +5V +5V 图2.4 步进电机驱动电路原理图 LED1 LED8 +5V 8 图2.6 LED 和KEY 电路 +5V 8

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.wendangku.net/doc/8b18160700.html,可以找到 软件界面如上图,我们先要设置一下串口通讯的参数,将波特率调整为4800,勾选十六进制显示。串口选择为COM1,当然将网站提供的51单片机实验板的串口也要和电脑的COM1连接,将烧写有以下程序的单片机插入单片机实验板的万能插座中,并接通51单片机实验板的电源。

51单片机实例程100讲全集

目录 目录 (1) 函数的使用和熟悉 (4) 实例3:用单片机控制第一个灯亮 (4) 实例4:用单片机控制一个灯闪烁:认识单片机的工作频率 (4) 实例5:将P1口状态分别送入P0、P2、P3口:认识I/O口的引脚功能 (5) 实例6:使用P3口流水点亮8位LED (5) 实例7:通过对P3口地址的操作流水点亮8位LED (6) 实例8:用不同数据类型控制灯闪烁时间 (7) 实例9:用P0口、P1 口分别显示加法和减法运算结果 (8) 实例10:用P0、P1口显示乘法运算结果 (9) 实例11:用P1、P0口显示除法运算结果 (9) 实例12:用自增运算控制P0口8位LED流水花样 (10) 实例13:用P0口显示逻辑"与"运算结果 (10) 实例14:用P0口显示条件运算结果 (11) 实例15:用P0口显示按位"异或"运算结果 (11) 实例16:用P0显示左移运算结果 (11) 实例17:"万能逻辑电路"实验 (11) 实例18:用右移运算流水点亮P1口8位LED (12) 实例19:用if语句控制P0口8位LED的流水方向 (13) 实例20:用swtich语句的控制P0口8位LED的点亮状态 (13) 实例21:用for语句控制蜂鸣器鸣笛次数 (14) 实例22:用while语句控制LED (15) 实例23:用do-while语句控制P0口8位LED流水点亮 (16) 实例24:用字符型数组控制P0口8位LED流水点亮 (17) 实例25:用P0口显示字符串常量 (18) 实例26:用P0 口显示指针运算结果 (19) 实例27:用指针数组控制P0口8位LED流水点亮 (19) 实例28:用数组的指针控制P0 口8 位LED流水点亮 (20) 实例29:用P0 、P1口显示整型函数返回值 (21) 实例30:用有参函数控制P0口8位LED流水速度 (22) 实例31:用数组作函数参数控制流水花样 (22) 实例32:用指针作函数参数控制P0口8位LED流水点亮 (23) 实例33:用函数型指针控制P1口灯花样 (25) 实例34:用指针数组作为函数的参数显示多个字符串 (26) 实例35:字符函数ctype.h应用举例 (27) 实例36:内部函数intrins.h应用举例 (27) 实例37:标准函数stdlib.h应用举例 (28) 实例38:字符串函数string.h应用举例 (29) 实例39:宏定义应用举例2 (29) 实例40:宏定义应用举例2 (29) 实例41:宏定义应用举例3 (30)

51单片机实验报告94890

《单片机与接口技术》实验报告 信息工程学院 2016年9月

辽东学院信息技术学院 《单片机与接口技术》实验报告 姓名:王瑛 学号: 0913140319 班级: B1403 专业:网络工程 层次:本科 2016年9月

目录 实验题目:实验环境的初识、使用及调试方法(第一章) 实验题目:单片机工程初步实验(第二章) 实验题目:基本指令实验(第三章)4 实验题目:定时器/计数器实验(第五章)4 实验题目:中断实验(第六章)4 实验题目:输入接口实验(第八章)4 实验题目:I/O口扩展实验(第九章)4 实验题目:串行通信实验(第十一章)4 实验题目:A/D,D/A转换实验(第十七章)4

实验题目:实验环境的初识、使用及调试方法实验 实验类型:验证性实验课时: 1 时间:2016年10月24日 一、实验内容和要求 了解单片机的基础知识 了解51单片机的组成和工作方法 掌握项目工程的建立、编辑、编译和下载的过程方法 熟练单片机开发调试工具和方法 二、实验结果及分析 单片机最小系统的构成: Keil集成开发环境:

STC-ISP:

实验题目:单片机工程初步实验 实验类型:验证性实验课时: 1 时间:2016 年10 月24 日一、实验内容和要求 点亮一个LED小灯 程序下载到单片机中 二、实验结果及分析 1、点亮一个LED小灯 点亮LED小灯的程序: #include //包含特殊功能寄存器定义的头文件 sbit LED = P0^0; sbit ADDR0 = P1^0; //sbit必须小写,P必须大写 sbit ADDR1 = P1^1; sbit ADDR2 = P1^2; sbit ADDR3 = P1^3; sbit ENLED = P1^4; void main() { ENLED = 0; ADDR3 = 1; ADDR2 = 1; ADDR1 = 1; ADDR0 = 0; LED = 0; //点亮小灯 while (1); //程序停止 } 2、程序下载 首先,我们要把硬件连接好,把板子插到我们的电脑上,打开设备管理器查看所使用的COM 口,如图所示:

51单片机20个实验-代码详细

第一章单片机系统板说明 一、概述 单片机实验开发系统是一种多功能、高配置、高品质的MCS-51单片机教学与开发设备。适用于大学本科单片机教学、课程设计和毕业设计以及电子设计比赛。 该系统采用模块化设计思想,减小了系统面积,同时增加了可靠性,使得单片机实验开发系统能满足从简单的数字电路实验到复杂的数字系统设计实验,并能一直延伸到综合电子设计等创新性实验项目。该系统采用集成稳压电源供电,使电源系统的稳定性大大提高,同时又具备完备的保护措施。为适应市场上多种单片机器件的应用,该系统采用“单片机板+外围扩展板”结构,通过更换不同外围扩展板,可实验不同的单片机功能,适应了各院校不同的教学需求。 二、单片机板简介 本实验系统因为自带了MCS-51单片机系统,因此没有配置其他单片机板,但可以根据教学需要随时配置。以单片机板为母板,并且有I/O接口引出,可以很方便的完成所有实验。因此构成单片机实验系统。 1、主要技术参数 (1)MSC-51单片机板 板上配有ATMEL公司的STC89C51芯片。 STC89C51资源:32个I/O口;封装DIP40。 STC89C51开发软件:KEIL C51。 2、MSC-51单片机结构 (1)单片机板中央放置一块可插拔的DIP封装的STC89C51芯片。 (2)单片机板左上侧有一个串口,用于下载程序。 (3)单片机板的四周是所有I/O引脚的插孔,旁边标有I/0引脚的脚引。 (4)单片机板与各个模块配合使用时,可形成—个完整的实验系统。 三、母板简介 主要技术参数 (1)实验系统电源 实验系统置了集成稳压电源,使整个电源具有短路保护、过流保护功能,提高了实验的稳定性。 主板的右上角为电源总开关,当把220V交流电源线插入主板后,打开电源开关,主板

单片机电路图详解

单片机:交通灯课程设计(一) 目录 摘要--------------------------------------------------------- 1 1.概述 -------------------------------------------------------- 2 2.硬件设计----------------------------------------------------- 3 2.1单片机及其外围--------------------------------------------3 2.1.1单片机的选择-----------------------------------------3 2.1.2单片机的特点及其应用范围----------------------------- 3 2.1.3存储器的扩展----------------------------------------- 4 2.1.4内存的扩展------------------------------------------- 6 2.1.5MCS-52的I/O接口扩展--------------------------------- 8 2.2电路部分--------------------------------------------------11 2.2.1元器件选用-------------------------------------------11 2.2.2电路完成功能-----------------------------------------13 3.软件设计------------------------------------------------------15 3.1软件概述-------------------------------------------------15 3.2汇编语言指令说明-----------------------------------------16 3.3定时/计数器的原理----------------------------------------16 3.3.1定时/计数器的概述-----------------------------------16 3.3.2 8255A片选及各端口地址-------------------------------18 3.3.3信号控制码------------------------------------------18 3.3.4工作方式寄存器--------------------------------------19 3.3.5定时/计数器初值及定时器T0的工作方式----------------20

51单片机新手入门实例详解

51单片机新手入门实例详解 1.硬件和软件准备 ●实验系统:EL89C单片机学习开发系统一套 ●电脑:具有标准串口的台式机或笔记本电脑,如果没有串口也可购 买一条USB转串口线代替 ●工具软件:Keil uVision2(用于编写和编译源程序、仿真调试); 光盘上非安装烧写软件,路径 \单片机EL89C\EL89C光盘\STC52单片机下载程序\stc-isp-v4.79-not-setup\STC_ISP_V483.exe (EL89C的编程控制烧写软件) 2.源程序编写和编译 EL89C的8个发光二极管负极通过限流电阻接入单片机的P1.0~P1.7端口,下面的范例程序可以使这8个发光二极管轮流点亮,形成流水灯效果。 我们使用的开发工具是Keil C51,是目前世界上最优秀、最强大的51单片机应用平台之一,它集编辑、编译、仿真调试于一体,支持汇编、C语言以及混合编程。同时具备功能强大的软件仿真和硬件仿真功能。 下面以一个简单的流水灯程序为例子来介绍Keil C51的使用方法: 2.1首先在硬盘上建立一个文件夹,命名为ledtest(当然可以是其他名字), 为方便程序的编写和调试,我们将调试过程中产生的文件都将放在这个目录中。 2.2启动Keil软件,点击菜单project,选择new project,然后选择你要保 存的路径,输入工程文件的名字,我们现在保存到刚才建立的ledtest目录中,工程文件命名为ledtest,然后点击保存。 2.3这时会弹出下面的对话框Select Device for Target,要求你为刚才的项 目选择一个CPU。我们选择Atmel的AT89C52,如图所示,选择AT89C52之后,右边一栏是对这个单片机的基本的说明,然后点击确定。

单片机实验报告书

并行I/O接口实验 一、实验目的 熟悉掌握单片机并行I/O接口输入和输出的应用方法。 二、实验设备及器件 个人计算机1台,装载了Keil C51集成开发环境软件。https://www.wendangku.net/doc/8b18160700.html,单片机仿真器、编程器、实验仪三合一综合开发平台1台。 三、实验内容 (1)P1口做输出口,接八只发光二极管,编写程序,使发光二极管延时(0.5-1秒)循环点亮。实验原理图如图3.2-1所示。 图3.2-1单片机并行输出原理图 实验程序及仿真 ORG 0000H LJMP START ORG 0100H START:MOV R2,#8 MOV A,#0FEH LOOP:MOV P1,A LCALL DELAY RL A

DJNZ R2,LOOP LJMP START DELAY:MOV R5,#20 D1:MOV R6,#20 D2:MOV R7,#248 D3:DJNZ R7,D3 DJNZ R6,D2 DJNZ R5,D1 RET END 中断实验 一、实验目的 熟悉并掌握单片机中断系统的使用方法,包括初始化方法和中断服务程序的编写方法。 二、实验设备及器件

个人计算机1台,装载了Keil C51集成开发环境软件。 https://www.wendangku.net/doc/8b18160700.html,单片机仿真器、编程器、实验仪三合一综合开发平台1台。 三、实验内容 (2)用P1口输出控制8个发光二极管LED1~LED8,实现未中断前8个LED闪烁,响应中断时循环点亮。 实验程序及仿真 ORG 0000H LJMP MAIN ORG 0003H LJMP INT00 ORG 0010H MAIN: A1:MOV A,#00H MOV P1,A MOV A,#0FFH MOV P1,A SETB EX0 JB P3.2,B1 SETB IT0 SJMP C1 B1:CLR IT0 C1:SETB EA NOP SJMP A1 INT00:PUSH Acc PUSH PSW MOV R2,#8 MOV A,#0FEH LOOP: MOV P1,A LCALL DELAY RL A DJNZ R2,LOOP

51单片机实例(含详细代码说明)

1.闪烁灯 1.实验任务 如图4.1.1所示:在P1.0端口上接一个发光二极管L1,使L1在不停地一亮一灭,一亮一灭的时间间隔为0.2秒。 2.电路原理图 图4.1.1 3.系统板上硬件连线 把“单片机系统”区域中的P1.0端口用导线连接到“八路发光二极管指示模块”区域中的L1端口上。 4.程序设计内容 (1).延时程序的设计方法 作为单片机的指令的执行的时间是很短,数量大微秒级,因此,我们要 求的闪烁时间间隔为0.2秒,相对于微秒来说,相差太大,所以我们在 执行某一指令时,插入延时程序,来达到我们的要求,但这样的延时程 序是如何设计呢?下面具体介绍其原理:

如图4.1.1所示的石英晶体为12MHz,因此,1个机器周期为1微秒机器周期微秒 MOV R6,#20 2个 2 D1: MOV R7,#248 2个 2 2+2×248=498 20× DJNZ R7,$ 2个2×248 (498 DJNZ R6,D1 2个2×20=40 10002 因此,上面的延时程序时间为10.002ms。 由以上可知,当R6=10、R7=248时,延时5ms,R6=20、R7=248时, 延时10ms,以此为基本的计时单位。如本实验要求0.2秒=200ms, 10ms×R5=200ms,则R5=20,延时子程序如下: DELAY: MOV R5,#20 D1: MOV R6,#20 D2: MOV R7,#248 DJNZ R7,$ DJNZ R6,D2 DJNZ R5,D1 RET (2).输出控制 如图1所示,当P1.0端口输出高电平,即P1.0=1时,根据发光二极管 的单向导电性可知,这时发光二极管L1熄灭;当P1.0端口输出低电平, 即P1.0=0时,发光二极管L1亮;我们可以使用SETB P1.0指令使P1.0 端口输出高电平,使用CLR P1.0指令使P1.0端口输出低电平。 5.程序框图 如图4.1.2所示

51单片机数字电压表实验报告

微控制器技术创新设计实验报告 姓名:学号:班级: 一、项目背景 使用单片机AT89C52和ADC0808设计一个数字电压表,能够测量0-5V之间的直流电压值,四位数码显示。在单片机的作用下,能监测两路的输入电压值,用8位串行A/D转换器,8位分辨率,逐次逼近型,基准电压为 5V;显示精度伏。 二、项目整体方案设计 ADC0808 是含8 位A/D 转换器、8 路多路开关,以及与微型计算机兼容的控制逻辑的CMOS组件,其转换方法为逐次逼近型。ADC0808的精度为 1/2LSB。在AD 转换器内部有一个高阻抗斩波稳定比较器,一个带模拟开关树组的256 电阻分压器,以及一个逐次通近型寄存器。8 路的模拟开关的通断由地址锁存器和译码器控制,可以在8 个通道中任意访问一个单边的模拟信号。

三、硬件设计 四、软件设计#include<> #include""

#define uchar unsigned char #define uint unsigned int sbit OE = P2^7; sbit EOC=P2^6; sbit START=P2^5; sbit CLK=P2^4; sbit CS0=P2^0; sbit CS1=P2^1; sbit CS2=P2^2; sbit CS3=P2^3; uint adval,volt; uchar tab[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8, 0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E}; void delayms(uint ms) {

51单片机流水灯实验报告

51单片机流水灯试验 一、实验目的 1.了解51单片机的引脚结构。 2.根据所学汇编语言编写代码实现LED灯的流水功能。 3.利用开发板下载hex文件后验证功能。 二、实验器材 个人电脑,80c51单片机,开发板 三、实验原理 单片机流水的实质是单片机各引脚在规定的时间逐个上电,使LED灯能逐个亮起来但过了该引脚通电的时间后便灭灯的过程,实验中使用了单片机的P2端口,对8个LED灯进行控制,要实现逐个亮灯即将P2的各端口逐一置零,中间使用时间间隔隔开各灯的亮灭。使用rl或rr a实现位的转换。 A寄存器的位经过rr a之后转换如下所示: 然后将A寄存器转换一次便送给P2即MOV P2,A便将转换后的数送到了P2口,不断循环下去,便实现了逐位置一操作。 四、实验电路图

五、通过仿真实验正确性 代码如下:ORG 0 MOV A,#00000001B LOOP:MOV P2,A RL A ACALL DELAY SJMP LOOP DELAY:MOV R1,#255 DEL2:MOV R2,#250 DEL1:DJNZ R2,DEL1 DJNZ R1,DEL2 RET End 实验结果:

六、实验总结 这次试验我通过Proteus仿真实现对流水灯功能的实现。受益匪浅,对80c51的功能和结构有了深层次的了解,我深刻的明白,要想完全了解c51还有一定距离,但我会一如既往的同困难作斗争。在实验中,我遇到了不少困难,比如不知道怎么将程序写进单片机中,写好程序的却总出错,不知道什么原因,原来没有生成hex文件。这些错误令我明白以后在试验中要步步细心,避免出错。

51单片机AD89电路设计程序+原理图

AD0809在51单片机中的应用 我们在做一个单片机系统时,常常会遇到这样那样的数据采集,在这些被采集的数据中,大部分可以通过我们的I/O口扩展接口电路直接得到,由于51单片机大部分不带AD转换器,所以模拟量的采集就必须靠A/D或V/F实现。下现我们就来了解一下AD0809与51单片机的接口及其程序设计。 1、AD0809的逻辑结构 ADC0809是8位逐次逼近型A/D转换器。它由一个8路模拟开关、一个地址锁存译码器、一个A/D转换器和一个三态输出锁存器组成(见图1)。多路开关可选通8个模拟通道,允许8路模拟量分时输入,共用A/D转换器进行转换。三态输出锁器用于锁存A/D转换完的数字量,当OE端为高电平时,才可以从三态输出锁存器取走转换完的数据。

2、AD0809的工作原理 IN0-IN7:8条模拟量输入通道 ADC0809对输入模拟量要求:信号单极性,电压围是0-5V,若信号太小,必须进行放大;输入的模拟量在转换过程中应该保持不变,如若模拟量变化太快,则需在输入前增加采样保持电路。 地址输入和控制线:4条 ALE为地址锁存允许输入线,高电平有效。当ALE线为高电平时,地址锁存与译码器将A,B,C三条地址线的地址信号进行锁存,经译码后被选中的通道

的模拟量进转换器进行转换。A,B和C为地址输入线,用于选通IN0-IN7上的一路模拟量输入。通道选择表如下表所示。 C B A 选择的通道 0 0 0 IN0 0 0 1 IN1 0 1 0 IN2 0 1 1 IN3 1 0 0 IN4 1 0 1 IN5 1 1 0 IN6 1 1 1 IN7 数字量输出及控制线:11条 ST为转换启动信号。当ST上跳沿时,所有部寄存器清零;下跳沿时,开始进行A/D转换;在转换期间,ST应保持低电平。EOC为转换结束信号。当EOC为高电平时,表明转换结束;否则,表明正在进行A/D转换。OE为输出允许信号,用于控制三条输出锁存器向单片机输出转换得到的数据。OE=1,输出转换得到的数据;OE=0,输出数据线呈高阻状态。D7-D0为数字量输出线。 CLK为时钟输入信号线。因ADC0809的部没有时钟电路,所需时钟信号必须由外界提供,通常使用频率为500KHZ, VREF(+),VREF(-)为参考电压输入。

51单片机C语言编程基础与实例

基础知识:51单片机编程基础 单片机的外部结构: 1. DIP40双列直插; 2. P0,P1,P2,P3四个8位准双向I/O引脚;(作为I/O输入时,要先输出高电平) 3. 电源VCC(PIN40)和地线GND(PIN20); 4. 高电平复位RESET(PIN9);(10uF电容接VCC与RESET,即可实现上电复位) 5. 内置振荡电路,外部只要接晶体至X1(PIN18)和X0(PIN19);(频率为主频的12倍) 6. 程序配置EA(PIN31)接高电平VCC;(运行单片机内部ROM中的程序) 7. P3支持第二功能:RXD、TXD、INT0、INT1、T0、T1 单片机内部I/O部件:(所为学习单片机,实际上就是编程控制以下I/O部件,完成指定任务) 1. 四个8位通用I/O端口,对应引脚P0、P1、P2和P3; 2. 两个16位定时计数器;(TMOD,TCON,TL0,TH0,TL1,TH1) 3. 一个串行通信接口;(SCON,SBUF) 4. 一个中断控制器;(IE,IP) 针对AT89C52单片机,头文件AT89x52.h给出了SFR特殊功能寄存器所有端口的定义。 C语言编程基础: 1. 十六进制表示字节0x5a:二进制为01011010B;0x6E为01101110。 2. 如果将一个16位二进数赋给一个8位的字节变量,则自动截断为低8位,而丢掉高8位。 3. ++var表示对变量var先增一;var—表示对变量后减一。 4. x |= 0x0f;表示为 x = x | 0x0f; 5. TMOD = ( TMOD & 0xf0 ) | 0x05;表示给变量TMOD的低四位赋值0x5,而不改变TMOD的高四位。 6. While( 1 ); 表示无限执行该语句,即死循环。语句后的分号表示空循环体,也就是{;} 在某引脚输出高电平的编程方法:(比如P1.3(PIN4)引脚) 代码

51单片机实验报告

51单片机实验报告

实验一 点亮流水灯 实验现象 Led灯交替亮,间隔大约10ms。实验代码 #include void Delay10ms(unsigned int c); void main() { while(1) { P0 = 0x00; Delay10ms(50); P0 = 0xff; Delay10ms(50); } }

void Delay10ms(unsigned int c) { unsigned char a, b; for (;c>0;c--) { for (b=38;b>0;b--) { for (a=130;a>0;a--); } } } 实验原理 While(1)表示一直循环。 循环体首先将P0的所有位都置于零,然后延时约50*10=500ms,接着P0位全置于1,于是LED全亮了。接着循环,直至关掉电源。延迟函数是通过多个for循环实现的。 实验2 流水灯(不运用库函数) 实验现象 起初led只有最右面的那一个不亮,半秒之后从右数第二个led

也不亮了,直到最后一个也熄灭,然后led除最后一个都亮,接着上述过程 #include #include void Delay10ms(unsigned int c); main() { unsigned char LED; LED = 0xfe; while (1) { P0 = LED; Delay10ms(50); LED = LED << 1; if (P0 == 0x00) { LED = 0xfe; } } } void Delay10ms(unsigned int c)

C51单片机实验报告

实验报告册 课程名称:单片机原理与应用B 指导老师:xxx 班级:xxx 姓名:xxx 学号:xxx 学期:20 —20 学年第学期南京农业大学工学院教务处印

实验目录实验一:指示灯/开关控制器 实验二:指示灯循环控制 实验三:指示灯/数码管的中断控制 实验四:电子秒表显示器 实验五:双机通信

姓名:学号:班级:成绩: 实验名称:指示灯/开关控制器 一、实验目的: 学习51单片机I/O口基本输入/输出功能,掌握C语言的编程与调试方法。 二、实验原理: 实验电路原理图如图所示,图中输入电路由外接在P1口的8只拨动开关组成;输入电路由外接在P2口的8只低电平驱动的发光二极管组成。此外,还包括时钟电路、复位电路和片选电路。 在编程软件的配合下,要求实现如下指示灯/开关控制功能:程序启动后,8只发光二极管先整体闪烁3次(即亮→暗→亮→暗→亮→暗,间隔时间以肉眼可观察到为准),然后根据开关状态控制对应发光二极管的亮灯状态,即开关闭合相应灯亮,开关断开相应灯灭,直至停止程序运行。 三、软件编程原理为; (1)8只发光二极管整体闪烁3次

亮灯:向P2口送入数值0; 灭灯:向P2口送入数值0FFH; 闪烁3次:循环3次; 闪烁快慢:由软件延时时间决定。 (2)根据开关状态控制灯亮或灯灭 开关控制灯:将P1口(即开关状态)内容送入P2口;无限持续:无条件循环。 四、实验结果图: 灯泡闪烁:

按下按键1、3、5、7:

经检验,其余按键按下时亦符合题目要求。 五、实验程序: #include"reg51.h" void delay(unsigned char time) { unsigned int j=15000; for(;time>0;time--) for(;j>0;j--); } void main(){ key,char i; for(i=0;i<3;i++) { P2=0x00; delay(500); P2=0xff; delay(500) } while(1) { P2=P3;

心率计51单片机代码.doc

#include "STC12C5A.h" #include "SMG.h" #define FSOC 24000000L #define T1MS (65536-FSOC/12/1000) sbit LED0 = P0^0; unsigned int count=0;计时标志数 unsigned int xinlv=0;心率计算器 unsigned char seg[10] = {0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6}; sbit HC595_RST = P0^6; sbit HC595_SCK = P0^4; sbit HC595_RCK = P0^5; sbit HC595_DAT = P0^7;

外部中断代码void Exti0_Init() { IT0 = 1; //下降沿触发 TCON.0=1 EX0 = 1; //开外部中断0 IE.0=1 EA = 1; //开总中断 } void Exit0_ISR() interrupt 0 { Xinlv++; LED0=0; delay_ms(2); LED0=1; } 定时器代码void Timer0_Init() { TMOD = 0x01; TR0 = 1; //16位定时器工作方式 TH0 = T1MS>>8; TL0 = T1MS; ET0 = 1; //打开定时器0中断 EA = 1; //打开总中断 } void Timer0_ISR() interrupt 1 { unsigned int temp; count++; TH0 = T1MS>>8; TL0 = T1MS; if(count=5000) temp=Xinlv; for{} SMG_Display(temp); }

51单片机的若干电路原理图

51单片机的若干电路原理图 单片机 2007-10-23 20:36:31 阅读198 评论0 字号:大中小订阅 利用下面这些原理图,就可以自己动手做个简单的实验板啦~~~~ 1 外接电源供电电路及电源指示灯 在单片机实训板上为系统设计了一个外接电源供电电路,这个电源电路具备两种电源供电方式:一种是直接采用PC的USB接口5V直流电源给实训板供电,然后在电源电路中加入一个500mA电流限制的自恢复保险丝给PC的USB电源提供了保护的作用;另一种是采用小型直流稳压电源供电,输出的9V直流电源加入到电源电路中,通过LM7805稳压芯片的降压作用,给实训板提供工作所需的5V电源。 如图2.4所示为采用LM7805稳压芯片进行降压供电的电源电路。 图2.4 外接电源供电电路 同时,为了显示外接电源给实训板提供了电源,在系统中增加了电源指示灯电路,如图2.5。 发光二极管工作在正常工作状态时,流过LED的电流只需要5~10mA左右就行,在电路中采用白发红高亮LED,所以可以取5mA左右

的电流值,通过计算,可知:连接LED的限流电阻的阻值可以采用680Ω。 图2.5 电源指示灯电路 2 系统复位电路 复位是单片机的初始化操作,只要给RESET引脚加上2个机器周期以上的高电平信号,即可使单片机复位。除了进入系统的正常初始化之外,当程序运行出错或是操作错误使系统处于死锁状态时,为了摆脱死锁状态,也需要按复位键重新复位。 在系统中,为了实现上述的两项功能,采用常用的按键电平复位电路,如图2.6所示。 2.6 按键电平复位电路 从途中可以看出,当系统得到工作电压的时候,复位电路工作在上电自动复位状态,通过外部复位电路的电容充电来实现,只要Vcc

51单片机实验报告

实验一数据传送实验 实验内容: 将8031内部RAM 40H—4FH单元置初值A0H—AFH,然后将片内RAM 40H—4FH单元中的数据传送到片内RAM 50H—5FH单元。将程序经模拟调试通过后,运行程序,检查相应的存储单元的内容。 源程序清单: ORG 0000H RESET:AJMP MAIN ORG 003FH MAIN:MOV R0,#40H MOV R2,#10H MOV A,#0A0H A1:MOV @R0,A INC R0 INC A DJNZ R2, A1 MOV R1,#40H MOV R0, #50H MOV R2, #10H A3: MOV A, @R1 MOV @R0, A INC R0 INC R1 DJNZ R2, A3 LJMP 0000H 思考题: 1. 按照实验内容补全程序。 2. CPU 对8031内部RAM存储器有哪些寻址方式? 直接寻址,立即寻址,寄存器寻址,寄存器间接寻址。 3. 执行程序后下列各单元的内容是什么? 内部RAM 40H~4FH ___0A0H~0AFH______________________ 内部RAM 50H~5FH___0A0H~0AFH_______________________ 实验二多字节十进制加法实验

实验内容: 多字节十进制加法。加数首地址由R0 指出,被加数和结果的存储单元首地址由R1指出,字节数由R2 指出。将程序经模拟调试通过后,运行程序,检查相应的存储单元的内容。源程序清单:ORG 0000H RESET: AJMP MAIN ORG 0100H MAIN: MOV SP, #60H MOV R0, #31H MOV @R0, #22H DEC R0 MOV @R0, #33H MOV R1, #21H MOV @R1, #44H DEC R1 MOV @R1, #55H MOV R2, #02H ACALL DACN HERE: AJMP HERE DACN: CLR C DAL: MOV A, @R0 ADDC A, @R1 DA A MOV @R1, A INC R0 INC R1 DJNZ R2,DAL CLR A MOV ACC.0 , C RET 思考题: 1. 按照实验内容补全程序。 2. 加数单元、被加数单元和结果单元的地址和内容为? 3130H,2120H,6688H 3. 如何检查双字节相加的最高位溢出? 看psw.3 的溢出标志位ov=1 则溢出 4. 改变加数和被加数,测试程序的执行结果。 实验三数据排序实验

51单片机蜂鸣器奏乐实验汇编代码

LJMP START ORG 000BH INC 20H ;中断服务,中断计数器加1 MOV TH0,#0D8H MOV TL0,#0EFH ;12M晶振,形成10毫秒中断RETI START: MOV SP,#50H MOV TH0,#0D8H MOV TL0,#0EFH MOV TMOD,#01H MOV IE,#82H MUSIC0: NOP MOV DPTR,#DAT ;表头地址送DPTR MOV 20H,#00H ;中断计数器清0 MUSIC1: NOP CLR A MOVC A,@A+DPTR ;查表取代码 JZ END0 ;是00H,则结束 CJNE A,#0FFH,MUSIC5 LJMP MUSIC3 MUSIC5:NOP MOV R6,A INC DPTR MOV A,#0 MOVC A,@A+DPTR MOV R7,A SETB TR0 MUSIC2:NOP CPL P3.2 MOV A,R6 MOV R3,A LCALL DEL MOV A,R7 CJNE A,20H,MUSIC2 MOV 20H,#00H INC DPTR LJMP MUSIC1 MUSIC3:NOP CLR TR0 MOV R2,#0DH

MOV R2,#0FFH LCALL DEL DJNZ R2,MUSIC4 INC DPTR LJMP MUSIC1 END0:NOP MOV R2,#0FFH MUSIC6:MOV R3,#00H LJMP MUSIC0 DEL:NOP DEL3:MOV R4,#02H DEL4:NOP DJNZ R4,DEL4 NOP DJNZ R3,DEL3 RET NOP DAT: DB 18H, 30H, 1CH, 10H DB 20H, 40H, 1CH, 10H DB 18H, 10H, 20H, 10H DB 1CH, 10H, 18H, 40H DB 1CH, 20H, 20H, 20H DB 1CH, 20H, 18H, 20H DB 20H, 80H, 0FFH, 20H DB 30H, 1CH, 10H , 18H DB 20H, 15H, 20H , 1CH DB 20H, 20H, 20H , 26H DB 40H, 20H , 20H , 2BH DB 20H, 26H, 20H , 20H DB 20H, 30H , 80H , 0FFH DB 20H, 20H, 1CH , 10H DB 18H, 10H, 20H , 20H DB 26H, 20H , 2BH , 20H DB 30H, 20H , 2BH , 40H DB 20H, 20H , 1CH , 10H DB 18H, 10H, 20H, 20H DB 26H, 20H , 2BH, 20H DB 30H, 20H, 2BH , 40H DB 20H, 30H, 1CH , 10H DB 18H, 20H , 15H , 20H DB 1CH, 20H , 20H , 20H DB 26H, 40H, 20H , 20H

51单片机信号发生器实验报告

微控制器技术创新设计实验报告姓名:学号:班级: 一、项目背景 信号发生器也叫做振荡器或是信号源,在现在的科技生产实践中有着广泛而重要的应用。现在的特殊波形发生器在价格上不够经济,有些昂贵。而基于AT89C51单片机的函数信号发生器可以满足此要求。根据傅里叶变换,各种波形均可以用三角函数的相关式子表示出来。函数信号发生器能够产生多种波形,如三角波、锯齿波、矩形波、方波和正弦波。 二、项目整体方案设计 可以利用单片机编程的方法来实现波形的输出。可选用AT89C51作为控制器,输出相应波形的数字信号,再用D/A 转换器输出相应波形的模拟信号。用DAC0832作为D/A转换器,再经过两级放大后输出,最终在示波器上显示。可以使用按键扫描来实现波形的变化

三、硬件设计 四、软件设计 #include #define uchar unsigned char #define uint unsigned int Const tab[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff ,0xff,0xff,0xff,0xff,0xff,0xff}; void delay(void) { uchar i; for(i=230;i>0;i--); }

void main() { uchar i; while(1) { for(i=0;i<18;i++) { P1=tab[i]; delay(); } } } 五、实验结果

六、项目总结 通过这次实验设计,锻炼我们综合运用知识,提出问题,分析问题,及解决问题的能力。我感慨颇多,在着手设计的这段日子里,我又学到了很多东西。特别是理论联系实际。我认为掌握单片机的应用及开发技术是最基本的也是必要的。单片机是以后从事相关嵌入式研发最为基本的入门芯片。所以学好单片机是我们电子类的必要任务。通过这次单片机课程设计的顺利完成,离不开付老师指导,也离不开班上同学的耐心帮助。在此,我对所有帮助过我的老师和同学表示我真挚的感谢!

相关文档