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

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

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2025-03-17 08:52:50

2

主题

11

回帖

132

积分

注册会员

积分
132
发表于 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不++

回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:389
  • 最近打卡:2025-05-02 23:51:10

10

主题

143

回帖

352

积分

中级会员

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

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

也可以用软件来触发




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

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:55
  • 最近打卡:2025-05-02 08:32:59

718

主题

1万

回帖

1万

积分

管理员

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

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2025-03-17 08:52:50

2

主题

11

回帖

132

积分

注册会员

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

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:389
  • 最近打卡:2025-05-02 23:51:10

10

主题

143

回帖

352

积分

中级会员

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

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

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2025-03-17 08:52:50

2

主题

11

回帖

132

积分

注册会员

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

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2025-03-17 08:52:50

2

主题

11

回帖

132

积分

注册会员

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

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:389
  • 最近打卡:2025-05-02 23:51:10

10

主题

143

回帖

352

积分

中级会员

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

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2025-03-17 08:52:50

2

主题

11

回帖

132

积分

注册会员

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

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:389
  • 最近打卡:2025-05-02 23:51:10

10

主题

143

回帖

352

积分

中级会员

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

回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-3 00:51 , Processed in 0.128456 second(s), 106 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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