概述
实现目标
因仿真库中无74LS348仿真元件,仿真电路使用74HC148和74HC245模拟74LS348,8路外部中断输入全部为低有效,对应的中断发生时,使用printf函数从串口输出“extended interput x happened”,x为对应的中断编号。
Proteus仿真图
C51代码
#include <REG52.H> /* special function register declarations */
#include <stdio.h> /* prototype declarations for I/O functions */
#include <intrins.h>
#include<Absacc.h>
#define byte unsigned char
#define uchar unsigned char
#define word unsigned int
#define uint unsigned int
#define ulong unsigned long
#define BYTE unsigned char
#define WORD unsigned int
#define TRUE 1
#define FALSE 0
#define INT0_PORT XBYTE[0x0000] /*外部中断74LS348地址*/
uchar int0_status; /*中断状态*/
bit int0_flag; /*中断标记*/
void initUart(void);
/******** main 函数 *********/
void main (void) {
initUart(); /* 初始化串口 */
int0_flag=0;/*设置中断0标记*/
TCON=0x55; /* 电平触发外部中断 */
IE=0x81; /*打开外中断int0*/
do {
if (int0_flag) { /*如果有中断*/
switch (int0_status){ /*根据中断源分支*/
case 0:
printf ("extended interrupt 0 happenedn");
/* 可在此处插入扩展中断0服务程序 */
break;
case 1:
printf ("extended interrupt 1 happenedn");
/* 可在此处插入扩展中断1服务程序 */
break;
case 2:
printf ("extended interrupt 2 happenedn");
/* 可在此处插入扩展中断2服务程序 */
break;
case 3:
printf ("extended interrupt 3 happenedn");
/* 可在此处插入扩展中断2服务程序 */
break;
case 4:
printf ("extended interrupt 4 happenedn");
/* 可在此处插入扩展中断4服务程序 */
break;
case 5:
printf ("extended interrupt 5 happenedn");
/* 可在此处插入扩展中断5服务程序 */
break;
case 6:
printf ("extended interrupt 6 happenedn");
/* 可在此处插入扩展中断6服务程序 */
break;
case 7:
printf ("extended interrupt 7 happenedn");
/* 可在此处插入扩展中断7服务程序 */
break;
default:break;
}
int0_flag=0; /*清中断0标记*/
}
}while(TRUE);
}
/*********** 中断0服务程序***************/
void exint0(void) interrupt 0
{
EA=0;/* 关总中断 */
int0_flag=1; /*设置中断0标记*/
/*读取外部中断源输入,并屏蔽高5位*/
int0_status=~INT0_PORT & 0x07;
EA=1;/* 开总中断 */
}
/********** 初始化串口波特率 ************/
void initUart(void)/*初始化串口波特率,使用定时器2*/
{
/* Setup the serial port for 9600 baud at 11.0592MHz */
SCON = 0x50; //串口工作在方式1
RCAP2H=(65536-(3456/96))>>8;
RCAP2L=(65536-(3456/96))%256;
T2CON=0x34;
TI = 1; /* 置位TI*/
}
运行结果
注:若直接在Proteus中仿真,则会出现
而正确的显示则需要使用uVision2与Proteus VSM联调,具体啥原因海轰也没有弄懂
本文Proteus仿真图及源程序获取见:
说明
参考课本:单片机原理与嵌入式系统设计
最后
以上就是无心大雁为你收集整理的Proteus仿真:外部中断应用实例的全部内容,希望文章能够帮你解决Proteus仿真:外部中断应用实例所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复