单片机原理实验.docx
- 文档编号:10097205
- 上传时间:2023-02-08
- 格式:DOCX
- 页数:22
- 大小:204.53KB
单片机原理实验.docx
《单片机原理实验.docx》由会员分享,可在线阅读,更多相关《单片机原理实验.docx(22页珍藏版)》请在冰豆网上搜索。
单片机原理实验
《单片机原理及应用》
系别:
班级:
自动化142
姓名:
学号:
实验一:
熟悉keilc51集成开发环境及常用指令
、实验目的:
(1)了解80C51典型应用系统的开发过程,熟悉keilc51集
成开发环境;
(2)掌握单步执行程序,查看专用寄存器和单片机RAM的
执行结果;
(3)掌握80C51的寻址方式及常用指令的使用方法。
、实验内容
(1)基本指令练习;
(2)数据转送(循环方式)三、思考题
1、分别执行以下程序,在调试状态下观察有关单元的内容
顺序执行的程序:
ORG00H
SJMPMAIN
ORG30H
MAIN:
MOV
SP,#60H
MOV
R0,#40H
MOV
R1,#30H
MOV
30H,#50H
A,#40H
MOV
INC
循环程序:
XUNHUAN1:
MOV
R0,#30H
;要赋值的首地址
MOV
R2,#10H
;一共赋值16次
CLR
A;从0开始赋值
L00P1:
MOV
@RO,A;赋值16次后停止赋值
INC
A;32H=2,37H=7,3BH=0B,3FH=0F
INC
R0
DJNZ
R2,LOOP1
XUNHUAN2:
MOV
R0,#30H
MOV
R1,#40H
MOV
R2,#10H
LOOP2:
MOV
A,@R0;从40H开始一直赋值
MOV
@R1,A;赋的值从30H开始
INC
R0;就是40H=30H,41H=31H
INC
R1;一直到R2=0
DJNZ
R2,L00P2;就是4FH=3FH
汇编程序3:
PANDUAN1:
MOV
30H,#10H
MOV
31H,#4BH
MOV
R0,#30H
MOV
R1,#31H
PAN0:
MOV
A,@R0
CLR
C;进位位清零
SUBB
A,@R1;带进位位的加法
JNC
PAN1;判断进位位C,不为零跳转
MOV
A,@R0;所以当C等于零时,将
MOV
40H,@R1;30H和30H的内容互换
MOV
@R0,40H
MOV
@R1,A
PAN0:
NOP
END
2、编程完成:
单片机内部RAM40H~4FH置初值A0H~4FH
RAM
中的2000H~200FH单元的内容传送到单片机内部
RAM的50H〜5FH单元。
汇编代码:
ORG00H
AJMPMAIN
ORG30H
MAIN:
LOOP1:
MOV@R0,A
MOVX@DPTR,A
INC
DPTR
INC
RO
INC
A
DJNZ
R1,LOOP1
MOV
R0,#50H
MOV
R1,#16
MOV
DPTR,#2000H
LOOP2:
MOVX
A,@DPTR
MOV
@R0,A
INC
DPTR
INC
R0
DJNZ
R1,LOOP2
END
中断、定时器与I/O口控制
、实验目的
(2)掌握定时/计数器方式2的编程方法;
(3)掌握中断的编程方法;
(4)掌握使用单片机P1口和P3口做I/O输出,各参数的配置。
二、实验任务
完成在每隔50MS/1S下接在P1口的八个发光二极管循
环亮灭程序设计和调试。
使P1口的八个发光二极管循环亮灭。
2、用定时器与计数器的方式,使TO工作定时产生
50MS,使T1工作与计数器,计数10次,每次TO溢出后从
P3.0给T1端P3.5一个脉冲。
(1)用定时器定时,计数器计数,当50ms到来时,取反
(2)
是在下降沿时计数,所以应该让P3.0—开始就输出低电平。
At>A
电路图如下:
i-l:
It?
IPIJ-
P1.4
瞰51F"
Pit?
P3...
(2)定时器方式一和方式二最大定时间分别是:
方式一:
65.536ms(2八13微秒)
方式二:
0.256ms(2八8微秒)
实验三:
扩展并行接口8155
、实验目的:
(1)掌握8051单片机与8155的接口方法
(3)掌握keilc51集成开发环境在硬件仿真条件下各参数
的设置;
(4)掌握软件延时和定时器中断延时的编程方法。
、实验内容
画出实验电路图:
汇编程序:
MAIN:
MOVSP,#60H
MOVTMOD,#01H
MOVTH0,#3CH
MOVA,#0FEH
SETBEA
SETBET0
ORG
0000H
LJMP
MAIN
ORG
000BH
LJMP
TIMEO
SJMP$
TIME0:
MOVTH0,#3CH
MOVTL0,0B0H
RLA
RETI
END
实验四:
并行A/D转换
、实验目的:
(1)掌握并行A/D芯片ADC0809与单片机的接口方法
(2)了解ADC0809芯片的性能;
(3)通过实验了解单片机实现数据采集的方法。
二、实验内容:
画出电路图:
.-.F'J■
.3•珂
二包垦
AL
寸上I亠
----
u
二」
豈殳订匕,二丄二
-£,-r
-T-
■■f-r-
rb
cs接P2.7贝y
按图中
7FF8〜7FFF
模拟输入通道的地址值INTO〜INT7:
#inelude
"stdio.h"
typedef
intElemType;
typedef
intStatus;
struct
List{
ElemType*list1;
//指向线性表的第一个节点
int
length;
//
线性表的实际长度
int
listSize;
//线性表的最大长度324
};
//附加
1:
给线性表增加空间
Status
AgainMalloc(struct
List*L1)
ElemType*p
(ElemType*)realloc(L1->list1,(L1->listSize
+1)*sizeof(ElemTy
pe));
if
(!
p)
printf("存储空间分配失败!
");
exit
(1);
L1->list1
p;/*使list1指向新线性表空间*/
L1->listSize=L1->listSize
+1;/*把线性空间大小修改为新的长度*/
//附加2:
遍历线性表元素
Status
Traverse(struct
List*L1)
i;
int
for(i
0;i
printf("%d
"丄1->list1[i]);
//1.
创建线性表,给定长度
Status
InitList(struct
List*L1,intms)
if
(ms<0)
printf("初始化线性表的长度不能小于0\n");
exit
(1);
//给list1分配空间,单元大小为定义的ElemType类型,长度为ms
if(!
L1)
printf("空间分配失败!
");
exit
(1);
else
printf("空间分配成功!
\n");
〃2.销毁线性表
free(L1);
return0;
113.清空线性表
printf("清空成功!
\n");
return0;
//4.判断线性表是否为空(如果为空返回0,如果不为空返回1)
*L1)
StatusListEmpty(structList
if(L1->length!
=0)
return1;
else
return0;
//5.
返回线性表的当前长度
intListLength(struct
List*L1)
returnL1->length;
〃6.返回第i个元素的值
ElemType
GetElem(structList*L1,inti)
printf("查找的位置超岀线性表的范围!
");
//退岀exit
(1);
else
//返回第pos个元素的值returnL1->list1[i-1];
//7.
判断某个元素是否是线性表元素,如果是,返回这个元素第一次在线性表中岀现的位置,如果不是返回0
intIsElem(structList*L1,ElemTypee)
//必须要先定义,后使用!
inti;
for(i=0;ivL1->length;i++)
if(L1->list1[i]==e)
//因为i是从0,开始,所有返回i+1
returni+1;
}//如果没有找到相应的元素,返回-1;
return0;
//8.返回某个元素的前驱元素(如果这个元素是第一个,则提示"这是第一个元素"
//1、如果这个元素不是线性表元素,返回-1
//2、如果这个元素是线性表第一个元素,返回0,提示第一个元素没有前驱元素
ElemTypePriorElem(structList*L1,ElemTypee)
//调用IsElem函数,并将结
//判断这个元素是否是线性表元素,如果是返回它的第一个位置果返回给temp变量
inttemp=lsElem(L1,e);
printf("这个元素不是线性表的元素");
return-1;
printf("这个元素是第一个元素,没有前驱元素");
return0;
else
//返回e元素的前驱元素
returnL1->list1[temp-2];
//9.返回某个元素的后继元素(如果这个元素是最后一个,则提示"这是最后一个元素"
//1、如果这个元素不是线性表元素,返回-1
//2、如果这个元素是线性表的最后一个元素,返回0,提示最后一个元素没有后继元素
ElemTypeNextElem(structList*L1,ElemTypee)
//调用IsElem函数,并将
//判断这个元素是否是线性表元素,如果是返回它的第一个位置结果返回给temp变量
inttemp=IsElem(L1,e);
printf("这个元素不是线性表的元素");
return-1;
elseif(temp
L1->length)
printf("这个元素是最后一个元素,没有后继元素");
return0;
else
//
返回e元素的后继元素
returnL1->list1[temp];
〃10.在线性表的指定位置i之前插入元素e
StatusListInsert(
structList*L1,inti,ElemTypee)
inttemp;
if
((i<1)||(i>L1->length+1))
printf("i越界,不能插入");
exit
(1);
//如果线性表的长度等于最大长度,增加空间
if
(L1->length==L1->listSize)
//每次增加1个ElemType单位的个空间
AgainMalloc(L1);
for(temp=(L1->length+1);temp>=i;temp--)
L1->list1[temp]=L1->list1[temp-1];
//在i-1的位置插入新元素e
L1->list1[i-1]=e;
//长度加1
L1->length=L1->length+1;
return0;
//11.删除线性表中指定位置i的元素e,并将e返回
List*L1,inti)
ElemTypeListDelete(struct
inttemp;
exit
(1);
//将第i个位置的元素返回给e
e=L1->list1[i-1];
//将第i+1个元素的值赋值给第i个位置
L1->list1[i-1]
L1->list1[i];
//将长度减去1
L1->length
L1->length
1;
returne;
intmain()
int
itemp
0;
int
anytemp=0;
inti
1;
intlistlength
0;
ElemType
e;
structList
L1;
printf("线性表的基本操作!
\n");
scanf("%d",&itemp);
//1.创建--InitList(structList*L1,intms)
InitList(&L1,itemp);
printf("请输入线性表的值,不能超过%d个,以911结束,911不算长度:
\n",itemp);
for(i=1;i<=itemp;i++)
scanf("%d",&e);
//这里不能是exit,exit直接退岀了所有程序,所以是break
if(e==911)
break;
//10.在线性表指定位置i之前插入元素e
ListInsert(&L1,i,e);
//5.返回长度--ListLength(structList*L1)
listlength=ListLength(&L1);
printf("目前,线性表的长度为:
%d\n",listlength);
//遍历线性表printf("目前,线性表的值为:
\n");
//遍历,在Traverse中输岀
Traverse(&L1);
//6.返回第i个元素值--GetElem(structList*L1,inti)
//输入时,要在这里赋值地址“&
scanf("%d",&anytemp);
printf("第%d个位置元素的对应的元素值为:
%d\n",anytemp,GetElem(&L1,anytemp));
List*L1,ElemTypee)
//8.返回某个元素的前驱--PriorElem(struct
printf("返回线性表元素的前驱,请输入线性表元素:
\n");
scanf("%d",&e);
printf("元素%4的前驱元素是:
%d\n",e,PriorElem(&L1,e));
//9.返回某个元素的后继--NextElem(structList*L1,ElemTypee)
printf("返回线性表元素的后继,请输入线性表元素:
\n");
scanf("%d",&e);
printf("元素%4的后继元素是:
%d\n",e,NextElem(&L1,e));
〃11.删除线性表指定位置i的元素,将结果e返回
--ListDelete(struct
List*L1,inti)
listlength
ListLength(&L1);
printf("目前,线性表的长度为:
%d\n",listlength);
printf("请输入要删除第几个位置的元素:
\n“);
scanf("%d",&i);
ListDelete(&L1,i);
listlength=ListLength(&L1);
printf("目前,线性表的长度为:
%d\n",listlength);
printf("目前,线性表的值为:
\n");
//遍历,在Traverse中输岀
Traverse(&L1);
return0;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 原理 实验