当前位置:文档之家› 单片机原理及其接口技术实验报告

单片机原理及其接口技术实验报告

单片机原理及其接口技术实验指导书实验1 Keil C51的使用(汇编语言)一.实验目的:初步掌握Keil C51(汇编语言)和ZY15MCU12BD型综合单片机实验箱的操作和使用,能够输入和运行简单的程序。

二.实验设备:ZY15MCU12BD型综合单片机实验箱一台、具有一个RS232串行口并安装Keil C51的计算机一台。

三.实验原理及环境:在计算机上已安装Keil C51软件。

这个软件既可以与硬件(ZY15MCU12BD型综合单片机实验箱)连接,在硬件(单片机)上运行程序;也可以不与硬件连接,仅在计算机上以虚拟仿真的方法运行程序。

如果程序有对硬件的驱动,就需要与硬件连接;如果没有硬件动作,仅有软件操作,就可以使用虚拟仿真。

四:实验内容:1.掌握软件的开发过程:1)建立一个工程项目选择芯片确定选项。

2)加入C 源文件或汇编源文件。

3)用项目管理器生成各种应用文件。

4)检查并修改源文件中的错误。

5)编译连接通过后进行软件模拟仿真。

6)编译连接通过后进行硬件仿真。

2.按以上步骤实现在P1.0输出一个频率为1Hz的方波。

3.在2的基础上,实现同时在P1.0和P1.1上各输出一个频率同为1Hz但电平状态相反的方波。

五:程序清单:ORG 0000HAGAIN:CPL P1.0MOV R0,#10 ;延时0.5秒LOOP1:MOV R1,#100LOOP2:MOV R2,#250DJNZ R2,$DJNZ R1,LOOP2DJNZ R0,LOOP1SJMP AGAINEND六:实验步骤:1.建立一个工程项目选择芯片确定选项如图1-1所示:①Project→②New Project→③输入工程名test→④保存工程文件(鼠标点击保存按钮)图1-1创建工程名弹出下一界面。

如图1-2所示:①选CPU厂家(Atmel)→②选CPU型号(89C51), ③选好后确定图1-2选厂家,选CPU 型号接着选晶振频率及生成HEX 文件等。

如图1-3所示:①Project→②Options for Target ‘Target 1’…→③在Target中→④更改CPU 晶振频率为12MHz→⑤在Output中→⑥选择生成HEX 格式其它采用缺省设置→⑦选好后确定。

图1-3选晶振频率及生成HEX 文件等窗口2.建立汇编源文件如图1-4所示:①File→②New, ③弹出源文件编辑窗口。

输入以下源文件:ORG 0000HAGAIN:CPL P1.0MOV R0,#10 ;延时0.5秒LOOP1:MOV R1,#100LOOP2:MOV R2,#250DJNZ R2,$DJNZ R1,LOOP2DJNZ R0,LOOP1SJMP AGAINEND图1-4进入编辑源文件窗口源程序编写完后,①File→②Save As 将文件以test.asm保存在E:\test 目录下,获得汇编语言源程序。

3.用项目管理器生成(编译)各种应用文件①点击Target 1 前之+ 号→出现②Source Group1→③点击它并按鼠标右键会生弹出下拉菜单见图1-5编译文件文件窗口→选择④Add Files to Group ‘ Source Group 1’ →⑤点击add向项目中添加Test.asm 源文件→⑥点击close关闭Add Files t o Group ‘ Source Group 1’窗口→⑦在Source Group 1 前会出现一个+号→⑧点击之弹出test. asm 文件名点击该文件名→⑨主窗口中会出现该程序图1-5进入编译文件文件窗口编译:Project→Build target 就会生成一系列到文件如OBJ 文件LST 文件HEX文件等。

4.检查并修改源文件中的错误如果在源文件中存在错误在Output 窗口中会出现错误提示信息,你可以在源程序中进行修改,然后存盘后重新Build 观察错误提示信息。

5.编译连接通过后进行软件模拟仿真Debug→Start/Stop Debug Session进入软件模拟的仿真窗口,可使用单步、设断点来进行调试和除错。

6.编译连接通过后进行硬件仿真实验箱的仿真串口必须与PC 机串口连接,通电,拨位开关K10必须拨在B端,连接P10和L00,连接P11和L01,设置硬件实时仿真调试选项:Project→Options for Target ‘Targetl’→Debug.硬件实时仿真调试选项窗口,见图1-5选硬件仿真选项,按确定按钮确定。

图1-5硬件实时仿真调试选项窗口进入硬件实时调试窗口后,可打开各种观察窗口,进行单步断点运行到光标连续执行等操作,无误后可连续运行观察LED发光管的显示效果。

注意退出时须按单片机的复位按键SS10,在进行硬件连接前最好也先按单片机的复位按键SS10。

7.修改以上程序,实现同时在P1.0和P1.1上各输出一个频率为1Hz但电平状态相反的方波。

七:试验总结:通过第一次实验我熟悉了Keil C51(汇编语言)和ZY15MCU12BD的基本操作过程,但还不是很熟练,课后要加强练习。

实验2 十六进制与十进制的转换一:实验目的:实践汇编语言顺序结构的编程方法,掌握十六进制数转换成十进制数的编程实现,掌握单步运行程序的基本技巧。

二:实验设备:ZY15MCU12BD型综合单片机实验箱一台、具有一个RS232串行口并安装Keil C51的计算机一台。

三:实验原理及环境:将十六进制数转换成十进制数有多种方法,比较典型的是用待转换数除以权值的方法,即依次除以100、10,则各次的商和最后的余数就是所需要的十进制数。

四:实验内容:将放在片内RAM30H中的2位十六进制数转换成3位十进制数,按照从高位到低位的顺序分别放入31H~33H中(即非压缩的BCD码)。

在本实验中,要求使用单步方式运行,以便观察各单元的变化过程。

五:程序清单:LJMP 0100HORG 0100HMOV A,30HMOV R0,BMOV B,#16MUL ABADD A,R0MOV B,#10DIV ABMOV 33H,BMOV A,33HMOV 33H,AMOV B,#10DIV ABMOV 32H,BMOV A,32HMOV 32H,AMOV 31H,ASJMP $END六:实验步骤:1.建立一个工程,将在预习中做好的*.asm文件加入。

2.调出存储器编辑窗口,将30H单元修改成某一值。

3.在希望停下来的指令上设断点,然后运行,在断点处停下来后,再单步运行,可以看到各单元的变化情况。

运行完最后一条指令后,在31H~33H中应获得30H中十六进制数对应的十进制数。

七:试验总结:这个实验麻烦的就是编程实现十六进制与十进制的转换,尤其是算数运算指令的使用。

实验过程中还不是很熟练;还有一个体会就是算法对编写程序至关重要,如果编写程序之前没有确立算法,那么编程将无法下手。

实验3 8段LED显示器动态显示实验目的:掌握8段LED显示器的使用及显示程序的设计方法。

实验设备:ZY15MCU12BD型综合单片机实验箱一台、具有一个RS232串行口并安装Keil C51的计算机一台。

实验原理及环境:1. 实验箱上有6位8段LED显示器,采用动态方式驱动。

即使一位LED显示器显示内容一段时间,然后下一位LED显示器显示内容一段时间……,周而复始。

只要刷新频率不小于50Hz,就可以获得清晰稳定的显示效果。

2.MCS-51CPU通过一片8255对8段LED显示器进行段驱动和位驱动,8255的A口、B口、C口、控制口的地址分别为片外RAM的4000H、4001H、4002H、4003H。

3.LED显示器的各段由8255的B口驱动,低电平对应段发光,高电平对应段熄灭。

各段的驱动位如图3-1,各显示字的字形代码如下所示:1 F9H 1. 79H 灭 FFH2 A4H 2. 24H3 B0H 3. 30H4 99H 4. 19H5 92H 5. 12H6 82H 6. 02H7 F8H 7. 78H8 80H 8. 00H 9 90H 9. 80HA 88H A. 08HB 83H B. 03HC C6H C. 46HD A1H D. 21HE 86H E. 06HF 8EH F. 0EH4. LED 显示器的各位由8255的A 口驱动,低电平对应位发光,高电平对应位熄灭。

LED 显示器 对应位口位左起第一位 D0左起第二位 D1左起第三位 D2左起第四位 D3左起第五位 D4左起第六位 D5实验内容:1.编写一个6位LED 显示器驱动子程序(在主程序中已对接口芯片8255做好必要的初始化)。

字形表按0~F 、0.~F.、-、灭的顺序排列。

该子程序的要求如下:入口:待显示数(00H ~1FH)放在20H ~25H( 分别对应显示器的左起第1~第6位)中。

出口:每位LED 显示0.5mS 后返回。

占用:R0、R1、R2、A 、PSW 、DPTR 。

显示子程序的流程图如图3-2和图3-3:2.子程序自身无法运行,为了运行这个子程序,另编写一个主程序。

这个主程序的功能是首先对8255进行初始化,然后就反复调用显示子程序,显示20H~25H中的待显示内容。

首先在20H起始的6个字节中置入00H~0FH,然后连续运行此程序,应显示0~F;在20H起始的6个字节中置入10H~1FH,然后连续运行此程序,应显示0.~F.;若置入20H、21H,则显示-、灭。

3.按以下框图编写一段程序,运行后会在显示器上应出现连续向左移动的0~F。

6位LED显示器驱动子程序程序清单:ORG 0000HMOV SP,#6FHMOV 20H,#00MOV 21H,#00MOV 22H,#00MOV 23H,#00MOV 24H,#00MOV 25H,#00MOV DPTR,#4003H ;8255初始化MOV A,#10000001B ; A口、B口方式0输出,C口高4位输出,低4位输入MOVX @DPTR,A;ACALL DELAY500MS ;延时0.5秒LOOP3: LCALL DISP ;调用显示子程序SJMP LOOP3DISP:MOV R0,#20HMOV R2,#0FEHDISP1:MOV A,@R0MOV DPTR,#TABMOVC A,@A+DPTRMOV DPTR,#4001HMOVX @DPTR,AMOV A,R2MOV DPTR,#4000HMOVX @DPTR,ACALL DELAY500USMOV A,#0FFHMOVX @DPTR,AMOV A,R2RL AMOV R2,AINC R0CJNE R0,#26H,DISP1RETDELAY500MS: PUSH 00HMOV R0,#25 ;延时0.5秒NEXT: ACALL DELAY20MSDJNZ R0,NEXTPOP 00HRETDELAY500US:PUSH 03HMOV R3,#250DJNZ R3,$POP 03HRETDELAY20MS:PUSH 06HPUSH 07HMOV R7,#99AGAIN: MOV R6,#100DJNZ R6,$DJNZ R7,AGAINPOP 07HPOP 06HRETTAB: DB 0C0H,0F9H,0A4H,0B0H, 99H, 92H, 82H,0F8H ;0 ,1 ,2 ,3 ,4 ,5 ,6 ,7DB 80H, 90H, 88H, 83H,0C6H,0A1H, 86H, 8EH ;8 ,9 ,A ,B ,C ,D ,E ,F DB 40H, 79H, 24H, 30H, 19H, 12H, 2H, 78H ;0.,1.,2.,3.,4.,5.,6.,7.DB 00H, 10H, 08H, 03H, 46H, 21H, 06H, 0EH ;8.,9.,A.,B.,C.,D.,E.,F.END主程序程序清单:ORG 0000HMOV SP,#6FHMOV 20H,#00MOV 21H,#00MOV 22H,#00MOV 23H,#00MOV 24H,#00MOV 25H,#00MOV DPTR,#4003H ;8255初始化MOV A,#10000001B ; A口、B口方式0输出,C口高4位输出,低4位输入MOVX @DPTR,A;ACALL DELAY500MS ;延时0.5秒LOOP3: LCALL DISP ;调用显示子程序MOV 20H,21HMOV 21H,22HMOV 22H,23HMOV 23H,24HMOV 24H,25HINC 25HANL 25H,#0FHSJMP LOOP3DISP:MOV R0,#20HMOV R2,#0FEHDISP1:MOV A,@R0MOV DPTR,#TABMOVC A,@A+DPTRMOV DPTR,#4001HMOVX @DPTR,AMOV A,R2MOV DPTR,#4000HMOVX @DPTR,ACALL DELAY500USMOV A,#0FFHMOVX @DPTR,AMOV A,R2RL AMOV R2,AINC R0CJNE R0,#26H,DISP1RETDELAY500MS: PUSH 00HMOV R0,#25 ;延时0.5秒NEXT: ACALL DELAY20MSDJNZ R0,NEXTPOP 00HRETDELAY500US:PUSH 03HMOV R3,#250DJNZ R3,$POP 03HRETDELAY20MS:PUSH 06HPUSH 07HMOV R7,#99AGAIN: MOV R6,#100DJNZ R6,$DJNZ R7,AGAINPOP 07HPOP 06HRETTAB: DB 0C0H,0F9H,0A4H,0B0H, 99H, 92H, 82H,0F8H ;0 ,1 ,2 ,3 ,4 ,5 ,6 ,7DB 80H, 90H, 88H, 83H,0C6H,0A1H, 86H, 8EH ;8 ,9 ,A ,B ,C ,D ,E ,F DB 40H, 79H, 24H, 30H, 19H, 12H, 2H, 78H ;0.,1.,2.,3.,4.,5.,6.,7.DB 00H, 10H, 08H, 03H, 46H, 21H, 06H, 0EH ;8.,9.,A.,B.,C.,D.,E.,F.END实验步骤:1.将P0.0~P0.7与JD0~JD7连接起来。

相关主题