单片机学习实验报告

时间:2024.4.21

嵌入式系统

验报告

实验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但电平状态相反的方波。

预习要求:

1.熟悉使用Keil C51的步骤。

2.理解实验内容2中程序的工作原理。

3.编写实验内容3所需要的程序。

实验步骤:

以下假定你在E:\TEST 文件夹下学习、运行Keil

1.建立一个工程项目选择芯片确定选项

如图1-1所示:①Project→②New Project→③输入工程名test→④保存工程文件(鼠标点击保存按钮)

弹出下一界面。

如图1-2所示:①选CPU厂家(Atmel)→②选CPU型号(89C51), ③选好后确定

接着选晶振频率及生成HEX 文件等。

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

 

           图1-1 创建工程名               图1-2 选厂家,选CPU 型号

 

图1-3 选晶振频率及生成HEX 文件等窗口      图1-4 进入编辑源文件窗口

    2.建立汇编源文件

如图1-4所示:①File→②New, ③弹出源文件编辑窗口。

输入以下源文件:


            ORG 0000H

AGAIN:     CPL P1.0

MOV R0,#10 ;延时0.5秒

LOOP1: MOV R1,#100

LOOP2: MOV R2,#250

DJNZ R2,$

DJNZ R1,LOOP2

DJNZ R0,LOOP1

SJMP AGAIN

END


     源程序编写完后,①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 to Group ‘ Source Group 1’窗口→⑦在Source Group 1 前会出现一个+号→⑧点击之弹出test. asm 文件名点击该文件名→⑨主窗口中会出现该程序

  

     图1-5 进入编译文件文件窗口               图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 选硬件仿真选项,按确定按钮确定。

    进入硬件实时调试窗口后,可打开各种观察窗口,进行单步断点运行到光标连续执行等操作,无误后可连续运行观察LED发光管的显示效果。注意退出时须按单片机的复位按键SS10,在进行硬件连接前最好也先按单片机的复位按键SS10。

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

重要提示:

1.指令中的“,:;”是西文字符,切不可使用中文符号;数字“0”与字符“o”不可混淆。

2.以上菜单操作都可以点击工具栏中的相应图标快速实现。

3.退出硬件连接可以按SS10,在进行硬件连接前最好也按一次SS10。

4.生成源文件的方法:

①从键盘上输入源文件;

②用其他编辑软件(包括Microsoft Word)编辑源文件,然后复制到Keil C51 文件窗口中,使Word 文档变为TXT 文档,这种方法最好,可方便输入中文注释;

③也可装入在其它编辑软件中编辑的源文件如: *.asm/*.a51/*.c... 等。


实验2  十六进制与十进制的

1.实验目的:

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

2.实验设备:

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

3.实验原理及环境:

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

4.实验内容:

将放在片内RAM30H中的2位十六进制数转换成3位十进制数,按照从高位到低位的顺序分别放入31H~33H中(即非压缩的BCD码)。在本实验中,要求使用单步方式运行,以便观察各单元的变化过程。

5.程序清单 


 ORG 0000H

MOV A,30H

MOV B,#100H

DIV AB

MOV 31H,A

MOV A,B

MOV B,#10H

DIV AB

MOV 32H,A

MOV 33H,B


6.实验步骤:

1.建立一个工程,将在预习中做好的*.asm文件加入。

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

3.在希望停下来的指令上设断点,然后运行,在断点处停下来后,再单步运行,可以看到各单元的变化情况。运行完最后一条指令后,在31H~33H中应获得30H中十六进制数对应的十进制数。

7.实验结果及总结

单步调试结果

总结:本次实验中最重要的是单步调试的结果,每次单步调试后的结果如上所示,可以看出进制间的转换。

实验3  8段LED显示器动态显示

1实验目的:

掌握8段LED显示器的使用及显示程序的设计方法。

2实验设备:

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

3实验原理及环境:

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,各显示字的字形代码如下所示:

显示字  字形代码    显示字  字形代码    显示字  字形代码

      0       C0H         0.      40H         -        BFH

      1       F9H         1.      79H         灭       FFH

      2       A4H         2.      24H

      3       B0H         3.      30H

      4       99H         4.      19H

      5       92H         5.      12H

      6       82H         6.      02H

      7       F8H         7.      78H

      8       80H         8.      00H

      9       90H         9.      80H

      A       88H         A.      08H

      B       83H         B.      03H

      C       C6H         C.      46H

      D       A1H         D.      21H

      E       86H         E.      06H

      F       8EH         F.      0EH

    4. 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。

    2.子程序自身无法运行,为了运行这个子程序,另编写一个主程序。这个主程序的功能是首先对8255进行初始化,然后就反复调用显示子程序,显示20H~25H中的待显示内容。

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

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

实验程序:


       ORG 0000H

       MOV SP,#6FH

       MOV 20H,#00

       MOV 21H,#00

       MOV 22H,#00

       MOV 23H,#00

       MOV 24H,#00

       MOV 25H,#00

       MOV DPTR,#4003H  ;8255初始化

       MOV A,#10000001B   ; A口、B口方式0输出,C口高4位输出,低4位输入

       MOVX @DPTR,A

       ;ACALL DELAY500MS ;延时0.5秒

LOOP3: LCALL DISP ;调用显示子程序

       SJMP LOOP3

 DISP:MOV  R0,#20H

      MOV  R2,#0FEH

DISP1:MOV  A,@R0

      MOV  DPTR,#TAB

      MOVC A,@A+DPTR

      MOV  DPTR,#4001H

      MOVX @DPTR,A

      MOV  A,R2

      MOV  DPTR,#4000H

      MOVX @DPTR,A

      CALL DELAY500US

      MOV  A,#0FFH

      MOVX @DPTR,A

      MOV  A,R2

      RL   A

      MOV  R2,A

      INC  R0

      CJNE R0,#26H,DISP1

      RET     

DELAY500MS: PUSH 00H

      MOV R0,#25  ;延时0.5秒

      NEXT: ACALL DELAY20MS

        DJNZ R0,NEXT

        POP 00H

        RET            

DELAY500US:PUSH 03H

        MOV R3,#250

        DJNZ R3,$

       POP 03H

           RET

DELAY20MS:PUSH 06H

          PUSH 07H

      MOV R7,#99

  AGAIN:  MOV R6,#100

          DJNZ R6,$

      DJNZ R7,AGAIN

      POP 07H

      POP 06H

      RET


TAB: DB  0C0H,0F9H,0A4H,0B0H, 99H, 92H, 82H,0F8H ;0 ,1 ,2 ,3 ,4 ,5 ,6 ,7

     DB  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

实验4  矩阵键盘的使用

实验目的:

掌握矩阵键盘的使用及键盘扫描程序的设计方法。

实验设备:

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

实验原理及环境:

实验箱上有一个16键的矩阵键盘,分为4行×4列。4行分别连接到一片8255(与8段LED显示器的段驱动和位驱动共用)的PC0~PC3,4列分别连接到8255的PC4~PC7。8255的A口、B口、C口、控制口的地址分别为片外RAM的4000H、4001H、4002H、4003H。

选择列驱动码使某一列为低电平而其它列为高电平,再读取行输入,若该列有键按下则相应的位便是低电平。每个键均安排一个键值,如图4-1所示。

实验内容:

    1.编写一个键盘扫描子程序(在主程序中已对接口芯片8255做好必要的初始化)。这个程序对键盘作一次扫描,若无键按下,返回时累加器A中为FFH,若有键按下,返回时A中为该键键值。

 其中,查键值子程序可以自行编写,也可以使用下面这个查键值子程序,这个子程序的参数如下:

    入口:行列关键值码放在累加器A中,高4位是列驱动码(被扫描列的对应位为0,其余位均为1),低4位是行状态(按下键的对应位为0,其余位均为1)。

    出口:键码放在A中带出。

    占用:R1、A、PSW、DPTR。

    程序清单如下:


 ;查键值子程序,起始

KEY20 

KEY20: PUSH ACC  ;暂存关键值

       MOV R1,#00H  ;查键值自变量清0

KEY21: JNB ACC.4,KEY22 ;计算列数

       RR A

       INC R1

       SJMP KEY21

KEY22: MOV A,R1  ;按每列4个键计算

MOV B,#4

      MUL AB

      MOV R1,A

      POP ACC ;恢复关键值

KEY23:JNB ACC.0,KEY24  ;计算行数

      RR A

      INC R1

      SJMP KEY23

KEY24:MOV DPTR,#KEYTAB  ;读取键值

      MOV A,R1

      MOVC A,@A+DPTR

      RET

    KEYTAB:   DB 0FH,0BH,07H,03H

       DB 0EH,0AH,06H,02H

       DB 0DH,09H,05H,01H

       DB 0CH,08H,04H,00H


    2.键盘扫描子程序自身无法运行,为了运行这个子程序,另编写以下程序:

          


ORG 0000H

MOV SP,#6FH

MOV R0,#5  ;延时0.5秒

LOOP1: MOV R1,#200

LOOP2: MOV R2,#250

DJNZ R2,$

DJNZ R1,LOOP2

DJNZ R0,LOOP1

MOV DPTR,#4003H  ;8255初始化

       MOV A,#10000001B   ; A口、B口方式0输出,C口高4位输出,低4位输入

MOVX @DPTR,A

LOOP3: LCALL DISP ;调用显示子程序DIS,设显示子程序入口为DISP

       LCALL KEY  ;调用键盘扫描子程序,设键盘扫描子程序入口为KEY

       CJNE A,#0FFH,LOOP4   ;如果有键按下转

       SJMP LOOP3

LOOP4: MOV 20H,21H

       MOV 21H,22H

       MOV 22H,23H

       MOV 23H,24H

       MOV 24H,25H

       MOV 25H,A

          SJMP LOOP3


其中显示子程序使用实验3中的显示子程序。程序运行后,每按一键便从显示器的右端移入一个对应的数。

实验5  A/D转换

实验目的:

掌握用ADC0809实现A/D的方法。

实验设备:

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

实验原理及环境:

电位器W1将+5V电压分压后送入ADC0809的输入IN4~IN7,调节电位器W1可以获得0~+5V的电压输入。ADC0809的接口参数如下:

    输入电压范围                    0~+5V

    启动IN4  A/D转换             写任意数到8004H

    取转换结果                      读8004H

    EOC通过一个反相器输出

实验内容:

设计一个程序,将IN4输入的0~+5V模拟电压转换成数字量,再将这个2位十六进制转换成3位十进制数,放在LED显示器的第四~六位显示。其中显示子程序可以用实验3中的子程序。判断转换是否结束可以将ADC0809的EOC(经反相器)引入到P1.0,然后查询P1.0的状态。

程序清单


   


ADD_8255   DATA 4000H

    ORG 0000H

    MOV SP,#6FH

    MOV R0,#5 ;延时0.5秒

LOOP1: MOV R1,#200

LOOP2: MOV R2,#250

    DJNZ R2,$

    DJNZ R1,LOOP2

    DJNZ R0,LOOP1

    MOV DPTR,#(ADD_8255+3)

    MOV A,#10000001B

   MOVX @DPTR,A

LOOP3: LCALL DIS

    SJMP LOOP3

DIS:   MOV R0,#20H

    MOV R2,#0FEH

LOOP10:MOV A,@R0

    MOV DPTR,#TAB

    MOVC A,@A+DPTR

       MOV DPTR,#(ADD_8255+1)

    MOVX @DPTR,A

    MOV A,R2

    MOV DPTR,#ADD_8255

    MOVX @DPTR,A

    MOV R1,#250

    DJNZ R1,$

    MOV A,#0FFH

    MOVX @DPTR,A

    MOV A,R2

    RL A

    MOV R2,A

    INC R0

    MOV A,R0

    CJNE A,#26H,LOOP10

    RET


TAB:  DB 0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H

   DB 080H,090H,088H,083H,0C6H,0A1H,086H,08EH

   DB 040H,079H,024H,030H,019H,012H,002H,078H

   DB 000H,080H,008H,003H,046H,021H,006H,00EH

    DB 0BFH,0FFH

END

实验结果:变化范围为17到255,最小值存在误差,由于电路自身存在误差。


实验6  D/A转换

实验目的:

掌握用DAC0832实现D/A转换的方法。

实验设备:

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

实验原理及环境:

    DAC0832的连接使用单缓冲方式,D/A转换口地址为6000H。当输入数字量为0~255时,输出电压0~+5V。可以用这个电压驱动一个微型直流电动机,使它的转速在最慢到最快之间变化。   

实验内容:

    设计一个程序,在主程序中向P1.0输出频率为1Hz的方波,同时使用定时器1定时中断,在中断服务程序中用D/A转换器输出周期为20秒的三角波。

    用一个工作寄存器存放电压值,使用定时器定时中断,每中断一次将电压值送D/A转换器并加1,直到最大值后再改为减1。周而复始,这样就可以输出三角波。这个三角波用来控制一个微型直流电动机的转速。

    实验清单


 ADD_8255   DATA 4000H

    ORG 0000H

    MOV SP,#6FH

    MOV R0,#5 ;延时0.5秒

LOOP1: MOV R1,#200

LOOP2: MOV R2,#250

    DJNZ R2,$

    DJNZ R1,LOOP2

    DJNZ R0,LOOP1

    MOV DPTR,#(ADD_8255+3)

    MOV A,#10000001B

   MOVX @DPTR,A

LOOP3: LCALL DIS

    SJMP LOOP3

DIS:   MOV R0,#20H

    MOV R2,#0FEH

LOOP10:MOV A,@R0

    MOV DPTR,#TAB

    MOVC A,@A+DPTR

    MOV DPTR,#(ADD_8255+1)

    MOVX @DPTR,A

    MOV A,R2

    MOV DPTR,#ADD_8255

    MOVX @DPTR,A

    MOV R1,#250

    DJNZ R1,$

    MOV A,#0FFH

    MOVX @DPTR,A

    MOV A,R2

    RL A

    MOV R2,A

    INC R0

    MOV A,R0

       CJNE A,#26H,LOOP10

    RET


TAB:   DB 0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H

    DB 080H,090H,088H,083H,0C6H,0A1H,086H,08EH

   DB 040H,079H,024H,030H,019H,012H,002H,078H

    DB 000H,080H,008H,003H,046H,021H,006H,00EH

    DB 0BFH,0FFH

END

更多相关推荐:
单片机实训报告

单片机实训报告姓名学号班级指导老师实训时间前言一周的单片机实训很快就结束咯在这一周的时间里我学到了很多关于单片机各方面的知识老师在实训课中也教会咯我们很多关于单片机软件编程与硬件设施的知识一周的实训中我们一共实...

单片机实习报告

单片机实习报告1引言11实习目的随着人们生活水平的不断提高单片机控制无疑是人们追求的目标之一它给人们带来的方便也是不可否定的本次实习的目的在于加深AT89C51单片机的理解初步掌握单片机应用系统的设计方法通过本...

单片机实习总结报告

专业综合实习总结专业班级:电子信息工程0801学生学号:***指导教师:实习时间:20XX.6.2020XX.7.15机电工程学院一、实习目的和意义1、实习目的:(1)利用单片机小系统实习板,掌握电路原理图;(…

单片机实习报告

电子与信息工程学院程设计报(20##20##学年第2学期)课程名称:创新课题课程设计班级:电子0801学号:15姓名:指导教师:20xx年03月课告实习报告

单片机实训报告心得

广东轻工职业技术学院实训报告实训项目单片机实训系别:电子通信工程系专业:应用电子技术班级:嵌入式091班姓名:**学号:***指导老师:***实训地点:第三实训楼C309实训时间:20**年1月10日至1月14…

单片机实习报告

单片机实习报告题目姓名学院专业班级学号指导教师交通灯控制系统职称讲师20xx年5月27日内容提要本系统采用AT89S52作为交通灯控制系统的核心控制器件利用单片机的定时器产生秒级信号控制十字路口的红绿黄灯交替点...

单片机实训报告

目录一概述11设计制作产品的背景目的意义12设计制作产品的设计要求13分工情况工作计划及本人所总结工作14本课题的基本内容重点及难点二正文21实验原理22实验流程图23硬件设计24软件设计25C语言程序26简易...

《单片机实习报告温控系统

学院单片机课程设计报告书题目温度控制系统设计院系名称学生姓名专业名称班级时间学院自动化自动20xx年6月7日至6月17日温度控制系统设计一设计目的在现代化的工业生产中电流电压温度压力流量流速和开关量都是常用的主...

c51单片机实习报告

基于单片机实现短距离无线通信设计1引言短距离无线传输具有抗干扰性能强可靠性高安全性好受地理条件限制少安装灵活等优点在许多领域有着广泛的应用前景低功耗微型化是用户对当前无线通信产品尤其是便携产品的实际需求短距离无...

单片机论文、实习报告

单片机课程设计说明书题目数字式温度计的设计系部专业班级姓名学号指导教师起止日期单片机原理及应用课程设计任务书系部电子与通信工程系专业指导教师张刚林刘光灿陈威兵罗朝明冯璐谢志宇20xx650摘要在科学技术不断发展...

基于AT89S52单片机的多模式带音乐跑马灯设计实训报告

实训课题基于AT89S52单片机的多模式带音乐跑马灯设计一实训目的及要求1通过实训理解与掌握单片机系统的开发流程及常见系统的开发设计仿真调试等培养一定的单片机设计与开发能力2掌握按键电路的设计3掌握单片机复位电...

单片机最小系统实训报告

单片机最小系统实训报告一实训目的1掌握并理解单片机最小系统的原理和制作熟悉电子元件的参数以及应用2熟悉PCB板的工业制作流程并且要求会使用protel软件绘制相应的PCB图3复习使用keil51软件编写相应程序...

单片机实习报告(37篇)