[問題]8051的uart(RS-232)

看板ASM (組合語言)作者 (耐綸)時間14年前 (2010/10/30 16:59), 編輯推噓1(102)
留言3則, 1人參與, 最新討論串1/1
我的問題在於不管傳送或接收都應該會進入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
程式不會進入UART ISR的話...有可能是Port1 mode
12/24 16:33, 1F

12/24 16:34, , 2F
把P11 P10 設為push-pull 試看看,我之前一樣的問題
12/24 16:34, 2F

01/25 18:24, , 3F
上面寫錯..是設為quasi bidirectional
01/25 18:24, 3F
文章代碼(AID): #1Cozw982 (ASM)
文章代碼(AID): #1Cozw982 (ASM)