找回密码
 立即注册
查看: 283|回复: 18

外STC8G部中断0和1产生了中断但是程序执行异常,变量++不执行

[复制链接]

该用户从未签到

2

主题

9

回帖

102

积分

注册会员

积分
102
发表于 2023-12-2 22:42:42 | 显示全部楼层 |阅读模式
#include <stc8g.h>
#include <string.h>
#include <stdio.h>    // 标准输入输出定义
#include <intrins.h>

sbit WIEGAND_D0 = P3^2;
sbit WIEGAND_D1 = P3^3;
sbit LED = P5^5;
unsigned char i=0;
unsigned char k = 1;
unsigned char j = 1;
volatile unsigned char wiegand_buffer[26];
volatile unsigned char wiegand_index = 0;

void ExternalInterrupt0() interrupt 0
{
    //LED = 1;
    k=+1;
    //wiegand_buffer[wiegand_index] = 0x00;
          //wiegand_index=wiegand_index+1;
}

void ExternalInterrupt1() interrupt 2
{
    //LED = 0;
    j=+1;
    //wiegand_buffer[wiegand_index] = 0x01;
           //wiegand_index=wiegand_index+1;
}

void Init()
{
    P3M0 = 0x00;
    P3M1 = 0x00;
    P5M0 |= 0x20;
    P5M1 &= ~0x20;
    EA  = 1;//总中断
    EX0 = 1;//外部中断0
    IT0 = 1;//外部中断0下降沿触发
    EX1 = 1;
    IT1 = 1;
}
void main()
{
    Init();

    while (1) {

        if (wiegand_index == 26) {

            for (i = 0; i < 26; i++) {
                putchar(wiegand_buffer[i]);
                                                 _nop_();
                         _nop_();
                         _nop_();
                         _nop_();
                         _nop_();
                         _nop_();
            }

            wiegand_index = 0;
            memset(wiegand_buffer, 0, sizeof(wiegand_buffer));
        }

    }
}
变量i和k不++

回复 送花

使用道具 举报

  • TA的每日心情
    开心
    11 小时前
  • 签到天数: 162 天

    [LV.7]常住居民III

    9

    主题

    128

    回帖

    142

    积分

    注册会员

    积分
    142
    发表于 2023-12-2 23:23:29 | 显示全部楼层
    本帖最后由 huhuan 于 2023-12-2 23:28 编辑

    你不懂外部引脚中断怎么用,当电平触发达到一次外部引脚中断的状态,就会产生一个中断,但是这个中断只能执行一次,想要才触发就要重新断开一次后再触发一次,

    也可以用软件来触发




    还有你的外部引脚中断的按键,你注意按键的机械抖动,产生了几次中断
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    552

    主题

    9497

    回帖

    1万

    积分

    管理员

    积分
    14069
    发表于 2023-12-2 23:25:11 | 显示全部楼层
    用仿真功能来仿真调试
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    2

    主题

    9

    回帖

    102

    积分

    注册会员

    积分
    102
     楼主| 发表于 2023-12-2 23:28:31 来自手机 | 显示全部楼层
    变量应该最少➕1次,实际有多个下降沿产生的
    Image_1701530835254.jpg
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    11 小时前
  • 签到天数: 162 天

    [LV.7]常住居民III

    9

    主题

    128

    回帖

    142

    积分

    注册会员

    积分
    142
    发表于 2023-12-2 23:32:27 | 显示全部楼层
    本帖最后由 huhuan 于 2023-12-2 23:40 编辑
    4758866 发表于 2023-12-2 23:28
    变量应该最少➕1次,实际有多个下降沿产生的

    你编译有没有报错,哪  K=+1;  的写法
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    2

    主题

    9

    回帖

    102

    积分

    注册会员

    积分
    102
     楼主| 发表于 2023-12-2 23:34:10 来自手机 | 显示全部楼层
    没有报错,用LED状态查看进入
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    2

    主题

    9

    回帖

    102

    积分

    注册会员

    积分
    102
     楼主| 发表于 2023-12-2 23:37:55 来自手机 | 显示全部楼层
    LED的状态可以显示出已经进入中断了,我这个不是按键,是韦根协议数据,主要是后面的程序不执行,正常是执行完了才跳出中断的吧,还是我晶振频率选低了?默认的11.0592
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    11 小时前
  • 签到天数: 162 天

    [LV.7]常住居民III

    9

    主题

    128

    回帖

    142

    积分

    注册会员

    积分
    142
    发表于 2023-12-2 23:38:43 | 显示全部楼层
    1、+=的应用
    如:a+=4,意思是先使a+4,再赋值给a,表达式是a=a+4;
    2、=+的应用
    如:int a=+10,意思是在定义a为整数型变量的同时把正数10赋值给a。
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    2

    主题

    9

    回帖

    102

    积分

    注册会员

    积分
    102
     楼主| 发表于 2023-12-2 23:45:46 来自手机 | 显示全部楼层
    不管结果多少,变量的值没变,这个只做测试,用++也没用。用的仿真看的
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    11 小时前
  • 签到天数: 162 天

    [LV.7]常住居民III

    9

    主题

    128

    回帖

    142

    积分

    注册会员

    积分
    142
    发表于 2023-12-3 00:09:10 | 显示全部楼层
    你把程序源码打包过来 ,看看,,

    回复 支持 反对 送花

    使用道具 举报

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

    本版积分规则

    QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

    GMT+8, 2024-5-18 21:38 , Processed in 0.085303 second(s), 67 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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