流水灯的实验.docx
- 文档编号:8178397
- 上传时间:2023-01-29
- 格式:DOCX
- 页数:15
- 大小:130.71KB
流水灯的实验.docx
《流水灯的实验.docx》由会员分享,可在线阅读,更多相关《流水灯的实验.docx(15页珍藏版)》请在冰豆网上搜索。
流水灯的实验
1.广告灯的左移右移
1.实验任务
做单一灯的左移右移,硬件电路如图4.4.1所示,八个发光二极管L1-L8分别接在单片机的P1.0-P1.7接口上,输出“0”时,发光二极管亮,开始时P1.0→P1.1→P1.2→P1.3→┅→P1.7→P1.6→┅→P1.0亮,重复循环。
2.电路原理图
图4.4.1
3.系统板上硬件连线
把“单片机系统”区域中的P1.0-P1.7用8芯排线连接到“八路发光二极管指示模块”区域中的L1-L8端口上,要求:
P1.0对应着L1,P1.1对应着L2,……,P1.7对应着L8。
4.程序设计内容
我们可以运用输出端口指令MOV P1,A或MOV P1,#DATA,只要给累加器值或常数值,然后执行上述的指令,即可达到输出控制的动作。
每次送出的数据是不同,具体的数据如下表1所示
P1.7
P1.6
P1.5
P1.4
P1.3
P1.2
P1.1
P1.0
说明
L8
L7
L6
L5
L4
L3
L2
L1
1
1
1
1
1
1
1
0
L1亮
1
1
1
1
1
1
0
1
L2亮
1
1
1
1
1
0
1
1
L3亮
1
1
1
1
0
1
1
1
L4亮
1
1
1
0
1
1
1
1
L5亮
1
1
0
1
1
1
1
1
L6亮
1
0
1
1
1
1
1
1
L7亮
0
1
1
1
1
1
1
1
L8亮
表1
5.程序框图
图4.4.2
6.汇编源程序
ORG0
START:
MOVR2,#8
MOVA,#0FEH
SETBC
LOOP:
MOVP1,A
LCALLDELAY
RLCA
DJNZR2,LOOP
MOVR2,#8
LOOP1:
MOVP1,A
LCALLDELAY
RRCA
DJNZR2,LOOP1
LJMPSTART
DELAY:
MOVR5,#20;
D1:
MOVR6,#20
D2:
MOVR7,#248
DJNZR7,$
DJNZR6,D2
DJNZR5,D1
RET
END
7.C语言源程序
#include
unsignedchari;
unsignedchartemp;
unsignedchara,b;
voiddelay(void)
{
unsignedcharm,n,s;
for(m=20;m>0;m--)
for(n=20;n>0;n--)
for(s=248;s>0;s--);
}
voidmain(void)
{
while
(1)
{
temp=0xfe;
P1=temp;
delay();
for(i=1;i<8;i++)
{
a=temp<
b=temp>>(8-i);
P1=a|b;
delay();
}
for(i=1;i<8;i++)
{
a=temp>>i;
b=temp<<(8-i);
P1=a|b;
delay();
}
}
}
2.多路开关状态指示
1.实验任务
如图4.3.1所示,AT89S51单片机的P1.0-P1.3接四个发光二极管L1-L4,P1.4-P1.7接了四个开关K1-K4,编程将开关的状态反映到发光二极管上。
(开关闭合,对应的灯亮,开关断开,对应的灯灭)。
2.电路原理图
图4.3.1
3.系统板上硬件连线
(1.把“单片机系统”区域中的P1.0-P1.3用导线连接到“八路发光二极管指示模块”区域中的L1-L4端口上;
(2.把“单片机系统”区域中的P1.4-P1.7用导线连接到“四路拨动开关”区域中的K1-K4端口上;
4.程序设计内容
(1.开关状态检测
对于开关状态检测,相对单片机来说,是输入关系,我们可轮流检测每个开关状态,根据每个开关的状态让相应的发光二极管指示,可以采用JB P1.X,REL或JNB P1.X,REL指令来完成;也可以一次性检测四路开关状态,然后让其指示,可以采用MOV A,P1指令一次把P1端口的状态全部读入,然后取高4位的状态来指示。
(2.输出控制
根据开关的状态,由发光二极管L1-L4来指示,我们可以用SETB P1.X和CLR P1.X指令来完成,也可以采用MOV P1,#1111XXXXB方法一次指示。
5.程序框图
读P1口数据到ACC中
ACC内容右移4次
ACC内容与F0H相或
ACC内容送入P1口
[endif]-->
图4.3.2
6.方法一(汇编源程序)
ORG00H
START:
MOVA,P1
ANLA,#0F0H
RRA
RRA
RRA
RRA
XORA,#0F0H
MOVP1,A
SJMPSTART
END
7.方法一(C语言源程序)
#include
unsignedchartemp;
voidmain(void)
{
while
(1)
{
temp=P1>>4;
temp=temp|0xf0;
P1=temp;
}
}
8.方法二(汇编源程序)
ORG00H
START:
JBP1.4,NEXT1
CLRP1.0
SJMPNEX1
NEXT1:
SETBP1.0
NEX1:
JBP1.5,NEXT2
CLRP1.1
SJMPNEX2
NEXT2:
SETBP1.1
NEX2:
JBP1.6,NEXT3
CLRP1.2
SJMPNEX3
NEXT3:
SETBP1.2
NEX3:
JBP1.7,NEXT4
CLRP1.3
SJMPNEX4
NEXT4:
SETBP1.3
NEX4:
SJMPSTART
END
9.方法二(C语言源程序)
#include
voidmain(void)
{
while
(1)
{
if(P1_4==0)
{
P1_0=0;
}
else
{
P1_0=1;
}
if(P1_5==0)
{
P1_1=0;
}
else
{
P1_1=1;
}
if(P1_6==0)
{
P1_2=0;
}
else
{
P1_2=1;
}
if(P1_7==0)
{
P1_3=0;
}
else
{
P1_3=1;
}
}
}
3.闪烁灯
1. 实验任务
如图4.1.1所示:
在P1.0端口上接一个发光二极管L1,使L1在不停地一亮一灭,一亮一灭的时间间隔为0.2秒。
2. 电路原理图
图4.1.1
3. 系统板上硬件连线
把“单片机系统”区域中的P1.0端口用导线连接到“八路发光二极管指示模块”区域中的L1端口上。
4. 程序设计内容
(1).延时程序的设计方法
作为单片机的指令的执行的时间是很短,数量大微秒级,因此,我们要求的闪烁时间间隔为0.2秒,相对于微秒来说,相差太大,所以我们在执行某一指令时,插入延时程序,来达到我们的要求,但这样的延时程序是如何设计呢?
下面具体介绍其原理:
如图4.1.1所示的石英晶体为12MHz,因此,1个机器周期为1微秒
机器周期微秒
MOVR6,#202个 2
D1:
MOVR7,#2482个 2 2+2×248=498 20×
DJNZR7,$2个 2×248 (498
DJNZR6,D12个 2×20=40 10002
因此,上面的延时程序时间为10.002ms。
由以上可知,当R6=10、R7=248时,延时5ms,R6=20、R7=248时,延时10ms,以此为基本的计时单位。
如本实验要求0.2秒=200ms,10ms×R5=200ms,则R5=20,延时子程序如下:
DELAY:
MOVR5,#20
D1:
MOVR6,#20
D2:
MOVR7,#248
DJNZR7,$
DJNZR6,D2
DJNZR5,D1
RET
(2).输出控制
如图1所示,当P1.0端口输出高电平,即P1.0=1时,根据发光二极管的单向导电性可知,这时发光二极管L1熄灭;当P1.0端口输出低电平,即P1.0=0时,发光二极管L1亮;我们可以使用SETB P1.0指令使P1.0端口输出高电平,使用CLR P1.0指令使P1.0端口输出低电平。
5.程序框图
如图4.1.2所示
图4.1.2
6.汇编源程序
ORG0
START:
CLRP1.0
LCALLDELAY
SETBP1.0
LCALLDELAY
LJMPSTART
DELAY:
MOVR5,#20;延时子程序,延时0.2秒
D1:
MOVR6,#20
D2:
MOVR7,#248
DJNZR7,$
DJNZR6,D2
DJNZR5,D1
RET
END
7.C语言源程序
#include
sbitL1=P1^0;
voiddelay02s(void)//延时0.2秒子程序
{
unsignedchari,j,k;
for(i=20;i>0;i--)
for(j=20;j>0;j--)
for(k=248;k>0;k--);
}
voidmain(void)
{
while
(1)
{
L1=0;
delay02s();
L1=1;
delay02s();
}
1.C语言和汇编语言在开发单片机时各有哪些优缺点?
答:
汇编语言是一种用文字助记符来表示机器指令的符号语言,是最接近机器码的一种语言。
其主要优点是占用资源少、程序执行效率高。
但是不同的CPU,其汇编语言可能有所差异,所以不易移植。
C语言是一种结构化的高级语言。
其优点是可读性好,移植容易,是普遍使用的一种计算机语言。
缺点是占用资源较多,执行效率没有汇编高。
对于目前普遍使用的RISC架构的8bit
MCU来说,其内部ROM、RAM、STACK等资源都有限,如果使用C语言编写,一条C语言指令编译后,会变成很多条机器码,很容易出现ROM空间不够、堆栈溢出等问题。
而且一些单片机厂家也不一定能提供C编译器。
而汇编语言,一条指令就对应一个机器码,每一步执行什幺动作都很清楚,并且程序大小和堆栈调用情况都容易控制,调试起来也比较方便。
所以在单片机开发中,我们还是建议采用汇编语言比较好。
如果对单片机C语言有兴趣,HOLTEK-p.htm"target="_blank"title="HOLTEK货源和PDF资料">HOLTEK的单片机就有提供C编译器,可以到HOLTEK-p.htm"target="_blank"title="HOLTEK货源和PDF资料">HOLTEK的网站()免费下载使用。
2.C或汇编语言可以用于单片机,C++能吗?
答:
在单片机开发中,主要是汇编和C,没有用C++的。
3.搞单片机开发,一定要会C吗?
答:
汇编语言是一种用文字助记符来表示机器指令的符号语言,是最接近机器码的一种语言。
其主要优点是占用资源少、程序执行效率高。
但是不同的CPU,其汇编语言可能有所差异,所以不易移植。
对于目前普遍使用的RISC架构的8bit
MCU来说,其内部ROM、RAM、STACK等资源都有限,如果使用C语言编写,一条C语言指令编译后,会变成很多条机器码,很容易出现ROM空间不够、堆栈溢出等问题。
而且一些单片机厂家也不一定能提供C编译器。
而汇编语言,一条指令就对应一个机器码,每一步执行什么动作都很清楚,并且程序大小和堆栈调用情况都容易控制,调试起来也比较方便。
所以在资源较少单片机开发中,我们还是建议采用汇编语言比较好。
而C语言是一种编译型程序设计语言,它兼顾了多种高级语言的特点,并具备汇编语言的功能。
C语言有功能丰富的库函数、运算速度快、编译效率高、有良好的可移植性,而且可以直接实现对系统硬件的控制。
C语言是一种结构化程序设计语言,它支持当前程序设计中广泛采用的由顶向下结构化程序设计技术。
此外,C语言程序具有完善的模块程序结构,从而为软件开发中采用模块化程序设计方法提供了有力的保障。
因此,使用C语言进行程序设计已成为软件开发的一个主流。
用C语言来编写目标系统软件,会大大缩短开发周期,且明显地增加软件的可读性,便于改进和扩充,从而研制出规模更大、性能更完备的系统。
综上所述,用C语言进行单片机程序设计是单片机开发与应用的必然趋势。
所以作为一个技术全面并涉足较大规模的软件系统开发的单片机开发人员最好能够掌握基本的C语言编程。
4.当开发一个较复杂而又开发时间短的项目时,用C还是用汇编开发好?
答:
对于复杂而开发时间紧的项目时,可以采用C语言,但前提是要求对该MCU系统的C语言和C编译器非常熟悉,特别要注意该C编译系统所能支持的数据类型和算法。
虽然C语言是最普遍的一种高级语言,但不同的MCU厂家其C语言编译系统是有所差别的,特别是在一些特殊功能模块的操作上。
如果对这些特性不了解,那调试起来就有的烦了,到头来可能还不如用汇编来的快。
5.在教学中要用到8088和196芯片单片机教材,请问那里可以找到关于这方面的书或资料?
答:
有关这方面的教材,大学里常用的一本是《IBM-PC汇编语言程序设计》清华大学出版社出版的,在网上以及书店都是可以找到的,另外网上还可以搜索到很多其他的教材如:
《微机原理及汇编语言教程》(杨延双
张晓冬等编著)和《16/32位微机原理、汇编语言及接口技术》(作者:
钟晓捷陈涛,机械工业出版社
出版)等,可以在较大型的科技书店里查找或者直接从网上订购。
6.初学者到底是应该先学C还是汇编?
答:
对于单片机的初学者来说,应该从汇编学起。
因为汇编语言是最接近机器码的一种语言,可以加深初学者对单片机各个功能模块的了解,从而打好扎实的基础。
7.我是一名武汉大学电子科技大3的学生,学了电子线路、数字逻辑、汇编和接口、C语言,但是总是感觉很迷茫,觉好象什么都不会。
怎么办?
答:
大学过程是一个理论过程,实践的机会比较少,往往会造成理论与实践相脱节,这是国内大学教育系统的通病,不过对于学生来说切不可好高骛远。
一般从大三会开始接触到一些专业课程,电子相关专业会开设相关的单片机应用课程并且会有简单的实验项目,那么要充分把握实验课的机会,多多地实际上机操作练习。
平时可以多看看相关的电子技术杂志网站,看看别人的开发经验,硬件设计方案以及他人的软件设计经验。
有可能的话,还可以参加一些电子设计大赛,借此机会2--3个人合作做一个完整系统,会更有帮助。
到了大四毕业设计阶段,也可以选择相关的课题作些实际案例增长经验。
做什么事情都有个经验的积累过程,循序渐进。
8.请问作为学生,如何学好单片机?
答:
学习好单片机,最主要的是实践,在实践中增长经验。
在校学生的话,实践机会的确会比较少,但是有机会的话,可以毕业实习选择相关的课题,这样就可以接触到实际的项目。
而且如果单片机微机原理是一门主课的话,相信学校会安排比较多的实践上机机会。
有能力的话,可以找一些相关兼职工作做做,会更有帮助。
而且单片机开发应用需要软硬件结合,所以不能只满足于编程技巧如何完美,平时也要注意硬件知识的积累,多上上电子论坛网站,买一些相关杂志。
可能的话,可以到ic37去买一些小零件,自己搭一个小系统让它工作起来。
HOTLEK的单片机是RISC结构的8位单片机,它可以广泛应用在家用电器、安全系统、掌上游戏等方面。
大概来说可以分成I/O型单片机、LCD型单片机、A/D型单片机、A/D
withLCD型单片机等等。
这些单片机的中文资料我们都公开在HOLTEK-p.htm"target="_blank"title="HOLTEK货源和PDF资料">HOLTEK网站。
HOLTEK-p.htm"target="_blank"title="HOLTEK货源和PDF资料">HOLTEK各类单片机的使用手册下载地址:
HOLTEK-p.htm"target="_blank"title="HOLTEK货源和PDF资料">HOLTEK单片机软件/硬件应用范例下载地址:
HOLTEK-p.htm"target="_blank"title="HOLTEK货源和PDF资料">HOLTEK单片机支持工具下载地址:
9.如何才能才为单片机的高手啊?
答:
要成为单片机高手,应该多实践,时常关注单片机的发展趋势;经常上一些相关网站,从那里可以找到许多有用的资料。
10.女性是否适合单片机软件编程这个行业?
答:
要根据自己的兴趣,配合自己对软件编程的耐性,男女皆适合这个行业。
11.Holtek的数据手册在哪里下载?
答:
如果对Holtek的IC感兴趣的话,相应的数据手册可以到网站上
12.8位机还能延续多久!
答:
以现在MCU产品主力还是在8位领域,主要应用于汽车应用、消费性电子、电脑及PC周边、电信与通讯、办公室自动化、工业控制等六大市场,其中车用市场多在欧、美地区,而亚太地区则以消费性电子为主,
并以量大低单价为产品主流,目前16位MCU与8位产品,还有相当幅度的价差,新的应用领域也仍在开发,业界预计,至少在2005年前8位的MCU仍是MCU产品的主流。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 流水 实验
![提示](https://static.bdocx.com/images/bang_tan.gif)