广工 单片机实验报告全部

时间:2024.4.20

广东工业大学校徽

xiaomin

实验报告

课程名称_单片机原理及应用   __

学生学院 信息工程学院        

专业班级13级应用电子专业4班  

学号  3113002512          

姓名   陈文威              

指导教师   李优新           

                      20## 年 12月 12 日

实验一:开发软件使用与调试方法

一.   实验目的:

学习KEIL 的使用方法,用Keil 开发工具编译C 源码、汇编源程序。掌握单片机的编程及调试。

二.  实验内容和要求:

编写C语言程序,用Keil 将程序编译并生成HEX 文件调试程序。通过并口通信线连接PC 与实验箱,用Easy 51Pro 把程序下载到AT89S51 观察实验箱LED 的变化。

三.  实验要求程序代码:

ORG          0000H

AJMP        MAIN

ORG          0030H

MAIN:

                   MOV         P2,#0FFH

                   MOV         A,#0FEH

                   MOV         P0,A

LOOP:       JB              P2.0,LOOP

                   ACALL       DELAY_100MS

                   JB              P2.0,LOOP

                   RR             A

HRER:       JNB  P2.0,HRER

                   MOV         P0,A

                   AJMP        LOOP

DELAY_100MS:

                   MOV         R6,#64H

D22:          MOV         R5,#0F9H

D21:          DJNZ         R5,D21

                   DJNZ         R6,D22

                   RET

                   END

四.  实验心得:

通过本次试验,熟悉了keil软件的使用。初步掌握单片机的编程及调试

实验二  定时器和中断应用程序设计与调试

一.实验目的:

   掌握单片机的定时器,中断功能系统的应用

二.实验内容和要求:

  编写程序,用AT89C51的内部定时器/计数器T0的方式1产生周期为0.2秒的TTL脉冲(TCH和TCL溢出的时候,产生一个中断),从P05输出。计算如下:

振荡器的频率f=6M=6000000,方式1计数器的长度为L=16.2的16次方即65536

定时时间(溢出时间)t=0.1s

定时常数TC=65536-6000000x0.1/12=65536-50000=15536,将15536转换成16进制为3CB0,

TCH=3CH(高八位),TCL=B0H(低八位)。

三.实验主要仪器设备和材料:

1 AMC51单片机综合开发系统一台  2.微机一台

四.实验方法,步骤及结果测试

1.开启ANC51实验装置,检查跳线,一般无需改动。

2.运行Keil调试程序,具体操作步骤参考实验一。

3.参考以下电路图和流程图编写程序。

4.编译程序,把生成的.HEX目标文件下载到AT89S51运行。

5.观察AMC51实验装置的LED在运行程序时闪烁的情况。

参考程序代码:                  

ORG     0000H         ;下一条指令的地址为0000H         

START:      AJMP        MAIN  ;跳入主程序

                   ORG     000BH ;下一条指令的地址为000BH 

                   AJMP    INT_T0 ;定时器0中断程序

                   ORG     0030H  ;下一条指令的地址为0030H

MAIN:   MOV     TMOD,#01H  ;设定时器T0为16位定时器

        MOV     TH0,#3CH    ;设定T0的定时值(0.1s)

                   MOV     TL0,#0B0H    ;设定T0的定时值(0.1s)

                   SETB    TR0          ;启动定时器T0

                   SETB    ET0          ;开定时/计数器0允许

         SETB    EA           ; CPU开放中断

MAIN_1: SJMP    MAIN_1

INT_T0:PUSH ACC              ;保护现场

PUSH PSW

MOV TH0,#3CH                ;设定T0的定时值(0.1s)

MOV TL0,#0B0H               ;设定T0的定时值(0.1s)

CPL P0.5                      ;取反,流水灯闪烁

POP PSW                     ;恢复现场

POP ACC

RET1      ;中断返回

END

五.实验报告要求

1.实验原理分析,实验现象。

通过启动T0中断,设定定时值为0.1S,当定时器溢出后,重新置位,并将P05取反,其中P05口对应的发光二极管将造成闪烁的结果。

2.按思考题修改程序,修改程序后的调试结果;程序流程图;源程序及注释。

思考题

1.如果要输出一个周期为1秒的方波,应怎么样修改程序?

答:周期为1S,就是每次延时0.5S,源程序0.1S 延时 5次循环后,再开中断。

ORG     0000H

START:      AJMP        MAIN

                   ORG     000BH

                   AJMP    INT_T0

                   ORG     0030H

MAIN:   MOV     TMOD,#01H

        MOV     TH0,#3CH

                   MOV     TL0,#0B0H

                   MOV     R2,#05H

                   SETB    TR0

                   SETB    ET0

                   SETB    EA

MAIN_1: SJMP    MAIN_1

INT_T0:  DJNZ    R2,INT          ;当R2=5每次减1到为0才继续执行,开启中断,也

                    MOV     R2,#05H            就是延时5次,一共0.5S,周期就是1S,频率1HZ

                    CPL     P0.5

         INT:  PUSH    ACC

        PUSH    PSW

                   MOV     TH0,#3CH

                   MOV     TL0,#0B0H

                   POP     PSW

                   POP     ACC

                   RETI

                   END

程序流程图

主程序:   开始                  中断程序:   ↓

            ↓                              P0.5取反

         初始化                               ↓

            ↓

        分别延时循环5次,2次

            ↓

         等待中断←

            ↓_____↑

2.如果要同时输出多个频率不同的方波(f1=1HZ f2=2HZ),应怎么样修改程序?(改为2.5HZ)

答:频率1HZ,周期为1S,就是每次延时0.5S,源程序0.1S 延时 5次循环后,再开中断。频率为2HZ,周期为0.5S,就是每次延时0.25S,源程序0.1S 大概延时 2次循环后,再开中断。

程序如下

ORG     0000H

START:      AJMP        MAIN

                   ORG     000BH

                   AJMP    INT_T0

                   ORG     0030H

MAIN:   MOV     TMOD,#01H

        MOV     TH0,#3CH

                   MOV     TL0,#0B0H

                   MOV     R2,#05H

                   MOV     R3,#02H

                   SETB    TR0

                   SETB    ET0

                   SETB    EA

MAIN_1: SJMP    MAIN_1

INT_T0:  DJNZ    R2,INT         ;[当R2=5每次减1到为0才继续执行,开启中断,也

                    MOV     R2,#05H        就是延时5次,一共0.5S,周期就是1S,频率1HZ]

                    CPL     P0.5

                    DJNZ    R3,INT         ;        [当R3=2每次减1到为0才继续执行,开启中断, 

         MOV     R3,#02H        就是延时2次,一共0.2S,周期就是0.4S,频率2.5HZ]

         CPL     P0.2

                   INT:  PUSH    ACC

        PUSH    PSW

                   MOV     TH0,#3CH

                   MOV     TL0,#0B0H

                   POP     PSW

                   POP     ACC

                   RETI

                   END

程序流程图:

主程序:   开始               中断程序:   ↓

            ↓                            P0.5取反

         初始化                            ↓

            ↓

        延时循环5次

            ↓

         等待中断←

            ↓_____↑

实验三         串行I/O扩展和LED数码管显示实验

一、实验目的

掌握单片机的ISP串行I/O扩展和LED数码管显示的原理和应用。

二、实验内容和要求

AT89S51的UART由P30(EXD)和P31(TXD)组成,当UART以方式0工作的时候就是以SPI的方式工作。用SPI的方式0工作的时候就是以SPI的方式工作。用SPI的方式来扩展低速的I/O,就可以节省P口。

三、实验主要仪器设备和材料

1.         AMC51单片机综合开发系统一台

2.         IBM-PC微机一台

四、实验方法、步骤及结果测试

1.         开启AMC51实验装置,检查跳线,J5,J4:2-3相连。

2.         运行KEIL,具体操作步骤参照实验一

3.         参考电路图和流程图,编写程序,送数值到数码管以16进制形式显示。

4.         编译程序,把生成的HEX目标文件下载到AT89S51运行。

5.         设置断点观察程序在AMC51实验装置的运行情况

6.         代码

DS0        EQU              3FH

DS00      EQU              3EH

DS000    EQU              3DH

DS0000   EQU              3CH

              ORG              0000H

              AJMP     MAIN

              ORG              0030H

MAIN:

LOOP:    MOV      DS0000,#01H

              MOV      DS000,#02H

              MOV      DS00,#03H

              MOV      DS0,#04H

              ACALL   DISP

              ACALL   DELAY_100MS

              AJMP     LOOP

DELAY_100MS:

              MOV      R6,#64H

D22:              MOV      R5,#0F9H

D21:              DJNZ      R5,D21

              DJNZ      R6,D22

              RET

DISP:     MOV      R7,#4

              MOV      R0,#DS0000

DL0:              MOV      A,@R0

              MOV      DPTR,#TAB

              MOVC    A,@A+DPTR

              MOV      SBUF,A

DL1:              JNB        TI,DL1

              CLR        TI

              INC        R0

              DJNZ      R7,DL0

              RET

TAB:              DB  0FCH,60H,0DAH,0F2H,66H,0B6H

              DB  0BEH,0E0H,0FEH,0E6H,0EEH,03EH,9CH

              DB  7AH,9EH,8EH

              END

原理:AT89S51单片机的UART在工作方式0下通过P30口将数据送到74LS164中锁存,并通过LED数码管显示出传输的数字。

现象:数码管显示数字。

五、思考题

1.         修改程序使数码管显示16进制数?

修改DS0000,DS000,DS00,DS0中的数值,将其改为相应的数字即可。

例:       MOV      DS0000,#0AH

              MOV      DS000,#02H

              MOV      DS00,#0CH

              MOV      DS0,#04H

2.         为什么显示之后要加上延时?

因为单片机一条指令执行的时间只有几微秒,如果不加上延时,数码管上的数字就会不断的闪烁,不稳定。不利于观察结果。

六、心得:

了解了数码管个管脚与单片机的连接关系,以及如何使用单片机SPI的方式来扩展端口。

实验四   A/D转换-亮度测量实验

一.实验目的

  熟悉0809的工作原因,掌握A/D转换程序的设计方法以及以51连接的接口电路设计方法。学习传感器件的应用。

二.实验内容和要求

  按照硬件连接图和程序流程图,编写A/D转换程序,通过调节ADC0809的REF与转换值之间的关系,了解光敏电阻的电气特性。

   光敏电阻特性:光敏电阻的阻值与亮度成反比,电气特性等效于一个可变电阻,如实验电路所示R13光敏电阻和电阻R16(4K7)串联,光敏电阻的阻值随环境亮度而变化,加在光敏电阻的电压也随之变化。变化的电压加分到0809的IN-0端和监视电路。单片机通过74LS373和与非门,访问0809,对IN-0端电压进行AD转换,并将数据处理后通过数码管显示出来。数码管的显示数值满足以下公式:显示数值=IN-0/REF+X256.

三.实验主要仪器设备和材料:

1.AMC51单片机综合开发系统一台  2.微机一台

四.实验方法,步骤及结果测试

1.开启AMC51实验装置,检查跳线,一般无需改动。

2.运行KEIL,具体操作步骤参照实验一。

3.参考以下电路图和流程图编写程序。

4.编译程序,把把生成的.HEX目标文件下载到AT89S51运行。

5.观察程序在AMC51实验装置的实际运行情况。

(1)同手挡住“亮度传感器”,改变亮度,观察数码管的数值变化。

(2)调节ADC0809的REF+观察REF和采样电压的关系。

先按一下液晶屏下方的“RESET”再按一下“MODES SWITCH”按钮,液晶屏切换到MODE1.。用一字小螺丝刀分别顺时针和逆时针扭动“亮度传感器”下方蓝色长方体的变阻器上面的螺丝。从液晶屏观察到REF的变化。

五.实验报告要求

1.实验原理分析,实验现象及结果。

实验原理:光敏电阻的阻值与亮度成反比,电气特性等效于一个可变电阻,如实验电路所示R13光敏电阻和电阻R16(4K7)串联,光敏电阻的阻值随环境亮度而变化,加在光敏电阻的电压也随之变化。变化的电压加分到0809的IN-0端和监视电路。单片机通过74LS373和与非门,访问0809,对IN-0端电压进行AD转换,并将数据处理后通过数码管显示出来。数码管的显示数值满足以下公式:显示数值=IN-0/REF+X256.

ADC0809的工作过程
首先输入3位地址,并使ALE=1,将地址存入地址锁存器中。此地址经译码选通8路模拟输入之一到比较器。START上升沿将逐次逼近寄存器复位。下降沿启动 A/D转换,之后EOC输出信号变低,指示转换正在进行。直到A/D转换完成,EOC变为高电平,指示A/D转换结束,结果数据已存入锁存器,这个信号可用作中断申请。当OE输入高电平 时,输出三态门打开,转换结果的数字量输出到数据总线上。转换数据的传送 A/D转换后得到的数据应及时传送给单片机进行处理。数据传送的关键问题是如何确认A/D转换的完成,因为只有确认完成后,才能进行传送。为此可采用下述三种方式。   
(1)定时传送方式   
对于一种A/D转换其来说,转换时间作为一项技术指标是已知的和固定的。例如ADC0809转换时间为128μs,相当于6MHz的MCS-51单片机共64个机器周期。可据此设计一个延时子程序,A/D转换启动后即调用此子程序,延迟时间一到,转换肯定已经完成了,接着就可进行数据传送。   
(2)查询方式  
A/D转换芯片由表明转换完成的状态信号,例如ADC0809的EOC端。因此可以用查询方式,测试EOC的状态,即可确认转换是否完成,并接着进行数据传送。   
(3)中断方式   
把表明转换完成的状态信号(EOC)作为中断请求信号,以中断方式进行数据传送。不管使用上述哪种方式,只要一旦确定转换完成,即可通过指令进行数据传送。首先送出口地址并以信号有效时,OE信号即有效,把转换数据送上数据总线,供单片机接受。

实验现象:

(1)通过手挡住“亮度传感器”,降低亮度,数码管的逐渐数值变大,大到255就不再增加,因为显示数值=IN-0/REF+X256.,随着亮度的变小,光敏电阻的阻值随环境亮度变小而变大,加在光敏电阻的电压也随之变化,变化的电压加分到0809的IN-0端也变大(具体数值已经通过A/D转换输出,可以从液晶屏直接读出),从而数码管的数值在参考电压REF+没有变的情况下,显示数值也增加,输入电压IN-0最大等于基准电压REF+,因而显示值大约是256,实验显示最大是255.

(2)调节REF+的,同理,因为显示数值=IN-0/REF+X256.,调节REF+,可以改变数码管的显示值,最大依然是256,调节REF+的具体数字也可以直接从液晶屏读出,REF+越大,数码管的显示值越小,基准电压REF+越小,数码管的显示值越大,最大为256,实验显示最大是255.,存在一定误差。

结果:通过调节ADC0809的参考电压REF(以及亮度传感器)与转换值之间的关系,了解光敏电阻的电气特性,光敏电阻的阻值与亮度成反比,电气特性等效于一个可变电阻。

2.完成思考题,修改后的程序代码清单(详细注释)

程序代码如下

CHENL    EQU  5CH                                      ;A/D转换通道地址     

DISPLAY_BUFFER  EQU  5DH                ;显示缓存

DS0         EQU 3FH                                       ;数码管个位

DS00        EQU 3EH                                       ;数码管十位

DS000     EQU 3DH                   ;数码管百位

DS0000   EQU 3CH                                       ;数码管千位

         ORG  0000H                                               ;下一条指令的地址为0000H

        AJMP MAIN                                        ;跳转到MAIN函数

        ORG 0013H                                         ;外部中断INTI

        AJMP  INT_1                 ;跳转到INT_1 函数

ORG  0030H                      ;下一条指令的地址为0030H 

MAIN:                            ;初始化程序

   SETB  IT1                      ;INTI边沿触发

   SETB   EX1                                            ;开INTI中断

SETB  EA                                              ;CPU开放中断

MOV   CHENL,#0F8H                      ;通道0口地址

MOV   DPH,#7FH                             ;ADC0809高位地址#7FH 

MOV   DPL,CHENL             ;ADC0809低位地址放AD转换数据

MOV  A,#0                   ;A清除数据

MOVX @DPTR,A                                  ;启动A/D

LOOP_MAIN:                       ;等待子程序

AJMP LOOP_MAIN           ;等待INTI中断

INT_1:  PUSH  PSW                                           ;外部中断1程序

PUSH ACC                  ;保护现场                                                              

PUSH  DPH               

PUSH  DPL

MOV DPH,#7FH             ;重新设置ADC0809高位地址#7FH       

MOV DPL,CHENL            ;继续放AD转换数据

MOVX A,@DPTR              ;读取A/D转换值

MOV  DISPLAY_BUFFER,A   ;保存A/D的数值

ACALL TRAN_BCD                      ;将A/D的数值转换成BCD码

ACALL  DISP                               ;调用串行显示子程序

ACALL  DELAY                                     ;调用延时程序

MOV  DPH,#7FH              ;再次设置ADC0809高位地址#7FH

MOV  DPL,CHENL             ;再次放AD转换数据

MOV  A,#0                  ;A清除数据

MOVX @DPTR,A                                  ;再次A/D启动程序

POP DPL                    ;恢复现场

POP DPH

POP ACC           

POP PSW            ;弹出标志位

RETI                ;中断返回

DELAY:      MOV R6,#64H                    ;R5,R6为临时延时变量

D22: MOV R5,#0F9H           ;6M晶振延时0.1S

D21: DJNZ R5,D21             ;R5减为0继续

DJNZ R6,D22         ;R6减为0继续

RET                ;子程序返回

TRAN_BCD:

MOV A,DISPLAY_BUFFER  ;读入缓冲

MOV R7,#0AH                     ;R7为10

MOV B,R7                 ;送10到B

DIV AB                                             ;求数码管个位

MOV DS0,B                ;将个位数字送到显示发送缓冲

MOV  B,R7               ;送10到B

DIV AB                    ;求数码管十位

MOV DS00,B                ;将十位数字送到显示发送缓冲

MOV B,R7

DIV AB                    ;求数码管百位

MOV DS000,B              ;将百位数字送到显示发送缓冲

MOV B,R7

DIV AB                    ;求数码管千位

MOV DS0000,B             ;将千位数字送到显示发送缓冲

RET                      ;子程序返回

DISP:MOV R7,#4                     ;串行显示程序(4位数码管)

     MOV R0,#DS0000               ;千位数据先放在R0

DL0: MOV A,@R0                   ;取待显示的数据

MOV DPTR,#TAB            ;查表

MOVC A,@A+DPTR          ;查得相应的七段代码

MOV SBUF,A                ;启动串行口发送数据

DL1:JNB T1,DL1                      ;等待一帧发送结束

    CLR TI                          ;清串行口中断标志

         INC R0                          ;指向下一个数据

         DJNZ R7,DL0                     ;R7为零继续

         RET                             ;共阴七段数码管代码表

TAB:DB 0FCH,60H,0DAH,0F2H,66H,0B6H  ;(0-6段码)

    DB 0BEH,0E0H,0FEH,0E6H,0EEH,03EH,9CH  ;(7-9 A B C段码)

         DB 7AH,9EH,8EH       ;(D-F段码)

END

思考题

1.0809IN-1段已接入热敏电阻,要测量温度的变化应将原程序如何修改?

     答:将MOV   DPH,#7FH;通道0口地址  改为通道1口地址,使其通道一接受数据并进行AD转化。通道1口地址暂时不会求。

2.为何从数码管观察到,在亮度没有变化的情况下,随着ADC0809REF+的变化,AD转化结果发生变化

答:因为D转化结果显示数值=IN-0/REF+X256.,随着ADC0809的REF+的变化,调节REF+,可以改变数码管的显示值,最大依然是256,调节REF+的具体数字也可以直接从液晶屏读出,REF+越大,数码管的显示值越小,基准电压REF+越小,数码管的显示值越大,最大是当输入电压IN-0等于基准电压REF+时为256,实验显示最大是255.,存在一定误差。

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

单片机实验报告学生姓名学号专业指导教师学院信息与电气工程学院20xx年11月单片机实验报告实验一MCS51指令系统实验数据排序1实验目的熟悉MCS51指令系统掌握程序设计方法加深对内部存储器读写的认识熟悉仿真开...

单片机实验报告

通信与信息工程学院20xx20xx学年第二学期实验报告课程名称单片机原理及应用专业班级学号学生姓名指导教师日期20xx年4月15日1实验一单片机汇编语言程序设计一实验目的1学习MedWin或Keilc51仿真软...

单片机实验报告

题目单片机组成原理实验报告学院计算机科学与工程学院专业信息安全姓名学号20xx年12月8日实验一输入输出接口编程一实验目的1掌握Keil软件的基本使用12掌握单片机汇编语言基本编程二实验内容1学习用Keil软件...

51单片机课程设计实验报告

51单片机课程设计报告学院:专业班级:姓名:指导教师:设计时间:51单片机课程设计一、设计任务与要求1.任务:制作并调试51单片机学习板2.要求:(1)了解并能识别学习板上的各种元器件,会读元器件标示;(2)会…

单片机实验报告

海南大学届单片机实验报告4份论文题目学生姓名学号所在院系专业班级授课教师完成时间蜂鸣器实验实验目的1熟悉实验板中蜂鸣器工作原理掌握汇编编程控制蜂鸣器播放音乐2掌握单片机编程控制蜂鸣器发出不同频率声音的方法3了解...

单片机实验报告

单片机课程设计报告实验五系别物理与电子工程学院年级专业班级学号学生姓名指导教师设计时间常熟理工学院课程设计报告目录1题目22实验要求221实验目的222实验内容23总体设计231硬件设计232软件设计44运行结...

51单片机实验报告

08424020xx单片微型计算机原理学院班级学号姓名指导教师成绩120xx年6月08424020xx硬件实验实验一定时器中断实验实验内容fosc110592MHzT0方式2产生定时中断实现秒表功能数码管后两位...

单片机实验报告

单片机实验报告实验二并行口输入输出实验循环彩灯控制任务一1实现的功能P1口接8个开关P0口接8个灯每个开关对应一个灯实时读取开关状态开关闭合时灯亮开关断开时灯灭2硬件原理图3流程图4程序ORG0000H程序入口...

单片机实验报告

一实验目的1熟练单片机的结构组成及原理2软硬兼施采用硬件电路的焊接搭建和软件的设计调试下载亲自动手对硬件系统加深了解的同时软件编程也能得心应手3了解如何从硬件和软件上分析问题排除故障二实验内容MCS51MCS5...

单片机最小系统实验报告

单片机原理及应用技术设计课题系别专业学号姓名指导老师课程设计报告20xx年6月单片机最小系统流水灯的设计一单片机简介由于单片机技术在各个领域正得到越来越广泛的应用世界上许多记成电路生产家相继推出各种类型的单片机...

单片机实验报告

单片机原理及应用一实验目的实验报告实验要求二实验电路及汇编源程序程序要加注释三仿真结果或硬件调试结果分析实验一存储器读写一实验目的1掌握寄存器存储器读写等汇编指令2掌握编程软件编辑编译调试等基本操作二实验内容1...

单片机实验报告

单片机实验报告四姓名学号时间周一11-13地点计708指导老师:实验题目C51单片机片上资源开发实验一.实验目的与要求?学习单片机片上资源开发技术?研究用片上资源实现自动控制的方案二:实验环境在KeiluVis…

单片机实验报告(42篇)