2012-12-06 10 views
5

私は8051マイクロコントローラでプログラムを書くのにCを使っています。私が使用しているコンパイラはKeil Microvisionです。私は立ち往生し、私のコードから何が欠けているかを理解するのに困っています。私はそれが非常に基本的なコードであることを知っている私はちょうど私が何をすべきかを把握することはできません。8051 c interrupts

私がやっていることは、ユーザーに文章を送信して、シリアルポート経由でイエスかノーと答えてもらい、シリアル割り込みを使用することです。その部分は正常に動作します。私が人から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) ; 
} 

は、私はとのトラブルを抱えている部分は、これらの2つは、以前のコード

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

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

からの割り込み右方向への任意のヒントをいただければ幸いです!ありがとう。割り込みによって変更されている

+0

。 –

+3

何も起こっていないことを説明しておけば、助けになります。 –

答えて

3

変数の書式設定については申し訳ありませんが、揮発性のように定義する必要があります:あなたはより良いものをフォーマットすることができればそれが役立つだろう

volatile sbit WAVE = P1^7; 
関連する問題