旭日之心 發表於 2009-5-7 01:21:08

RS232及超級終端機相關問題

我的程式是由發射端發射資料到接收端,接收端用RS232與電腦連接
我是設定在P2為0X0C時,才將E的資料傳給電腦,並在RS232有在傳給電腦時P3_7會閃爍
以下是我接收端的程式,請大大們幫我看看,麻煩大大們了,謝謝大大們
重點是下面的部份,那是我自己所寫的RS232傳輸程式,看看哪裡有問題,因為在使用超級終端機進行傳輸時出現無法開啟COM1
我的RS232是25隻腳的,是使用HIN232的IC,我RS232只接地2、第3、第7隻腳,分別接TXD、RXD、接地
#include<AT89X51.H>
#define wled P3_7
void send(unsigned char E);
void delayms(unsigned int time);
unsigned char A; //宣告一個字元A
unsigned char C; //宣告一個字元C
unsigned char D; //宣告一個字元D
unsigned char E; //宣告一個字元E
main()//主程式
{
TMOD=0X20;
   TH1=230;
   TL1=230;
   TR1=1;
   SCON=0X40;
   TI=1;
while(1)//重複執行以下敘述
{
P2=0X0A; //測試時所假設的數值
if(P2==0x0a) //若P2為0x0a時,做以下動作
{
D=P2;//將P2的值存到字元D
}
P2=0X0A; //測試時所假設的數值
if(D==0x0a&&P2<=0x0F)//當D為0X0A以即P2為小於或等於0X0F時,做以下動作
{

P1=P2;//將P2的值存到字元A
A=P1;
}
P2=0X0B; //測試時所假設的數值
if(P2==0x0b)//當P2為0X0B時,做以下動作
{
C=P2;//將P2的值存到字元C
}
P2=0X03; //測試時所假設的數值
if(C==0x0b&& P2<=0x0F)//當D為0X0B以即P2為小於或等於0X0F時,做以下動作
{
P0=P2<<4;//將P2的值向左移四位後存到字元B
B=P0;
}
P2=0X0C; //測試時所假設的數值
if(P2==0x0C)//當P2為0X0C時,做以下動作
{
E=A|B;//做A or B,即為將A與B的數值做結合,將所結合的數值傳到位址E
send(E) ;//將E位址內的數值傳出去
wled=0;delayms(50);
wled=1;delayms(50);
}
}
   }
}
void delayms(unsigned int time)      //延遲的副程式
{
unsigned intn;
while(time>0)
{
n=120;
while(n>0)n--;
time--;
}
}
void send(unsigned char E)
{
TI=0;
SBUF=E;
while(TI==0);
}

yase 發表於 2009-8-17 14:09:40

如果我沒記錯.2,3,5才對吧.5才是接地,會是接地問題嗎?

mac1 發表於 2009-8-17 15:01:45

COM1 無法開啟應該是PC端的問題吧,
這和你有沒有接上 8051 沒有關係喔,
如果成功開啟應該是什麼事情都沒發生,靜靜的等著指令...

要是 8051 有送資料的話,可以在開始的地方送出一個字串,
這樣測試的時候可以看看PC不能收到東西...
頁: [1]
查看完整版本: RS232及超級終端機相關問題