实验1-流水灯实验

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验一流水灯实验

一、实验目的和要求

1、学习并掌握延时程序的C语言编程方法。

2、掌握并行口编程的方法。

二、实验设备

1、计算机一台。

2、MCS51单片机实验系统一套。

3、上位机端Keil C51编译系统。

三、实验线路图

四、实验内容

1、在Keil中,建立一个Project,单片机选AT89S52,晶振选12MHz,加

入下列程序exp11.c,编译通过后,进入Start Debug Session状态,全速运行RUN,打开Peripherals→I/O-ports→port 0,观察P0.0引脚的状态,现象记录入实验报告。

程序exp11.c

#include

sbit P00 = P0^0;

void delay(unsigned int t)

{ while(--t); }

main()

{ while(1)

{ P00=0;

delay(62470);

P00=1;

delay(62470);

}

}

2、将程序exp11.c编译后的.HEX烧录入单片机学习板,观察指示灯LS1的

现象。分析并说明灯LS1和P0.0引脚高低电平的关系。

3、分析exp11.c程序中delay()函数中,在12MHz晶振下,传递的参数t,跟延时时间的关系。改写函数delay(),并利用Debug单步执行的调试功能,调整参数,令传递的参数t数值对应时间单位为毫秒,如delay(500)为延时500毫秒。改写后的delay()函数写入实验报告,仿真调试并记录下delay(100),delay(200),delay(300),delay(400),delay(500)对应实际执行延时的时间,以横坐标为参数t,纵坐标为实际延时时间,在实验报告上画出对应曲线,分析t 跟实际延时时间的线性度,并指出该函数允许的最短和最长延时时间。

4、在步骤3的基础上,再次改写程序,实现流水灯功能,初始化状态8灯全灭,每隔0.5秒,实现LS1→LS2→... →LS8依次点亮、熄灭,并不断循环的效果。主程序while(1){...;}部分写入实验报告。

5、在步骤4的基础上,再次改写程序,实现初始化状态8灯全灭,每隔0.5秒,实现LS1→LS2→... →LS7→LS8→LS7→.. →LS1依次来回点亮、熄灭,并不断循环的效果。程序不需要写入报告。

6、在Keil中,重新建立一个Project,单片机选AT89S52,晶振选12MHz,加入下列程序exp12.c,编译通过后,将.HEX烧录入单片机学习板,观察指示灯LS1的现象。观察P0.0引脚的状态,现象记录入实验报告。

程序exp12.c

#include

unsigned char bdata flag;

unsigned char count;

sbit flag0 = flag^0;

sbit P00 = P0^0;

void timer0() interrupt 1 using 1

{

TH0 = 0x3C;

TL0 = 0xB0;

count++;

if(count==10)

{flag0 = 1;

count = 0;

}

}

main()

{ flag0=0;

count=0;

P00=1;

TMOD=0x01;

TH0 = 0x3C;

TL0 = 0xB0;

EA=1;

ET0=1;

TR0=1;

while(1)

{ while(!flag0);

flag0=0;

P00=!P00;

}

}

7、分析程序exp12.c中的中断服务函数里,TH0、TL0初值和if(count==10){...}

语句对定时时间的影响。修改中断服务程序,实现100毫秒、200毫秒,300毫秒、400毫秒、500毫秒的定时,并进入Start Debug Session状态,仿真调试,测试实际定时的时间,以定时数值为横坐标,实际定时时间为纵坐标,画出曲线,并跟步骤3的曲线进行对比,说明循环等待延时和T0定时器中断定时,这两种编程方法的准确性。

五、编程任务

修改程序exp12.c,实现步骤5一样的流水灯效果。

相关文档
最新文档