51系列串口通讯例程参考仅供.docx
- 文档编号:1157496
- 上传时间:2022-10-18
- 格式:DOCX
- 页数:27
- 大小:24.78KB
51系列串口通讯例程参考仅供.docx
《51系列串口通讯例程参考仅供.docx》由会员分享,可在线阅读,更多相关《51系列串口通讯例程参考仅供.docx(27页珍藏版)》请在冰豆网上搜索。
51系列串口通讯例程参考仅供
51系列串口通讯例程.rar>serial.c,
1.// 题目:
串口初始化C代码
2.// 要求:
3.// 1.波特率1200bps,无奇偶校验,停止位1,数据位8
4.// 2.定时器T1做波特率发生器
5.// 软件模拟测试说明:
6.// 1.这个测试采用查询方式进行串口通讯
7.// 2.将软件仿真环境的晶震设为11.0592 MHz
8.// 3.软件模拟全速运行, 观察波特率是1200bps
9.// 4.在串口1中输入数字或字母,可观察到通讯是否有误。
10.//#pragma src
11.#include
12.//串口初始化
13.void serial_init(void)
14.{
15. //ET1 = 0; //CLR 0ABH ;禁止T1中断
16. TMOD = 0x20; //MOV 89H,#20H ;timer 1 mode 2:
8-Bit reload(定时器T1 模式2:
8位自动初值重装)
17. TH1 = 0xE8; //MOV 8DH,#0E8H
18. TL1 = 0xE8; //MOV 8BH,#0E8H ;1200bps, 11.059
19. TR1 = 1; //SETB 8EH ;启动定时器1
20. SCON = 0x50; // mode 1:
10-bit UART, enable receiver
//(模式1:
10位异步发送/接收, 使能接收允许位)
21. //SM1 = 1; // ;串行口 模式1
22. //SM0 = 0;
23. //REN = 1; // ;允许串行中断接收
24. SM2 = 1; //SETB O9DH ;收到有效的停止位时才将RI置1
25. ES = 1; //SETB 0ACH ;允许串行中断
26. EA = 1; //SETB 0AFH ;总中断开
27.}
28.//中断方式处理串口数据
29.void serial(void) interrupt 4 using 1
30.{
31. if(RI)
32. {
33. // RI = 0;
34. // 串口接收, 采用临时缓冲
35. }
36.#if 0
37. if(TI)
38. {
39. // TI = 0;
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 char ch)
53.{
54. SBUF=ch;
55. while(!
TI);
56. TI=0;
57.}
58.code unsigned char HEX_TAB []="0123456789ABCDEF";
59.void puthex(unsigned char ch)
60.{
61. unsigned char i,j;
62. i=ch>>4;
63. j=ch&0x0f;
64. putchar(HEX_TAB[i]);
65. putchar(HEX_TAB[j]);
66.}
51系列串口通讯例程.rar>test.c
1.// 采用查询方式进行串口通讯的例子
2.// 采用这种方式的弊端:
3.// 1.如果对方没有发送数据,则本机无限等待,而不能做其它事情
4.// 2.如果对方发送数据而本机正做其它事情,那么有可能丢失数据。
5.// 因此实际上串口接收常采用中断方式,串口发送则不需要。
6.#include
7.extern void serial_init(void);
8.extern unsigned char getchar(void);
9.extern void putchar(unsigned char ch);
10.extern void puthex(unsigned char ch);
11.void main(void)
12.{
13. unsigned char i;
14. serial_init(); // 串口初始化
15. do {
16. i=getchar();// 如果没有收到串口数据则一直等待(查询接收串口数据的弊端)
17. ++i;
18. --i; // 观察断点
19. putchar(i);//在串口显示接收到的ASCII数据(就是把原来收到的数据再送回串口)
20. putchar(' ');
21. putchar(' ');
22. putchar('0');
23. putchar('x');
24. puthex(i); // 在串口以十六进制格式显示接收的ASCII数据
25. putchar(' ');
26. putchar(' ');
27. ++i;
28. --i; // 观察断点
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._
8051串口程序.rar>M1INT.ASM
53.;FILE:
M1INT.ASM
54.;
55.;THISPROGRAMRECEIVESAVALUEENTERINGINTOTHESERIALPORTPINRXDANDPUTS
56.;THEDATAOUTTOPORT1
57.;
58.;
59.;DETAILS:
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)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 51 系列 串口 通讯 例程 参考