微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 51单片机输出问题

51单片机输出问题

时间:10-02 整理:3721RD 点击:
有如下问题请教大家,谢谢先!
1.目前已经实现PC机与单片机通信,传输的是分组的二进制信号,而且在PC可以收到分组的返回值。问想要把这些信号传输到一个通信系统中去,也就是说把01数据流输出,在单片机这里应该怎么实现?
(比如硬件连接怎么接,程序代码怎么写,有没有一些指导和建议)
再次感谢阅读本帖。

你能说的具体些 ,没太明白你想做什么

你能说的具体些 ,没太明白你想做什么

你好,我需要传输二进制数据流,然后通过串口通信把数据放在单片机里面,之后再送入一个通信系统的发射端。相当于是一个方波输入。现在是数据在单片机里,不懂单片机到输入端口这一部分怎么做。不知表达清楚没。

http://pan.baidu.com/s/1qWO6KOkhttp://pan.baidu.com/s/1qWO6KOk

不就是让单片机通过串口把0和1发送出去么?这有有什么问题吗?

您好,现在是pc和单片机建立了串口通信,占用了一个串口。而现在目标是把单片机内的10以电平形式输出,充当信源,输入电路。 您说的通过串口发出10,可以讲的详细一点吗。 我初学单片机,很多方面认识还很浅显。

页面不存在

那你就根据串口得到的数据控制单片机引脚高低电平不久得了

  1. /********************************************************************
  2. * 名称 : Uart_Int()
  3. * 功能 : 串口中断子函数
  4. * 输入 : 无
  5. * 输出 : 无
  6. ***********************************************************************/
  7. void Uart_Int(void) interrupt 4
  8. {
  9. //        static uchar i = 7;    //定义为静态变量,当重新进入这个子函数时 i 的值不会发生改变
  10.         EA = 0;
  11.         if(RI == 1)   //当硬件接收到一个数据时,RI会置位
  12.         {
  13.                 R_data= SBUF; //这里减去48是因为从电脑中发送过来的数据是ASCII码。
  14.                 RI = 0;  
  15.                 R_flag=1;
  16.         }
  17.         EA = 1;
  18. }

复制代码


串口通信代码是别人给我的,这里是摘出来的一段,R_data是不是就是接收到的数据?如果加控制语句是不是在这句后面添加就可以?

对,数据就存在R_data里了,然后就可以在主函数根据R_data的值进行相应的操作了

  1. #include<reg52.h>
  2. #include<intrins.h>

  3. typedef unsigned int uint;
  4. typedef unsigned char uchar ;
  5. uchar R_data;
  6. bit R_flag=0;
  7. /********************************************************************
  8. * 名称 : Uart_Init()
  9. * 功能 : 串口初始化,晶振11.0592,波特率9600,使能了串口中断
  10. * 输入 : 无
  11. * 输出 : 无
  12. ***********************************************************************/
  13. void Uart_Init(void)
  14. {
  15.      TMOD = 0x20;   //定时器工作在定时器1的方式2
  16.      PCON = 0x00;   //不倍频
  17.      SCON = 0x50;        //串口工作在方式1,并且启动串行接收       
  18.      TH1 = 0xFd;    //设置波特率 9600
  19.      TL1 = 0xFd;
  20.      TR1 = 1;                //启动定时器1
  21.          ES = 1;                //开串口中断
  22.          EA = 1;                //开总中断               
  23. }
  24. /********************************************************************
  25. * 名称 : Uart_SendByte(uchar Byte)
  26. * 功能 : 串口发送1字节数据
  27. * 输入 : 无
  28. * 输出 : 无
  29. ***********************************************************************/
  30. void Uart_SendByte(uchar Byte)
  31. {
  32.         SBUF =        Byte;
  33.         while(!TI)                   //如果发送完毕,硬件会置位TI
  34.         {
  35.                 _nop_();       
  36.         }       
  37. }
  38. /********************************************************************
  39. * 名称 : Main()
  40. * 功能 : 主函数
  41. * 输入 : 无
  42. * 输出 : 无
  43. ***********************************************************************/
  44. void main()
  45. {
  46.         Uart_Init();
  47.         while(1)
  48.         {
  49.                 if(R_flag==1)
  50.                 {
  51.                         Uart_SendByte(R_data );
  52.                         R_flag=0;
  53.                 }       
  54.         }               
  55. }
  56. /********************************************************************
  57. * 名称 : Uart_Int()
  58. * 功能 : 串口中断子函数
  59. * 输入 : 无
  60. * 输出 : 无
  61. ***********************************************************************/
  62. void Uart_Int(void) interrupt 4
  63. {
  64. //        static uchar i = 7;    //定义为静态变量,当重新进入这个子函数时 i 的值不会发生改变
  65.         EA = 0;
  66.         if(RI == 1)   //当硬件接收到一个数据时,RI会置位
  67.         {
  68.                 R_data= SBUF; //这里减去48是因为从电脑中发送过来的数据是ASCII码。
  69.                 RI = 0;  
  70.                 R_flag=1;
  71.         }
  72.         EA = 1;
  73. }

复制代码



我尝试加了之后没有成功,能不能具体指点下?麻烦了

关键是你现在想如何处理R_data呀?你发的数据是什么样的,举个例子,说清楚点

发的是一个矩阵。比如
1 1 0 0 1 1
0 1 0 0 1 1
首先发送第一行到单片机,1 1 0 0 1 1,然后想让单片机从某个输出口 输出 1 1 0 0 1 1 这样的波形

路过,学习学习……

其实也就是个多维数组呗,那你就把数组里的值按你想要的顺序一个一个的发呗,然后你在确定收到的这个R_data是0还是1,然后把相应的引脚电平置0或者1,高低电平持续的时间根据你自己的需要控制合适的就行了

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top