作者e12518166339 (耐纶)
看板ASM
标题[问题]8051的uart(RS-232)
时间Sat Oct 30 16:59:51 2010
我的问题在於不管传送或接收都应该会进入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
1F:→ dreaminu:程式不会进入UART ISR的话...有可能是Port1 mode 12/24 16:33
2F:→ dreaminu:把P11 P10 设为push-pull 试看看,我之前一样的问题 12/24 16:34
3F:推 dreaminu:上面写错..是设为quasi bidirectional 01/25 18:24