懇求各c++ builder 及8051 高手出手相助 |
尚未結案
|
mcng815
一般會員 發表:4 回覆:1 積分:1 註冊:2004-10-27 發送簡訊給我 |
|
Albertz
初階會員 發表:2 回覆:57 積分:31 註冊:2002-09-05 發送簡訊給我 |
|
daniel__lee
高階會員 發表:18 回覆:124 積分:113 註冊:2002-11-10 發送簡訊給我 |
你的問題論壇上有很多答案喔!! 你可以用RS232這個關鍵字去收尋 會有很多滿意的答案 請參考各位大大的文章
http://delphi.ktop.com.tw/topic.php?topic_id=53689
http://delphi.ktop.com.tw/topic.php?topic_id=51633
http://delphi.ktop.com.tw/topic.php?topic_id=41588 8051的部分其實很容易只要把IE,SCON,TMOD,TCON這些暫存器設定好就可以了
參考一下 下面的程式片段 就夠了 /*------------------------------------------------------------------------------
------------------------------------------------------------------------------*/
#define TBUF_SIZE 256 /* DO NOT CHANGE */
#define RBUF_SIZE 256 /* DO NOT CHANGE */ static xdata unsigned char tbuf [TBUF_SIZE];
static xdata unsigned char rbuf [RBUF_SIZE]; static xdata unsigned char t_in = 0;
static xdata unsigned char t_out = 0;
static xdata unsigned char t_disabled = 0; static xdata unsigned char r_in = 0;
static xdata unsigned char r_out = 0; /*------------------------------------------------------------------------------
------------------------------------------------------------------------------*/
static void com_isr (void) interrupt 4 using 2
{
/*------------------------------------------------
Received data interrupt.
------------------------------------------------*/
if (RI != 0)
{
RI = 0; if ((r_in 1) != r_out)
rbuf [r_in ] = SBUF;
} /*------------------------------------------------
Transmitted data interrupt.
------------------------------------------------*/
if (TI != 0)
{
TI = 0; if (t_in != t_out)
SBUF = tbuf [t_out ];
else
t_disabled = 1;
} } /*------------------------------------------------------------------------------
------------------------------------------------------------------------------*/
void com_initialize (void)
{
/*------------------------------------------------
Setup TIMER1 to generate the proper baud rate.
------------------------------------------------*/
com_baudrate (1200); /*------------------------------------------------
Clear com buffer indexes.
------------------------------------------------*/
EA = 0; /* Disable Interrupts */ t_in = 0;
t_out = 0;
t_disabled = 1; r_in = 0;
r_out = 0; /*------------------------------------------------
Setup serial port registers.
------------------------------------------------*/
SM0 = 0; SM1 = 1; /* serial port MODE 1 */
SM2 = 0;
REN = 1; /* enable serial receiver */ TI = 0; /* clear transmit interrupt */
RI = 0; /* clear receiver interrupt */ ES = 1; /* enable serial interrupts */
PS = 0; /* set serial interrupts to low priority */ EA = 1; /* Enable Interrupts */
} /*------------------------------------------------------------------------------
------------------------------------------------------------------------------*/
void com_baudrate (
unsigned baudrate)
{
EA = 0; /* Disable Interrupts */ /*------------------------------------------------
Clear transmit interrupt and buffer.
------------------------------------------------*/
TI = 0; /* clear transmit interrupt */
t_in = 0; /* empty transmit buffer */
t_out = 0;
t_disabled = 1; /* disable transmitter */ /*------------------------------------------------
Set timer 1 up as a baud rate generator.
------------------------------------------------*/
TR1 = 0; /* stop timer 1 */
ET1 = 0; /* disable timer 1 interrupt */ PCON |= 0x80; /* 0x80=SMOD: set serial baudrate doubler */ TMOD &= ~0xF0; /* clear timer 1 mode bits */
TMOD |= 0x20; /* put timer 1 into MODE 2 */ TH1 = (unsigned char) (256 - (XTAL / (16L * 12L * baudrate))); TR1 = 1; /* start timer 1 */ EA = 1; /* Enable Interrupts */
} /*------------------------------------------------------------------------------
------------------------------------------------------------------------------*/
char com_putchar (
unsigned char c)
{
/*------------------------------------------------
If the buffer is full, return an error value.
------------------------------------------------*/
if ((TBUF_SIZE - com_tbuflen ()) <= 2)
return (-1); /*------------------------------------------------
Add the data to the transmit buffer. If the
transmit interrupt is disabled, then enable it.
------------------------------------------------*/
EA = 0; /* Disable Interrupts */ tbuf [t_in ] = c; if (t_disabled) /* if transmitter is disabled */
{
t_disabled = 0;
TI = 1; /* enable it */
} EA = 1; /* Enable Interrupts */ return (0);
} /*------------------------------------------------------------------------------
------------------------------------------------------------------------------*/
int com_getchar (void)
{
int c; if (com_rbuflen () == 0)
return (-1); EA = 0; /* Disable Interrupts */
c = rbuf [r_out ];
EA = 1; /* Enable Interrupts */ return (c);
} /*------------------------------------------------------------------------------
------------------------------------------------------------------------------*/
unsigned char com_rbuflen (void)
{
return (r_in - r_out);
} /*------------------------------------------------------------------------------
------------------------------------------------------------------------------*/
unsigned char com_tbuflen (void)
{
return (t_in - t_out);
} /*------------------------------------------------------------------------------
------------------------------------------------------------------------------*/ ~ 勿在浮沙上面築高塔 ~
------
~ 勿在浮沙上面築高塔 ~ |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |