单片机实验报告

实验一

一实验目的

1. 学习Keil C51 集成开发环境的操作;

2. 熟悉 TD-51 系统板的结构及使用。

二实验设备

PC机一台,TD-NMC+教学实验系统、或“TD-PIT++教学实验系统+TD-51 系统平台”、或“TD-PITE 教学实验系统+TD-51 系统平台”

三实验内容

编写实验程序,将 00H~0FH 共 16 个数写入单片机内部 RAM 的 30H~3FH 空间。通过本实验,学生需要掌握Keil C51 软件的基本操作,便于后面的学习。

四实验程序

ORG  0000H

 LJMP START

ORG  0040H

START:MOV R0,#30H

MOV R2,#10H

MOV A,#00H

MOV DPTR,#3000H

LOOP1:MOV @R0,A

MOVX @DPTR,

INC R0

INC DPTR

INC A

DJNZ R2,LOOP1

SJMP $

END

五实验结果

实验二

查表程序设计实验

一实验目的

学习查表程序的设计方法,熟悉 51 的指令系统。

二实验设备

PC机一台,TD-NMC+教学实验系统、或“TD-PIT++教学实验系统+TD-51 系统平台”、或 “TD-PITE 教学实验系统+TD-51 系统平台”

三实验内容

1. 通过查表的方法将 16 进制数转换为 ASCII 码;

2. 通过查表的方法实现y=x2,其中x为 0~9 的十进制数,以BCD码表示,结果仍以BCD 码形式输出。

四实验步骤

1. 采用查表的方法将 16 进制数转换为 ASCII 码根据 ASCII 码表可知,0~9 的 ASCII 码为 30H~39H,A~F 的 ASCII 码为 41H~46H,算法为(假定待转换的数存放在 R7 中):当 R7≤9 时,相应的 ASCII 码为:R7+30H;当 R7>9 时,相应的 ASCII 码为:R7+30H+07H。

实验步骤:

(1)编写实验程序,编译、链接无误后联机调试;

(2)将待转换的数存放在 R7 中,如令 R7 中的值为 0x86;

(3)在语句行设置断点,运行程序;

(4)程序停止后查看寄存器 R6、R5 中的值,R6 中为高 4 位转换结果 0x38,R5 中为低 4 位转换结果 0x36;

(5)反复修改 R7 的值,运行程序,验证程序功能。

五实验程序及结果

ORG 0000H

     LJMP MAIN

     ORG 0100H

MAIN:   MOV DPTR,#ASCTAB

         MOV A,R7

         MOV P1,A

         ANL A,#0FH

         MOVC A,@A+DPTR

         MOV R5,A

         MOV P2,A

         MOV A,R7

         ANL A,#0F0H

         SWAP A

         MOVC A,@A+DPTR

         MOV R6,A

       MOV P2,A

         SJMP MAIN

ASCTAB:  DB 30H,31H,32H,33H,34H

         DB 35H,36H,37H,38H,39H

         DB 41H,42H,43H,44H,45H,46H

                 END

2. 通过查表实现y=x2,x 为 0~9 的十进制数,存放与 R7 中,以 BCD 码的形式保存,结果 y 以 BCD 码的形式存放于寄存器 R6 中。

实验步骤:

(1)编写实验程序,经编译、链接无误后,进入调试状态;

(2)改变 R7 的值,如 0x07;

(3)在语句行处设置断点,运行程序;

(4)程序停止后,查看寄存器 R6 中的值,应为 0x49;

(5)反复修改 R7 中的值,运行程序,验证程序功能。

程序及结果:

ORG 0000H

      LJMP START

      ORG 0040H

START:MOV A,R7

      MOV DPTR,#TAB

      MOVC A,@A+DPTR

      MOV R6,A

MOV P1,A

      SJMP $

RET

TAB:DB 00H,01H,04H,09H,10H

数据排序实验

一实验目的

熟悉 51 的指令系统,掌握数据排序程序的设计方法。

二实验设备

PC机一台,TD-NMC+教学实验系统、或“TD-PIT++教学实验系统+TD-51 系统平台”、或 “TD-PITE 教学实验系统+TD-51 系统平台”

三实验内容

在单片机片内 RAM 的 30H~39H 写入 10 个数,编写实验程序,将这 10 个数按照由小到大的顺序排列,仍写入 RAM 的 30H~39H 单元中。

四实验步骤

(1)       编写实验程序,编译、链接无误后联机调试;

(2)为 30H~39H 赋初值,如:在命令行中键入 E CHAR D:30H=9, 11H, 5, 31H, 20H, 16H, 1, 1AH, 3FH, 8 后回车,可将这 10 个数写入 30H~39H 中;

(3)将光标移到语句行 SJMP $处,点击命令,将程序运行到该行;

(4)查看存储器窗口中 30H~39H 中的内容,验证程序功能;

(5)重新为 30H~39H 单元赋值,反复运行实验程序,验证程序的正确

实验程序及结果

ORG 0000H

    LJMP MAIN

    ORG 0100H

MAIN: MOV R6,#0AH

      MOV R0,#30H

LOP: ;CLR F0

     MOV A,R6

     MOV R7,A

    ; DEC R7

     MOV A,R0

     MOV R1,A

LOP1: INC R1

      MOV A,@R0

      SUBB A,@R1

      JC NEXT

    MOV A,@R0

    XCH A,@R1

    MOV @R0,A

;SETB F0

NEXT: DJNZ R7,LOP1

;JNB F0,ENDD

              inc r0

      DJNZ R6,LOP

  MOV P1,39H

  MOV P2,30H

  ENDD: SJMP $

       END

实验三

中断系统实验

一实验目的

了解 MCS-51 单片机的中断原理,掌握中断程序的设计方法。

二实验设备

PC机一台,TD-NMC+教学实验系统、或“TD-PIT++教学实验系统+TD-51 系统平台”、或 “TD-PITE 教学实验系统+TD-51 系统平台”,示波器一台。

三实验内容

手动扩展外部中断 INT0、INT1,当 INT0 产生中断时,使 LED8 亮 8 灭闪烁 4 次;当 INT1 产生中断时,使 LED 由右向左流水显示,一次亮两个,循环 4 次。

因为 51 单片机加入了中断系统,从而提高了 CPU 对外部事件的处理能力和响应速度。增强型单片机 SST89E554RC 共有 8 个中断源,即外部中断 0(INT0)、定时器 0(T0)、外部中断 1(INT1)、定时器 1(T1)、串行中断(TI 和 RI)、定时器 2(T2)、PCA 中断和 Brown-out 中断。

四实验步骤

1. 定时器中断实验实验步骤:

(1)编写实验程序,经编译、链接无误后,启动调试功能;

(2)运行实验程序,使用示波器观察 P1.0 及 P1.1 引脚上的波形;

(3)使用示波器测量波形周期,改变计数值,重新运行程序,反复验证程序功能;

(4)按复位键退出调试状态。

五实验程序及结果

ORG 0000H

       LJMP START

ORG 0003H

       LJMP EINT0

ORG 0013H

       LJMP EINT1

 ORG 0040H

START:   MOV P1, #00H

       SETB  IT0   

       SETB  EX0

       SETB  IT1   

       SETB  EX1

       SETB  EA          

       SJMP  $

EINT0:   MOV  R7, #04H  

ELP0:     MOV  P1, #0FFH

       ACALL  DELAY        

       MOV  P1, #00H

       ACALL  DELAY

       DJNZ  R7, ELP0

       RETI

EINT1:   MOV  A,  #03H 

MOV  R7,  #10H

ILP1:      MOV  P1,  A

       RL  A

       RL  A

       ACALL  DELAY

       DJNZ  R7, ILP1

       RETI

DELAY:  MOV R6, #0FFH

DLP1:     MOV R5, #0FFH

DLP2:     DJNZ R5, DLP2

       DJNZ R6, DLP1

       RET

       END

实验现象:

每按一次INT0都会出现LED亮8 灭闪烁4次,而每按一次INT1,LED流水闪烁,一次亮两个,循环4次。

优先级:

      ORG 0000H

      LJMP START

ORG 0003H

       LJMP EINT0

ORG 0013H

      LJMP EINT1

ORG 0040H

START:   MOV P1, #00H

        MOV IP,#00H

       SETB  IT0   

       SETB  EX0

       SETB  IT1

       SETB  EX1

       SETB  EA          

       SETB  PX1

SJMP  $

EINT0:   MOV  R7, #04H

ELP0:     MOV  P1, #0FFH

       ACALL  DELAY        

       MOV  P1, #00H

       ACALL  DELAY

       DJNZ  R7, ELP0

       RETI

EINT1:   MOV  A,  #03H 

MOV  R4,  #10H

ILP1:      MOV  P1,  A

       RL  A

       RL  A

       ACALL  DELAY

       DJNZ  R4, ILP1

       RETI    ;延时子程序

DELAY:  MOV R6, #0FFH

DLP1:     MOV R5, #0FFH

DLP2:     DJNZ R5, DLP2

       DJNZ R6, DLP1

       RET

END

实验现象:

按INT1后在LED 灯流水显示期间按下INT0,LED 灯仍会出现流水显示现象,而不是闪烁。当按INT0灯闪烁其间按INT0灯出现流水显示,说明INT1优先级要高于INT0。

实验四定时/计数器实验

一实验目的

1. 了解 MCS-51 单片机定/计数器的工作原理与工作方式;

2. 掌握定时/计数器 T0 和 T1 在定时器和计数器两种方式下的编程;

3. 学习定时/计数器 T2 的可编程时钟输出功能。

二实验设备

PC机一台,TD-NMC+教学实验系统、或“TD-PIT++教学实验系统+TD-51 系统平台”、或 “TD-PITE 教学实验系统+TD-51 系统平台”,示波器一台。

三实验内容

1. 使用定时器 0 与定时器 1 进行定时,在 P1.0 和 P1.1 引脚上输出方波信号,通过示波器观察波形输出,测量并记录方波周期。

2. 将定时/计数器 1 设定为计数器方式,每次计数到 10 在 P1.0 引脚上取反一次,观察发光二极管的状态变化。

四实验步骤

1. 定时器实验按照实验要求编写实验程序。

实验步骤:

(1)编写实验程序,编译、链接后联机调试;

(2)运行实验程序,使用示波器观察 P1.0 与 P1.1 引脚上的波形并记录周期;

(3)改变计数初值,观察实验现象,验证程序功能。

五程序及结果

#include "SST89x5x4.h"

sbit Wave1 = P1^0;

sbit Wave2 = P1^1;  //用查询法

void main()

{ TMOD = 0x11;  //定时器方式寄存器

  TH0 = 0x00;   //定时器0计数初值

  TL0 = 0x00;

  TH1 = 0x00; //定时器1计数初值

  TL1 = 0x00;

  TR0 = 1;     //启动定时器0

  TR1 = 1;     //启动定时器1

while(1)

 {  if(TF0 == 1)      //定时器0溢出标志

{  TH0 = 0x00;

           TL0 = 0x00;

           Wave1 = ~Wave1;

           TF0 = 0;

        }

      else if(TF1 == 1)  //定时器1溢出标志

        {

          TH1 = 0x00;

          TL1 = 0x00;

           Wave2 = ~Wave2;

          TF1 = 0;

        }

  }

实验现象:LED灯D0,D1亮灭间替。

2. 计数器实验实验

实验步骤:

(1)按图3-3-1连接实验线路图;

(2)编写程序,联机调试;

(3)运行实验程序,按单次脉冲 KK1,观察发光管 D0 的状态,每 10 次变化一次;

(4)实验结束,按复位按键退出调试

程序及结果

#include "SST89x5x4.h"

sbit P10Value = P1^0;

                     //用查询法

void main()

{

       TMOD = 0x60;                    //设定定时器1计数方式

       TH1 = 0xF6;                        //计数初值

       TL1 = 0xF6;

       TR1 = 1;                      //启动定时器1

       for(;;)

       {

              while(TF1 == 0);   //判定时器1溢出标志

              P10Value = ~P10Value;

              TF1 = 0;

       }

}

 

第二篇:单片机实训实验报告

 单片机实训实验报告

          课 题:单片机实训

          院 系:电子信息工程学院

          班 级

          学 号:

          姓 名:

          指导老师:熊老师、罗老师

          日 期:2011.6.10

一、硬件系统

1、自制单片机实验板由七部分组成:

(1).8路跑马灯

(2)动态扫描共阳型数码管

(3)4X4矩阵键盘

(4)蜂鸣器

(5)4路独立键盘

(6)温度传感器

(7)I2C通信方式的EEPROM芯片24C02

二、Keil C u Vision2 简述与使用

1.打开 u Vision2

2.新建工程:菜单【project】→【New Project】选择工程存放的路径,并输入工程文件名,然后点“保存”

3.进入器件选择界面树列表框内选择“Atmel”→“AT89C52”,然后点“确定”完成器件选择。

4.编辑源程序:

新建文件:菜单【File】→【new…】。然后输入代码,编辑完成后菜单【File】→【Save】或【Save As…】把代码文件存入硬盘。C源文件存为.C后缀,汇编源文件存为.a或.src后缀,并存放在同一个工程文件夹下。

5.加入源文件到工程中:

  在左边浮动窗口【File】选项卡里展开“Target 1”树,在“Source Group 1”上右键单击,弹出菜单,选【Add File to Group“Source Group 1”】,选择需要加入的源文件,点“Add”按钮加入,加入完成后按“Close”关闭。

 6.设置编译选项:先选中左边浮动窗口【File】选项卡里“Target1“树节点,然后选菜单【Project】→【Options for Target “Target 1”】。

  7.在弹出的“Options for Target “Target 1”” 对话框中选择[output]选项卡,勾选“Create HEX File”然后按“确定”完成设置。

8. 按“F7”开始编译,编译成功后会在工程文件夹内生成.Hex目标文件生成的.hex文件就可以用来对AT89S52芯片进行编程和运行了。

.STC-ISP V29 Beta5 下载软件的使用

1.连接好电源线与串口线(附件中的九孔对九孔线分别连接电脑和点偏激开发板)。

2.检查电源板上电源指示灯是否亮起,如果亮起则检查USB电源线,如果已亮则关掉电源看后面的步骤。

3.启动软件。

4.选择好STC单片机的型号(STC89CF52RC).

5.选择好你使用的计算机串口号.

6.点击OPEN FILE选择你用KEIL编译好的HEX文件.

7.直接点击下载按钮.

8.点击下载的时候按下”冷启动“按键,是单片机上电。

9.如果正常会看到下载程序进度条闪过的过程。

四、实验项目

1、   I/O口输出P1口发光二极管显示

2、   数码管显示

单管显示

多管动态显示

3、   按键控制

独立键盘

矩阵键盘

4、   信号发生(延时、定时计数器应用)

5、中断的应用

五、实验内容

(一).I/O口输出P1口发光二极管显示

  1.实验工具:8路跑马灯,开发软件Keil u Vision2,STC-ISP V29 Beta5 下载软件。

  2.实验要求:八路跑马灯从右边向左依次发亮。

  3.实验目的:学习P1口的使用,延时程序的编写和调用。

  4.实验程序:

                             org 0000h

                                                       start:jb p3.2,start

                                                       lcall delay

                                                       jb p3.2,start

                                                       mov r0,#8

                                                       mov a,#0feh

                                                       l1:mov p1,a

                                                       lcall delay2

                                                       rl a

                                                       djnz r0,l1

                                                       mov p1,#0ffh

                                                       sjmp start

                                                       delay:mov r1,#20

                                                       del:mov r2,#250

                                                       djnz r2,$

                                                       djnz r1,del

                                                       ret

                                                       delay2:mov r3,#200

                                                       dl:mov r4,#255

                                                       DJNZ r4,$

                                                       djnz r3,dl

                                                       ret

                                                       end

                                                            

 5.实验图8路跑马灯

(二)、数码管动态扫描

   1.实验工具:共阳型数码管,开发软件Keil u Vision2,STC-ISP V29 Beta5 下载软件。

   2.实验要求:让其中的一个数码管依次显示0到9。

   3. 实验目的:学习数码管的显示原理,及共阳极数码管显示电路;掌握动态扫描间隔时间.

   4.实验电路图如下

   5.实验程序:

org 000h  

ljmp start

org 0030h

start:mov p2,#7fh

        mov r0,#10  

        mov r1,#0    

loop:mov a ,r1

movc a ,@a+dptr 

        mov p0,a  

        lcall delay 

        inc a   

        mov r1 ,a

        djnz r0,loop 

db:db 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h 

delay:mov r6,#1000  

    dell:mov r7,#250

       del:djnz r7,del

           djnz r6,dell

       ret

       End

(三).矩阵按键控制

 1.实验要求:采用扫描方式,识别4*4矩阵按键,没按下一个键,则对应的1位或2位发光二极管被点亮。

 2.实验目的:采用扫描方式,识别4*4矩阵按键,没按下一个键,则对应的1位或2位发光二极管被点亮。

3.实验电路图

按下某一件键,在P1口对应灯里显示对应键的反码

4.实验程序:

      ORG 0000H

          SETB P3.6

       M1:JNB P3.2,L1

          JNB P3.3,L2

          JNB P3.4,L3

          JNB P3.5,L4

          AJMP M1

   L1:CLR P3.6

       LCALL DELAY1

         SETB P3.6

         LCALL DELAY1

         AJMP M1

    L2:CLR P3.6

       LCALL DELAY2

         SETB P3.6

         LCALL DELAY2

         AJMP M1

       L3:CLR P3.6

       LCALL DELAY3

         SETB P3.6

         LCALL DELAY3

         AJMP M1

    L4:CLR P3.6

       LCALL DELAY4

         SETB P3.6

         LCALL DELAY4

         AJMP M1

DELAY1:MOV R6,#2

   DEL1:MOV R7,#250

       DJNZ R7,$

       DJNZ R6,DEL1

          RET

DELAY2:MOV R6,#5

   DEL2:MOV R7,#250

       DJNZ R7,$

          DJNZ R6,DEL2

          RET

DELAY3:MOV R6,#10

   DEL3:MOV R7,#250

       DJNZ R7,$

          DJNZ R6,DEL3

          RET

DELAY4:MOV R6,#15

   DEL4:MOV R7,#250

       DJNZ R7,$

          DJNZ R6,DEL4

          RET

          END

<>.小喇叭报警器

1.      实验要求:声音是由震动产生的,一定频率的震动就产生了一定频率的声音。这实验是让不同的按键控制蜂鸣器的不同频率和发声时间。

2.      实验目的:a.学习频率子程序的编写和使用。

             b.学习蜂鸣器驱动电路。

3.实验电路图:

3.      实验程序:

org 0000h

SETB P3.6

M1:JNB P3.2,L1

   JNB P3.3,L2

   JNB P3.4,L3

   JNB P3.5,L4

   AJMP M1

L1:CLR P3.6

   CALL DELAY1

   SETB P3.6

   CALL DELAY1

   DJNZ R1,L1

   AJMP M1

L2:CLR P3.6

   CALL DELAY2

   SETB P3.6

   CALL DELAY2

   DJNZ R2,L2

   AJMP M1

L3:CLR P3.6

   CALL DELAY3

   SETB P3.6

   CALL DELAY3

   DJNZ R3,L3

   AJMP M1

L4:CLR P3.6

   CALL DELAY4

   SETB P3.6

   CALL DELAY4

   DJNZ R4,L4

   AJMP M1

DELAY1:MOV R6,10

DEL1:MOV R7,#250

     DJNZ R7,$

        DJNZ R6,DEL1

        RET

DELAY2:MOV R6,#50

DEL2:MOV R7,#250

     DJNZ R7,$

        DJNZ R6,DEL2

        RET

DELAY3:MOV R6,#120

DEL3:MOV R7,#50

     DJNZ R7,$

        DJNZ R6,DEL3

        RET

DELAY4:MOV R6,#180

DEL4:MOV R7,#25

     DJNZ R7,$

        DJNZ R6,DEL4

        RET

        END

<五>.中断的应用

1.实验要求:对外部中断源INT0、INT1设置边沿触发中断方式,利用按键产生中断功能。按下S17或S18,产生INT0或INT1的中断信号,使数码管显示处迅速速递增1或递减1.递增1时,伴随蜂鸣器的“嘀--嘀”声音,数码管显示处迅速增加1.当9999再加1时,数码管恢复成0000。递减1时,伴随着蜂鸣器的“嘀”声音,数码管显示处迅速递减1.当0000再减1时,数码管保持0000不变。

2.实验目的:a.学习INT0、INT1的边沿触发中断程序。

b.结合数码管、按键识别和 ,学习小型系统程序的编写。

   c.从显示结果中观察、理解按键的抖动现象。

3.电路图如

4.实验程序:

 SECOND EQU 30H

TCOUNT EQU 31H

ORG 00H

LJMP START

ORG 0BH

LJMP INT0X

START: MOV SECOND,#00H

MOV A,SECOND

MOV B,#10

DIV AB

MOV DPTR,#TABLE

MOVC A,@A+DPTR

MOV P0,A

MOV A,B

MOVC A,@A+DPTR

MOV P2,A

MOV TCOUNT,#00H

MOV TMOD,#01H

MOV TH0,#(65536-50000) / 256

MOV TL0,#(65536-50000) MOD 256

SETB TR0

SETB ET0

SETB EA

SJMP $

INT0X:

MOV TH0,#(65536-50000) / 256

MOV TL0,#(65536-50000) MOD 256

INC TCOUNT

MOV A,TCOUNT

CJNE A,#20,NEXT

MOV TCOUNT,#00H

INC SECOND

MOV A,SECOND

CJNE A,#60,NEX

MOV SECOND,#00H

NEX: MOV A,SECOND

MOV B,#10

DIV AB

MOV DPTR,#TABLE

MOVC A,@A+DPTR

MOV P0,A

MOV A,B

MOVC A,@A+DPTR

MOV P2,A

NEXT: RETI

TABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH

END

六、实验总结

为期一周的实训结束了,从第一天编辑最简单的程序到后来编辑较复杂的程序,整周实训感觉时间挺紧,对如何编写好程序可谓是费劲心思,最后程序完成则有一种成功的喜悦。在实训中,我感觉理论知识的不足,编写过程中不细心导致不必要的错误等,故此,理论知识和细心度是我努力的方向,希望学好单片机掌握这门知识。

 

相关推荐