C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了8051 c中断大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用C在8051微控制器上编写程序.我正在使用的编译器是Keil Microvision.我陷入困境,无法弄清楚我的代码中缺少什么.我知道这是非常基本的代码,我无法弄清楚我应该做些什么.

所以我正在做的就是向用户发送一个句子并让他们通过串口回答是或否,我使用了串行中断.那部分工作正常.如果我从那个人那里得到一个no,我想通过定时器中断产生5kHz的方波.我希望这个方波由外部中断控制,当P3.2引脚上的外部中断打开或关闭时,它会打开和关闭.
这是我的所有代码

#include <REG52.H>
#include <stdio.h>
sbit WAVE = P1 ^ 7;
#define BIT(X) (1 << (X))

void timer0() interrupt 1  // timer is controlling square wave timer 0
{
  WAVE = ~WAVE;
}

void interrupt0() interrupt 0
{
  IE ^= BIT(1);
}

void serial0() interrupt 4
{
  unsigned char x;
  unsigned int i,z;
  unsigned char yes[] = " YES ";
  unsigned char no[] = " NO ";
  unsigned char nvalid[] = " NOT VALID TRY AGAIN ";

  while (RI == 1) {

    x = SBUF;
    RI = 0;

    if (z < 1) {
      if (x == 'n') {
        for (i = 0; i < 4; i++) {
          SBUF = no[i];
          while (TI == 0) ;  //wait for transmit
          TI = 0;
          z++;
        }
      }
    } else {
      return;
    }

    if (x == 'y') {
      for (i = 0; i < 5; i++) {
        SBUF = yes[i];
        while (TI == 0) ;
        TI = 0;
      }
    } else if (x != 'n') {
      for (i = 0; i < 21; i++) {
        SBUF = nvalid[i];
        while (TI == 0) ;
        TI = 0;
      }
    }

    TI = 0;
    return;
  }
}

void main()
{
  TMOD = 0x20;
  TH1 = 0xF6;    //baud rate
  SCON = 0x50;
  TH0 = 0xA4;
  IE = 0x93;    //enablE interrupts
  IP = 0x10;    // propriety to serial interrupt
  TR1 = 1;    //start timer 1
  TR0 = 1;    //clear timer 0
  TI = 1;
  printf("Hello,Are you okay? Press y for yes and n for no ");
  while (1) ;
}

遇到问题的部分是来自前面代码的这两个中断

void timer0() interrupt 1 // timer is controlling square wave timer 0
{ 
    WAVE=~WAVE;
}

void interrupt0() interrupt 0
{
  IE ^= BIT(1);
}

任何正确方向的提示将不胜感激!谢谢.抱歉格式化

解决方法

由中断修改的变量应定义为volatile:
volatile sbit WAVE = P1 ^ 7;

大佬总结

以上是大佬教程为你收集整理的8051 c中断全部内容,希望文章能够帮你解决8051 c中断所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签:8051c中断