16815|5

449

帖子

0

TA的资源

五彩晶圆(高级)

楼主
 

51 IO口模拟串口通讯C源程序 [复制链接]

51 IO口模拟串口通讯C源程序
  1. #include <reg51.h>
  2. sbit BT_SND =P1^0;
  3. sbit BT_REC =P1^1;
  4. /**********************************************
  5. IO 口模拟232通讯程序
  6. 使用两种方式的C程序 占用定时器0
  7. **********************************************/
  8. #define MODE_QUICK
  9. #define F_TM F0
  10. #define TIMER0_ENABLE TL0=TH0; TR0=1;
  11. #define TIMER0_DISABLE TR0=0;
  12. sbit ACC0= ACC^0;
  13. sbit ACC1= ACC^1;
  14. sbit ACC2= ACC^2;
  15. sbit ACC3= ACC^3;
  16. sbit ACC4= ACC^4;
  17. sbit ACC5= ACC^5;
  18. sbit ACC6= ACC^6;
  19. sbit ACC7= ACC^7;
  20. void IntTimer0() interrupt 1
  21. {
  22. F_TM=1;
  23. }
  24. //发送一个字符
  25. void PSendChar(unsigned char inch)
  26. {
  27. #ifdef MODE_QUICK
  28. ACC=inch;
  29. F_TM=0;
  30. BT_SND=0; //start bit
  31. TIMER0_ENABLE; //启动
  32. while(!F_TM);
  33. BT_SND=ACC0; //先送出低位
  34. F_TM=0;
  35. while(!F_TM);
  36. BT_SND=ACC1;
  37. F_TM=0;
  38. while(!F_TM);
  39. BT_SND=ACC2;
  40. F_TM=0;
  41. while(!F_TM);
  42. BT_SND=ACC3;
  43. F_TM=0;
  44. while(!F_TM);
  45. BT_SND=ACC4;
  46. F_TM=0;
  47. while(!F_TM);
  48. BT_SND=ACC5;
  49. F_TM=0;
  50. while(!F_TM);
  51. BT_SND=ACC6;
  52. F_TM=0;
  53. while(!F_TM);
  54. BT_SND=ACC7;
  55. F_TM=0;
  56. while(!F_TM);
  57. BT_SND=1;
  58. F_TM=0;
  59. while(!F_TM);
  60. TIMER0_DISABLE; //停止timer
  61. #else
  62. unsigned char ii;
  63. ii=0;
  64. F_TM=0;
  65. BT_SND=0; //start bit
  66. TIMER0_ENABLE; //启动
  67. while(!F_TM);
  68. while(ii<8)
  69. {
  70. if(inch&1)
  71. {
  72. BT_SND=1;
  73. }
  74. else
  75. {
  76. BT_SND=0;
  77. }
  78. F_TM=0;
  79. while(!F_TM);
  80. ii++;
  81. inch>>=1;
  82. }
  83. BT_SND=1;
  84. F_TM=0;
  85. while(!F_TM);
  86. #endif
  87. TIMER0_DISABLE; //停止timer
  88. }
  89. //接收一个字符
  90. unsigned char PGetChar()
  91. {
  92. #ifdef MODE_QUICK
  93. TIMER0_ENABLE;
  94. F_TM=0;
  95. while(!F_TM); //等过起始位
  96. ACC0=BT_REC;
  97. TL0=TH0;
  98. F_TM=0;
  99. while(!F_TM);
  100. ACC1=BT_REC;
  101. F_TM=0;
  102. while(!F_TM);
  103. ACC2=BT_REC;
  104. F_TM=0;
  105. while(!F_TM);
  106. ACC3=BT_REC;
  107. F_TM=0;
  108. while(!F_TM);
  109. ACC4=BT_REC;
  110. F_TM=0;
  111. while(!F_TM);
  112. ACC5=BT_REC;
  113. F_TM=0;
  114. while(!F_TM);
  115. ACC6=BT_REC;
  116. F_TM=0;
  117. while(!F_TM);
  118. ACC7=BT_REC;
  119. F_TM=0;
  120. while(!F_TM)
  121. {
  122. if(BT_REC)
  123. {
  124. break;
  125. }
  126. }
  127. TIMER0_DISABLE; //停止timer
  128. return ACC;
  129. #else
  130. unsigned char rch,ii;
  131. TIMER0_ENABLE;
  132. F_TM=0;
  133. ii=0;
  134. rch=0;
  135. while(!F_TM); //等过起始位
  136. while(ii<8)
  137. {
  138. rch>>=1;
  139. if(BT_REC)
  140. {
  141. rch|=0x80;
  142. }
  143. ii++;
  144. F_TM=0;
  145. while(!F_TM);
  146. }
  147. F_TM=0;
  148. while(!F_TM)
  149. {
  150. if(BT_REC)
  151. {
  152. break;
  153. }
  154. }
  155. TIMER0_DISABLE; //停止timer
  156. return rch;
  157. #endif
  158. }
  159. //检查是不是有起始位
  160. bit StartBitOn()
  161. {
  162. return (BT_REC==0);
  163. }
  164. void main()
  165. {
  166. unsigned char gch;
  167. TMOD=0x22; /*定时器1为工作模式2(8位自动重装),0为模式2(8位
  168. 自动重装) */
  169. PCON=00;
  170. TR0=0; //在发送或接收才开始使用
  171. TF0=0;
  172. TH0=(256-96); //9600bps 就是 1000000/9600=104.167微秒 执行的
  173. timer是
  174. //
  175. 104.167*11.0592/12= 96
  176. TL0=TH0;
  177. ET0=1;
  178. EA=1;
  179. PSendChar(0x55);
  180. PSendChar(0xaa);
  181. PSendChar(0x00);
  182. PSendChar(0xff);
  183. while(1)
  184. {
  185. if(StartBitOn())
  186. {
  187. gch=PGetChar();
  188. PSendChar(gch);
  189. }
  190. }
  191. }
复制代码
此帖出自51单片机论坛

最新回复

56y
好东东,我正要这样的例子,谢谢。;P  详情 回复 发表于 2007-9-12 20:10
点赞 关注
个人签名世界是个圈,人生也是个圈。
 

回复
举报

152

帖子

0

TA的资源

裸片初长成(初级)

沙发
 

回复:51 IO口模拟串口通讯C源程序

好!支持一下。
此帖出自51单片机论坛
 
个人签名我是有火救火,无火灌水的救火车
救火车单片机工作室
http://www.qm999.cn
 
 

回复

6

帖子

0

TA的资源

一粒金砂(初级)

板凳
 

回复:51 IO口模拟串口通讯C源程序

不错,不过要求速度快精度高的,不提倡用模拟
此帖出自51单片机论坛
 
 
 

回复

90

帖子

0

TA的资源

一粒金砂(初级)

4
 

回复:51 IO口模拟串口通讯C源程序

不错!感谢楼主!
此帖出自51单片机论坛
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

5
 

回复:51 IO口模拟串口通讯C源程序

好东西啊,真希望所有的仁人志士们都能共享资源,大家共进~~
此帖出自51单片机论坛
 
 
 

回复

5

帖子

0

TA的资源

一粒金砂(初级)

6
 

回复:51 IO口模拟串口通讯C源程序

好东东,我正要这样的例子,谢谢。;P
此帖出自51单片机论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表