单片机原理实验Word文件下载.docx
《单片机原理实验Word文件下载.docx》由会员分享,可在线阅读,更多相关《单片机原理实验Word文件下载.docx(22页珍藏版)》请在冰点文库上搜索。
L00P1:
@RO,A;
赋值16次后停止赋值
32H=2,37H=7,3BH=0B,3FH=0F
R0
DJNZ
R2,LOOP1
XUNHUAN2:
R1,#40H
LOOP2:
A,@R0;
从40H开始一直赋值
@R1,A;
赋的值从30H开始
R0;
就是40H=30H,41H=31H
R1;
一直到R2=0
R2,L00P2;
就是4FH=3FH
汇编程序3:
PANDUAN1:
30H,#10H
31H,#4BH
R1,#31H
PAN0:
A,@R0
C;
进位位清零
SUBB
A,@R1;
带进位位的加法
JNC
PAN1;
判断进位位C,不为零跳转
所以当C等于零时,将
40H,@R1;
30H和30H的内容互换
@R0,40H
@R1,A
NOP
END
2、编程完成:
单片机内部RAM40H~4FH置初值A0H~4FH
RAM
中的2000H~200FH单元的内容传送到单片机内部
RAM的50H〜5FH单元。
汇编代码:
AJMPMAIN
LOOP1:
MOV@R0,A
MOVX@DPTR,A
DPTR
RO
A
R1,LOOP1
R0,#50H
R1,#16
DPTR,#2000H
MOVX
A,@DPTR
@R0,A
R1,LOOP2
中断、定时器与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)掌握软件延时和定时器中断延时的编程方法。
画出实验电路图:
汇编程序:
MOVSP,#60H
MOVTMOD,#01H
MOVTH0,#3CH
MOVA,#0FEH
SETBEA
SETBET0
ORG
0000H
LJMP
MAIN
000BH
TIMEO
SJMP$
TIME0:
MOVTL0,0B0H
RLA
RETI
实验四:
并行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;
intStatus;
struct
List{
ElemType*list1;
//指向线性表的第一个节点
int
length;
//
线性表的实际长度
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指向新线性表空间*/
listSize=L1->
+1;
/*把线性空间大小修改为新的长度*/
//附加2:
遍历线性表元素
Traverse(struct
i;
for(i
0;
i
<
L1->
length;
i++)
printf("
%d
丄1->
list1[i]);
//1.
创建线性表,给定长度
InitList(struct
List*L1,intms)
(ms<
0)
初始化线性表的长度不能小于0\n"
//给list1分配空间,单元大小为定义的ElemType类型,长度为ms
if(!
L1)
空间分配失败!
else
空间分配成功!
\n"
〃2.销毁线性表
free(L1);
return0;
113.清空线性表
清空成功!
//4.判断线性表是否为空(如果为空返回0,如果不为空返回1)
*L1)
StatusListEmpty(structList
if(L1->
length!
=0)
return1;
//5.
返回线性表的当前长度
intListLength(struct
returnL1->
〃6.返回第i个元素的值
ElemType
GetElem(structList*L1,inti)
查找的位置超岀线性表的范围!
//退岀exit
(1);
//返回第pos个元素的值returnL1->
list1[i-1];
//7.
判断某个元素是否是线性表元素,如果是,返回这个元素第一次在线性表中岀现的位置,如果不是返回0
intIsElem(structList*L1,ElemTypee)
//必须要先定义,后使用!
inti;
for(i=0;
ivL1->
length;
list1[i]==e)
//因为i是从0,开始,所有返回i+1
returni+1;
}//如果没有找到相应的元素,返回-1;
//8.返回某个元素的前驱元素(如果这个元素是第一个,则提示"
这是第一个元素"
//1、如果这个元素不是线性表元素,返回-1
//2、如果这个元素是线性表第一个元素,返回0,提示第一个元素没有前驱元素
ElemTypePriorElem(structList*L1,ElemTypee)
//调用IsElem函数,并将结
//判断这个元素是否是线性表元素,如果是返回它的第一个位置果返回给temp变量
inttemp=lsElem(L1,e);
printf("
这个元素不是线性表的元素"
return-1;
这个元素是第一个元素,没有前驱元素"
//返回e元素的前驱元素
list1[temp-2];
//9.返回某个元素的后继元素(如果这个元素是最后一个,则提示"
这是最后一个元素"
//2、如果这个元素是线性表的最后一个元素,返回0,提示最后一个元素没有后继元素
ElemTypeNextElem(structList*L1,ElemTypee)
//调用IsElem函数,并将
//判断这个元素是否是线性表元素,如果是返回它的第一个位置结果返回给temp变量
inttemp=IsElem(L1,e);
elseif(temp
length)
这个元素是最后一个元素,没有后继元素"
返回e元素的后继元素
list1[temp];
〃10.在线性表的指定位置i之前插入元素e
StatusListInsert(
structList*L1,inti,ElemTypee)
inttemp;
((i<
1)||(i>
length+1))
i越界,不能插入"
//如果线性表的长度等于最大长度,增加空间
(L1->
length==L1->
listSize)
//每次增加1个ElemType单位的个空间
AgainMalloc(L1);
for(temp=(L1->
length+1);
temp>
=i;
temp--)
list1[temp]=L1->
list1[temp-1];
//在i-1的位置插入新元素e
list1[i-1]=e;
//长度加1
length=L1->
length+1;
//11.删除线性表中指定位置i的元素e,并将e返回
List*L1,inti)
ElemTypeListDelete(struct
//将第i个位置的元素返回给e
e=L1->
//将第i+1个元素的值赋值给第i个位置
list1[i-1]
list1[i];
//将长度减去1
length
1;
returne;
intmain()
itemp
anytemp=0;
inti
intlistlength
e;
structList
L1;
线性表的基本操作!
);
scanf("
%d"
&
itemp);
//1.创建--InitList(structList*L1,intms)
InitList(&
L1,itemp);
请输入线性表的值,不能超过%d个,以911结束,911不算长度:
\n"
itemp);
for(i=1;
i<
=itemp;
e);
//这里不能是exit,exit直接退岀了所有程序,所以是break
if(e==911)
break;
//10.在线性表指定位置i之前插入元素e
ListInsert(&
L1,i,e);
//5.返回长度--ListLength(structList*L1)
listlength=ListLength(&
L1);
目前,线性表的长度为:
%d\n"
listlength);
//遍历线性表printf("
目前,线性表的值为:
//遍历,在Traverse中输岀
Traverse(&
//6.返回第i个元素值--GetElem(structList*L1,inti)
//输入时,要在这里赋值地址“&
anytemp);
第%d个位置元素的对应的元素值为:
anytemp,GetElem(&
L1,anytemp));
List*L1,ElemTypee)
//8.返回某个元素的前驱--PriorElem(struct
返回线性表元素的前驱,请输入线性表元素:
元素%4的前驱元素是:
e,PriorElem(&
L1,e));
//9.返回某个元素的后继--NextElem(structList*L1,ElemTypee)
返回线性表元素的后继,请输入线性表元素:
元素%4的后继元素是:
%d\n"
e,NextElem(&
〃11.删除线性表指定位置i的元素,将结果e返回
--ListDelete(struct
listlength
ListLength(&
请输入要删除第几个位置的元素:
\n“);
i);
ListDelete(&
L1,i);