5
我正在使用C在8051微控制器上編寫程序。我正在使用的編譯器是Keil Microvision。我卡住了,無法弄清楚我的代碼中缺少的東西。我知道這是非常基本的代碼,我無法弄清楚我應該做什麼。8051 c中斷
因此,我所做的幾乎是將一個句子發送給用戶,讓他們通過串口回答是或否,並使用串行中斷。這部分工作正常。如果我想通過定時器中斷產生一個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);
}
在正確的方向任何提示這兩個中斷將不勝感激的一部分!謝謝。對不起格式化
這將有助於如果你能更好的格式的東西。 –
如果你解釋了沒有發生的事情,它也會有所幫助。 –