[問題]8051的uart(RS-232)
我的問題在於不管傳送或接收都應該會進入ISR才對
可是我在ISR中試著把燈點亮
在我做了open跟close的動作後卻沒有看到燈被點亮
為什麼沒有進去ISR呢?
以上
#include <reg51.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void delay(unsigned int dly);
int mycmd(char *buffer);
char value[20];
sbit P1_0=0X90;
sbit P1_1=0X91;
int i=0;
int f=1;
int mycmd(char *buffer);
void main(void){
SCON = 0x50; // 8 bit UART (mode 1)
TMOD = 0x20; // T1 mode 2
PCON = 0x00; // k=1
TH1 = 247; // 256 - 9 = 247 9600
TR1 = 1; // 啟動 Timer 1
IE = 0x98;
while(1){
if(RI==1){
value[i]=SBUF; //TX SBUF
//RI=0;
f=1;
if(value[i]==0x0d){ //ENTER?
SBUF=0x0a; //ENTER --換行 //RX SBUF
delay(60);
//RI=0;
SBUF=0x0d;
switch(mycmd(value)){
case 1:
//P1_0=0;
//P1_1=0;
puts("open OK!");
break;
case 2:
//P1_0=1;
//P1_1=1;
puts("close OK!");
break;
default:
puts("error");
}
}
if(f==1){
SBUF=value[i]; //NO ENTER
i++;
RI=0;
}
else{
i=0;
RI=0;
}
}
}
}
void SCON_int() interrupt 4{
if(RI==1){
P1_1=0;
RI=0;
}
if(TI==1){
P1_0=0;
TI=0;
}
}
int mycmd(char *buffer)
{
f=0;
if(strncmp(buffer,"open",4)==0)return 1;
if(strncmp(buffer,"close",5)==0)return 2;
return 0;
}
void delay(unsigned int dly){
int count;
while(dly!=0){
count=120;
while(count>0)
count--;
dly--;
}
}
--
朱槿所說,當然是事實,可是更醜惡的事實是,有太多人在完全不涉及
生死問題的情形下,在強權統治者面前醜態百出,目的只不過想削尖了
頭擠進去,希望可以成為強權統治的寵兒——其人格之卑下,簡直已到
了極點!
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.125.32.134
→
12/24 16:33, , 1F
12/24 16:33, 1F
→
12/24 16:34, , 2F
12/24 16:34, 2F
推
01/25 18:24, , 3F
01/25 18:24, 3F
ASM 近期熱門文章
PTT數位生活區 即時熱門文章