单片机原理实验文档格式.docx
- 文档编号:21877059
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:17
- 大小:96.69KB
单片机原理实验文档格式.docx
《单片机原理实验文档格式.docx》由会员分享,可在线阅读,更多相关《单片机原理实验文档格式.docx(17页珍藏版)》请在冰豆网上搜索。
MOVX@DPTR,A
循环程序:
XUNHUAN1:
MOVR0,#30H;
要赋值的首地址
MOVR2,#10H;
一共赋值16次
CLRA;
从0开始赋值
LOOP1:
赋值16次后停止赋值
INCA;
32H=2,37H=7,3BH=0B,3FH=0F
INCR0
DJNZR2,LOOP1
XUNHUAN2:
MOVR0,#30H
MOVR1,#40H
MOVR2,#10H
LOOP2:
MOVA,@R0;
从40H开始一直赋值
MOV@R1,A;
赋的值从30H开始
INCR0;
就是40H=30H,41H=31H
INCR1;
一直到R2=0
DJNZR2,LOOP2;
就是4FH=3FH
汇编程序3:
PANDUAN1:
MOV30H,#10H
MOV31H,#4BH
MOVR1,#31H
PAN0:
MOVA,@R0
CLRC;
进位位清零
SUBBA,@R1;
带进位位的加法
JNCPAN1;
判断进位位C,不为零跳转
所以当C等于零时,将
MOV40H,@R1;
30H和30H的内容互换
MOV@R0,40H
MOV@R1,A
NOP
END
2、编程完成:
单片机内部RAM40H~4FH置初值A0H~4FH的内容传送到外部RAM中的2000H~200FH单元,在把外部RAM中的2000H~200FH单元的内容传送到单片机内部RAM的50H~5FH单元。
汇编代码:
AJMPMAIN
MOVR0,#40H
MOVR1,#16
MOVA,#01H
MOVDPTR,#2000H
MOV@R0,A
MOVX@DPTR,A
INCDPTR
INCR0
INCA
DJNZR1,LOOP1
MOVR0,#50H
MOVXA,@DPTR
INCDPTR
DJNZR1,LOOP2
END
实验二:
中断、定时器与I/O口控制
1、实验目的
(1)掌握定时器/计数器、中断初始化程序设计的方法;
(2)掌握定时/计数器方式2的编程方法;
(3)掌握中断的编程方法;
(4)掌握使用单片机P1口和P3口做I/O输出,各参数的配置。
2、实验任务
完成在每隔50MS/1S下接在P1口的八个发光二极管循环亮灭程序设计和调试。
要求:
1、选择定时器T0方式一定时,中断方式产生50MS,使P1口的八个发光二极管循环亮灭。
2、用定时器与计数器的方式,使T0工作定时产生50MS,使T1工作与计数器,计数10次,每次T0溢出后从P3.0给T1端P3.5一个脉冲。
三、
(1)用定时器定时,计数器计数,当50ms到来时,取反P3.0让P3.0口能够输出一个周期为100ms的脉冲,通过外接导线到P3.5,则计数器就有了外部脉冲的信号,而计数器是在下降沿时计数,所以应该让P3.0一开始就输出低电平。
电路图如下:
(2)定时器方式一和方式二最大定时间分别是:
方式一:
65.536ms(2^13微秒)
方式二:
0.256ms(2^8微秒)
实验三:
扩展并行接口8155
(1)掌握8051单片机与8155的接口方法
(2)掌握keilc51集成开发环境在硬件仿真条件下各参数的设置;
(3)掌握软件延时和定时器中断延时的编程方法。
画出实验电路图:
汇编程序:
ORG0000H
LJMPMAIN
ORG000BH
LJMPTIMEO
MOVSP,#60H
MOVTMOD,#01H
MOVTH0,#3CH
MOVTL0,#0B0H;
定时50ms
MOVDPTR,7FF8;
DPTR指向命令寄存器8155
MOVA,#03H;
设定A,B,C工作方式
MOVX@DPTR,A;
启动8155
MOVDPTR,#7FF9H;
打开A口
MOVA,#0FEH
将流水灯值给PA口
SETBEA
SETBET0
SETBTR0;
打开单片机定时器0
SJMP$
TIME0:
MOVTH0,#3CH
MOVTL0,0B0H
RLA
将左移的值给PA口
RETI
实验四:
并行A/D转换
(1)掌握并行A/D芯片ADC0809与单片机的接口方法
(2)了解ADC0809芯片的性能;
(3)通过实验了解单片机实现数据采集的方法。
2、实验内容:
画出电路图:
按图中cs接P2.7则
模拟输入通道的地址值INT0~INT7:
7FF8~7FFF
#include"
stdio.h"
typedef
int
ElemType;
Status;
struct
List{
ElemType
*list1;
//指向线性表的第一个节点
length;
//线性表的实际长度
listSize;
//线性表的最大长度
324
};
//附加1:
给线性表增加空间
Status
AgainMalloc(struct
List
*L1)
{
*p
=
(ElemType
*)realloc(L1->
list1,(L1->
listSize
+
1)*sizeof(ElemType));
if(!
p)
{
printf("
存储空间分配失败!
"
);
exit
(1);
}
L1->
list1
p;
/*使list1指向新线性表空间*/
listSize=L1->
1;
/*把线性空间大小修改为新的长度*/
//附加2:
遍历线性表元素
Traverse(struct
*L1)
int
i;
for(i
0;
i
<
i++)
printf("
%d
L1->
list1[i]);
//1.创建线性表,给定长度
InitList(struct
*L1,int
ms)
if(ms<
0)
初始化线性表的长度不能小于0\n"
length
L1->
ms;
//给list1分配空间,单元大小为定义的ElemType类型,长度为ms
*)malloc(ms
*
sizeof(ElemType));
if(!
L1)
空间分配失败!
}
else
空间分配成功!
\n"
您分配的空间大小为%d\n"
ms);
return
//2.销毁线性表
Status
DestoryList(struct
{
if(L1
!
NULL)
{
free(L1);
}
printf("
销毁成功!
return
}
//3.清空线性表
ClearList(struct
//清空只需要将线性表的长度记为0即可。
清空成功!
//4.判断线性表是否为空(如果为空返回0,如果不为空返回1)
ListEmpty(struct
if(L1->
printf("
线性表不为空!
else
线性表为空!
//5.返回线性表的当前长度
int
ListLength(struct
return
//6.返回第i个元素的值
GetElem(struct
i)
if((i
1)||(i
>
listSize))
查找的位置超出线性表的范围!
//退出
//返回第pos个元素的值
list1[i-1];
//7.判断某个元素是否是线性表元素,如果是,返回这个元素第一次在线性表中出现的位置,如果不是返回0
intIsElem(structList*L1,ElemTypee)
{
//必须要先定义,后使用!
inti;
for(i=0;
i<
{
if(L1->
list1[i]==e)
//因为i是从0,开始,所有返回i+1
returni+1;
}//如果没有找到相应的元素,返回-1;
return0;
//8.返回某个元素的前驱元素(如果这个元素是第一个,则提示“这是第一个元素”)
//1、如果这个元素不是线性表元素,返回-1
//2、如果这个元素是线性表第一个元素,返回0,提示第一个元素没有前驱元素
PriorElem(struct
*L1,ElemType
e)
//判断这个元素是否是线性表元素,如果是返回它的第一个位置
//调用IsElem函数,并将结果返回给temp变量
temp
IsElem(L1,e);
if(temp
==
这个元素不是线性表的元素"
-1;
else
if(temp
1)
这个元素是第一个元素,没有前驱元素"
else
{
//返回e元素的前驱元素
list1[temp-2];
//9.返回某个元素的后继元素(如果这个元素是最后一个,则提示“这是最后一个元素”)
//2、如果这个元素是线性表的最后一个元素,返回0,提示最后一个元素没有后继元素
NextElem(struct
if(temp
length)
这个元素是最后一个元素,没有后继元素"
//返回e元素的后继元素
list1[temp];
//10.在线性表的指定位置i之前插入元素e
StatusListInsert(structList*L1,inti,ElemTypee)
inttemp;
if((i<
1)||(i>
length+1))
i越界,不能插入"
exit
(1);
}//如果线性表的长度等于最大长度,增加空间
length==L1->
listSize)
//每次增加1个ElemType单位的个空间
AgainMalloc(L1);
}//将位置i之后的元素向后以一个位置
for(temp=(L1->
length+1);
temp>
=i;
temp--)
L1->
list1[temp]=L1->
list1[temp-1];
//在i-1的位置插入新元素e
list1[i-1]=e;
//长度加1
length=L1->
length+1;
//11.删除线性表中指定位置i的元素e,并将e返回
ElemType
ListDelete(struct
e;
temp;
if((i
length))
要删除的元素超出线性表的范围!
//将第i个位置的元素返回给e
e
for(temp
//将第i+1个元素的值赋值给第i个位置
list1[i-1]
list1[i];
//将长度减去1
-
main()
itemp
anytemp
listlength
struct
L1;
线性表的基本操作!
**************初始化操作*****************\n"
请输入初始化的长度:
scanf("
%d"
&
itemp);
//1.创建--InitList(structList*L1,intms)
InitList(&
L1,itemp);
请输入线性表的值,不能超过%d个,以911结束,911不算长度:
itemp);
for(i=1;
i<
=itemp;
scanf("
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);
//遍历线性表
目前,线性表的值为:
//遍历,在Traverse中输出
Traverse(&
//6.返回第i个元素值--GetElem(structList*L1,inti)
printf("
请输入,要返回第几个元素值:
//输入时,要在这里赋值地址“&
”
anytemp);
第%d个位置元素的对应的元素值为:
anytemp,GetElem(&
L1,anytemp));
//8.返回某个元素的前驱--PriorElem(struct
e)
返回线性表元素的前驱,请输入线性表元素:
元素%d的前驱元素是:
e,PriorElem(&
L1,e));
//9.返回某个元素的后继--NextElem(struct
返回线性表元素的后继,请输入线性表元素:
元素%d的后继元素是:
e,NextElem(&
//11.删除线性表指定位置i的元素,将结果e返回--ListDelete(struct
i)
ListLength(&
请输入要删除第几个位置的元素:
i);
ListDelete(&
L1,i);
listlength=ListLength(&
return0;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 原理 实验