



免费预览已结束,剩余12页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
51系列串口通讯例程.rar serial.c,1. /题目:串口初始化C代码 2. /要求: 3. /1.波特率1200bps,无奇偶校验,停止位1,数据位8 4. /2.定时器T1做波特率发生器 5. /软件模拟测试说明: 6. /1.这个测试采用查询方式进行串口通讯 7. /2.将软件仿真环境的晶震设为11.0592MHz 8. /3.软件模拟全速运行,观察波特率是1200bps 9. /4.在串口1中输入数字或字母,可观察到通讯是否有误。 10. /#pragmasrc 11. #include 12. /串口初始化 13. voidserial_init(void)14. 15. /ET1=0;/CLR0ABH;禁止T1中断 16. TMOD=0x20;/MOV89H,#20H;timer1mode2:8-Bitreload(定时器T1模式2:8位自动初值重装) 17. TH1=0xE8;/MOV8DH,#0E8H 18. TL1=0xE8;/MOV8BH,#0E8H;1200bps,11.059 19. TR1=1;/SETB8EH;启动定时器1 20. SCON=0x50;/mode1:10-bitUART,enablereceiver /(模式1:10位异步发送/接收,使能接收允许位)21. /SM1=1;/ ;串行口模式1 22. /SM0=0; 23. /REN=1;/;允许串行中断接收 24. SM2=1;/SETBO9DH;收到有效的停止位时才将RI置1 25. ES=1;/SETB0ACH;允许串行中断 26. EA=1;/SETB0AFH;总中断开 27. 28. /中断方式处理串口数据 29. voidserial(void)interrupt4using130. 31. if(RI)32. 33. /RI=0; 34. /串口接收,采用临时缓冲 35. 36. #if0 37. if(TI)38. 39. /TI=0; 40. /串口发送,没有必要使用中断方式 41. 42. #endif 43. 44. /查询方式接收串口数据 45. unsignedchargetchar(void)46. 47. while(!RI);/没有收到串口数据则一直等待 48. RI=0;49. returnSBUF;50. 51. /查询方式发送串口数据 52. voidputchar(unsignedcharch)53. 54. SBUF=ch;55. while(!TI);56. TI=0;57. 58. codeunsignedcharHEX_TAB=0123456789ABCDEF;59. voidputhex(unsignedcharch)60. 61. unsignedchari,j;62. i=ch4;63. j=ch&0x0f;64. putchar(HEX_TABi);65. putchar(HEX_TABj);66. 51系列串口通讯例程.rar test.c1. /采用查询方式进行串口通讯的例子 2. /采用这种方式的弊端: 3. /1.如果对方没有发送数据,则本机无限等待,而不能做其它事情 4. /2.如果对方发送数据而本机正做其它事情,那么有可能丢失数据。 5. /因此实际上串口接收常采用中断方式,串口发送则不需要。 6. #include 7. externvoidserial_init(void);8. externunsignedchargetchar(void);9. externvoidputchar(unsignedcharch);10. externvoidputhex(unsignedcharch);11. voidmain(void)12. 13. unsignedchari;14. serial_init();/串口初始化 15. do16. 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.ASM31. ;FILE: M0.ASM 32. ;THIS PROGRAM TRANSMITS THE HEX VALUE AA REPETITIVELY ACCROSS THE SERIAL PORT 33. ;OF A MCS-51 MICROCONTROLLER IN MODE 0 34. ; 35. ;DETAILS: 36. ; 37. ;MODE 0: SERIAL DATA EXITS AND ENTERS THROUGH THE RXD PIN. THE TXD PIN OUTPUTS 38. ;THE SHIFT CLOCK. IN MODE 0, 8 BITS ARE TRANSMITTED/RECEIVED STARTING WITH THE 39. ;LEAST SIGNIFICANT BIT. THE BAUD RATE IS FIXED TO 1/12 THE OSCILLATOR FREQUENCY. 40. ; 41. ; 42. ORG 00H 43. ; 44. JMP MAIN 45. MAIN: MOV SCON,#00H ;SET UP FOR MODE 0 46. CLR TI ;READY TO TRANSMIT 47. LOOP: MOV SBUF,#0AAH ;TRANSMIT AAH 48. JNB TI,$ ;WAIT FOR END OF TRANSMISSION 49. CLR TI ;CLEAR TRANSMIT FLAG 50. JMP LOOP ;DO IT ALL AGAIN 51. END 52. 8051串口程序.rar M1INT.ASM53. ;FILE: M1INT.ASM 54. ; 55. ;THIS PROGRAM RECEIVES A VALUE ENTERING INTO THE SERIAL PORT PIN RXD AND PUTS 56. ;THE DATA OUT TO PORT 1 57. ; 58. ; 59. ;DETAILS: 60. ; 61. ;THE PROGRAM IS DESIGNED TO BE IN A CONTINUOUS NEVER ENDING LOOP UNTIL A BYTE OF DATA HAS BEEN 62. ;COMPLETELY RECEIVED. THE LOOP IS EXITED BECAUSE OF THE OCCURANCE OF A SERIAL INTERRUPT. AFTER 63. ;THE INTERRUPT HAS BEEN SERVICED, THE PROGRAM GOES BACK INTO ITS ENDLESS LOOP UNTIL ANOTHER 64. ;INTERRUPT OCCURS 65. ; 66. ; 67. PCON EQU 87H ;DEFINE PCON REGISTER LOCATION 68. ; 69. ORG 00H 70. ; 71. JMP MAIN 72. ; 73. ORG 023H ;STARTING ADDRESS OF SERIAL INTERRUPT 74. JMP SERIAL_INT 75. ; 76. MAIN: MOV SCON, #50H ;SET UP SERIAL PORT FOR MODE 0 WITH RECEIVE ENABLED 77. MOV TMOD, #20H ;SET UP TIMER 1 AS AUTO-RELOAD 8-BIT TIMER 78. MOV TH1, #0DDH ;BAUD RATE EQUALS 2400 BAUD AT 16MhZ 79. MOV PCON, #80H ;SET THE DOUBLE BAUD RATE BIT 80. MOV IE, #81H 81. MOV TCON, #40H ;START TIMER 1 82. CLR RI ;ENSURE THAT THE RECEIVE INTERRUPT FLAG IS CLEAR 83. LOOP: JMP LOOP ;ENDLESS LOOP (UNLESS INTERRUPT OCCURS) 84. ; 85. SERIAL_INT: ;SERIAL INTERRUPT ROUTINE 86. CLR RI ;CLEAR THE RI BIT (SINCE WE KNOW THAT WAS THE BIT THAT CAUSED THE 87. ; INTERUPT) 88. MOV P1, SBUF ;MOVE THE RECEIVED DATA OUT TO PORT ONE 89. RETI ;EXIT THE SERIAL INTERRUPT ROUTINE 90. END8051串口程序.rar M1T1.ASM91. ;FILE: M1T1.ASM 92. ; 93. ;THIS PROGRAM TRANSMITS THE HEX VALUE AA REPETITIVELY ACCROSS THE SERIAL PORT 94. ;OF A MCS-51 IN MODE 1 USING TIMER 1 AT A RATE OF 2400 BAUD 95. ; 96. ;DETAILS: 97. ; 98. ;MODE 1: TEN BITS ARE TRANSMITTED THROUGH TXD OR RECEIVED THROUGH RXD 99. ;WITH THE START BIT FIRST (0), 8 DATA BITS WITH THE LEAST SIGNIFICANT BIT 100. ;FIRST, AND A STOP BIT (1). ON RECEIVE, THE STOP BIT GOES INTO RB8 IN 101. ;SPECIAL FUNCTION REGISTER SCON. THE BAUD RATE IS VARIABLE. 102. ; 103. PCON EQU 87H 104. 105. ORG 00H 106. JMP MAIN 107. MAIN: MOV SCON,#40H ;SET SERIAL PORT FOR MODE 1 OPERATION 108. MOV PCON,#80H ;SET DOUBLE BAUD RATE BIT 109. MOV TMOD,#20H ;SET TIMER 1 TO AUTO RELOAD 110. MOV TH1,#0DDH ;LOAD RELOAD VALUE FOR 2400 BAUD AT 16MHZ 111. MOV TCON,#40H ;START TIMER 1 112. CLR TI 113. LOOP: MOV SBUF,#053H ;TRANSMIT AA HEX OUT THE TXD LINE 114. JNB TI,$ ;WAIT UNTIL TRANSMISSION COMPLETED 115. CLR TI ;READY TO TRANSMIT ANOTHER 116. JMP LOOP ;DO IT ALL OVER AGAIN 117. END 118.8051串口程序.rar M2.ASM119. ;FILE: M2.ASM 120. ; 121. ;THIS PROGRAM TRANSMITS THE HEX VALUE AA REPETITIVELY ACCROSS THE SERIAL PORT 122. ;OF A MCS-51 IN MODE 2 AT A RATE OF 1/32 THE OSCILLATOR FREQUENCY 123. ; 124. ;DETAILS: 125. ; 126. ;MODE 2: 11 BITS ARE TRANSMITTED THROUGH TXD OR RECEIVED THROUGH RXD. 127. ;STARTING WITH A START BIT (0), 8 DATA BITS WITH THE LEAST SIGNIFICANT BIT 128. ;FIRST, A PROGRAMMABLE 9TH DATA BIT, AND A STOP BIT (1). ON TRANSMIT, THE 129. ;9TH DATA BIT, TB8 IN SCON, CAN BE ASSIGNED A VALUE OF 0 OR 1. FOR EXAMPLE 130. ;THE PARITY BIT, P FROM PSW, COULD BE MOVED INTO TB8. ON RECEIVE, THE NINTH 131. ;DATA BIT GOES INTO RB8 IN SCON WHILE THE STOP BIT IS IGNORED. (THE VALIDITY 132. ;OF THE STOP BIT CAN BE CHECKED WITH FRAMING ERROR DETECTION) THE BAUD RATE 133. ;IS PROGRAMABLE TO IETHER 1/32 OR 1/64 THE OSCILLATOR FREQUENCY. IF THE 134. ;SMOD1 BIT IN THE PCON REGISTER IS 0, THEN THE BAUD RATE IS 1/64 THE 135. ;OSCILLATOR FREQUENCY, IF SMOD1 IS 1, THE THE BAUD RATE IS 1/32 THE 136. ;OSCILLATOR FREQUENCY. 137. PCON EQU 87H 138. ORG 00H 139. JMP MAIN 140. MAIN: MOV SCON,#80H ;SET UP FOR MODE 2 141. MOV PCON,#80H ;BAUD RATE EQUALS 1/32 OSC. FREQ 142. CLR TI ;READY TO TRANSMIT 143. LOOP: MOV SBUF,#0AAH ;TRANSMIT AAH 144. JNB TI,$ ;WAIT FOR END OF TRANSMISSION 145. CLR TI ;READY TO TRANSMIT 146. JMP LOOP ;DO IT ALL AGAIN 147. END8051串口程序.rar M3T2.ASM148. ;FILE: M3T2.ASM 149. ;THIS PROGRAM TRANSMITS THE HEX VALUE AA REPETITIVELY ACCROSS THE SERIAL PORT 150. ;OF A MCS-51 IN MODE 3 USING TIMER 2 AS A BAUD RATE GENERATOR TO 151. ;GENERATE A BAUD RATE OF 2400 BAUD AT 16MHZ WITH A PARITY BIT 152. ; 153. ;DETAILS: 154. ; 155. ;MODE 3: 11 BITS ARE TRANSMITTED THROUGH TXD OR RECEIVED THROUGH RXD 156. ;TRANSMISSION STARTS WITH A START BIT (0), EIGHT DATA BITS WITH THE LEAST 157. ;SIGNIFICANT BIT FIRST, A PROGRAMMABLE 9TH DATA BIT, AND A STOP BIT (1). 158. ;MODE 3 IS THE SAME AS MODE 2 EXCEPT THAT MODE 3 HAS A VARIABLE 159. ;BAUD RATE 160. RCAP2H EQU 0CBH 161. RCAP2L EQU 0CAH 162. T2CON EQU 0C8H 163. ORG 00H 164. JMP MAIN 165. MAIN: MOV SCON,#0C0H ;SET UP FOR SERIAL MODE 3 166. MOV RCAP2H,#0FFH ;LOAD HIGH BYTE TO GENERATE 2400 BAUD AT 16MHZ 167. MOV RCAP2L,#30H ;LOAD LOW BYTE TO GENERATE 2400 BAUD AT 16MHZ 168. MOV T2CON,#14 ;TIMER 2 BAUD RATE GENERATOR AND START TIMER 169. MOV A,#0AAH ;PUT THE VALUE TO BE TRANSMITTED IN THE ACC 170. MOV C,P ;PARITY INFORMATION TO CARRY FLAG 171. MOV TB8,C ;PARITY INFO FROM CARRY TO PROGRAMABLE BIT * 172. ; *NOTE: THE CONTENTS OF THE CARRY FLAG IN THE 173. ; PSW MAY BE ALTERED 174. CLR TI ;READY TO TRANSMIT 175. LOOP: MOV SBUF,A ;TRANSMIT AAH 176. JNB TI,$ ;WAIT UNTIL DONE TRANSMITING 177. CLR TI ;READY TO TRANSMIT 178. JMP LOOP ;DO IT ALL OVER AGAIN 179. END 180.自编的C51串口程序1. #include 2. #defineF_CPU11059200/11.0592Mhz 3. #defineUART_BAND_RATE9600/9600band 4. typedefunsignedcharuint8_t;5. /typedefsignedcharint8_t; 6. typedefunsignedintuint16_t;7. /typedefsignedintint16_t; 8. typedefunsignedlonguint32_t;9. /typedefsignedlongint32_t; 10. /接收数据 11. uint8_treceive_start,receive_number=0,bus_changed;12. uint8_treceive_data100;13. uint8_t*uart_data_ptr;14. uint8_tuart_counter;15. voidsei(void)16. 17. EA=1;18. 19. /*20. voidcli(void)21. 22. EA=0;23. 24. */25. voiduart_init(void)26. /*initializeuart*/27. 28. /TH1=256-(F_CPU*(SMOD+1)/(384*UART_BAND_RATE);/mode1baud(SMOD=0OR1) 29. SCON=0x50;/mode1:8-bitUART,enable receiver 30. TMOD|=0x20;/timer1mode2:8-Bitreload 31. PCON|=0x80;/SMOD=1,baud*2 32. TH1=0xfA;/11.0592M,value9600baud33. TR1=1;/timer1run 34. ES=1;/UARTINTERRUPTopen35. 36. voiddelay(uint8_tdelay_time)37. 38. uint8_ti,j,k;39. for(i=0;i255;i+)40. 41. for(j=0;j200;j+)42. 43. for(k=0;k1)44. 45. receive_start=0;46. bus_changed=1;47. 48. / 49. 50. 51. voiduart_send(uint8_t*p,uint8_tsize)52. /*sendbuffertouart*/53. 54. uart_data_ptr=p;55. uart_counter=size;56. TI=0;57. SBUF=*uart_data_ptr;58. 59. voidexecute_cmd(void)60. 61. if(receive_data2=0x01)62. 63. P1=0x01;/p1.0=1; 64. 65. if(receive_data2=0x02)66. 67. P1=0x02;/p1.1=1; 68. 69. if(receive_data2=0x03)70. 71. P1=0x04;/p1.2=1; 72. 73. if(receive_data2=0x04)74. 75. P1=0x08;/p1.3=1; 76. 77. 78. intmain(void)79. 80. uart_init();81. sei();/允许中断 82. for(;)83. 84. if(bus_changed=1)/已接收 85. /if(receive_number=3) 86. 87. execute_cmd();/执行命令 88. uart_send(ok,2);89. delay(1);90. /接收到数据,发送ok 91. uart_send(receive_data,receive_number);92. bus_changed=0;93. receive_number=0;94. 95. /uart_send(yes,3); 96. delay(1);97. 98. UART.rar LED_check.c #include #defineucharunsignedchar charcodetab=0x88,0x83,0xC6,0xA1,0xF9,0xA4,0xB0,0x99; voidtimer(uchar); sbitP0_0=P00; main() uchari,a=3; SCON=0; for(;) P0_0=1; for(i=0;i4;i+) SBUF=taba; a-; while(!TI); TI=0; if(a=255)a=7; P0_0=0; timer(100); voidtimer(uchart) uchari; for(i=0;iT;I+)pre UART.rar pc2mcu.c 1. include 2. #defineucharunsignedchar 3. #defineSL 4. AVE0xF15. ucharreceive();6. voidsend();7. voiddelay();8. ucharp;9. main()10. TMOD=0x20;11. TH1=TL1=0xE5;12. PCON=0x00;/smod=0 13. TR1=1;14. SCON=0x70;15. P0=0xFE;16. while(1)17. p=receive();18. switch(p)19. case1:P1=0xC0;break;20. case2:P1=0xF9;break;21. case3:P1=0xA4;break;22. case4:P1=0xB0;break;23. case5:P1=0x99;break;24. case6:P1=0x92;break;25. case7:P1=0x82;break;26. case8:P1=0xF8;break;27. default:P1=0x00;break;28. 29. delay();30. 31. 32. ucharreceive()33. 34. while(RI!=0);35. RI=0;36. p=SBUF;37. return(p);38. 39. voiddelay()40. uchari,j,k;41. for(i=500;i0;i-)42. for(j=500;j0;j-)43. for(k=500;k0;k-);44. 45. 46. UART.rar pc2mcu2.c,1. #include 2. #includelcd_chuan.h 3. #defineucharunsignedchar 4. /voiddelay(); 5. /voiddis(ucharp); 6. ucharp;7. ucharrct15;8. ucharrct25;9. ucharrct35;10. ucharrct45;11. 12. ucharreceive()13. ucharp;14. REN=1;15. while(RI=0);16. RI=0;17. p=SBUF;18. return(p);19. 20. 21. main()22. 23. ucharr;24. TMOD=0x20;25. TH1=TL1=0xfd;/1200的初值=e5,9600=fd 26. PCON=0x00;/smod=0 27. TR1=1;28. SCON=0x60;29. RI=1;30. EA=0;31. InitLCD();32. while(1)33. r=receive();34. /displaylcd(0x80,r); 35. r=receive();36. /displaylcd(0x81,r); 37. r=receive();38. /displaylcd(0x82,r); 39. r=receive();40. /displaylcd(0x83,r); 41. r=receive();42. /displaylcd(0x84,r); 43. 44. / 45. 46. r=receive();47. /displaylcd(0x90,r); 48. r=receive();49. /displaylcd(0x91,r); 50. r=receive();51. /displaylcd(0x92,r); 52. r=receive();53. /displaylcd(0x93,r); 54. r=receive();55. /displaylcd(0x94,r); 56. 57. r=receive();58. /displaylcd(0x88,r); 59. r=receive();60. /displaylcd(0x89,r); 61. r=receive();62. /displaylcd(0x8a,r); 63. r=receive();64. /displaylcd(0x8b,r); 65. r=receive();66. /dis
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 汉字翻译成拼音课件
- 汉字的象形文字课件
- 汉字溯源课件谭飞
- 工程结算工作协议书
- 《中国传统文化》19秋冬校内知到智慧树答案
- 我父亲演讲稿
- 2024年秋新北师大版数学一年级上册课件 我上学啦 我上学啦 4.好玩的游戏
- 永旺消防安全知识培训课件
- 永久收入理论课件
- 水表基础知识培训教材课件
- 高中英语必背3500单词表完整版
- 项目总监职业生涯规划书
- GB/T 43278-2023医学实验室风险管理在医学实验室的应用
- 《小窗幽记》(全文及译文)
- 【语文单元主题教学】六年级上册第三单元《单元整体教学以及教材解读》课件部编版创新
- 疑难病例讨论PPT模板
- 分布式光伏发电项目EPC总包合同范本
- 银行关于不动产抵押物权证保管操作模版
- 大金压缩机使用说明(D型)
- 心肺复苏术(三人组)操作程序及技术标准
- 工程进度计划横道图
评论
0/150
提交评论