单片机实验指导书

更新时间:2024-04-30 13:56:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

《单片机原理与应用》

实 验 指 导

桂林电子科技大学

电子工程与自动化学院

2014.03

实验一 单片机开发系统的使用方法

一、实验目的

1.学习单片机开发系统和仿真软件的使用及程序调试方法。 2.掌握汇编程序的编写方法及常用技巧。 二、实验内容

1、学习用Keil软件进行51单片机的软件开发;

学习Keil软件的一般操作,步骤为:项目建立、程序录入、添加文件、编译生成HEX文件、(参见附录1)

2、学习用Keil软件基本调试。(参见附录2); 3、学习Proteus仿真软件的使用(参见附录3);

4、熟悉实验用单片机开发系统(参见实验板及芯片PDF)。 三、实验原理

1、Keil软件使用练习

设(R0)=20H,(R1)=25H,(20H)=80H,(21H)=90H,

(22H)=0A0H,(25H)=0A0H,(26H)=6FH,(27H)=76H,执行程序后,问程序完成什么功能,写出运行结果。(见参考程序一)

2、Proteus仿真软件使用练习

电路原理图如下,所需元件为:AT89C51、SW-SPST、LED-RED

图中用单片机的P1口作输出口接8个LED,8个LED按共阳极连接,端口逻辑值为0点亮LED;P3口作输入口接1个SW-SPST开关,P3口内含上拉电

阻,当开关打开时逻辑值为1,开关闭合时逻辑值为0。

编写程序点亮LED (见参考程序二) 四、实验预习

1、学习汇编语言编程的有关知识。

2、提前预习KEIL软件的使用方法,写出预习报告。 五、实验报告

1、总结出实验的详细步骤。

2、写出调试正确的程序及运行结果。 六、参考程序: 参考程序一

ORG 0000H

MOV R0,#20H MOV R1,#25H MOV 20H,#80H MOV 21H,#90H MOV 22H,#0A0H MOV 25H,#0A0H MOV 26H,#6FH MOV 27H,#76H CLR C MOV R2,#3 LOOP: MOV A,@R0 ADDC A,@R1 MOV @R0,A

CLR C

INC R0 INC R1 DJNZ R2,LOOP JNC NEXT MOV @R0,#01H SJMP $ NEXT: DEC R0 SJMP $ END

参考程序二

ORG 0000H SETB P3.2 START: JB P3.2,LOOP

MOV P1,#55H

SJMP START

LOOP:MOV P1,#00H

SJMP START END

实验二、I/O口输入、输出实验

一、实验目的

1.了解CPU对I/O口的操作方法。

2.学会使用51系列单片机I/O口的基本输入、输出功能。 3. 了解51单片机的内部结构、引脚、寄存器的组成。 二、实验原理

MCS-51具有P0-P3四个端口,每个口有8条线,共计32条双向且可被独立寻址的I/O口线。本实验将P3口作输入口,接两个拨动开关,P1口作输出口,接8个LED。P1口、P3口为8位准双向口,每一位可独立定义为输入或输出,CPU对P1口、P3口的操作可以是字节操作,也可以是位操作。当P1口、P3口用作输入时,必经先对它置“1”。 三、实验电路

首先在Proteus软件中绘出原理图并编程进行仿真,然后在下载到单片机实验板上进行执行,仿真电路原理图如下,Proteus所需元件为:AT89C51、SW-SPST、LED-RED。

图中用单片机的P1口作输出口接8个LED,8个LED按共阳极连接,端口逻辑值为0点亮LED;P3口作输入口接2个SW-SPST开关,P3口内含上拉电阻,当开关打开时逻辑值为1,开关闭合时逻辑值为0。

仿真完成后,将实验板的P1口用8芯线接到LED接口J7,P3.2、P3.3分别接到SW1、SW2,P3.0、P3.1接到J8的RXD、TXD(下载HEX文件),然后就

可以运行STC_ISP软件下载实验程序,每次下载必须先拔USB电源线然后再插上才能开始下载。 四、实验内容

参照实验电路编写程序,控制LED的工作状态。拨动开关SW1、SW2分别实现4种不同的工作方式:

本实验中要实现循环输出,最常用的方法是循环计数实现循环次数控制,对计数器值进行查表转换得出输出值,输出到P1口进行显示,灯亮表示输出为“0”,灯灭表示输出为“1”。

本实验中的延时,用软件延时方法产生,延时时间=程序总机器周期数*循环次数*机器周期。

输出表格确定发光模式,实验中定义表格如下:

TAB1:DB 01H,02H,04H,08H,10H,20H,40H,80H(SW3,SW4为:00) TAB2:DB 03H,06H,0CH,18H,30H,60H,0CH,81H(SW3,SW4为:01) TAB3:DB 80H,40H,20H,10H,08H,04H,02H,01H(SW3,SW4为:10) TAB4: DB 用户自己定义(SW3,SW4为:11) 输入信号使用P3.2和P3.3,可以确定4种模式。 程序流程图如下:

图 1.1 主程序 图1.2 转换输出子程序

调转换输出程序 延时返回 调循环计数程序 根据输入模式选择表格查表输出 P1、P3 初始化 读取输入模式 开 始 子程序入口 五、实验预习

1、学习汇编语言编程的有关知识。

2、复习KEIL软件的使用方法,写出预习报告。 六、实验报告

1、总结出实验的详细步骤。

2、写出调试正确的程序及运行结果。 七、编程提示: (延时程序)

DELAY: MOV R1,#10; 2uS LOOP: MOV R2,#250; 2uS

DJNZ R2,$; 4uS DJNZ R1,LOOP; 4uS RET

延时时间的计算:

若系统的晶振频率为6MHz(本实验晶振频率为12MHz),即一个机

器同期时间为12/6MHz即2uS,所以该段程序的执行时间为:

2+(2+4×250+4)×10 = 10.06 mS

实验三、定时器/计数器实验

一、实验目的

1、了解MCS-51单片机定时/计数器的基本结构、工作原理和工作方式。 2、掌握定时/计数器工作在定时器和计数器两种方式下的编程方法。 3、掌握数码管显示电路的驱动原理及编程方法。 二、实验内容

1、编写单片机程序,用T0作定时器产生周期为1秒的方波(用查询方式编程),从P3.6,P3.7口输出,将P3.7接到示波器显示该方波波形;用T1作计数器对从P3.6输出的方波进行计数,计数结果通过P1口输出到发光二极管显示。(计算机仿真)

2、编写单片机程序,用T0作定时器产生周期为1秒的方波(用查询方式编程),从P3.6,P3.7口输出,将P3.6输出的方波接到P3.5口通过T1作计数器对该方波进行计数,计数值由LED显示,用存储示波器显示P3.7输出的方波。(实验台验证)

3、设计一个60秒计时器,秒计时结果用两位LED数码管显示。(计算机仿真)

4、选做:设置按键控制计时器的启、停及清零功能。 三、实验原理

电路原理图如下,所需元件为:AT89C52、LED-YELLOW、7SEG-COM-CAT-GRN 当晶振为12.000Mhz时,一个机器周期为1微秒,要实现500毫秒的定时,需要500000个机器周期,对于51单片机内部定时器来说,最大只能定时65536个机器周期,定时65.536毫秒,不能满足要求,为此必须借助软件循环进行扩展。实现的方法是:用定时器中断定时10毫秒,再用软件扩展50倍即可得到500毫秒的定时。当到达500毫秒时,对P3.7输出取反,可得到周期为1秒的方波。

选择模式1,每个10ms中断一次,设初值为X,根据下面公式,可求得X的值。

(216-计数初值)*机器周期=定时时间

12?3(2?X)??10?10

22.1184?10616有关定时计数器的特殊功能寄存器,请参考课本。

选择模式1,每个10ms中断一次,设初值为X,根据下面公式,可求得X的值。

(216-计数初值)*机器周期=定时时间

12?3(2?X)??10?10

12.000?10616有关定时计数器的特殊功能寄存器,请参考课本。

秒计时器的显示器件为七段LED共阴数码管,电路如图所示:

七段LED共阴数码管的段码表如表: 数字 0 1 2 3 4 段码 5 6 7 8 9 3FH 06H 5BH 4FH 66H 6DH 7DH 07H 7FH 6FH

四、实验步骤:

1、用KEIL 软件编写、汇编、调试给定内容的有关程序,并生成HEX文件; 2、用Proteus对单片机硬件电路图进行仿真; 3、下载到单片机实验板上验证有关程序。 五、实验接线

1、从J2插座将单片机芯片的P3.7引出接示波器的信号输入端,示波器的接地端接POW插针的GND(注意不要接到5V),或者将P3.7引出接J7插座的任意一个插针(用二极管显示方波)。

2、将单片机芯片的P3.6和P3. 5相连(J2插座), 六、实验预习

1、学习有关定时器和计数器的知识。 2、提前编写程序,写出预习报告。 七、实验报告要求

1、总结出实验的详细步骤。 2、写出调试正确的程序及框图。

实验四、中断实验

一、实验目的

1、了解MCS-51单片机的组成、中断原理,中断处理过程、外部中断的中断方式。 2、掌握中断响应及处理的编程方法。

二、实验原理

MCS-51的中断系统中有5个中断源:外部中断INTO,INT1,定时器/计数器TO、T1中断和串口UART中断,它们对应不同的中断矢量。 如表:

IE是中断允许寄存器,其中EXO,ETO,EX1,ET1,ES分别是上述5个中断的允许控制位,EA位是中断总允许位,每个中断只有在相应中断允许且总中断也允许的情况下,才能得到中断响应。80XX51的5个中断都可以设为高低2个优先级,IP是中断优先级寄存器,其中PXO,PTO,PX1,PT1,PS位分别对应5个中断的优先级设置,置“1”时设为高优先级中断,为“0”时是低优先级中断。在有中断嵌套要求时,低优先级中断可被高优先级所中断。当同一级的中断同时到来时,先响应中断矢量排在前面的中断。

三、实验电路

电路原理图如下,所需元件为:AT89C51、SW-SPDT、LED-RED、LED-GREEN、 LED-YELLOW、RES、TRAFFICLIGHTS

四、实验内容

参照实验电路,设计交通灯控制系统。模拟交通信号灯控制:一般情况下正常显示,东西-南北交替放行,各方向通行时间为30秒。有救护车或警车到达时,两个方向交通信号灯全为红色,以便让急救车或警车通过,设通行时间为10秒,之后交通恢复正常。用单次脉冲模拟急救车或警车申请外部中断。

1、在生成HEX文件后,用Proteus软件对电路图进行计算机仿真; 2、程序下载到单片机实验板上验证; (实验板数码管的驱动程序见附件)。 五、程序流程图

六、实验预习

1、学习外部中断的有关知识。 2、提前编写程序,写出预习报告。

七、实验报告

1、总结出实验的详细步骤。 2、写出调试正确的程序及框图。

实验五 串行通讯实验

一、实验目的

1.了解MCS-51单片机串行口(UART)的结构,PC机串行通讯的基本

要求,串行通讯的原理和数据交换过程。

2.掌握单片机与PC机间进行串行通讯的编程方法。

3.了解实现串行通讯的硬件环境,数据格式的协议,数据交换的协议。 二、实验原理

MSC-51和AT89系列单片机中使用的是是全双工的UART(异步串行通信接口)。UART有两种工作状态:同步串行通信状态和异步串行通信状态。

相关的寄存器要有SBUF,SCON,PCON。

SBUF 数据缓冲寄存器 这是一个可以直接寻址的串行口专用寄存器。SBUF包含了两个独立的寄存器,一个是发送寄存,另一个是接收寄存器,但它们都共同使用同一个寻址地址-99H。CPU在读SBUF时会指到接收寄存器,在写时会指到发送寄存器,而且接收寄存器是双缓冲寄存器,这样可以避免接收中断没有及时的被响应,数据没有被取走,下一帧数据已到来,而造成的数据重叠问题。发送器则不需要用到双缓冲,一般情况下我们在写发送程序时也不必用到发送中断去外理发送数据。操作SBUF寄存器的方法则很简单,只要把这个99H地址用关键字sfr定义为一个变量就可以对其进行读写操作了,如sfr SBUF = 0x99;当然你也可以用其它的名称。通常在标准的reg51.h或at89x51.h等头文件中已对其做了定义,只要用#include引用就可以了。

SCON 串行口控制寄存器 通常在芯片或设备中为了监视或控制接口状态,都会引用到接口控制寄存器。SCON就是51芯片的串行口控制寄存器。它的寻址地址是98H,是一个可以位寻址的寄存器,作用就是监视和控制51芯片串行口的工作状态。51芯片的串口可以工作在几个不同的工作模式下,其工作模式的设置就是使用SCON寄存器。它的各个位的具体定义如下:

(MSB) SM0 SM1 SM2 REN TB8 RB8 TI (LSB) RI SM0、SM1为串行口工作模式设置位,这样两位可以对应进行四种模式的设置。

SM0 SM1 模 式 0 0 1 0 1 0 0 1 2 功 能 同步移位寄存器 8位UART 9位UART 波特率 fosc/12 可变 fosc/32或fosc/64 1

SM2在模式2、模式3中为多处理机通信使能位。在模式0中要求该位为0。

REM为允许接收位,REM置1时串口允许接收,置0时禁止接收。REM是由软件置位或清零。如果在一个电路中接收和发送引脚P3.0,P3.1都和上位机相连,在软件上有串口中断处理程序,当要求在处理某个子程序时不允许串口被上位机来的控制字符产生中断,那

1 3 9位UART 可变

么可以在这个子程序的开始处加入REM=0来禁止接收,在子程序结束处加入REM=1再次打开串口接收。

TB8发送数据位8,在模式2和3是要发送的第9位。该位可以用软件根据需要置位或清除,通常这位在通信协议中做奇偶位,在多处理机通信中这一位则用于表示是地址帧还是数据帧。

RB8接收数据位8,在模式2和3是已接收数据的第9位。该位可能是奇偶位,地址/数据标识位。在模式0中,RB8为保留位没有被使用。在模式1中,当SM2=0,RB8是已接收数据的停止位。 TI发送中断标识位。在模式0,发送完第8位数据时,由硬件置位。其它模式中则是在发送停止位之初,由硬件置位。TI置位后,申请中断,CPU响应中断后,发送下一帧数据。在任何模式下,TI都必须由软件来清除,也就是说在数据写入到SBUF后,硬件发送数据,中断响应(如中断打开),这时TI=1,表明发送已完成,TI不会由硬件清除,所以这时必须用软件对其清零。

RI接收中断标识位。在模式0,接收第8位结束时,由硬件置位。其它模式中则是在接收停止位的半中间,由硬件置位。RI=1,申请中断,要求CPU取走数据。但在模式1中,SM2=1时,当未收到有效的停止位,则不会对RI置位。同样RI也必须要靠软件清除。 常用的模式1,表中的fosc代表振荡器的频率,也就是晶振的频率。UART为(Universal Asynchronous Receiver)的英文缩写。 串口模式1是传输10个位的,1位起始位为0,8位数据位,低位在先,1位停止位为1。它的波特率是可变的,其速率是取决于定时器1或定时器2的定时值(溢出速率)。AT89C51和MSC-51等51

系列芯片只有两个定时器,定时器0和定时器1,而定时器2是89C52系列芯片才有的。

波特率 在使用串口做通讯时,一个很重要的参数就是波特率,只有上下位机的波特率一样时才可以进行正常通讯。波特率是指串行端口每秒内可以传输的波特位数。有一些初学的朋友认为波特率是指每秒传输的字节数,如标准9600会被误认为每秒种可以传送9600个字节,而实际上它是指每秒可以传送9600个二进位,而一个字节要8个二进位,如用串口模式1来传输那么加上起始位和停止位,每个数据字节就要占用10个二进位,9600波特率用模式1传输时,每秒传输的字节数是9600÷10=960字节。51芯片的串口工作模式0的波特率是固定的,为fosc/12,以一个12M的晶振来计算,那么它的波特率可以达到1M。模式2的波特率是固定在fosc/64或fosc/32,具体用那一种就取决于PCON寄存器中的SMOD位,如SMOD为0,波特率为focs/64,SMOD为1,波特率为focs/32。模式1和模式3的波特率是可变的,取决于定时器1或2(52芯片)的溢出速率。那么我们怎么去计算这两个模式的波特率设置时相关的寄存器的值呢?可以用以下的公式去计算。

波特率=(2SMOD÷32)×定时器1溢出速率

上式中如设置了PCON寄存器中的SMOD位为1时就可以把波特率提升2倍。通常会使用定时器1工作在定时器工作模式2下,这时定时值中的TL1做为计数,TH1做为自动重装值 ,这个定时模式下,定时器溢出后,TH1的值会自动装载到TL1,再次开始计数,这样可以不用软件去干预,使得定时更准确。在这个定时模式2下定时器1溢出速率的计算公式如下:

溢出速率=(计数速率)/(256-TH1)

上式中的“计数速率”与所使用的晶体振荡器频率有关,在51芯片中定时器启动后会在每一个机器周期使定时寄存器TH的值增加一,一个机器周期等于十二个振荡周期,所以可以得知51芯片的计数速率为晶体振荡器频率的1/12,一个12M的晶振用在51芯片上,那么51的计数速率就为1M。通常用11.0592M晶体是为了得到标准的无误差的波特率,那么为何呢?计算一下就知道了。如我们要得到9600的波特率,晶振为11.0592M和12M,定时器1为模式2,SMOD设为1,分别看看那所要求的TH1为何值。代入公式: 11.0592M

9600=(2÷32)×((11.0592M/12)/(256-TH1)) TH1=250 //看看是不是和上面实例中的使用的数值一样? 12M

9600=(2÷32)×((12M/12)/(256-TH1)) TH1≈249.49

上面的计算可以看出使用12M晶体的时候计算出来的TH1不为整数,而TH1的值只能取整数,这样它就会有一定的误差存在不能产生精确的9600波特率。当然一定的误差是可以在使用中被接受的,就算使用11.0592M的晶体振荡器也会因晶体本身所存在的误差使波特率产生误差,但晶体本身的误差对波特率的影响是十分之小的,可以忽略不计。

RS232介绍

9芯 1 2 3 4 5 6 7 8 9

信号方向来自 调制解调器 调制解调器

PC PC 调制解调器

PC 调制解调器 调制解调器

缩写 CD RXD TXD DTR GND DSR RTS CTS RI

描述 载波检测 接收数据

发送数据 数据终端准备好

信号地 通讯设备准备好

请求发送 允许发送 响铃指示器

三、实验内容

1、通过串口调试助手给单片机发送1组数据,单片机接收后在数码管上显示并将该数据返发给串口调试助手(仿真)。

2、通过串口调试助手给单片机发送1组数据,单片机接收后在数码管上显示并将该数据返发给串口调试助手(下载到实验板上验证)。 3、利用实验板上的TLC549做A/D转换器,对电位器提供的模拟电压信号进行采样,结果送数码管模块进行显示并将该数据通过串口调试助手发给PC机。(仿真)

4、利用实验板上的TLC1549做A/D转换器,对电位器提供的模拟电压信号进行采样,结果送数码管模块进行显示并将该数据通过串口调试助手发给PC机。(下载到实验板上验证)

四、实验电路

实验内容1仿真电路图

实验内容3仿真电路图

本文来源:https://www.bwwdw.com/article/qrng.html

Top