单片机实验报告
学 院:姓 名: 学 号:
指导老师:
目 录
二、目的及要求……………………………………………………3
提高部分:定时器控制LED灯
由单片机内部定时器1,按方式1工作,即作为16位定时器使用每0.05秒钟T1溢出中断一次。P1口的P1.0-P1.7分别接八个发光二极管。编写程序模拟时序控制装置。开机后P64)和“4.4 D/A转换实验”项目。
提高部分:(要求:Proteus环境下完成)
小键盘给定(并显示工作状态),选择信号源输出波形类型(D/A转换方式),经过A/D采样后,将采样数据用LED灯,显示当前模拟信号值大小及变化状态。
实验四 串行通讯实验
阅读、调试C语言程序功能。使用汇编语言编程,完成实验指导书之“3.7 串口通讯实验”项目。(要求:实验仪器上完成)
提高部分:(要求:Proteus环境下完成)
利用单片机实验系统,实现与PC机通讯。功能要求:将从实验系统键盘上键入的数字,字母显示到PC机显示器上,将PC机键盘输入的字符(0-F)显示到单片机实验系统的数码管上。
二、目的及要求
1、学习Keil C51集成开发工具的操作及调试程序的方法,包括:仿真调试与脱机运行间的切换方法;
2、熟悉TD-51单片机系统板及实验系统的结构及使用;
3、进行MCS51单片机指令系统软件编程设计与硬件接口功能设计;
4、学习并掌握Keil C51与Proteus仿真软件联机进行单片机接口电路的设计与编程调试;完成指定MCS51单片机综合设计题。
三、实验步骤
实验参考程序及实验步骤如下。
实验参考程序:(DigitIO.C)
#include "SST89x5x4.H"
void main(void)
{
unsigned char data i; //data 为存储器类型说明
while(1)
{
P1 = P1 | 0xF0; //声明高4 位为输入
i = P1; P1 = (i>>4)&0x0F;
}
}
汇编:
ORL P1(0x90),#B(0xF0)
MOV 0x08,P1(0x90)
MOV A,0x08
SWAP A
ANL A,#0x0F
MOV R7,A
MOV A,R7 ANL A,#0x0F
MOV P1(0x90),A
SJMP main(C:0800)
实验步骤:
1. 按图3-1-1 所示, 连接实验电路图,图中 “圆圈”
示需要通过排线连接;
2. 编写实验程序,编译链接无误后进入调试状态;
3. 运行实验程序, 观察实验现象,验证程序正确性;
4. 按复位按键,结束程序运行,退出调试状态; 5. 自行设计实验,验证单片机其它IO 口的使用。
实验接线图:
实验二 定时器/计数器实验
一、实验目的
1. 了解MCS-51 单片机定/计数器的工作原理与工作方式; 2. 掌握定时/计数器T0 和T1 在定时器和计数器两种方式下的编程;
3. 学习定时/计数器T2 的可编程时钟输出功能。
二、实验内容
1. 使用定时器0 与定时器1 进行定时,在P1.0 和P1.1 引脚上输出方波信号,通过示波器观察波形输出,测量并记录方波周期。
2. 将定时/计数器1 设定为计数器方式,每次计数到10 在P1.0 引脚上取反一次,观察发光二极管的状态变化。
3. 定时器2 可以作为时钟发生器使用,并在P1.0 引脚上输出占空比为50%的方波。编程定时器2,使用示波器测量输出时钟,测量时钟周期。 三、实验原理
通常,8051 单片机内部有2 个16 位定时/计数器,即定时器0(T0)和定时器1(T1)。增强型单片机SST89E554RC 内部还有一个16 位定时器T2,与其相关的特殊功能寄存器有TL2、TH2、RCAP2L、RCAP2H、T2CON 等。
定时器/计数器/特殊功能寄存器
定时器/计数器2 控制寄存器(T2CON)各位的含义简述如下: TF2:定时器溢出标志,当定时器溢出时置位,必须由软件清除。当RCLK=1 或TCLK=1时此位将不会被置位。
EXF2:定时器2 外部标志,当EXEN2=1 并且T2EX 引脚上出现负跳变引起捕捉或重载发生时此位置1。如果定时器2 中断使能,EXF2=1 会引起中断,此位必须软件清除。DCEN=1时,EXF2 不会引起中断。
RCLK:接收时钟标志,RCLK=1,串行口使用T2 的溢出脉冲作为方式1 和3 下的接收时钟;
RCLK=0,串行口使用T1 的溢出脉冲作为接收时钟。
TCLK:发送时钟标志,与RCLK 的作用相同。
EXEN2:定时器2 外部使能标志。EXEN2=1 且T2 未被用于串口时钟时,若T2EX 引脚上出现负跳变则出现捕捉或重载。EXEN2=0 时,T2 忽略T2EX 引脚上的变化。
TR2:启动/停止定时器2,为1 时启动定时器2。
C/T2#:定时器/计数器选择。C/T2#=1 为计数功能;C/T2#=0 为定时功能。
CP/RL2#:捕捉/重载标志。CP/RL2#=1,当EXEN2=1 且T2EX 引脚上出现负跳变时捕捉发生。CP/RL2#=0,T2 溢出时重载发生,或当EXEN2=1 且T2EX 引脚上出现负跳变时重载发生。如果RCLK=1 或TCLK=1,此位会被忽略,T2 溢出时自动重载。
定时器/计数器2 模式寄存器(T2MOD)各位的含义简述如下:
T2OE:定时器2 输出使能位。
DCEN:递减计数使能位。
四、实验步骤
定时器实验
按照实验要求编写实验程序,参考例程如下:(Timer.C)
#include "SST89x5x4.h"
sbit Wave1 = P1^0;
sbit Wave2 = P1^1;
void main()
{
TMOD = 0x11; //定时器方式寄存器
TH0 = 0x0F8; //定时器0 计数初值
TL0 = 0x00;
TH1 = 0x0F8; //定时器1 计数初值
TL1 = 0x00;
TR0 = 1; //启动定时器0
TR1 = 1; //启动定时器1
while(1)
{ if(TF0 == 1) //定时器0 溢出标志
{
TH0 = 0x0F8;
TL0 = 0x00;
Wave1 = ~Wave1;
TF0 = 0;
}
else if(TF1 == 1) //定时器1 溢出标志
{
TH1 = 0x0F8;
TL1 = 0x00; Wave2 = ~Wave2;
TF1 = 0;
}
}
}
汇编:
MOV TMOD(0x89),#0x11
MOV TH0(0x8C),#IPA(0xF8)
CLR A
MOV TL0(0x8A),A
MOV TH1(0x8D),#IPA(0xF8) MOV TL1(0x8B),A
SETB TR0(0x88.4)
SETB TR1(0x88.6)
JNB TF0(0x88.5),C:0821
MOV TH0(0x8C),#IPA(0xF8)
CLR A
MOV TL0(0x8A),A
CPL Wave1(0x90.0)
CLR TF0(0x88.5)
SJMP C:0812
JNB TF1(0x88.7),C:0812 MOV TH1(0x8D),#IPA(0xF8)
CLR A
MOV TL1(0x8B),A
CPL Wave2(0x90.1)
CLR TF1(0x88.7) SJMP C:0812
MOV R0,#0x7F
CLR A
MOV @R0,A
DJNZ R0,C:0833
MOV SP(0x81),#0x07
LJMP main(C:0800)
实验步骤:
(1)编写实验程序,编译、链接后联机调试;
(2)运行实验程序,使用示波器观察P1.0 与P1.1 引脚上的波形并记录周期; (3)改变计数初值,观察实验现象,验证程序功能。
计数器实验
实验参考例程:(Count.C)
#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;
}
}
实验步骤:
(1)按下图连接实验线路图;
(2)编写程序,联机调试; (3)运行实验程序,按单次脉冲KK1,观察发光
管D0 的状态,每10 次变化一次;
(4)实验结束,按复位按键退出调试。
五、定时器控制LED灯
要求:由单片机内部定时器1,按方式1工作,即作为16位定时器使用每0.05秒钟T1溢出中断一次。P1口的P1.0-P1.7分别接八个发光二极管。编写程序模拟时序控制装置。开机后2)程序如下:
#include<reg51.h>
unsigned char count;
void main()
{ unsigned char value, i;
TMOD=0x01;
TH0=0x4C;
TL0=0x00;
ET0=1;
PT0=1;
EA=1;
TR0=1;
while(1)
{ if( count==20)
P1=05H; if (count==40)
P1=0AH;
if (count==60)
P1=50H;
if (count==80)
P1=0A0H;
if (count==100)
P1=55H;
if (count==120)
P1=0AAH;
if (count==140) P1=0FFH;
if (count==160)
P1=00H;
count=0;
}
}
void Timer0()interrupt 1
{
TR0=0;
TH0=0x4C;
TL0=0x00; TR0=1;
count++;
}
实验三 A/D、D/A转换实验
一、 A/D转换实验
1)实验目的
1. 学习理解模/数信号转换的基本原理;
2. 掌握模/数转换芯片ADC0809 的使用方法。
2)实验内容
编写实验程序,将ADC 单元中提供的0V~5V 信号源作为ADC0809 的模拟输入量,进行A/D 转换,转换结果通过变量进行显示。
3)实验原理
ADC0809 包括一个8 位的逐次逼近型的ADC 部分, 并提供一个8 通道的模拟多路开关和联合寻址逻辑。用它可直接输入8 个单端的模拟信号,分时进行A/D 转换,在多点巡回检测、过程控制等应用领域中使用非常广泛。ADC0809 的主要技术指标为:
· 分辨率:8 位
· 单电源:+5V
· 总的不可调误差:±1LSB
· 转换时间:取决于时钟频率
· 模拟输入范围:单极性 0~5V
· 时钟频率范围:10KHz~1280KHz
ADC0809 的外部管脚如下图所示,地址信号与选中通道 的关系如表1 所示。
表1:实验程序清单(AD0809.C)
#include "SST89x5x4.h"
#include "Absacc.h"
#define STARTAD XBYTE[0x7F00]
#define ADRESULT XBYTE[0x7F08]
sbit ADBUSY = P3^3;
void Delay()
{
unsigned char i;
for(i=0; i<100; i++);
} unsigned char AD0809(void)
{
unsigned char result;
STARTAD = 0; //启动AD
while(ADBUSY == 1); //等待转换结束
Delay();
result = ADRESULT;
return result; //返回转换结果
}
void main(void)
{ unsigned char ADV; //变量
while(1)
{
ADV = AD0809();
Delay(); //设置断点
}
}
汇编:
AD0809:
MOV DPTR,#0x7F00
CLR A MOVX @DPTR,A
JB ADBUSY(0xB0.3),C:0805
LCALL Delay(C:0827)
MOV DPTR,#0x7F08
MOVX A,@DPTR
MOV R7,A
RET
MOV R0,#0x7F
CLR A
MOV @R0,A
DJNZ R0,C:0814 MOV SP(0x81),#0x08
LJMP main(C:081D)
main:
LCALL AD0809(C:0800)
MOV 0x08,R7
LCALL Delay(C:0827)
SJMP main(C:081D)
Delay:
CLR A
MOV R7,A
INC R7 CJNE R7,#0x64,C:0829
1. 按图4-3-2 连接实验线路,AD 的时钟线需要与实验平台中的系统总线单元的CLK 相连;
2. 编写实验程序,经编译、链接无误后装入系统,启动调试;
3. 将变量ADV 添加到变量监视窗口中;
4. 在Delay()语句行设置断点,使用万用表测量ADJ 端的电压值,计算对应的采样值,然后运
行程序;
5. 程序运行到断点处停止运行,查看变量窗口中ADV 的值,与计算的理论值进行比较,看是否
一致(可能稍有误差,相差不大); 6. 调节电位器,改变输入电压,比较ADV 与计算值,反复验证程序功能;制表并记录结果。
二、 D/A转换实验
1)实验目的
1.学习数/模转换的基本原理;
2.掌握DAC0832 的使用方法。
2)实验内容
设计实验电路图实验线路并编写程序,实现D/A 转换,要求产生锯齿波、脉冲波,并用示波器观察电压波形。
3)实验原理
D/A 转换器是一种将数字量转换成模拟量的器件,其特点是:接收、保持和转换的数字信息,不存在随温度、时间漂移的问题,其电路抗干扰性较好。大多数的D/A 转换器接口设计主要围绕D/A 集成芯片的使用及配置响应的外围电路。 DAC0832是8位芯片,采用CMOS 工艺和R-2RT 形电阻解码网络,转换WR1结果为一对差动电流Iout1 和Iout2 输出,其主要性能参数如表4-4-1 示,引脚如图4-4-1 所示。4)实验步骤
1. 实验接线图如图4-4-2 所示,按图接线;
2. 编写实验程序,经编译、链接无误后装入系统,启动调试;
3. 运行程序,用示波器测量DA 的输出,观察实验现象;
4. 自行编写实验程序,产生三角波形,使用示波器观察输出,验证程序功能。
实验程序清单: (DA0832.C)
#include <Absacc.h>
#define DA XBYTE[0x7FFF] void main(void)
{
unsigned int i;
while(1)
{
for(i=0; i<255; i++)
DA = i; //写DA
}
}
汇编:
CLR A MOV R7,A
MOV R6,A
MOV DPTR,#0x7FFF
MOV A,R7
MOVX @DPTR,A
INC R7
CJNE R7,#0x00,C:080D
INC R6
MOV A,R7
CPL A
ORL A,R6 JNZ C:0803
SJMP main(C:0800)
MOV R0,#0x7F
CLR A
MOV @R0,A
DJNZ R0,C:0817
MOV SP(0x81),#0x07
LJMP main(C:0800)
三、扩展
要求:Proteus环境下完成小键盘给定(并显示工作状态),选择信号源输出波形类型(D/A转换方式),经过A/D采样后,将采样数据用LED灯,显示当前模拟信号值大小及变化状态。
1)硬件构造如下:
2)程序如下:
PRO_DA EQU 7FFFH
PRO_AD EQU 0BFFFH
ORG 0000H
SJMP MAIN
ORG 001BH LJMP KEYSCAN
ORG 0030H
MAIN: SETB EA
SETB EX1
SETB IT1
MOV P1,#0FH
MOV R5,#0FFH
TEST: MOV R5,#03H
CJNE R5,#01H,L1
LCALL SQUARE
AJMP TESTL1: CJNE R5,#02H,L2
LCALL TRIANGLE
AJMP TEST
L2: CJNE R5,#03H,L3
LCALL SAWTOOTH
L3: AJMP TEST
;键盘扫描中断
KEYSCAN: ACALL T12MS
;MOV R6,A
ACALL SCAN JNZ KEY1
SJMP EXIT
KEY1: MOV R2,A
MOV R3,#07FH
MOV R4,#03H
LOOP1: MOV P1,R3
MOV A,P1
CPL A
ANL A,#0FH
JNZ KEY2
MOV A,R3 RR A
MOV R3,A
DJNZ R4,LOOP1
SJMP EXIT
KEY2: DEC R4
CJNE R2,#01H,LOOP3
MOV A,#01H
SJMP LOOP6
LOOP3: CJNE R2,#02H,LOOP4
MOV A,#04H
SJMP LOOP6LOOP4: CJNE R2,#04H,LOOP5
MOV A,#07H
SJMP LOOP6
LOOP5: CJNE R2,#08H,LOOP6
MOV A,#0AH
LOOP6: ADD A,R4
MOV R5,A
MOV P1,#0FH
;MOV A,R6
EXIT: RETI
;延时后再次扫描有无按键按下 SCAN: MOV P1,#0FH
MOV A,P1
CPL A
ANL A,#0FH
RET
T12MS:MOV R7,#15H ;12MS
TM: MOV R6,#0FFH
DJNZ R6,$
DJNZ R7,TM
RET
;D/A产生方波
SQUARE: MOV DPTR,#PRO_DA
MOV A,#0FFH
MOVX @DPTR,A
MOV DPTR,#0BFFFH
MOVX @DPTR,A
ACALL DELAY
MOV A,#00H
MOV DPTR,#PRO_DA
MOVX @DPTR,A
MOV DPTR,#0BFFFH MOVX @DPTR,A
ACALL DELAY
RET
DELAY:MOV R0,#27H
DEL1: MOV R1,#0FFH
DJNZ R1,$
DJNZ R0,DEL1
RET
;D/A产生三角波 时钟500KHz 幅值1mv 扫描周期20ms
TRIANGLE:MOV A,#00HTLOOP:MOV DPTR,#PRO_DA
MOVX @DPTR,A
MOV DPTR,#PRO_AD
MOVX @DPTR,A
CJNE A,#0FFH,TLOOP2
COUNT1:DEC A
MOV DPTR,#PRO_DA
MOVX @DPTR,A
MOV DPTR,#PRO_AD
MOVX @DPTR,A
CJNE A,#00H,COUNT1 SJMP EXIT1
TLOOP2:INC A
AJMP TLOOP
EXIT1:RET
;D/A产生锯齿波
SAWTOOTH: MOV A,#00H
SLOOP:MOV DPTR,#PRO_DA
MOVX @DPTR,A
MOV DPTR,#PRO_AD
MOVX @DPTR,A
INC A CJNE A,#00H,SLOOP
RET
END
实验四 串行通信设计
一、实验目的
1. 学习MCS-51 单片机串口的工作原理及程序设计;
2. 了解使用SSTEasyIAP11F.EXE 软件实现程序脱机运行的方法;
3. 熟悉启动加载代码与SoftICE 相互切换的方法。
二、实验原理 MCS-51 单片机内部的全双工串行接口部分,包含有串行接收器和串行发送器。有两个物理上独立的接收缓冲器和发送缓冲器。接收缓冲器只能读出接收的数据,但不能写入。发送缓冲器只能写入发送的数据,但不能读出。因此可以同时收、发数据,实现全双工通讯。两个缓冲器是特殊功能寄存器SBUF,它们公用地址为99H,SBUF 是不可位寻址的。此外,还有两个寄存器SCON 和PCON 分别用于控制串行口的工作方式以及波特率,定时器T1 可以用作波特率发生器 SST89E554RC 提供了增强型全双工串行接口,具有帧错误检测和自动地址识别的功能。 由于SST89E554RC 的串口用作调试目的,所以Keil C51 软件提供了串口模拟窗口,可以借助此窗口调试串口通讯程序。也可以将程序编译生成目标代码(.HEX),脱机运行。 三、实验内容
编写实验程序,每隔一定的时间单片机向串口发送一次数据“Xi’an Tangdu Corp.”。
四、实验步骤
实验参考程序:(Serial.C)
#include "REG51.h"
#include "stdio.h"
/**********************************************************
* 函数原型: void Init_Serial(void)
* 函数描述: 初始化串口,晶振为11.0592MHz,波特率为19200bps *
***********************************************************
void Init_Serial(void)
{
SCON = 0x50; // 串口工作方式1
TMOD = (TMOD&0x0F)|0x20; // 选择定时器1 方式2
PCON = 0x80; // 波特率倍增
TH1 = 0xFD; // 计数初值, 19200bps
TR1 = 1; // 启动定时器1
ES = 0;
} void delay(void)
{
unsigned int i;
for(i=0; i<35000; i++);
}
void main(void) //====== 主程序 ======//
{
Init_Serial();
SBUF=0x00;
while(1)
{ printf("Xi'an Tangdu Corp.\n");
delay();
}
}
汇编:
LCALL Init_Serial(C:0C41)
CLR A
MOV SBUF(0x99),A
MOV R3,#0xFF
MOV R2,#0x0C
MOV R1,#0x6B LCALL PRINTF(C:0862)
LCALL delay(C:0C27)
SJMP C:0C5D
ANL A,R0
XRL A,R1
ADD A,@R1
AJMP C:0B6E
JB 0x2A.4,C:0CD4
XRL A,R6
XRL A,@R1
XRL A,#0x75 JB 0x28.3,C:0CE9
ORL C,0x2E.0
ADD A,R6
INC R2
NOP
MOV R0,#0x7F
CLR A
MOV @R0,A
DJNZ R0,C:0C82
MOV SP(0x81),#0x21
LJMP main(C:0C57)实验步骤:
(1)串口通讯实验电路如图3-7-1 所示;
(2)编写实验程序,经编译、链接无误后启动调试;
(3)进入调试界面,点击命令,打开串口1 监视窗口;
(4)运行实验程序,观察此时有如图3-7-2 所示输出;
(5)阅读1.7 节的内容,首先将系统程序由SoftICE 切换到启动加载程序;
(6)将编译生成的Hex 文件通过SSTEasyIAP11F.EXE 软件下载到单片机内部Flash 中; (7)复位单片机,打开超级终端或串口调试软件,将端口号及波特率等设置好,观察PC显
示,如图3-7-3 和图3-7-4 所示;
(8)实验结束,重新将SoftICE 下载到单片机系统区替换启动加载程序。
五、扩展
1)流程图 写数据 读数据
2)硬件如下:3)程序如下:ORG 0000H
AJMP MAIN
ORG 0023H
AJMP URT
ORG 0030H
MAIN:mov p1,#00h
LCALL URTINIT
START:MOV P0,#0FH
MOV A,P0
CPL A
ANL A,#0FHJZ START
LCALL DELAY
MOV P0,#0FH
MOV A,P0
ANL A,#0FH
MOV R7,A
MOV P0,#0F0H
MOV A,P0
ANL A,#0F0H
ORL A,R7
CJNE A,#0EEH,K1MOV A,#30H
MOV SBUF,A
JNB TI,$
CLR TI
K1:CJNE A,#0DEH,K2
MOV A,#31H
MOV SBUF,A
JNB TI,$
CLR TI
K2:CJNE A,#0BEH,K3
MOV A,#32HMOV SBUF,A
JNB TI,$
CLR TI
K3:CJNE A,#7EH,K4
MOV A,#33H
MOV SBUF,A
JNB TI,$
CLR TI
K4:CJNE A,#0EDH,K5
MOV A,#34H
MOV SBUF,AJNB TI,$
CLR TI
K5:CJNE A,#0DDH,K6
MOV A,#35H
MOV SBUF,A
JNB TI,$
CLR TI
K6:CJNE A,#0BDH,K7
MOV A,#36H
MOV SBUF,A
JNB TI,$CLR TI
K7:CJNE A,#7DH,K8
MOV A,#37H
MOV SBUF,A
JNB TI,$
CLR TI
K8:CJNE A,#0EBH,K9
MOV A,#38H
MOV SBUF,A
JNB TI,$
CLR TIK9:CJNE A,#0DBH,KA
MOV A,#39H
MOV SBUF,A
JNB TI,$
CLR TI
KA:CJNE A,#0BBH,KB
MOV A,#41H
MOV SBUF,A
JNB TI,$
CLR TI
KB:CJNE A,#7BH,KCMOV A,#42H
MOV SBUF,A
JNB TI,$
CLR TI
KC:CJNE A,#0E7H,KD
MOV A,#43H
MOV SBUF,A
JNB TI,$
CLR TI
KD:CJNE A,#0D7H,KE
MOV A,#44HMOV SBUF,A
JNB TI,$
CLR TI
KE:CJNE A,#0B7H,KF
MOV A,#45H
MOV SBUF,A
JNB TI,$
CLR TI
KF:CJNE A,#77H,K0
MOV A,#46H
MOV SBUF,AJNB TI,$
CLR TI
K0:
LJMP START
URTINIT:
MOV SCON,#50H ;设置成串口工作方式在8位URT
MOV TMOD,#20H ;设置T1为可重装8位定时器
MOV TL1,#0FDH ;256-FOSC/BTL/32/12
MOV TH1,#0FDH
SETB TR1 ;开启定时器SETB ES ;开启串口中断
SETB EA ;开总中断
RET
URT:
clr c
MOV A,SBUF ;接收到数据后将数据返回
mov p1,a
next1:CLR RI ;清接收中断标志
RETI
DELAY: MOV R6,#0ffh
DEL1: MOV R5,#0ffh DJNZ R5,$
DJNZ R6,DEL1
RET
END
【单片机实验报告 单片机实验报告怎么写】相关文章:
计算机辅助设计CAD-实验报告 道路工程计算机辅助设计实验报告08-15
工作报告之大学单片机实验报告 石家庄铁道大学单片机实验报告08-15
单片机实验报告 单片机实验报告怎么写08-15
安徽大学历次单片机实验报告 安徽工业大学单片机实验报告08-15
2023电子商务运营实习报告范文08-15
电子商务的实习报告三篇08-15
电商运营助理实习报告08-15
食品饮料行业电子商务实习报告08-15