《单片机应用》实验指导书Word文件下载.docx
《《单片机应用》实验指导书Word文件下载.docx》由会员分享,可在线阅读,更多相关《《单片机应用》实验指导书Word文件下载.docx(20页珍藏版)》请在冰豆网上搜索。
(3)C语言源程序
#include<
AT89X51.H>
sbitL1=P1^0;
voiddelay02s(void)//延时0.2秒子程序
{
unsignedchari,j,k;
for(i=20;
i>
0;
i--)
for(j=20;
j>
j--)
for(k=248;
k>
k--);
}
voidmain(void)
while
(1)
L1=0;
delay02s();
L1=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)比较程序的特点,了解语言程序设计的基本思路和指令应用。
(1)输入程序1并检查无误,对程序进行调试
(2)按照实验连线要求连接,运行程序观察二极管的是否是不停的亮灭。
(3)输入程序、调试和装载;
(4)运行程序,观察8个二极管的亮灭情况是否为顺序点亮
七、实验电路图及程序流程图
每次送出的数据是不同,具体的数据如下表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
L1亮
L2亮
L3亮
L4亮
L5亮
L6亮
L7亮
L8亮
表1
程序框图
unsignedchari;
unsignedchartemp;
unsignedchara,b;
voiddelay(void)
unsignedcharm,n,s;
for(m=20;
m>
m--)
for(n=20;
n>
n--)
for(s=248;
s>
s--);
temp=0xfe;
P1=temp;
delay();
for(i=1;
i<
8;
i++)
a=temp<
<
i;
b=temp>
>
(8-i);
P1=a|b;
a=temp>
b=temp<
外部中断实验
(1)掌握中断程序设计思想。
(2)学习中断服务程序的编写
开关SP1接在P3.7/RD管脚上,在AT89S51单片机的P1端口接有四个发光二极管,上电的时候,L1接在P1.0管脚上的发光二极管在闪烁,当每一次按下开关SP1的时候,L2接在P1.1管脚上的发光二极管在闪烁,再按下开关SP1的时候,L3接在P1.2管脚上的发光二极管在闪烁,再按下开关SP1的时候,L4接在P1.3管脚上的发光二极管在闪烁,再按下开关SP1的时候,又轮到L1在闪烁了,如此轮流下去。
(1)输入程序1并检查无误,对程序进行汇编、调试,将程序装载到仿真开发系统。
(2)连接电路,按下按键,观察二极管是否发光。
(3.系统板上硬件连线
(1.把“单片机系统”区域中的P3.7/RD端口连接到“独立式键盘”区域中的SP1端口上;
(2.把“单片机系统”区域中的P1.0-P1.4端口用8芯排线连接到“八路发光二极管指示模块”区域中的“L1-L8”端口上;
要求,P1.0连接到L1,P1.1连接到L2,P1.2连接到L3,P1.3连接到L4上。
4.程序设计方法
(1.设计思想由来
在我们生活中,我们很容易通过这个叫张三,那个叫李四,另外一个是王五;
那是因为每个人有不同的名子,我们就很快认出,同样,对于要通过一个按键来识别每种不同的功能,我们给每个不同的功能模块用不同的ID号标识,这样,每按下一次按键,ID的值是不相同的,所以单片机就很容易识别不同功能的身份了。
(2.设计方法
从上面的要求我们可以看出,L1到L4发光二极管在每个时刻的闪烁的时间是受开关SP1来控制,我们给L1到L4闪烁的时段定义出不同的ID号,当L1在闪烁时,ID=0;
当L2在闪烁时,ID=1;
当L3在闪烁时,ID=2;
当L4在闪烁时,ID=3;
很显然,只要每次按下开关K1时,分别给出不同的ID号我们就能够完成上面的任务了。
下面给出有关程序设计的框图。
5.程序框图
C语言源程序
unsignedcharID;
voiddelay10ms(void)
unsignedchari,j;
for(j=248;
j--);
voiddelay02s(void)
{delay10ms();
{while
(1)
{if(P3_7==0)
if(P3_7==0)
ID++;
if(ID==4)
ID=0;
while(P3_7==0);
switch(ID)
{case0:
P1_0=~P1_0;
break;
case1:
P1_1=~P1_1;
case2:
P1_2=~P1_2;
case3:
P1_3=~P1_3;
}
实验5定时器实验
(1)掌握定时器设计思想;
(2)学习程序设计的方法,特别是定时器相关的中断服务程序的编写
用AT89S51的定时/计数器T0产生2秒钟的定时,每当2秒定时到来时,更换指示灯闪烁,每个指示闪烁的频率为0.2秒,也就是说,开始L1指示灯以0.2秒的速率闪烁,当2秒定时到来之后,L2开始以0.2秒的速率闪烁,如此循环下去。
0.2秒的闪烁速率也由定时/计数器T0来完成。
设系统的晶振频率为12MHz。
六、操作步骤及工作要点
(1)输入程序1并检查无误,对程序进行调试,将程序装载到仿真开发系统。
(2)连接电路,观察二极管发光情况。
(略)T0中断服务程序框图
主程序框图
C语言源程序
unsignedchartcount2s;
unsignedchartcount02s;
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TR0=1;
ET0=1;
EA=1;
while
(1);
voidt0(void)interrupt1using0
tcount2s++;
if(tcount2s==40)
tcount2s=0;
tcount02s++;
if(tcount02s==4)
tcount02s=0;
case0:
实验6单片机与PC通信实验
(1)掌握单片机与PC通信程序的设计方法;
利用MAX232芯片和DB9接插件,将单片机系统和PC机通过RS232协议相联。
实现计算机和单片机相互通信。
(1)利用软件给单片机发一串数据,再读会这段数据。
(2)观察结果
(略)
reg51.h>
string.h>
/*初始化串口,使用中断*/
voidinit_serialcomm(void)
SCON=0x50;
//SCON:
serailmode1,8-bitUART,
TMOD|=0x20;
//TMOD:
timer1,mode2,8-bitreload(TH=TL=初始值)定时器T1工作于方式2
PCON|=0x80;
//SMOD=1;
//TH1=0xF4;
//Baud:
4800fosc=11.0592MHz
TH1=0xFA;
9600fosc=11.0592MHz
//TL1=0xF4;
TL1=0xFA;
IE|=0x90;
//EnableSerialInterrupt
TR1=1;
//timer1run
//EA=1;
//开CPU中断
//ES=1;
//允许串行口中断
//向串口发送一个字符
voidsend_char_com(unsignedcharch)
{
SBUF=ch;
while(!
TI);
TI=0;
//向串口发送一个字符串
voidsend_string_com(unsignedchar*str)
while(*str!
=0x00)
send_char_com(*str);
str++;
//串口接收中断函数
voidserial()interrupt4using3
if(RI)
unsignedcharch;
RI=0;
ch=SBUF;
send_char_com(ch);
main()
unsignedi,j,k=1;
init_serialcomm();
//初始化串口
send_string_com("
串口调试现在开始"
);
//注意:
当使用send_string_com函数一次发送的字符串较长时需设置较高的波特率,
//否则传输时会出现乱码;
本程序调试成功了