私は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);
}
からの割り込み右方向への任意のヒントをいただければ幸いです!ありがとう。割り込みによって変更されている
。 –
何も起こっていないことを説明しておけば、助けになります。 –