找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1798|回复: 5
收起左侧

求助啊,51单片机的中断实验,一点思路没有,这个汇编程序应该写啥啊。

[复制链接]
ID:630813 发表于 2019-11-28 11:52 来自手机 | 显示全部楼层 |阅读模式
30黑币
利用单脉冲源(KEY8)产生外部中断请求信号/INT1,在中断服务子程序中读入4个
拨码开关(SW1~SW4)设定的数据,输出到4个LED发光二极管(LED1~LED4)

根据下面这个电路图,由于刚开始接触单片机,实在写不出来,求各位大神帮忙。

Screenshot_2019-11-28-11-47-59.png
回复

使用道具 举报

ID:687418 发表于 2020-2-12 13:51 | 显示全部楼层
首先要设置EX1=1,EA=1,然后0013H处调用中断子程序。

中断子程序中,读入P1口,屏蔽低四位,然后高低字节交换,再送回P1口,然后返回。

这样描述不知道清楚吗?
回复

使用道具 举报

ID:140644 发表于 2020-2-12 16:06 | 显示全部楼层
下载一个STCISP软件,里面有例程。
回复

使用道具 举报

ID:235200 发表于 2020-2-12 23:57 | 显示全部楼层
ORG 0000H
JMP  MAIN
            ORG 0013H      ;中断入口地址
            JMP  ZHDU

            ORG  0050H
            MOV  IE,#84H       ;设置外部中断1允许
            SETB  IE1             ;下降沿触发
            JMP   $
ZHDU:  MOV  A,P1        ;读P1口开关状态
           SWAP  A           ;交换
           MOV   P1,A       ;根据开关状态点亮LED
           RETI

           END

           
回复

使用道具 举报

ID:235200 发表于 2020-2-13 00:05 | 显示全部楼层
上面程序其思路就是:首先要设置外部中断1能产生中断,还要考虑中断触发方式,然后产生中断时要读出P1口高4位的编码开关状态(接通时状态为0),因LED与开关接在同一端口,所以考虑高4位与低4位交换即可,而且开关导通时状态为0,可直接输出至P1口控制LED
回复

使用道具 举报

ID:673128 发表于 2020-2-13 10:19 | 显示全部楼层
#include<reg51.h>
#include<intrins.h>
#define u8 unsigned char
sbit key8=P3^3;
u8 x;

void Delay10ms()                //@12.000MHz
{
        unsigned char i, j;

        i = 20;
        j = 113;
        do
        {
                while (--j);
        } while (--i);
}

void main()
{
    INT1=1;
    EX1=1;
    EA=1;
   while(1);
}

void INT1() interrupt 2 //看自己板子外部中断1的中断向量号
{
   Delay10ms();
  if(!key8)
{
     x=P1;       //读取P1端口值,不要直接对端口操作
     x>>=4;    //将端口值的高四位右移到低四位
     x|=0xf0;   //将端口数值的高四位置一,为下一次读取做准备
    P1=x;        //将端口数值赋给端口
}
while(!key8);  //如果你要按着按键,灯是不会亮的,解决方法就是将这句程序规定时间退出。
}

刚学,只会用C编写,如果不需要看思路就行了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表