首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >8051 c中断

8051 c中断
EN

Stack Overflow用户
提问于 2012-12-06 12:05:31
回答 1查看 4K关注 0票数 5

我正在用C语言在8051单片机上写一个程序。我使用的编译器是Keil Microvision。我被卡住了,并且很难弄清楚我的代码中缺少了什么。我知道这是非常基本的代码,我只是不知道我应该做什么。

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

代码语言:javascript
复制
#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) ;
} 

我遇到麻烦的部分是前面代码中的这两个中断

代码语言:javascript
复制
void timer0() interrupt 1 // timer is controlling square wave timer 0
{ 
    WAVE=~WAVE;
}

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

任何正确方向的提示都将不胜感激!谢谢。对于格式设置,很抱歉

EN

回答 1

Stack Overflow用户

发布于 2013-04-30 17:39:55

被中断修改的变量应该定义为易失性:

代码语言:javascript
复制
volatile sbit WAVE = P1 ^ 7;
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13736780

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档