单片机原理实验Word文件下载.docx

上传人:b****2 文档编号:6007922 上传时间:2023-05-05 格式:DOCX 页数:22 大小:204.53KB
下载 相关 举报
单片机原理实验Word文件下载.docx_第1页
第1页 / 共22页
单片机原理实验Word文件下载.docx_第2页
第2页 / 共22页
单片机原理实验Word文件下载.docx_第3页
第3页 / 共22页
单片机原理实验Word文件下载.docx_第4页
第4页 / 共22页
单片机原理实验Word文件下载.docx_第5页
第5页 / 共22页
单片机原理实验Word文件下载.docx_第6页
第6页 / 共22页
单片机原理实验Word文件下载.docx_第7页
第7页 / 共22页
单片机原理实验Word文件下载.docx_第8页
第8页 / 共22页
单片机原理实验Word文件下载.docx_第9页
第9页 / 共22页
单片机原理实验Word文件下载.docx_第10页
第10页 / 共22页
单片机原理实验Word文件下载.docx_第11页
第11页 / 共22页
单片机原理实验Word文件下载.docx_第12页
第12页 / 共22页
单片机原理实验Word文件下载.docx_第13页
第13页 / 共22页
单片机原理实验Word文件下载.docx_第14页
第14页 / 共22页
单片机原理实验Word文件下载.docx_第15页
第15页 / 共22页
单片机原理实验Word文件下载.docx_第16页
第16页 / 共22页
单片机原理实验Word文件下载.docx_第17页
第17页 / 共22页
单片机原理实验Word文件下载.docx_第18页
第18页 / 共22页
单片机原理实验Word文件下载.docx_第19页
第19页 / 共22页
单片机原理实验Word文件下载.docx_第20页
第20页 / 共22页
亲,该文档总共22页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

单片机原理实验Word文件下载.docx

《单片机原理实验Word文件下载.docx》由会员分享,可在线阅读,更多相关《单片机原理实验Word文件下载.docx(22页珍藏版)》请在冰点文库上搜索。

单片机原理实验Word文件下载.docx

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);

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 总结汇报 > 学习总结

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2