1、单片机实验指导书计算机系单片机原理及应用实验指导书淮阴工学院计算机工程学院 编2009年9月目 录目 录 2实验一 仿真环境使用 3实验二 数据区传送、数据排序程序实验 9实验三 键盘扫描显示实验 12实验四 脉冲计数(定时/计数器的记数功能实验) 19实验五 A/D转换实验 24实验六 D/A0832转换实验 28实验七 步进电机控制实验 32实验八 RAM扩展实验 39实验九 力测量实验 42实验十 温度测量实验 47实验十一 点阵LCD液晶显示屏实验 51 实验一 仿真环境使用一、实验目的1、熟悉仿真环境。2、学习简单程序调试的方法。二、实验内容:1、KEIL软件的安装将带有KEIL安装
2、软件的光盘放入光驱里,打开光驱中带有KEIL安装软件的文件夹,双击Setup文件夹中“Setup”即开始安装。如果您的微机上已经安装了KEIL的软件,会提示您是否要先把您以前的软件先卸载,此时您最好是先卸载掉,然后再安装本软件(如图所示)。如果您需要把软件安装在C盘以外的其它盘,需要运行一个补丁文件,直接打开KEIL软件已安装目录中的KEILUV2,双击“Crackdir”图标,点击确定即完成补丁的安装(如图所示)。实验中所用实验例程在盘符keiluv2中,文件名为“3000TB51配套实验程序”都是工程文件,直接打开就可以进入调试界面;本书中所讲软件实验在“51asm”文件夹中,都以ASM的
3、格式存放文件夹中。2、硬件安装连接51CPU板,在实验箱右下角有三个插座:J1、J2、J3,用来连接51CPU板,在51CPU板上有一个小拨码开关:J18,是单片机的EA脚,是用来选择读片内还是片外ROM的,拨向左边为读片内ROM;拨向右边为读片外ROM。KEIL仿真器与实验箱的连接:将KEIL仿真器40芯的排线连到51CPU板的40芯插座上,仿真器的USB连接线连到微机的USB口。八段数码管右上角的两个拨码小开关是用来设置工作模式的,将两个拨码小开关同时拨向右边是选择51单片机工作模式,此时应拨向右边。3、Keil C软件的操作说明新建一个项目文件。首先点击 Keil uVision2 ,进
4、入uVision2界面。点击工具栏Project选项中的New Project,准备开始建立自己的项目。输入工程文件名称,并选择保存工程文件的目录。为项目文件选择一个目标器件(如ATMEL89C51),如图所示。用鼠标对项目工作区的目标1,点击右键在弹出的菜单中选择“为目标目标1设置选项”如下图所示。在“为目标目标1设置选项”中,点击“调试”菜单,在此菜单中可选择是使用硬件仿真,还是软件仿真,连接实验箱做实验时选择硬件仿真,点击硬件仿真选项后面的设置选项,在此对对话框中选择串口和波特率,串口根据所连电脑来决定。波特率为38400。选择串口选择波特率硬件仿真软件仿真点击“文件/新建”创建源程序文
5、件并输入程序代码。在文本框中输入原程序,如下图所示点击“文件/保存“对程序进行保存用鼠标对项目工作区的目标1,点击右键在弹出的菜单中选择添加文件到原代码组,如下图所示在弹出的添加文件框中,选择需要添加到项目中的文件点击编译连接的图标,对项目文件进行编译点击“调试/启动/停止调试”进入调试界面在调试界面中可以对程序进行单步或者全速运行的调试连机/停止单步全速运行若要查看内存中的数据,点击“视图/存储器窗口”在此地址框中,输入不同的指令查看内部数据如果需要查看一些内部数据,在菜单栏点击视图/存储窗口。C:0X地址显示程序存储区数据X:0X地址显示数据存储区中数据D:0X地址显示CPU内部存储区中数
6、据注意:仿真器使用者使用时应注意:Keil C仿真器用户程序在全速运行时,如果需暂停运行,请按实验仪键盘“RST”,此时仿真器存储器数据清零。如果您要再次运行您所编写的程序,就必须重新装载运行。2、拆字程序:把8000H地址上的内容拆开,高位送8001H地址的低位,低位送8002H地址的低位,8001H、8002H地址的高位清零;参考程序 ORG 0000H MOV DPTR,#8000H ;指定的字节 MOVX A,DPTR MOV B,A ;暂存 SWAP A ;交换 ANL A,#0FH ;屏敝高位 INC DPTR MOVX DPTR,A INC DPTR MOV A,B ANL A,
7、#0FH ;指定字节的内容屏敝高位 MOVX DPTR,ALOOP: SJMP LOOP END3实验结果:三、实验心得实验二 数据区传送、数据排序程序实验一、实验目的1、学习Windows平台下的编辑、编译、排错调试方法。2、学习修改和观察变量的方法;综合使用单步、断点调试的方法。二、实验内容:1、数据传送把内部RAM中起始地址为DATA的数据传送到内部RAM以BUFFER为首地址的区域,直到发现“$”字符的ASCII码为止,数据串的最大长度为32个字节。2、多字节BCD码加法3、编写并调试一个排序子程序,其功能为用冒泡法将内部RAM中几个单字节无符号正整数,按从小到大的次序重新排列。三、实
8、验器材:计算机 1 台 四、实验步骤1、参阅硬件安装把综合实验仪、仿真器与PC机串行口连起来,打开电源。2、在PC机上用鼠标点击“KEIL uvision 2”图标,进入KEIL调试环境,选择串行口,点击“确认”。3、打开“项目/新建项目”,输入项目名,选择目标MCU,如:intel 89C52。4、编辑文件:用鼠标点击文件|新文件,在文本编辑器中编辑程序:5、文件保存:用鼠标点击文件|保存,在对话框中输入文件名。6、为项目添加文件:单击左边的项目工作区/源代码组1右键在出现菜单中选择添加文件到组“源代码组1”,在弹出的对话框中选中您刚保存的文件,点击确认完成项目文件的添加。7、为项目设置通讯
9、口:单击左边的项目工作区/目标1右键在出现的菜单中选择为目标“目标1”设置选项,在弹出的菜单中选择调试。在新窗口中选择使用Keil monitor-51 Driver。单击设置在出现的窗口中设置串口和波特率(注:波特率必须为38400)。8、文件编译、连接、装载:用鼠标点击项目/重建所有目标文件,系统自动进行编译,并出现信息窗口。若有语法错误,则需重新修正,需再次执行重建所有目标文件;若无语法错误,点击调试/启动/停止调试后,进入调试状态。9、设置观察窗口:用鼠标点击视图/存储口窗口,在地址口输入CPU内部存贮区地址,回车之后出现地址为50H的数据显示于窗口中。10、单步执行程序:按F11键一
10、条一条地执行下去,注意观察左边寄存器区中相应的寄存器或者CPU内部存贮区中相应的数据寄存器单元的数据变化。11、连续运行:用鼠标点击外围设备/复位CPU,使PC指向0000H,点击调试/运行后,程序开始连续运行。如需暂停,用鼠标点击调试/停止运行。12、断点运行:要使程序执行到某条指令处暂停,如希望程序执行到LOOP1处暂停,可按如下操作:将光标移到LOOP1处双击鼠标左键,即可设置断点,用鼠标点击调试/运行,程序将在LOOP行停止运行。13、复位:用鼠标点击外围设备/复位CPU,强迫PC指向0000H。图2 数据排序程序流程图N图1 数据传送子程序流程图 数据传送子程序1、数据传送 把内部R
11、AM中起始地址为DATA的数据传送到内部RAM以BUFFER为首地址的区域,直到发现“$”字符的ASCII码为止,数据串的最大长度为32个字节。Org 0000hMOV R0,#DATAMOV R1,#BUFFERMOV R2,#20HLOOP: MOV A, R0CLR C SUBB A, #24H JZ EXIT MOV A,R0 MOV R1, A INC R1 INC R0 DJNZ R2,LOOPL00P1: AJMP $ END2、多字节BCD码加法入口条件:字节数在R7中,被加数在R0中,加数在R1中。出口条件:和在R0中,最高位进位在CY中。影响资源:PSW、A、P2 堆栈需求
12、:2字节 Org 0000h BCDA:MOV A,R7 MOV R2,A ADD A,R0 MOV R0,A MOV A,R2 ADD A,R1 MOV R1,A CLR C BCDl: DEC R0 DEC R1 MOV A,R0 ADDC A, R1 DA A MOV R0,A DJNZ R2, BCDlret3;用冒泡法进行数据排序 ORG 0000H MOV R3,#50HLOOP0: MOV A,R3 MOV R0,A ;指针送R0 MOV R7,#0AH ;长度送R7 CLR 00H ;标志位为0 MOV A,R0LOOP1: INC R0 MOV R2,A CLR C MOV
13、22H,R0 CJNE A,22H,LOOP2 ;相等吗? SETB CLOOP2: MOV A,R2 JC LOOP3 ;小于或等于不交换 SETB 00H XCH A,R0 DEC R0 XCH A,R0 INC R0 ;大于交换位置LOOP3: MOV A,R0 DJNZ R7,LOOP1 JB 00H,LOOP0 ;一次循环中有交换继续LOOP: SJMP LOOP ;无交换退出 END五、实验心得实验三 键盘扫描显示实验一、实验目的:1、掌握键盘和显示器的接口方法和编程方法。2、掌握键盘扫描和LED八段数码管显示器的工作原理。二、实验要求:在上一个实验的基础上,利用实验仪提供的键盘扫
14、描电路和显示电路,做一个扫描键盘和数码显示实验,把按键输入的键码在六位数码管上显示出来。实验程序可分成三个模块。1、键输入模块:扫描键盘、读取一次键盘并将键值存入键值缓冲单元。2、显示模块:将显示单元的内容在显示器上动态显示。3、主程序:调用键输入模块和显示模块。三、实验器材:1、单片机综合实验仪 1 台 2、KEIL仿真器 1 台 3、计算机 1 台 四、实验电路:这里只是键盘示意图,详细原理参见“8155键显模块”。 列码(0e101H) 行码(0e103H)图3 键盘示意图五、实验说明:本实验仪提供了一个64的小键盘,向列扫描码地址(0e101H)逐列输出低电平,然后从行码地址(0e10
15、3H)读回,如果有键按下,则相应行的值应为低,如果无键按下,由于上拉的作用,行码为高.这样就可以通过输出的列码和读取的行码来判断按下的是什么键。在判断有键按下后,要有一定的延时,防止键盘抖动。列扫描码还可以分时用作LED的位选通信号。图4 实验主程序框图六、实验流程图: 否查表得键码按照行列计算键值等待键盘释放初始化地址参数读入行信号 该列有键输入?列扫描信号移位输出列扫描信号开始是否6列扫描完?返回图5 读键输入子程序框图显示程序框图见上个实验七、实验程序: ;键盘扫描实验OUTBIT equ 0e101h ; 位控制口CLK164 equ 0e102h ; 段控制口(接164时钟位)DAT
16、164 equ 0e102h ; 段控制口(接164数据位)IN equ 0e103h ; 键盘读入口 ORG 0000H LJMP STAR ;= KEY1: MOV 13H,#06H MOV 12H,#20H KEY2: MOV A,12H CPL A MOV R7,A MOV DPTR,#0E101H MOV A,R7 MOVX DPTR,A MOV A,12H CLR C RRC A MOV 12H,A MOV DPTR,#0E103H MOVX A,DPTR MOV R7,A MOV A,R7 CPL A MOV R7,A MOV A,R7 ANL A,#0FH MOV 14H,A
17、DEC 13H MOV R7,13H MOV A,R7 JZ KEYDIS MOV A,14H JZ KEY2 KEYDIS: MOV A,14H JZ TESTKEY5 MOV A,13H ADD A,ACC ADD A,ACC MOV 13H,A MOV A,14H JNB ACC.1,TESTKEY INC 13H SJMP TESTKEY2 ;=;键盘扫描 TESTKEY: MOV A,14H JNB ACC.2,TESTKEY1 INC 13H INC 13H SJMP TESTKEY2 TESTKEY1: MOV A,14H JNB ACC.3,TESTKEY2 MOV A,#03
18、H ADD A,13H MOV 13H,A TESTKEY2: MOV DPTR,#0E101H CLR A MOVX DPTR,A TESTKEY3: MOV R7,#0AH LCALL MLOOP LCALL MLOOP4 MOV A,R7 JNZ TESTKEY3 MOV R7,13H MOV A,R7 MOV DPTR,#0134H MOVC A,A+DPTR MOV R7,A RET ;= TESTKEY4: DB 22H ;= TESTKEY5: MOV R7,#0FFH RET ;= GETKEY: MOV 10H,#20H MOV 0EH,#00H GETKEY1: MOV A
19、,0EH CLR C SUBB A,#06H JNC GOON2 MOV DPTR,#0E101H CLR A MOVX DPTR,A MOV R7,0EH MOV A,#08H ADD A,R7 MOV R0,A MOV A,R0 MOV R7,A MOV 11H,R7 MOV 0FH,#00H GETKEY2: MOV A,0FH CLR C SUBB A,#08H JNC GOON1 MOV A,11H JNB ACC.7,KLOOP MOV DPTR,#0E102H MOV A,#01H MOVX DPTR,A SJMP KLOOP1 ;= KLOOP: MOV DPTR,#0E102
20、H CLR A MOVX DPTR,A KLOOP1: MOV DPTR,#0E102H MOVX A,DPTR MOV R7,A MOV A,R7 ORL A,#02H MOV R7,A MOV A,R7 MOVX DPTR,A MOV DPTR,#0E102H MOVX A,DPTR MOV R7,A MOV A,R7 ANL A,#0FDH MOV R7,A MOV A,R7 MOVX DPTR,A MOV A,11H ADD A,ACC MOV 11H,A INC 0FH SJMP GETKEY2 GOON1: MOV DPTR,#0E101H MOV A,10H MOVX DPTR,
21、A MOV R7,#01H LCALL MLOOP MOV A,10H CLR C RRC A MOV 10H,A INC 0EH SJMP GETKEY1 GOON2: RET ;= WAIT: MOV DPTR,#0E100H MOV A,#03H MOVX DPTR,A MOV 08H,#0FFH MOV 09H,#0FFH MOV 0AH,#0FFH MOV 0BH,#0FFH MOV 0CH,#00H MOV 0DH,#00H WAIT1: LCALL GETKEY LCALL MLOOP4 MOV A,R7 JZ WAIT1 LCALL KEY1 MOV R6,#00H MOV R
22、6,#00H MOV A,R7 ANL A,#0FH MOV R7,A MOV A,#24H ADD A,R7 MOV DPL,A MOV A,#01H ADDC A,R6 MOV DPH,A CLR A MOVC A,A+DPTR MOV R7,A MOV 0DH,R7 SJMP WAIT1 RET ;=TAB:Q0124: DB 3FH, 06H, 5BH, 4FH, 66H, 6DH, 7DH, 07H ;?.Ofm.Q012C: DB 7FH, 6FH, 77H, 7CH, 39H, 5EH, 79H, 71H ;ow|9yqQ0134: DB 00H, 01H, 04H, 07H,
23、0FH, 02H, 05H, 08H ;.Q013C: DB 0EH, 03H, 06H, 09H, 0DH, 0CH, 0BH, 0AH ;.Q0144: DB 10H, 11H, 12H, 13H, 14H, 15H, 16H ;.;= MLOOP: MOV 15H,R7 MLOOP1: MOV R7,15H DEC 15H MOV A,R7 JZ MLOOP3 MOV 16H,#64H MLOOP2: MOV A,16H JZ MLOOP1 DEC 16H SJMP MLOOP2 SJMP MLOOP1 MLOOP3: RET ;= MLOOP4: MOV DPTR,#0E101H CL
24、R A MOVX DPTR,A MOV DPTR,#0E103H MOVX A,DPTR MOV R7,A MOV A,R7 CPL A MOV R7,A MOV A,R7 ANL A,#0FH MOV R7,A RET ;= STAR: MOV R0,#7FH CLR A STAR1: MOV R0,A DJNZ R0,STAR1 MOV SP,#16H LJMP WAIT END实验现象八、实验心得实验四 脉冲计数(定时/计数器的记数功能实验)一、实验目的:1、熟悉8031定时/计数器的记数功能;2、掌握初始化编程方法;3、掌握中断程序的调试方法。二、实验内容: 定时/记数器0对外部输入的
25、脉冲进行计数,并送显示器显示。三、实验器材: 1、单片机综合实验仪 1台 2、KEIL仿真器 1台3、连线若干根 4、计算机 1台 四、实验原理: MCS-51有两个16位的定时/计数器:T0和T1。计数和定时实质上都是对脉冲信号进行计数,只不过脉冲源不同而已。当工作在定时方式时,计数脉冲来自单片机的内部,每个机器周期使计数器加1,由于计数脉冲的频率是固定的(即每个脉冲为1个机器周期的时间),故可通过设定计数值来实现定时功能。当工作在计数方式时,计数脉冲来自单片机的引脚,每当引脚上出现一个由1到0的电平变化时,计数器的值加1,从而实现计数功能。可以通过编程来指定时计数器的功能,以及它的工作方式
26、。读取计数器的当前值时,应读3次。这样可以避免在第一次读完后,第二次读之前,由于低位溢出向高位进位时的错误。 五、接线方案:接线方案2:接线方案1:图6 实验接线图六、程序框图:结 束开 始堆栈、定时/计数初始化开定时器取出TL0/TH0内容转换显 示图7 主程序流程图图8 二转十进制程序流程图七、实验步骤: 用连线把“总线插孔”的P3.4孔连“脉冲源”的“DOWN”孔 ,执行程序,按动AN锁按钮,观察数码管上计数脉冲的个数。八、思考问题:把P3.4孔分别与“脉冲源”的2MHZ、1MHZ、0.5MHZ孔相连时,显示值反而比连0.25MHZ孔更慢,为什么?当fosc=6MHZ时,能够计数的脉冲信号最高频率为多少?九、实验程序: ;对定时器0外部输入的脉冲信号进行计数且显示OUTBIT equ 0e101hCLK164 equ 0e102h ; 段控制口(接164时钟位)DAT164 equ 0e102h ; 段控制口(接164数据位)LEDBuf equ 40hIN equ 0e103h ORG 0000h MOV SP,#60H MOV DPTR,#0e100H ;8155初始化 MOV A,#03H MOVX DPTR,A MOV TMOD,#05H
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1