4758866 发表于 2023-12-2 22:42:42

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

#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;
volatile unsigned char wiegand_index = 0;

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

void ExternalInterrupt1() interrupt 2
{
    //LED = 0;
    j=+1;
    //wiegand_buffer = 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);
                                               _nop_();
                         _nop_();
                         _nop_();
                         _nop_();
                         _nop_();
                         _nop_();
            }

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

    }
}
变量i和k不++

huhuan 发表于 2023-12-2 23:23:29

本帖最后由 huhuan 于 2023-12-2 23:28 编辑

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

也可以用软件来触发




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

神农鼎 发表于 2023-12-2 23:25:11

用仿真功能来仿真调试

4758866 发表于 2023-12-2 23:28:31

变量应该最少➕1次,实际有多个下降沿产生的

huhuan 发表于 2023-12-2 23:32:27

本帖最后由 huhuan 于 2023-12-2 23:40 编辑

4758866 发表于 2023-12-2 23:28
变量应该最少➕1次,实际有多个下降沿产生的
你编译有没有报错,哪K=+1;的写法

4758866 发表于 2023-12-2 23:34:10

没有报错,用LED状态查看进入

4758866 发表于 2023-12-2 23:37:55

LED的状态可以显示出已经进入中断了,我这个不是按键,是韦根协议数据,主要是后面的程序不执行,正常是执行完了才跳出中断的吧,还是我晶振频率选低了?默认的11.0592

huhuan 发表于 2023-12-2 23:38:43

1、+=的应用
如:a+=4,意思是先使a+4,再赋值给a,表达式是a=a+4;
2、=+的应用
如:int a=+10,意思是在定义a为整数型变量的同时把正数10赋值给a。

4758866 发表于 2023-12-2 23:45:46

不管结果多少,变量的值没变,这个只做测试,用++也没用。用的仿真看的

huhuan 发表于 2023-12-3 00:09:10

你把程序源码打包过来 ,看看,,{:sweat:}

页: [1] 2
查看完整版本: 外STC8G部中断0和1产生了中断但是程序执行异常,变量++不执行