单片机实验报告

单片机课程设计报告

实验五

系 别 物理与电子工程学院 年 级 专 业

班 级

学 号

学生姓名

指导教师

设计时间

单片机实验报告

单片机实验报告

常熟理工学院课程设计报告

目录

1.题目...................................2

2.实验要求...............................2

2.1实验目的............................2

2.2实验内容............................2

3.总体设计 .............................. 2

3.1硬件设计 ........................... 2

3.2软件设计 ........................... 4

4. 运行结果 ............................. 7

5.总结与体会 ............................ 7

6.参考文献 .............................. 8

1

常熟理工学院课程设计报告

1.题目

A/D转换实验

2. 实验要求

2.1:实验目的

1.

2.

3. 了解典型AD芯片结构与功能; 掌握ADC0809与8051接口电路设计; 掌握查询和中断方式的AD编程。

2.2:实验内容

1、编写编制程序实现锯齿波、三角波、正弦波输出函数;

void wave_rect(void){}

void wave_stair(void){}

void wave_sin(void){}

其中wave_sin()可采用查表法(根据提供的mysin.h)

2、设计三个独立按键,通过按键实现各波形的输出。

3.总体设计

3.1硬件设计

1. AD转换器概述

随着数字技术,特别是计算机技术的飞速发展,在现代控制、通信及检测领域中,为提高系统性能指标,对信号的处理无不广泛地采用了数字计算机技术。由于系统的实际对象往往都是一些模拟量 (如:温度、速度、压力、电压、电流、图像等),要使计算机或数字仪表能识别、处理这些信号,必须首先将这些模拟信号转换成数字信号;而经计算机分析、处理后输出的数字量往往需要将其转换为相应的模拟信号才能为执行机构所接收。这样就需要一种能在模拟信号与数字信号之间起桥梁作用的电路-模/数转换器(A/D:Analog to Digital Converter)和数/模转换器(D/A: Digital to Analog Converter)。也就出现了单片机的模/数转换(A/D)和数/模转换(D/A)的接口问题。

2.A/D转换器分类

按转换原理可分为:计数式、双积分式、逐次逼近式、并行式。

3.ADC0809与典型电路

2

常熟理工学院课程设计报告

单片机实验报告

4. 外部RAM读写操作

(1)外部RAM寻址1_变量绝对寻址

type [memory_space] variable_name _at_ constant;

struct link

{ struct link idata *next;

char code *test;

};

struct link list idata _at_ 0x40; /* list at idata 0x40 */ char xdata text[256] _at_ 0xE000; /* array at xdata 0xE000 */ unsigned char xdata PA8255 _at_ 0x8000; /* int at xdata 0x8000 */

a=PA8255; //PA输入

PA8255=b; //PA输出

(2)外部RAM寻址2_宏定义

ABSACC.H 提供了下列方便的宏(Macro)定义

//ABSACC.H

#define CBYTE ((unsigned char volatile code *) 0)

#define DBYTE ((unsigned char volatile data *) 0)

#define PBYTE ((unsigned char volatile pdata *) 0)

#define XBYTE ((unsigned char volatile xdata *) 0)

#define CWORD ((unsigned int volatile code *) 0)

#define DWORD ((unsigned int volatile data *) 0)

#define PWORD ((unsigned int volatile pdata *) 0)

#define XWORD ((unsigned int volatile xdata *) 0)

#include <absacc.h>

#define PA8255 XBYTE[0x7FFF]

3

常熟理工学院课程设计报告

3.2软件设计

源程序:

#include "reg51.h"

#include "absacc.h"

#define COUNT 5000

#define AIN0 XBYTE[0x0000]

sbit EOC=P3^3;

unsigned char LED_seg[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //unsigned char YLED_seg[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0xf7,0xff,0xef}; unsigned char LED_bit[4]={0x01,0x02,0x04,0x08};

unsigned char LED_buf[3]={0};

unsigned char LED_S;

unsigned char LED_B;

//fosc=11.0592MHz,9600bps

//串口初始化函数9600bps

void Sbuf_Init(void)

{

SCON=0x50; //10位方式

//波特率设置 PCON=0x00; //波特率不倍增

TMOD=(TMOD&0x0f)|0x20;//T1方式2

TH1=0xfd; //T1计数初值

TL1=0xfd;

//ES=1;EA=1; //串口中断使能

TR1=1; //启动定时器

}

void T0_ISR(void) interrupt 1

4

常熟理工学院课程设计报告

{

}

void Timer0_Init(void) {

TMOD=(TMOD&0xf0)|0x01; TH0=(65536-COUNT)/256; TL0=(65536-COUNT)%256; ET0=1; EA=1;

5 static unsigned char i=0; TH0=(65536-COUNT)/256; TL0=(65536-COUNT)%256; if(i==2) { P2=~LED_bit[i]; //先送位码 P1=LED_seg[LED_buf[i]]|0x80; //再送段码 } else { } P2=~LED_bit[i]; //先送位码 P1=LED_seg[LED_buf[i]]; //再送段码 i++; if(i==3) i=0;

常熟理工学院课程设计报告

}

TR0=1;

void delay(unsigned int n)

{

}

void main(void)

{

unsigned int i=0,ad,pre_ad=0; Sbuf_Init(); Timer0_Init(); while(1) { AIN0=0; i=i; i=i; delay(20); while(EOC==0); //等待AD转换结束 ad=AIN0; //读AD转换结果 if(ad!=pre_ad) { //ad=ad/51; LED_buf[2]=(ad*100/51)/100; LED_buf[1]=(ad*100/51)/10%10; LED_buf[0]=(ad*100/51)%10;

6 unsigned int i; for(i=0;i<n;i++) ; //启动转换

常熟理工学院课程设计报告

} pre_ad=ad;

} }

4.运行结果

单片机实验报告

5.总结与体会

通过本次实验,我们了解了典型AD芯片结构与功能;掌握了ADC0809与8051接口电路设计的方法以及查询和中断方式的AD编程,顺利地完成了教学目标。在实验过程中,遇到了一些困难,比如输出的模拟量有误差,我们排查了很久,发现计算的语句并没有错误,而是由于计算的数值远远超出

7

常熟理工学院课程设计报告

了定义类型的范围,所以我们把字符型换成整型,实验结果就正确了。虽然这只是一个很小的错误,发现错误和改正错误的过程却让我们学到了很多,我们没有依赖别人,而是自己一点一点地排查,这样增强了我们的自信心,并且改掉了心理上事事依赖别人的坏习惯。

6.参考文献

单片机的C语言应用程序设计

学出版社

新概念51单片机C语言教程 主编 孙娟 马忠梅主编 郭天祥

8 北京航空航天大 电子工业出版社社

 

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

单片机原理及应用

实验报告

班级:电子0911 

学号:0720106114 

姓名:征安杰

20##年12月

实验一 P1口输入/输出实验

一、实验目的

1、掌握P1口简单使用,程序的简单编程。

2、学习延时程序的编写和使用。

二、实验内容

P1口做输出口,编写程序,使P1口接的8个发光二极管L1—L8按16进制加一方式点亮发光二极管。

三、实验说明

1P1口是准双向口,它作为输出口时与一般的双向口使用方法相同,由准双向口结构可知:当P1口作为输入口时,必须先对它置高电平,使内部MOS管截止,因内部上拉电阻是20KΩ—40KΩ,故不会对外部输入产生影响。若不先对它置高,且原来是低电平,则MOS管导通,读入的数据是不正确的。

2延时子程序的延时计算问题。对于延时程序

    DELAY :MOV  R6, #00H

    DELAY1:MOV  R7, #80H

    DJNZ  R7, $

     DJNZ  R6, DELAY1

查指令表可知MOV、DJNZ指令均需用两个机器周期,而一个机器周期时间长度为12/ 6.0MHZ,所以该段指令执行时间为:((80+1)×256+1)×2×(12÷6000000)=132.1ms

四、实验步骤

 ①P33用插针连至K1, P10—P17用插针连至L1—L8。

 ②从起始地址0540H开始连续运行程序(输入0540后按EXEC键)。

 ③开关K1每拨动一次,L1—L8发光二极管按16进制方式加一点亮。〖LM〗

五、实验原理图

六、实验程序

ORG 0540h

HA1S:   MOV A,#00H

HA1S1:  JB P3.3,HA1S1

    MOV R2,#20H

    LCALL DELAY

    JB P3.3,HA1S1

HA1S2:  JNB P3.3,HA1S2

    MOV R2,#20H

    LCALL DELAY

    JNB P3.3,HA1S2

    INC A

    PUSH ACC

    CPL A

    MOV P1,A

    POP ACC

    AJMP HA1S1

DELAY:  PUSH 02H

DELAY1:  PUSH 02H

DELAY2: PUSH 02H

DELAY3: DJNZ R2,DELAY3

    POP 02H

    DJNZ R2,DELAY2

    POP 02H

    DJNZ R2,DELAY1

    POP 02H

    DJNZ R2,DELAY

    RET

    END

七、实验感想

通过本实验,我掌握了P1口简单使用,程序的简单编程以及学会了延时程序的编写和使用。实验中,当P1口用作输入口时,必须先对它置“1”。若不先对它置“1”,读入的数据不一定正确。

实验二外部中断实验

一、实验目的

掌握工业顺序控制程序的简单编程,中断的使用。

二、实验内容

8032的P10—P16控制注塑机的七道工序,现模拟控制七只发光二极管的点亮,高电平有效,设定每道工序时间转换为延时,P3.4为开工启动开关,低电平启动。P3.3为外故障输入模拟开关,P3.3为0时不断告警。P1.7为报警声音输出,设定6道工序只有一位输出,第七道工序三位有输出。

三、实验说明

    实验中用外部中断0,编中断服务程序的关键是:

   1保护进入中断时的状态,并在退出中断之前恢复进入的状态。

   2必须在中断程序中设定是否允许中断重入,即设置EX0位。

一般中断程序进入时应保护PSW、ACC以及中断程序使用但非其专用的寄存器,本实验中未涉及。

四、实验步骤

   ①P3.4连K1,P3.2连K2,P1.0—P1.6分别连到L1—L7,P1.7连SIN(电子音响输入端)。

 ②K1开关拨在上面,K2拨在上面。

 ③用连续方式从起始地址0580H开始运行程序(输入0580后按EXEC键),此时应在等待开工状态。

 ④K1拨至下面(显低电平),各道工序应正常运行。

   ⑤K2拨至下面(低电平),应有声音报警(人为设置故障)。⑥K2拨至上面(高电平),即排除故障,程序应从刚才报警的那道工序继续执行。

五、实验原理图

六、实验程序


   


ORG 0013H

    LJMP HA2S3

    ORG 0580H        

HA2S:   MOV P1,#07FH

    ORL P3,#00H

HA2S1:  JNB P3.4,HA2S1

    ORL IE,#84H

    ORL IP,#04H

    MOV PSW,#00H

    MOV SP,#53H

HA2S2:  MOV P1,#07EH

    ACALL HA2S7

    MOV P1,#07DH

    ACALL HA2S7

    MOV P1,#07BH

    ACALL HA2S7

    MOV P1,#077H

    ACALL HA2S7

    MOV P1,#06FH

    ACALL HA2S7

    MOV P1,#05FH

    ACALL HA2S7

    MOV P1,#03FH

    ACALL HA2S7

    SJMP HA2S2

HA2S3:  MOV B,R2

HA2S4:  MOV P1,#07FH

    MOV 20H,#0A0H

HA2S5:  SETB P1.7

    ACALL HA2S6

    CLR P1.7

    ACALL HA2S6

    DJNZ 20H,HA2S5

    CLR P1.7

    ACALL HA2S6

    JNB P3.2,HA2S4

    MOV R2,B

    RETI

HA2S6:  MOV R2,#06H

    ACALL DELAY

    RET

HA2S7:  MOV R2,#30H

    ACALL DELAY

    RET

DELAY:  PUSH 02H

DELAY1: PUSH 02H

DELAY2: PUSH 02H

DELAY3: DJNZ R2,DELAY3

    POP 02H

    DJNZ R2,DELAY2

    POP 02H

    DJNZ R2,DELAY1

    POP 02H

    DJNZ R2,DELAY

    RET

    END

七、实验感想

通过本实验,我掌握了工业顺序控制程序的简单编程,中断的使用。学会了外部中断技术的基本使用方法,以及学会中断处理程序的编程方法。并按要求修改了程序代码,改变触发方式后也能正常工作。一开始程序中出现错误,在和同学商讨并结合书本后才找出问题所在。


实验三 定时器实验

一、实验目的

    掌握单片机定时器/计数器的工作方式和编程原理。

二、实验内容

8253A的0通道工作在方式3产生方波。

三、实验步骤

    ①用插针把8253的CLK0插孔和分频输出端T2插孔相连。

    ②8253的GATE0插孔和+5V插孔相连。

    ③8253的片选信号8253CS和译码输出端Y4相连。

    ④KBB拨在左边OFF位置。

    ⑤用排线将SIO区的D0—D7连到BUS2区XD0—XD7。

    ⑥在“P.....”状态下,从起始地址08C0H开始连续运行程序,用示波器测8253的0通道输出端OUTO,应有方波产生。

四、实验原理图

五、实验程序

   


ORG 08C0H      

L8253:  MOV DPTR,#0C003H

    MOV A,#36H

    MOVX @DPTR,A

    MOV DPTR,#0C000H

    MOV A,#00H

    MOVX @DPTR,A

    MOV A,#10H

    MOVX @DPTR,A

   


SJMP $

    END


六、实验感想

通过本实验,我掌握单片机定时器/计数器的工作方式和编程原理。本次试验比较简单,通过8253A的0通道工作在方式3产生方波。只有在仿真时出现了一些小问题,我们需要不断发现,总结,运用,掌握一些技巧可以大大提高实验中连接电路的速度。

实验四:串行通信实验

一、实验目的

1掌握串行口工作方式的程序设计,掌握单片机通信程序编制方法。

2了解实现串行通信的硬环境,数据格式的协议,数据交换的协议。

二、实验内容

1利用8031单片机串行口,实现双机通信。

   2本实验实现以下功能,将1号实验机键盘上键入的数字、字母显示到2号机的数码管上。

三、实验说明

    1本实验系统中考虑用户可以方便使用串行口实现双机或和上位机通信,系统设计有用户专用串行接口,只要配上用户专用通信电缆线就可以实现和上位机通信,不影响监控系统和上位机的联机工作。J10就是用户专用串行接口,将J10用用户专用通信线连到上位机的串口上。注意不要和上位机系统用串行口冲突。

    2实验时需将1号机8031串行接收信号线P3.0(RXD)连到2号机8031串行口发送信号线P3.1(TXD)。

四、实验步骤

   1.按图连好线路。

    2.在DVCC实验系统处于"P."状态下。

    3.1号机输入四位起始地址0D00后,按EXEC键连续运行程序。

    4.2号机输入四位起始地址0E30后,按EXEC键连续运行程序。

    5.从1号机上的键盘输入数字键,会显示在2号机的数码管上。

五、实验原理图

六、实验程序


;系统晶振是 6.0 MHz

    ORG 0E30H

START:

    MOV SP,#60H

    mov A,#02H

    MOV R0,#79H

    MOV @R0,A

    INC R0

    MOV A,#10H

    MOV @R0,A

    INC R0

    MOV A,#01H

    MOV @R0,A

    INC R0

    MOV A,#03H

    MOV @R0,A

    INC R0

    MOV A,#00H

    MOV @R0,A

    INC R0

    MOV A,#08H

    MOV @R0,A

    MOV A,#7EH

    MOV DPTR,#1FFFH

    MOVX    @DPTR,A

        MOV SCON,#50H   ;串口 方式 1

    MOV TMOD,#20H   ;T1 方式 1

    MOV TL1,#0CCH   ;波特率 9600 的常数

    MOV TH1,#0CCH

    SETB    TR1     ;开中断

    CLR ET1

    CLR ES

WAIT:

    JBC RI,DIS_REC  ;是否接收到数据

    LCALL   DISP        ;

    SJMP    WAIT        ;

DIS_REC:

    MOV A,SBUF      ;读串口接收到的数据

    LCALL   DATAKEY     ;显示输入的数字(0-F)

    DB 79H,7EH

    AJMP    WAIT

DATAKEY:MOV R4,A

    MOV DPTR,#1FFFH

    MOVX A,@DPTR

    MOV R1,A

    MOV A,R4

    MOV @R1,A

    CLR A

    POP 83H

    POP 82H

    MOVC A,@A+DPTR

    INC DPTR

    CJNE A,01H,DATAKEY2

    DEC R1

    CLR A

    MOVC A,@A+DPTR

DATAKEY1:PUSH 82H

     PUSH 83H

     MOV DPTR,#1FFFH

     MOVX @DPTR,A

     POP 83H

     POP 82H

     INC DPTR

     PUSH 82H

     PUSH 83H

     RET

DATAKEY2:DEC R1

     MOV A,R1

     SJMP DATAKEY1

DISP:   SETB 0D4H

    MOV R1,#7EH

    MOV R2,#20H

    MOV R3,#00H

DISP1:

    MOV DPTR,#DATACO

    MOV A,@R1

    MOVC A,@A+DPTR

    MOV DPTR,#0FF22H

    MOVX @DPTR,A

        MOV DPTR,#0FF21H

    MOV A,R2

    MOVX @DPTR,A

        LCALL DELAY

    DEC R1

    CLR C

    MOV A,R2

    RRC A

    MOV R2,A

    JNZ DISP1

    CLR 0D4H

    RET

DELAY:  MOV R7,#03H

DELAY0: MOV R6,#0FFH

DELAY1: DJNZ R6,DELAY1

        DJNZ R7,DELAY0

        RET

 DATACO: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H

    DB 88H,83H,0C6H,0A1H,86H,8EH,0BFH,0CH,89H,0DEH

    END

七、实验感想

通过本次实验,我掌握了串行口工作方式的程序设计,掌握单片机通信程序编制方法。并了解了实现串行通信的硬环境,数据格式的协议,数据交换的协议。初步了解到实现两机通信的原理和方式,以及计算机的串行通信中数据位、校验位的关系。

相关推荐