【51单片机实验】3-单片机并行口与中断系统应用(附Proteus电路)

目录

一、实验目的

二、实验设备

三、实验内容

四、写在最后

本实验对应的实验报告


一、实验目的

  1. 掌握51单片机并行口的应用设计
  2. 掌握中断系统的使用方法和中断应用程序设计
  3. 熟悉单片机应用系统设计、调试以及软硬件联合调试的方法。

二、实验设备

1、微机一台,Keil C集成开发环境

2、DP-51PRO.NET综合实验箱

3、Proteus仿真软件

注:本实验报告采用的单片机为AT89C51,其晶振频率为12MHz


三、实验内容

1、51单片机的P1口接8个发光二极管LED,相邻的4个LED为一组,实现两组LED每隔1秒交替点亮一次,周而复始,画出电路,并用C51编写程序。

提示:1秒延时函数建议采用定时器编程实现。

方法1——for循环嵌套实现1秒延时

//循环嵌套实现——8个LED小灯分两组交替亮
#include <reg51.h>
void main()
{
	unsigned int  i;	/*范围为0~65535*/
	unsigned char j;	/*范围为0~255*/
	P1 = 0xf0;	/*LED灯初始状态*/
	while(1)
	{
		for(i=1000;i>0;i--)		
			for(j=124;j>0;j--);	/*循环实现1秒定时*/
		P1 = ~P1;	/*换另一组小灯亮*/
	}
}

代码分析:

内层for循环:for (j = 124; j > 0; j --)     循环124次,所消耗的时间为:124次×8个指令周期×1微秒 = 992微秒

外层for循环:for(i =1000; i > 0; i --)     循环1000次,将内层消耗的时间放大1000倍,还要加上自身所消耗的8个指令周期

for循环嵌套:总消耗的时间为:1000×(992+8)= 1秒,实现了1秒延时。

方法2——定时器T0模式1实现1秒定时

//定时器实现——8个LED小灯分两组交替亮
#include <reg51.h>
void main()
{
		unsigned char i = 10;
		P1 = 0xf0; 	/*设置P1口的初始状态,即LED灯初始亮灭状态*/
		TMOD = 0x01;		/*T0方式1定时*/
		TR0 = 1;		/*启动T0定时器*/
		while(1)
		{
			TH0 = 15536/256;	/*设置定时高八位初值*/
			TL0 = 15535%256;	/*设置定时低八位初值*/
			while(!TF0);	/*查询TF0是否为1,以定时50ms*/
			TF0 = 0;	/*TF软件清零*/
			i - -;
			if(i = = 0)
			{
				 P1 = ~P1;		/*P1口取反,使另外一组灯亮*/
				 i = 20;	/*对T0定时次数计数20次,实现1s定时*/
			}
		}
}

代码分析:

采用16位计数/定时器最大定时为2^16×1微秒=65.536毫秒,不能直接满足定时1秒的要求,故而考虑先定时50毫秒,然后对定时50毫秒计数20次,从而实现1秒定时。

T0采用方式1(M1M0=01)16位定时方式,定时初值 = 2^16-50毫秒/1微秒 = 15536

设置定时器T0的初值,溢出时TF为1,然后TF软件清零,再对T0定时进行计数,实现了1秒定时。

电路仿真:

2、单片机P1口接8个发光二极管,/INT0引脚接一拨位开关或按键。开始P1.0对应LED亮,以后每中断一次,下一个LED亮,顺序下移且每次只有一个LED亮,周而复始,画出电路,并用C51编写程序。

思考:/INT0引脚直接接拨位开关或按键,现象有什么不同?如何去改进电路?

方式1——外接拨位开关

//拨动开关触发中断
#include <reg51.h>
void x_int() interrupt 0	/*中断服务函数*/
{
	P1 = (P1>>1) | 0x80;
	if(P1 == 0xff)
	{
		P1 = 0x7f;
	}	
}
void main()
{
	P1 = 0xfe;
	EA = 1;	/*开中断总开关*/
	EX0 = 1;	/*允许INTO中断*/
	IT0 = 1;   /*下降沿产生中断*/
	while(1);  /*等待中断*/
}

电路仿真:

方式2——外接按键

//按动按键触发中断
#include <reg51.h>
void x_int() interrupt 0	/*中断服务函数*/
{
	P1 = (P1>>1) | 0x80;
	if(P1 == 0xff)
	{
		P1 = 0x7f;
	}	
}
void main()
{
	P1 = 0xfe;
	EA = 1;	/*开中断总开关*/
	EX0 = 1;	/*允许INTO中断*/
	IT0 = 1;   /*下降沿产生中断*/
	while(1);  /*等待中断*/
}

电路仿真:

代码分析:

通过INT0引脚外接拨位开关,拨动开关形成外部中断,或者外接一按键,按动按键产生边沿信号形成外部中断,然后通过中断服务函数中的移位操作和逻辑运算等来改变LED小灯的状态。


四、写在最后

单片机这个东西学起来还真是有趣~(【狗头】)

如果你觉得这篇文章写的还不错的话,别忘记向小新竖起你的大拇指(点赞)哦!

  • 22
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
标题:mcs 51单片机 proteus 仿真实用实例大全 例子集合,含汇编代码keil工程和proteus工程 mcs 51单片机 proteus 仿真 例子集合,代码为网上收集 PROTEUS 在 MCS-51 上应用实例 PROTEUS 在 MCS-51 应用例子 绝对经典,绝对通过,仿真正常,可用,亲测 单片机仿真例子源码 单片机汇编源码例子 source code for mcs 51 mcu mcs 51 汇编仿真例子集合 proteus 仿真大全, 100多个基于51单片机的汇编语言汇编c51 proteus 仿真例子 mcu simulate 1.流水灯 仿真 2.开关灯 仿真 3.51驱动74ls系列例子 4.单片机 74ls245 5.单片机驱动喇叭例子,单片机驱动喇叭或蜂鸣器音乐 单片机播放警告声 6.单片机驱动蜂鸣器例子 7.单片机驱动74hc系列例子 8.51单片机处理按键例子,,4x4按键,16按键处理,按键检测 代码 源码 9.单片机驱动电子仿真 和 例子 汇编 组合语言 源码 10.单片机 led 流水灯 例子,仿真,源码 11.51 单片机 驱动 8x8点阵 仿真 已经源码 12.单片机 74ls373 13.单片机 74ls273 14.单片机按键例子源码 15.单片机驱动 8255 例子源码 proteus仿真, 16.51单片机定时器例子, 17.51单片机 计数器例子 源码 实例,proteus 仿真 18.单片机驱动数码管,数码管显示数字,显示移动数字 19.动态数码管数字例子 源码 代码 仿真 20.电位器 ad转换例子 21.电位器调节模拟adc adc0808 单片机 事例 源码 以及proteus 例子仿真 22.单片机做的数字电压表仿真 23.单片机rs232串行通信 串口通信 例子 源码 代码 以及 仿真。 24.51单片机 c51 驱动 74ls165 并口转 串行 例子 事例 以及 proteus 仿真 25.单片机 驱动 74ls164 窜转并 串行 转 并行 例子 汇编源码 汇编代码 以及proteus 仿真 26.单片机 做的 数码管显示时钟,数字时钟 电子中,无ds1302. proteus 模拟 27.单片机 eeprom e2prom 例子 28.c51 单片机 i2c 例子 以及 汇编 组合语言 代码 源码 仿真 模拟 29.c51 单片机 DC马达 直流电机 驱动 例子 以及 代码 源码 仿真 模拟 30.c51 单片机 步进马达 步进电机 例子 以及 代码 源码 仿真 模拟 31.c51 单片机 电子锁 按键锁 例子 以及 代码 源码 仿真 模拟 32.c51 单片机 计算器 例子 以及 代码 源码 仿真 模拟 33.c51 单片机 门铃 例子 以及 代码 源码 proteus 仿真 模拟 34.c51 单片机 定时器 例子 以及 汇编 组合语言 代码 源码 proteus 仿真 模拟 35.c51 单片机 中断 例子 以及 汇编 组合语言 代码 源码 proteus 仿真 模拟 36.c51 单片机 pwm 脉宽控制 例子 以及 汇编 组合语言 代码 源码 proteus 仿真 模拟 等等...... 注意这个是压缩包,里有所有的工程文件,都是可用的,解压的时候最好要用 7zip 去解压。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我是初九

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值