51系列串口通讯例程参考仅供文档格式.docx

上传人:b****4 文档编号:14076650 上传时间:2022-10-18 格式:DOCX 页数:27 大小:24.78KB
下载 相关 举报
51系列串口通讯例程参考仅供文档格式.docx_第1页
第1页 / 共27页
51系列串口通讯例程参考仅供文档格式.docx_第2页
第2页 / 共27页
51系列串口通讯例程参考仅供文档格式.docx_第3页
第3页 / 共27页
51系列串口通讯例程参考仅供文档格式.docx_第4页
第4页 / 共27页
51系列串口通讯例程参考仅供文档格式.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

51系列串口通讯例程参考仅供文档格式.docx

《51系列串口通讯例程参考仅供文档格式.docx》由会员分享,可在线阅读,更多相关《51系列串口通讯例程参考仅供文档格式.docx(27页珍藏版)》请在冰豆网上搜索。

51系列串口通讯例程参考仅供文档格式.docx

13.void 

serial_init(void) 

14.{ 

15. 

//ET1 

0;

//CLR 

0ABH 

;

禁止T1中断 

16. 

TMOD 

0x20;

//MOV 

89H,#20H 

timer 

mode 

2:

8-Bit 

reload(定时器T1 

模式2:

8位自动初值重装) 

17. 

TH1 

0xE8;

8DH,#0E8H 

18. 

TL1 

8BH,#0E8H 

1200bps, 

11.059 

19. 

TR1 

1;

//SETB 

8EH 

启动定时器1 

20. 

SCON 

0x50;

// 

1:

10-bit 

UART, 

enable 

receiver

//(模式1:

10位异步发送/接收, 

使能接收允许位)

21. 

//SM1 

串行口 

模式1 

22. 

//SM0 

23. 

//REN 

允许串行中断接收 

24. 

SM2 

O9DH 

收到有效的停止位时才将RI置1 

25. 

ES 

0ACH 

允许串行中断 

26. 

EA 

0AFH 

总中断开 

27.} 

28.//中断方式处理串口数据 

29.void 

serial(void) 

interrupt 

using 

30.{ 

31. 

if(RI) 

32. 

33. 

RI 

34. 

串口接收, 

采用临时缓冲 

35. 

36.#if 

37. 

if(TI) 

38. 

39. 

TI 

40. 

串口发送, 

没有必要使用中断方式 

41. 

42.#endif 

43.} 

44.// 

查询方式接收串口数据 

45.unsigned 

char 

getchar(void) 

46.{ 

47. 

while(!

RI);

没有收到串口数据则一直等待 

48. 

RI=0;

49. 

return 

SBUF;

50.} 

51.// 

查询方式发送串口数据 

52.void 

putchar(unsigned 

ch) 

53.{ 

54. 

SBUF=ch;

55. 

TI);

56. 

TI=0;

57.} 

58.code 

unsigned 

HEX_TAB 

[]="

0123456789ABCDEF"

59.void 

puthex(unsigned 

60.{ 

61. 

i,j;

62. 

i=ch>

>

4;

63. 

j=ch&

0x0f;

64. 

putchar(HEX_TAB[i]);

65. 

putchar(HEX_TAB[j]);

66.} 

test.c

采用查询方式进行串口通讯的例子 

采用这种方式的弊端:

1.如果对方没有发送数据,则本机无限等待,而不能做其它事情 

2.如果对方发送数据而本机正做其它事情,那么有可能丢失数据。

因此实际上串口接收常采用中断方式,串口发送则不需要。

6.#include 

7.extern 

void 

serial_init(void);

8.extern 

getchar(void);

9.extern 

ch);

10.extern 

11.void 

main(void) 

12.{ 

13. 

i;

14. 

serial_init();

串口初始化 

do 

i=getchar();

如果没有收到串口数据则一直等待(查询接收串口数据的弊端) 

++i;

--i;

观察断点 

putchar(i);

//在串口显示接收到的ASCII数据(就是把原来收到的数据再送回串口)

putchar('

'

);

0'

x'

puthex(i);

在串口以十六进制格式显示接收的ASCII数据 

27. 

28. 

29. 

}while

(1);

30.} 

8051串口程序

8051串口程序.rar>

M0.ASM

31.;

FILE:

M0.ASM

32.;

THISPROGRAMTRANSMITSTHEHEXVALUEAAREPETITIVELYACCROSSTHESERIALPORT

33.;

OFAMCS-51MICROCONTROLLERINMODE0

34.;

35.;

DETAILS:

36.;

37.;

MODE0:

SERIALDATAEXITSANDENTERSTHROUGHTHERXDPIN.THETXDPINOUTPUTS

38.;

THESHIFTCLOCK.INMODE0,8BITSARETRANSMITTED/RECEIVEDSTARTINGWITHTHE

39.;

LEASTSIGNIFICANTBIT.THEBAUDRATEISFIXEDTO1/12THEOSCILLATORFREQUENCY.

40.;

41.;

42.ORG00H

43.;

44.JMPMAIN

45.MAIN:

MOVSCON,#00H;

SETUPFORMODE0

46.CLRTI;

READYTOTRANSMIT

47.LOOP:

MOVSBUF,#0AAH;

TRANSMITAAH

48.JNBTI,$;

WAITFORENDOFTRANSMISSION

49.CLRTI;

CLEARTRANSMITFLAG

50.JMPLOOP;

DOITALLAGAIN

51.END

52._

M1INT.ASM

53.;

M1INT.ASM

54.;

55.;

THISPROGRAMRECEIVESAVALUEENTERINGINTOTHESERIALPORTPINRXDANDPUTS

56.;

THEDATAOUTTOPORT1

57.;

58.;

59.;

60.;

61.;

THEPROGRAMISDESIGNEDTOBEINACONTINUOUSNEVERENDINGLOOPUNTILABYTEOFDATAHASBEEN

62.;

COMPLETELYRECEIVED.THELOOPISEXITEDBECAUSEOFTHEOCCURANCEOFASERIALINTERRUPT.AFTER

63.;

THEINTERRUPTHASBEENSERVICED,THEPROGRAMGOESBACKINTOIT'

SENDLESSLOOPUNTILANOTHER

64.;

INTERRUPTOCCURS

65.;

66.;

67.PCONEQU87H;

DEFINEPCONREGISTERLOCATION

68.;

69.ORG00H

70.;

71.JMPMAIN

72.;

73.ORG023H;

STARTINGADDRESSOFSERIALINTERRUPT

74.JMPSERIAL_INT

75.;

76.MAIN:

MOVSCON,#50H;

SETUPSERIALPORTFORMODE0WITHRECEIVEENABLED

77.MOVTMOD,#20H;

SETUPTIMER1ASAUTO-RELOAD8-BITTIMER

78.MOVTH1,#0DDH;

BAUDRATEEQUALS2400BAUDAT16MhZ

79.MOVPCON,#80H;

SETTHEDOUBLEBAUDRATEBIT

80.MOVIE,#81H

81.MOVTCON,#40H;

STARTTIMER1

82.CLRRI;

ENSURETHATTHERECEIVEINTERRUPTFLAGISCLEAR

83.LOOP:

JMPLOOP;

ENDLESSLOOP(UNLESSINTERRUPTOCCURS)

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1