51单片机与PC串口通信程序,求指导 ! 具体要求如下:

51单片机与PC串口通信程序,求指导 ! 具体要求如下:,第1张

要求用什么语言?

------------------------------

网友“星心晨梦”的回答,是可以满足题目要求的。

我实验了,是成功的,没有任何错误。

楼主应该检查自己的电路、串口设置等等。

------------------------------

网友“星心晨梦”的回答,篇幅稍稍长了一些。

缩减一半就可以正常工作了,可读性更好一些。

建议看看下面的。

------------------------------

#include <AT89X51.h>

#include <intrins.h>

#define uchar unsigned char

#define uint unsigned int

//---------------------------------------------------

uchar idata trdata1[] = {

'W','E','L','C','O','M','E',' ','T','O',' ','C','H','I','N','A','!',0x0d,0x0a,0x00}

uchar idata trdata2[] = {

'M','Y',' ','N','A','M','E',' ','I','S',' ','L','I','M','I','N','G',0x0d,0x0a,0x00}

uchar idata trdata3[] = {

'Y','I','N','G','Y','O','N','G','K','E','X','U','E','X','U','E','Y','U','A','N',0x0d,0x0a,0x00}

uchar RxBuf[5], Rx_p, Rx_i, TX_p, Tx_i

//---------------------------------------------------

void UART_Init(void) //串口初始化

{

PCON = 0x00

SCON = 0x50//串口工作方式为1,允许接收.

TMOD = 0x20// T1 定时方式2

TH1 = 0xfd //波特率 9600bps @ fosc = 11.0592MHz

TL1 = 0xfd

TR1 = 1//启动T1

ES = 1 //开串口中断.

EA = 1 //开总中断.

}

//---------------------------------------------------

void main()

{

UART_Init()

Rx_p = 0

Rx_p = 2

while(1) {

if (Rx_p != 0) {

TX_p = Rx_p//字符串1 2 3

Tx_i = 0 //字符指针.

Rx_p = 0 //清零.

Rx_i = 0

TI = 1//启动发送中断.

} }

}

//---------------------------------------------------

void Uart_INT(void) interrupt 4 //串口中断函数

{

uchar Tcv = 0

if(RI) { //接收?.

RI = 0 //标志位清零.

RxBuf[Rx_i] = SBUF

if((RxBuf[Rx_i - 1] == 'g') &&(RxBuf[Rx_i] == 'o')) Rx_p = 1

if((RxBuf[Rx_i - 2] == 'w') &&(RxBuf[Rx_i - 1] == 'h') &&(RxBuf[Rx_i] == 'o')) Rx_p = 2

if((RxBuf[Rx_i - 3] == 'h') &&(RxBuf[Rx_i - 2] == 'o') &&(RxBuf[Rx_i - 1] == 'm') &&(RxBuf[Rx_i] == 'e')) Rx_p = 3

P1 = Rx_p //在P1显示收到的信息.

Rx_i++

Rx_i %= 5

}

else {

TI = 0

if (TX_p == 1) Tcv = trdata1[Tx_i] //取来待发字符.

if (TX_p == 2) Tcv = trdata2[Tx_i]

if (TX_p == 3) Tcv = trdata3[Tx_i]

if (Tcv != 0) {SBUF = Tcv Tx_i++} //不是0就发送.

}

}

//---------------------------------------------------

我的程序的一部分,供参考

//主流程

void

main(void)

{

//系统初始化

SCON

=

0x50

//串口方式为1,SM2=

0,TB8=

1

PCON

=

0x80

//

SMOD=1

TMOD

=

0x22

//设定定时器0/1的工作模式为方式2

//设置T0中断的定时时间为1/7200毫秒

TH0

=

0x00

TL0

=

0x00

//设置异步串口的波特率

//TH1

=

0x0f4

//OSC

=

11.0592MHz

bps

=

4800

SMOD=1

//TL1

=

0x0f4

TH1

=

0x0fd

//OSC

=

11.0592MHz

bps

=

19200

SMOD=1

TL1

=

0x0fd

//设置中断优先级,T0中断为高优先级中断,其他为低优先级中断

IP

=

0x02

//

设置中断优先级--T0为高优先级,其他低

ET0

=

1

//定时器0中断

ES

=

1

//串行接口中断

EA

=

1

//系统中断允许

TR0

=

1

//启动定时器0

TR1

=

1

......................

//串口接收中断处理程序

//发送采用查询处理

void

SerialComm(void)

interrupt

4

{

_pReceive[_cReceive]

=

SBUF

_cReceive

++

if(_cReceive

>=

RecBuffSize)

_cReceive

=

0

RI

=

0

}

//串口发送一个字节

//senddata:需要发送的数据

void

SendOneByte(unsigned

char

senddata)

{

ES

=

0

TI

=

0

SBUF

=

senddata

while(TI

==

0)

TI

=

0

ES

=

1

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8078439.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-13
下一篇 2023-04-13

发表评论

登录后才能评论

评论列表(0条)

保存