单片机实验-- AD转换实验

单片机实验-- AD转换实验
单片机实验-- AD转换实验

实验6 A/D转换实验

一、实验目的:

1.掌握A/D转换与单片机的接口方法。

2.了解A/D芯片ADC0809转换性能及编程方法。

3.通过实验了解单片机如何进行数据采集。

二、实验设备:

CPU挂箱、8031CPU模块

三、实验内容:

利用实验台上的ADC0809做A/D转换器,实验箱上的电位器提供模拟电压信号输入,编制程序,将模拟量转换成数字量,用数码管显示模拟量转换的结果。

四、实验原理:

A/D转换器大致有三类:一是双积分A/D转换器,优点是精度高,抗干扰性好,价格便宜,但速度慢;二是逐次逼近法A/D转换器,精度、速度、价格适中;三是并行A/D转换器,速度快,价格也昂贵。

实验用的ADC0809属第二类,是八位A/D转换器。每采集一次需100us。

ADC0809 START端为A/D转换启动信号,ALE端为通道选择地址的锁存信号。实验电路中将其相连,以便同时锁存通道地址并开始A/D采样转换,故启动A/D转换只需如下两条指令:

MOV DPTR,#PORT

MOVX @DPTR,A

A中为何内容并不重要,这是一次虚拟写。

在中断方式下,A/D转换结束后会自动产生EOC信号,将其与8031CPU板上的INT0相连接。在中断处理程序中,使用如下指令即可读取A/D转换的结果:

MOV DPTR,#PORT

MOVX A,@DPTR

五、实验电路:

六、实验步骤:

1.0809的片选信号CS0809接CS0。

2.电位器的输出信号AN0接0809的ADIN0。

3.EOC接CPU板的INT0.

七、程序框图:

主程序中断服务程序

八、程序清单

九、附:8位并行A/D、D/A模块

8位A/D、D/A模块由ADC0809模数变换电路和DAC0832数模变换电路两部分组成,其电源、数据总线、地址总线和片选信号均由接口挂箱上的接口插座提供。

一、ADC0809电路

(1) ADC0809芯片引脚及功能

ADC0809是一种逐次逼近式8路模拟输入,8位数字量输出的A/D转换器。其引脚如图3-25所示

图3-25 ADC0809管脚图

由图可见,ADC0809共有28引脚,采用双列直插式封装。其主要引脚功能如下:

IN0~IN7:8路模拟信号输入端;

D0~D7:8路数字量输出端;

ALE:控制转换端,高电平有效;

A、B、C:与ALE控制8路模拟通道切换,A、B、C分别与三根地址线或数据线相连,三者编码对应8个通道地址口。CBA=000~111分别对应IN0~IN7通道地址;

OE:输出允许端,高电平有效;

SC:启动信号输入端;

CLK:时钟信号输入端;

V R(+)、VR(-):参考电压输入端。

强调说明一点:ADC0809虽有8路模拟通道可同时输入8路模拟信号,但每个瞬间只能转换一路,各路之间的切换由软件变换通道地址实现。

ADC0809工作过程如下:

首先用指令选择0809的一个模拟输入通道,当执行MOVX @DPTR,A时,产生一个启动信号使START引脚送入脉冲,开始对选中通道转换。当转换结束后发出结束信号,置EOC为高电平,该信号可做中断信号;当读允许信号到,OE端有高电平,则可读出转换的数字量。利用MOVX A,@DPTR把该通道转换结果读到A累加器中。

(2) ADC0809电路图及说明

图3-26 ADC0809电路图

模块上的ADIN0~ADIN7插孔对应于图中ADIN0~ADIN7引脚;

模块上的EOC、CLK插孔分别对应于图中EOC、ADCLK引脚;

A.OUT插孔为模拟电压输出,输出范围0V—5V,由模块上电位器A.ADJ分压得到。

CS0809的用法如前所述。

ADC0809的详细用法请查阅相关手册。

(3)ADC0809电路的基本测试方法

调整模块上最左边的10K电位器VREF.ADJ,用万用表测ADC0809芯片12脚的电压,将其调整到5V。

将A.OUT插孔和ADIN0插孔用导线连接,将CS0809片选排的CS3用跳线帽短接,CLK接CPU挂箱时钟发生电路的CLK3,EOC接CPU模块的P1.0。

运行测试程序,设置断点,将ACC中的数据换算为电压(换算方法为ACC数据*5/256),然后与万用表的实测数据相比较,如基本一致则说明该电路正常。然后对ADIN1~ADIN7也进行同样的测试,测试程序中地址需作相应的改变。测试参考程序如下:

CSEG AT 0000H

LJMP START

CSEG AT 4100H

PORT EQU 0A018H

START: SETB P1.0

MOV DPTR, #PORT ;启动通道0

MOVX @DPTR,A

WAIT: JNB P1.0 WAIT

MOVX A, @DPTR

NOP ;设断点处

JMP START

END

二、DAC0832电路

(1) DAC0832芯片引脚及功能

DAC0832是8位D/A转换器,20脚双列直插式封装,其引脚及结构如图3-27所示。

图3-27 DAC0832管脚图

各引脚功能如下:

DI0—DI7:8位数据线,作为8位数字信号输入端;CS:片选端;

ILE:数据锁存允许控制,高电平有效;

WR1:第一级输入寄存器写选通控制,低电平有效,当CS=0、ILE=1、WR1=0时,数据信号被锁存到第一级寄存器中;

XFER:数据传送控制,低电平有效;

WR2:DAC寄存器写选通控制,低电平有效,当XFER=0、WR2=0时,输入寄存器状态传入DAC寄存器中;

I OUT1:D/A转换器电流输出1端,输入数字量全为“1”时,I OUT1最大,输入数字量全为“0”时,I OUT1最小;

I OUT2:电流输出2端,I OUT2+I OUT1=常数;

R F:外部反馈信号输入端,内部以有反馈电阻,根据需要也可外接反馈电阻;

V R:基准电压输入端,电压范围+5V~+15V;

DGND:数字信号接地端,最好与电源共地;

AGND:模拟信号接地端,最好与基准电源共地。

(2)DAC0832电路图

图3-28 DAC0832电路图

模块上VOUT插孔对应于图中VOUT输出端,INPUT、OUT插孔不使用。

模块上最左边10K电位器VREF.ADJ对应于图中POT2,用于基准调节;中间10K电位器ZERO.ADJ对应于图中POT1,用于电位调节;1K电位器RANGE.ADJ对应于图中POT3,用于满量程调节。

0832芯片下方的跳线对应于图中JP1,用于单、双缓冲方式选择。

CS0809的用法如前所述。

DAC0832的详细用法请查阅相关手册。

(3)DAC0832电路的基本测试方法

用跳线帽选择0832的片选信号CS3,0832下方的跳线1、2端短接。

调整模块上10K电位器VREF.ADJ,用万用表测DAC0832芯片8脚的电压,将其调整到5V。

运行测试程序,在断点1处调整电位器ZERO.ADJ和RANGE.ADJ,使VOUT端的电压为5V。在断点2处测量VOUT端电压,如为1V则说明该部分电路正常。测试参考程序如下:

CSEG AT 4000H

LJMP START

CSEG AT 4100H

PORT EQU 0A018H

START: MOV DPTR, #PORT ;输出FFH,调节满量程

MOV A, #0FFH

MOV @DPTR, A

INC DPTR

MOV @DPTR, A

NOP ;设置断点1处

MOV A,#33H

MOV @DPTR, A

INC DPTR

MOV @DPTR, A

NOP ;设置断点2处

JMP SATRT

END

单片机原理实验教案 参考程序

广东松山职业技术学院《MCS-51单片机原理》实验指导书 宁玉珊黄晓林 使用Proteus辅助设计与仿真

实训项目1 Proteus辅助设计与仿真的使用 一、实训目的 学习并熟练掌握PROTEUS辅助设计与仿真软件的使用。通过使用Proteus的ISIS组件绘制AT89C51功能接口原理图,并对原理图编写程序和调试程序,观察在仿真条件下的实现功能的效果。 二、实训内容 在PROTEUS仿真环境下实现一个发光二极管(LED)闪烁。要求LED亮0.5s灭1s,并绘制原理图和编写实现程序,同时用虚拟的示波器观察硬件和软件实现的效果。 三、实训器材 安装有Proteus7软件的计算机 1 台。 四、实训步骤 1)在硬盘建立文件夹用来保存新建项目的所有文件。如在D盘建立PROJECT文件夹。 2)选择‘开始→程序→Proteus7 professional→ISIS professional(或者双击桌面图标ISIS)’,进入Proteus仿真环境,如图P1_1和P1_2所示。 图P1-1

图P1-2 3)选择菜单【File/New Design】创建一个新的设计项目,如图P1_3所示。 图P1-3 4)此时系统会弹出模板选择窗口,选择‘DEFAULT’点击【OK】即可,如图P1_4所示。

图P1_4 5)点击界面左侧工具栏中的图标,接着点击元件池上方的按钮,将要用到的元器件从系统库调到当前设计文件库中。在弹出的Pick Devices对话框左上角的‘Keywords’文本框中键盘输入元件名(或元件的其它关键词)搜索到需要的元器件。双击‘Results’栏下的目标元件,该元件即调出到当前设计文件库的元件列表中,如图P1_5所示。本实训中所要用到的元件如表PS1_1所示。 图P1_5 元件名称搜索关键词元件序 数值备注 号 电阻器Resistor R1 10k 电阻器Resistor R2 1k 电解电容器MINELECT1U63V C1 4.7μ 陶瓷电容器CERAMIC22P C2、C3 22p 晶振CRYSTAL X1 12MHz 单片机AT89C51 U1

实验一系统认识及基本程序设计实验 四、实验内容 1. 将BCD 码整数0~255 存入片内RAM 的20H、21H、22H 中,然后转换为二进制整数00H~FFH,保存到寄存器R4 中。修改20H、21H、22H 单元的内容,如:00H,05H,08H;观察实验结果。 参考程序: ;============================================================== ; 文件名称: Asm2-1.asm ; 功能描述: BCD整数转换为二进制整数(8位, 范围从00H--FFH) ;============================================================== ORG 0000H LJMP MAIN ORG 0100H MAIN: MOV R0, #20H ;BCD存放高位地址 MOV R7, #03H ;BCD码0--255, 最多3位 CLR A MOV R4, A LP1: MOV A, R4 MOV B, #0AH MUL AB ;乘10 ADD A, @R0 ;加下一位的值 INC R0 ;指向下一单元 MOV R4, A ;结果存入R4 DJNZ R7, LP1 ;转换未结束则继续 SJMP MAIN ;设置断点, 观察实验结果R4中的内容 END 2. 将16 位二进制整数存入R3R4 寄存器中,转换为十进制整数,以组合BCD 形式存储在RAM 的20H、21H、22H 单元中。 参考程序: ;============================================================= ; 文件名称: Asm2-2.asm ; 功能描述: 二进制整数(16位)转换为十进制整数(组合BCD) ;============================================================= ; 0--FFFFH(R3R4)==>0--65535 ORG 0000H LJMP MAIN ORG 0100H MAIN: MOV R0, #22H ;转换结果低位地址 MOV A, R0 PUSH ACC ;ACC表示累加器A的直接地址 MOV R7, #03H

/*******************************************************/ #include"reg52.h" #include"stdio.h" #include "string.h" #include "intrins.h" #include"CH375INC.H" /*******************************************************/ #define uchar unsigned char #define uint unsigned int /*******************************************************/ sbit CH375_INT=P3^3; sbit CH375_A0=P3^4; sbit CH375_RD=P3^5; sbit CH375_WR=P3^6; sbit CH375_CS=P3^7; /*******************************************************/ uchar xdata my_buf[512]; /*******************************************************/ void uart_init() { TMOD=0X20; TH1=TL1=0XFD; TR1=1; REN=1; SM0=0;SM1=1; EA=1; ES=1; } /*******************************************************/ void uart_send_pc(uchar *s) //串口监视//void uart_send_pc(uchar a[20]) { //{ uchar len=strlen(s); // uchar i; uchar i; // for(i=0;i<20;i++) for(i=0;i

3 3 3 用查表方式编写y=x1 +x2 +x3 。(x 为0~9 的整数) #include void main() { int code a[10]={0,1,8,27,64,125,216,343,512,729}; //将0~9 对应的每位数字的三次方的值存入code中,code为程序存储器,当所存的值在0~255 或-128~+127 之间的话就用char ,而现在的值明显超过这个范围,用int 较合适。int 的范围是0~65535 或-32768~32767 。 int y,x1,x2,x3; //此处定义根据习惯,也可写成char x1,x2,x3 但是变量y 一定要用int 来定义。 x1=2; x2=4; x3=9; //x1,x2,x3 三个的值是自定的,只要是0~9 当中的数值皆可,也可重复。 y=a[x1]+a[x2]+a[x3]; while(1); //单片机的程序不能停,这步就相当于无限循环的指令,循环的内容为空白。 } //结果的查询在Keilvision 软件内部,在仿真界面点击右下角(一般初始位置是右下角)的watch 的框架内双击“double-click or F2 to add”文字输入y 后按回车,右侧会显示其16 进制数值如0x34,鼠标右键该十六进制,选择第一行的decimal,可查看对应的10 进制数。 1、有10 个8 位二进制数据,要求对这些数据进行奇偶校验,凡是满足偶校验的 数据(1 的个数为偶数)都要存到内RAM50H 开始的数据区中。试编写有关程序。 #include void main() { int a[10]={0,1,5,20,24,54,64,88,101,105}; // 将所要处理的值存入RAM 中,这些可以根据个人随意设定,但建议不要超过0~255 的范围。 char i; // 定义一个变量 char *q=0x50; // 定义一个指针*q 指向内部0x50 这个地址。 for(i=9;i>=0;i--) //9~0 循环,共十次,也可以用for(i=0;i<10;i++) { ACC=a[i]; //将a[i] 的值赋给累加器ACC if (P==0) //PSW0 位上的奇偶校验位,如果累加器ACC 内数值1 的个数为偶数那么P 为0,若为奇数,P 为1。这里的P 是大写的。 { *q=a[i]; q++; // 每赋一个值,指针挪一个位置指向下一个。 } } while(1); //同实验一,程序不能停。 }

实验一键盘输入实验 参考程序: ;4*4矩阵键盘读取程序,利用P0口,列线左起P0.0-P0.3 ;行线上起P0.4-P0.7,行线默认接高电平, ;P3.7作为键盘被读取的提示灯 ; 0 1 2 3 ; 4 5 6 7 ; 8 9 A B ; C D E F ;不考虑有两个或以上按键同时按下的情况, ;每次扫描到一个有按下则结束本次扫描 SETB P3.7 ;确认关闭键盘响应指示灯 MAIN: MOV R0,#0EFH ;用于给键盘行列线确定的电平 MOV R1,#0H ;循环次数,R1=0对应第一行,=1为第二行,以此类推SMAIN: MOV P0,R0 ;改变行线的状态,列线全处于高电平 NOP NOP MOV A,P0 JB ACC.0,L1 ;判断某行的第一列是否按下,按下则P0.0为低电平 MOV R2,#0H ; 将某行的列码保存至R2,显示程序会根据此值和R1的值计算具体为何按键按下 ACALL DISP SJMP MAIN ; 每次扫描到一个有按下则结束本次所有扫描

L1: JB ACC.1,L2 ;判断某行的第二列是否按下,按下则P0.1为低电平MOV R2,#01H ACALL DISP SJMP MAIN L2: JB ACC.2,L3 ;判断某行的第三列是否按下,按下则P0.2为低电平MOV R2,#02H ACALL DISP SJMP MAIN L3: JB ACC.3,SKIP ;判断某行的第四列是否按下,按下则P0.3为低电平MOV R2,#03H ACALL DISP SJMP MAIN ; SKIP: INC R1 ;R1加1,共计4行, MOV A,R0 RL A ;左移R0内的值,以并扫描下一行 MOV R0,A CJNE R1,#04H,SMAIN ;若四行扫描完毕,则跳转至程序最初,相关参数为初始值NO: MOV P2,#0FFH ;程序能执行到此说明四行扫描完毕并且一个按键都没按下,关闭数码管和指示灯 SETB P3.7 SJMP MAIN DISP: CLR P3.7 ;点亮键盘响应指示灯 MOV A,R1 RL A RL A ;R1对应行,具体的按键计算为R1*2+R2 ADD A,R2 ADD A,#3H ;下列指令与表格见有3字节的距离 MOVC A,@A+PC MOV P2,A ;十六进制的高位用数码管L1显示 RET ;共阳数码管0-F的显示码 DIS: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H DB 80H,90H,88H,83H,0C6H,0A1H,86H,8EH DELAY: m ov r7,#255;延时 del1: mov r6,#255; del2: djnz r6,del2 djnz r7,del1 ret END

《单片机原理》实验指导书 计算机科学与技术系2012年8月

目录 第一部分单片机仿真实验 (1) 实验一:流水灯实验 (1) 实验二:中断实验 (4) 实验三:定时器中断实验 (6) 实验四:串行口实验 (9) 实验五:矩阵式键盘输入识别 (13) 实验六:LCD循环显示设计 (19) 第二部分单片机硬件实验............................错误!未定义书签。第一章试验箱系统概述 ...................................错误!未定义书签。 一、系统地址分配........................................... 错误!未定义书签。 二、系统接口定义........................................... 错误!未定义书签。 三、通用电路简介........................................... 错误!未定义书签。第二章实验指导...............................................错误!未定义书签。实验七P1口亮灯和P1口加法器实验........... 错误!未定义书签。实验八简单I/O口扩展(选作).................. 错误!未定义书签。实验九8255控制交通灯................................ 错误!未定义书签。实验十128*64LCD液晶显示 .......................... 错误!未定义书签。

第一部分单片机仿真实验 实验一:流水灯实验 一、实验目的: 通过对P3口地址的操作控制8位LED流水点亮,从而认识单片机的存储器。 二、实验原理图 实验参考电路图如下: 三、参考实验程序 //流水灯实验 #include //包含单片机寄存器的头文件 sfr x=0xb0; //P3口在存储器中的地址是b0H,通过sfr可定义8051内核单片机 //的所有内部8位特殊功能寄存器,对地址x的操作也就是对P1口的

前言 由于单片机具有高可靠性、超小型、低价格、容易产品化等特点,在仪器仪表智能化、实时工业控制、实时数据采集、智能终端、通信设备、导航系统、家用电器等控制应用领域,具有十分广泛的用途。目前在国内单片机应用中,MCS-51系列单片机仍然是一种主流单片机。为配合《单片机应用技术》课程的教学,使学生尽快了解、掌握89C51单片机的使用,特编写了这本上机指导书(基础篇)。 《单片机》是一门实践性很强的课程,提高教学质量的一个重要环节是上机实习和训练,无论是学习汇编语言程序设计,还是学习接口电路和外设与计算机的连接,或者软硬兼施地研制单片机应用系统,不通过加强动手是不能获得预期效果的。本实验指导书提供了9个实验的指导性材料,实验还有一些思考题,可以根据课时的安排和教学要求进行取舍。为了达到某些实验的目的,书中提供的参考程序与实际应用中的程序会有些差别,所以不一定是最优的。 由于时间紧迫,加上编者学识有限,如有不妥之处,欢迎读者批评指正。 编者

实验须知 1. 实验前必须阅读教科书的有关部分和本实验指导书,了解实验目的、内容、步骤,做好实验前的准备工作,编写好实验中要求自编或修改的程序;完成实验前要求完成的准备工作后方可以上机实验,否则不得上机操作。 2. 各种电源的电压和极性不能接错,严禁带电接线和接插元器件。通电前须经过指导教师检查认可后方能通电。 3. 不准随意拨弄各种与实验无关的旋钮和开关,凡与本次实验无关的任何设备都禁止动用和摸弄,注意安全。 4. 严禁用手触摸实验系统印制电路板和元器件的引脚,防止静电击穿芯片。 5. 实验中若损坏仪器或元器件,应及时向指导教师报告,听候处理。 6. 在实验室内保持安静和卫生,不得随意走动和喧哗,集中精力完成实验。 7. 实验完成后,关掉电源,及时整理实验台桌面,保持环境整洁。 8. 按规定认真完成实验报告,对实验中出现的现象进行分析,在规定的时间内交上实验报告。 9. 凡实验或实验报告未能按规定完成的学生,不能参加本课程的考试或考查。

《单片机系统设计技术》 实验指导书 适用专业: 电气、自动化、信息等 编写单位: 电气信息学院 编写人: 曹 林 审核人: 审批人: 批准时间:年月日

目 录 实验1 IO控制LED流水灯实验 (3) 实验2 IO控制数码管动态扫描实验 (5) 实验3 外部中断实验 (8) 实验4 定时器应用控制实验 (10) 实验5 UART实验 (12) 实验6 键盘扫描输入编程 (14) 实验7 UART与PC对话实验 (17) 实验8 ADC数据采集实验 (19)

实验1 IO控制LED流水灯实验 1.实验目的 1)、熟悉KEIL编程环境和调试环境。 2)、掌握单片机汇编语言和指令的用法。 3)、理解简单的IO控制程序,延迟子程序,并对其修改,使其功能改变。 2.实验设备 硬件: PC 机,单片机教学实验开发平台; 软件: KEIL集成开发环境、STC ISP程序下载软件。 3.实验内容 使用P0口控制8个LED 进行流水灯显示。 4.实验预习要求和实验准备要求 预习教科书关于单片机硬件架构内容、IO口的内容,特殊寄存器内容。 预习汇编程序编写、MCS-51指令表。 带上教科书、U盘、具备二进制和十六进制转换的科学计算器。 5.实验原理和步骤 1)实验原理 (1)实验原理图 图1 P0口连接的8盏LED灯 从图1中可以看出:如果需要把LED点亮有两个条件,其一是需要用短接帽把J1的2脚和3脚短接,在PCB上就是将电路板左上角LED和VCC短接起来;其二是P0.X口给出低电平,让电流从VCC开始流经限流电阻、LED后进入单片机的P0.X口,最后到单片机内部的地线上。因此,简单地说就是在短接帽接好的前提下,向P0.X口写0则LED将点亮,写1则LED将熄灭。图中网络标识PORT0_0、PORT0_1……PORT0_7和单片机P0.0、P0.1……P0.7连接,可观察原理图上单片机P0口的网络标识也是PORT0_0、 PORT0_1……PORT0_7。

实验一LED灯控制实验 实验任务: ①试编程用51单片机P0口实现8个LED 灯的交替亮灭控制; ②试编程实现二进制加法的LED显示; ③试编程实现8位LED灯的单方向跑马灯控制。 实验二数码管静态显示控制实验 实验任务: 用P0口驱动LED数码管静态显示0、1、2、3、4五个数码,每两数码时间间隔2S,循环往复显示。 实验三数码管动态显示控制实验 实验任务: 两片四位一体数码管动态显示0—7八个数码,每两位数码时间间隔2S,循环往复显示,P0口用于段码输出,P1口用于位选。 实验四按键识别控制实验 实验任务: 按键识别,用P2口识别按键,K1—K8对应数码为1—8,按下按键,数码管静态显示对应的数码。 参考程序 实验一: ①试编程用51单片机P0口实现8个LED 灯的交替亮灭控制 ORG 0000H ;程序从此地址开始运行 LJMP MAIN ;跳转到MAIN 程序处 ORG 0100H ;MAIN 从0100H处开始 MAIN: MOV P2 ,#00H ;P2为低电平LED 灯亮 ACALL DELAY ;调用延时子程序 MOV P2 ,#0FFH ACALL DELAY AJMP MAIN DELAY: MOV R5,#02H ;将立即数传给寄存器R5 F3: MOV R6,#0FFH F2: MOV R7,#0FFH F1: DJNZ R7,F1 ;若为0程序向下执行,若不为0程序跳转到 DJNZ R6,F2 DJNZ R5,F3 RET END ②试编程实现二进制加法的LED显示 ORG 0000H ;程序从0000开始运行 AJMP MAIN ORG 0100H MAIN: MOV A ,#000h LOOP: MOV P2,A ;全不亮 CALL DELAY ;延时。 INC A ;每次加一。 JMP LOOP DELAY:MOV R5,#50 ;延时。 D1: MOV R6,#40 D2: MOV R7,#248 D3: DJNZ R7,D3 DJNZ R6,D2 DJNZ R5,D1 RET END ③试编程实现8位LED灯的单方向跑马灯控制 ORG 0000H ;程序从0000开始运行 LJMP MAIN ;跳到主程序MAIN: ;主程序循环点亮 MOV P2,#00H ;全亮 LCALL DELAY ;延时一段时间 MOV A,#0FEH ;每次只亮一个

实验一单片机I/O接口实验 【实验目的】 利用单片机的P1口作IO口,学会利用P1口作为输入和输出口。 【实验设备及器材】 笔记本电脑一台 HL-1单片机开发板一个 【实验内容】 编写一段程序,用P1口作为控制端口,使开发板上的LED轮流亮。 【实验要求】 学会使用单片机的P1口作IO口,如果有时间也可以利用P3口作IO口来做该实验。 【实验步骤】 1、实验原理如图1-1所示。 图1-1 2、用汇编语言编写好源程序。(在电脑上的编辑器软件中) 3、将源程序(也叫源代码、源文件)编译成目标程序(也叫目标代码、机器码、目标文件、

HEX文件)。 4、用下载软件将目标程序写入到单片机中。 5、写入后会自动运行目标程序。 如果程序运行不正常、可以用人工检查、软件仿真器等技术排除所编程序中存在的各种错误。错误排除后,再重复上面的3、4步骤。 【实验预习要求】 理解该实验单片机开发板的硬件结构,可以预先把程序编好,然后在Keil C51环境下进行软件仿真。 【实验参考程序】 ;放置数据在0100地址以后 ORG 0100 TMP1: DB 01H,02H,04H,08H,10H,20H,40H,80H,81H,82H DB 84H,88H,90H,0A0H,0C0H,0C1H,0C2H,0C4H,0C8H,0D0H DB 0E0H,0E1H,0E2H,0E4H,0E8H,0F0H,0F1H,0F2H,0F4H,0F8H DB 0F9H,0FAH,0FCH,0FDH,0FEH,0FFH,0FFH,00H,0FFH,00H ORG 0000H ;程序的开始 LJMP MAIN ;转入主程序 ORG 0200H ;主程序的开始 MAIN: MOV DPTR,#TMP1 ;得到数据存放的地址 MOV R7,#50 ;设置循环40次 M1: CLR A MOVC A,@A+DPTR ;读取相应地址的数据 CPL A ;因发光二极管采用共阳极,所以将数据取反再输出 MOV P1,A INC DPTR ;进入下一个数据准备 LCALL DELAY ;转入延时子程序 DJNZ R7,M1 ;40次未完成继续 LJMP MAIN ;40次完成回到主程序循环 DELAY: MOV R5,#255 ;延时子程序 D1: MOV R6,#255 DJNZ R6,$ DJNZ R5,D1 RET END ;程序体结束 【实验思考题】 想出几个实现以上功能的编程方法。

《单片机原理与应用》实验指导 桂林电子科技大学 电子工程与自动化学院 2018.10

实验一单片机开发系统的使用方法 一、实验目的 1.学习单片机开发系统和仿真软件的使用及程序调试方法。 2.掌握汇编程序的编写方法及常用技巧。 二、实验内容 1、学习用Keil软件进行51单片机的软件开发; 学习Keil软件的一般操作,步骤为:项目建立、程序录入、添加文件、编译生成HEX文件、(参见附录1) 2、学习用Keil软件基本调试。(参见附录2); 3、学习Proteus仿真软件的使用(参见附录3); 4、熟悉实验用单片机开发系统(参见操作指导书)。 三、实验原理 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 (见参考程序二) 3、下载 操作方法见附录1 四、实验预习 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

实验1 跑马灯实验 一、实验目的 ●初步学会Proteus ISIS和uVision2单片机集成开发环境的使用; ●初步掌握采用汇编语言与C语言开发单片机系统的程序结构; ●掌握80C51单片机通用I/O口的使用; ●掌握单片机内部定时/计数器的使用及编程方法以及中断处理程序的编写方法。 二、实验设备及器件 ●硬件:PC机,HNIST-1型单片机实验系统 ●软件:Proteus ISIS单片机仿真环境,uVision2单片机集成开发环境 三、实验内容 ●编写一段程序,采用P1口作为控制端口,使与P1口相接的四个发光二极管(D1、D2、D3、D4)按照一定的方式点亮。如点亮方式为:先点亮D1,延时一段时间,再顺序点亮D2……D4,然后又是D4……D1,同时只能有一个灯亮;然后每隔一段时间一次使相邻两个灯亮,三个灯亮,四个灯亮,最后闪烁三次,接着循环变化。 ●基于Proteus ISIS仿真环境完成上述功能的仿真。 ●基于uVision2单片机集成开发环境与硬件平台完成程序的脱机运行。 四、实验原理图 图3.1 跑马灯实验电路原理图 电路原理图如上图3.1所示,AT89S52的P1.0~P1.3控制4个发光二极管,发光

二极管按照一定次序发光,相邻发光二极管的发光时间间隔可以通过定时器控制,还可以通过软件延时实现。 五、软件流程图与参考程序 ●主程序流程图如下: ●参考程序 #include #include #define uchar unsigned char #define uint unsigned int uchar aa,num,speed,flag; uchar code table[]={0x0e,0x0d,0x0b,0x07}; uchar code table1[]={0x0a,0x05,0x09,0x06}; uchar codetable2[]={0x0c,0x09,0x03,0x08,0x01,0x0e,0x0c,0x08,0x00}; void delay(uint z)//延时函数 { uint x; uchar y; for(x=z;x>0;x--) for(y=200;y>0;y--); } void init()//条件初始化函数 { flag=0; speed=10;//控制跑马灯流水速度 TMOD=0x01;//中断方式

《单片机原理及应用》 实验指导书 编写:刘义杰 沈阳工学院 机械与运载学院

实验室管理规定 1.实验室采取责任制度,每组设备安排两名学生,两名学生负责责任 区内的所有设备和卫生情况。 2.按照学号安排座位,每组设备的两名负责人应保证电脑、实验箱和 仿真器等设备的正常运行,出现问题及时向老师汇报。 3.不准坐在实验台上、不准随意踩踏实验台,保护好实验室的桌椅, 桌椅损坏及时汇报给老师,防止出现人身伤害。 4.实验室内不准带入食物,更不容许吃小食品。一经发现取消成绩; 5.实验室电脑不允许玩游戏、观看影音节目。发现违反者严肃处理。 6.每次课程结束后,应把连接的导线收拾到规定处,把电源开关还原 到原来的位置,保证责任区无杂物的情况下,等待检查人员检查后方可离开。 由于操作错误、擅自使用、人为原因导致的损坏,责任区卫生差,上课玩游戏等问题,将根据情况对两名负责人成绩进行扣分处理,严重的可取消成绩。

目录 实验1 基本输入输出设计 (1) 实验2 流水灯设计 (5) 实验3 LED数码管静态显示设计 (7) 实验4 LED数码管动态显示设计 (8) 实验5 LED点阵显示设计 (11) 实验6 键盘控制设计 (12) 实验7 外部中断设计 (14) 实验8 计数器设计 (17) 实验9 定时器设计 (19) 实验10 A/D转换设计 (21)

1 实验1 基本输入输出设计 一、实验目的 1. 熟悉C51语言及特点; 2. 熟练使用Keil uvision3集成开发环境和仿真调试的使用; 3. 学习AT89C51端口的基本输入输出方法。 二、实验说明 本次实验介绍Keil uvision3软件的使用,通过数据传送程序的编写,熟悉C51语言编程方法和仿真调试方法。 三、参考实例 使用C51语言,给单片机的P2口赋值为0X00,并使P3口的特殊功能为P3.2=0,P3.3=0,P3.6=0,要求在Keil uvision3集成开发环境中仿真P2口和P3口的功能,并看到实际的调试结果。 参考程序: #include //定义8051寄存器的头文件 sbit a=P3^2; //定义P3口引脚P3.2 sbit b=P3^3; //定义P3口引脚P3.3 sbit c=P3^6; //定义P3口引脚P3.6 void main() //主程序开始 { P2=0x00; //给P2口赋值为00 a=0;b=0;c=0; //P3.2、P3.3、P3.6引脚赋值为0 } //主程序结束

实验一发光二极管的移动控制 一、实验目的 1.熟悉并行接口的设置与应用; 2.进一步熟悉编译软件和下载软件的使用; 3.熟悉C语言中移位、延时、数组等指令的应用; 4.增强学习单片机的兴趣。 二、实验内容 1.参考课本P128“发光二极管的移动控制”实验程序,实现发光二极管循环点亮的按键控 制。 ) 2.设计一个完整程序(另建一个文档),实现8个led灯的自动顺序(加法)点亮和逆序 (减法)点亮。见参考程序,并在程序中添加必要的解释文字。 三、实验步骤 1.以班级和姓名为文件夹名称在D盘根目录下新建一个子目录文件夹,用来保存每次实验的项目和程序。(注意:每次实验的位置固定,即下次实验的计算机还是上次的计算机。) 2.再在这个子目录下以实验题目为名新建一个文件夹。打开ICCAVR开发编程软件,新建一个工程文件项目,参照程序清单或根据实验要求自己重新修改设置并输入程序。 3.保存程序,并将程序源文件添加到项目里。见下图1。 图1 ( 4.设置项目属性,选择目标芯片等,见下图2,3。

图2 图3 5.编译程序。将所输入的程序进行编译(菜单Project→ Make命令),或者在工具栏单击 按钮),若编译时下方出现错误提示,说明程序有语法错误,此时必须根据编译器所列 出的错误消息,逐条查改,重新编译,直到错误消除并生成*.hex文件。 6.功能仿真。利用proteus或AVR studio的仿真功能对程序进行功能性仿真,验证程序功能是否正确。 7.打开下载软件(progisp或AVR Studio里的JTAG ICE),将刚刚生成的相应*.hex文件写入单片机(在此之前,须将单片机实验板按要求与PC机连接正确,并接通电源)。 8.验证硬件实现的结果是否与功能要求一致。 四、参考程序(实现8个led灯的自动顺序(加法)和逆序(减法)点亮的部分程序) > /*********************** 系统外接8M晶振 ************************/ unsigned char i; while (1) { for (i = 0; i < 8; i ++) { PORTB = ~(1 << i); delay_ms(200); 。 } for (i = 8; i > 0; i --) { PORTB = ~(1 << i-1); delay_ms(200); } }

软件实验部分

实验一Keil C51软件的使用 Keil C51 软件是众多单片机应用开发的优秀软件之一,它集编辑,编译,仿真于一体,支持汇编,PLM 语言和 C 语言的程序设计,界面友好,易学易用。 下面介绍Keil C51软件的使用方法 进入Keil C51 后,屏幕如下图所示。几秒钟后出现编辑界 启动Keil C51时的屏幕 进入Keil C51后的编辑界面 简单程序的调试 1.建立一个新工程 单击Project菜单,在弹出的下拉菜单中选中New Project选项

2.然后选择你要保存的路径,输入工程文件的名字,比如保存到C51目录里,工程文件的名字为C51,如下图所示,然后点击保存。 3.这时会弹出一个对话框,要求你选择单片机的型号,你可以根据你使用的单片机来选择 ,keil c51几乎支持所有的51核的单片机,我这里还是以大家用的比较多的Atmel 89C51来说明,如下图所示,选择89C51之后,右边栏是对这个单片机的基本的说明,然后点击确定。 4.完成上一步骤后,屏幕如下图所示

5.在下图中单击“File”菜单,再在下拉菜单中单击“New”选项 新建文件后屏幕如下图所示

此时光标在编辑窗口里闪烁,这时可以键入用户的应用程序了,但笔者建议首先保存该空白的文件,单击菜单上的“File”,在下拉菜单中选中“Save As”选项单击,屏幕如下图所示,在“文件名”栏右侧的编辑框中,键入欲使用的文件名,同时,必须键入正确的扩展名。注意,如果用C语言编写程序,则扩展名为(.c);如果用汇编语言编写程序,则扩展名必须为(.asm)。然后,单击“保存”按钮。 6)回到编辑界面后,单击“Target 1”前面的“+”号,然后在“Source Group 1”上单击右键,弹出如下菜单

用查表方式编写y=x13+x23+x33。(x为0~9的整数) #include void main() { int code a[10]={0,1,8,27,64,125,216,343,512,729};//将0~9对应的每位数字的三次方的值存入code中,code为程序存储器,当所存的值在0~255或-128~+127之间的话就用char,而现在的值明显超过这个范围,用int较合适。int的范围是0~65535或-32768~32767。 int y,x1,x2,x3;//此处定义根据习惯,也可写成char x1,x2,x3但是变量y一定要用int 来定义。 x1=2; x2=4; x3=9;//x1,x2,x3三个的值是自定的,只要是0~9当中的数值皆可,也可重复。 y=a[x1]+a[x2]+a[x3]; while(1);//单片机的程序不能停,这步就相当于无限循环的指令,循环的内容为空白。} //结果的查询在Keilvision软件内部,在仿真界面点击右下角(一般初始位置是右下角)的watch的框架内双击“double-click or F2 to add”文字输入y后按回车,右侧会显示其16进制数值如0x34,鼠标右键该十六进制,选择第一行的decimal,可查看对应的10进制数。 1、有10个8位二进制数据,要求对这些数据进行奇偶校验,凡是满足偶校验 的数据(1的个数为偶数)都要存到内RAM50H开始的数据区中。试编写有关程序。 #include void main() { int a[10]={0,1,5,20,24,54,64,88,101,105};//将所要处理的值存入RAM中,这些可以根据个人随意设定,但建议不要超过0~255的范围。 char i; //定义一个变量 char *q=0x50; //定义一个指针*q指向内部0x50这个地址。 for(i=9;i>=0;i--)//9~0循环,共十次,也可以用for(i=0;i<10;i++) { ACC=a[i];//将a[i]的值赋给累加器ACC if (P==0)//PSW0位上的奇偶校验位,如果累加器ACC内数值1的个数为偶数那么P为0,若为奇数,P为1。这里的P是大写的。 { *q=a[i]; q++;//每赋一个值,指针挪一个位置指向下一个。 } } while(1);//同实验一,程序不能停。

单片机原理及应用实验指导书 2013年9月

1单片机实验板介绍 1.1板载硬件资源 1采用STC8951RC(与标准51指令、脚位完全兼容),支持在线串行ISP下载。 2供电方式:USB供电 3 串口RS232 4 4个LED发光管 5 四位数码管 6 4个独立式键盘(包含外部中断按键) 7 一个蜂鸣器 8 一个PS2接口 9 1602液晶接口(选配件) 10 128*64液晶接口,单板支持带字库(ST7920)和不带字库(KS0108)两种128*64液晶.(选配件) 11 DS18B20温度传感器(选配件) 12 IrDA红外接收头(选配件) 1.2原理图

3/41

1.3 PCB图

1.4实验箱配置 基础板配置: 1、STC89C51支持在线下载程序。. 2、8位LED发光二极管(可做流水灯实验)。 3、4位数码管(可做动态扫描及静态显示实验)。 4、4 *4矩阵键盘。(也可将其中的行或列接地,将独立按键实验)。 5、MAX232芯片RS232通讯接口(可以做为与计算机通迅的接口,同时也可 做为STC单片机下载程序的接口,SST单片机仿真接口) 6、USB供电系统,直接插接到电脑USB口即可提供电源,此时不需另接直流 电源。 7、蜂鸣器(可做单片机发声实验)。 8、ADC0809芯片(可做模数转换实验)。 9、DAC0832芯片(可做数模转换实验)。 10、DS18B20温度传感器接口 11、单片机32个IO口全部引出,方便自己进行自由扩展。 12、AT24C02 EEROM(可做IIC串行总线实验)。 13.DS1302实时时钟(可做IIC串行总线实验)。 14、SM0038一体化红外接收头(可做红外遥控器解码实验)。 15、8155电路,可做扩展I/O口使用。 16、外扩32K RAM 62256芯片电路。 17、1602液晶接口。 仿真配置: 可选配SST89E516仿真芯片,代替STC89C51,实现在线仿真功能。 1.5仿真下载使用说明 单片机综合创新实验板的单片机仿真与下载分成由不同的单片机完成。仿真由单片机SST89E516芯片来完成仿真,具体的仿真电路就是相关串口通讯电路,仿真的实现可见第二章相关内容。单片机的下载由基础板的单片机STC89C51完成。两种单片机引脚完全相同,直接代换。32个IO都由排针引出,方便用户做

目录 一、实验一 (1) 二、实验二 (7) 三、实验三 (11) 四、实验四 (15)

实验一定时/计数器验证实验 一、实验目的 熟悉定时/计数器T0的特点,学会合理选择定时方式并能根据具体情况结合软件的方式定时。 二、实验设备及器件 IBM PC机一台 PROTEUS 硬件仿真软件 Keil C51。 三、实验内容 用AT89C51单片机的定时/计数器T0产生1s的定时时间,作为秒计数时间,当1s产生时秒计数加1;秒计数到60时,自动从0开始。 四、实验要求 要求采用Proteus软件实现上述实验。 五、实验步骤 1.打开Proteus ISIS编辑环境,按照表1-1所列的元件清单添加元件。 元件全部添加后,在Proteus ISIS的编辑区域中按图1-1所示的原理图连接硬件电路。 图1-1 电路原理图 2.根据参考程序绘出流程图,并辅以适当的说明。 流程图如图1-2所示: 图1-2 程序流程图 3.打开KeilμVision4,新建Keil项目,选择AT89C51单片机作为CPU,将参考 程序导入到“Source Group 1”中。在“Options for Target”对话窗口中,选中“Output”选项卡中的“Create HEX File”选项和“Debug”选项卡中的“Use:Proteus VSM Simulator”选项。编译汇编源程序,改正程序中的错误。 4.在Proteus ISIS中,选中AT89C51并单击鼠标左键,打开“Edit Component” 对话窗口,设置单片机晶振频率为12MHz,在此窗口中的“Program File”

实验2 单片机数据区传送程序设计 一、实验目的 1.进一步掌握汇编语言程序设计和调试方法。 2.了解单片机RAM中的数据操作。 二、实验设备 1.Dais-80958B单片机实验开发系统一套 2.WD990微机专用电源一台 3.PC机一套 三、实验线路 同实验1。 四、实验内容 1.要求:编写程序把R2、R3源RAM区首地址内的R6、R7字节数据传送到R4、R5目的地址的RAM区。 2.框图如下,文件名为:X X X X S2 班级学号 五、实验步骤

1.打开电源,PC机开机正常工作后,进MCS-51仿真开发系统调试平台,编译源文件S2成功。(详细过程同实验1的步骤1~3) 2.在R2、R3中输入源地址(例如:0000H),R4、R5中输入目的地址(例如2000H),R6、R7中输入字节数(例如:1FFFH)。 3.查看RAM 区0000~1FFFH和2000~3FFFH内容,也可自己重新赋值。 4.运行程序XXXXS2,首先单步,然后用自动单步,最后用连续运行方式。 5.记录下运行结果,检查0000~1FFFH中内容是否和2000~3FFFH内容完全一致。六、要求 1.写出自己编写的程序,并写出原理性注释。 2.将检查程序运行的结果,分析一下是否正确。 七、思考题 如果使0000~1000H中内容与2000~3000H内容完全一致,如何来改写程序? 八、参考程序 ORG 0100H 8B82 SE22: MOV DPL,R3 8A83 MOV DPH,R2 ;建立源程序首址 E0 MOVX A,@DPTR ;取数 8D82 MOV DPL,R5 8C83 MOV DPH,R4 ;目的地首址 F0 MOVX @DPTR.A ;传送 BBFF01 CJNE R3,#0FFH,LO42 0A INC R2 0B LO42: INC R3 ;源地址加1 BDFF01 CJNE R5,#0FFH,LO43 OC INC R4 OD LO43: INC R5 ;目的地址加1 BF0006 CJNE R7,#00H,LO44 BE0006 CJNE R6,#00H,LO45 ;字节数减1 80FE SJMP $ 00 NOP 1F LO44: DEC R7 80E0 SJMP SE22 1F LO45: DEC R7 1E DEC R6 80DC SJMP SE22 ;未完继续 END 实验3 数据排序实验 一、实验目的

相关文档
最新文档