51单片机输出问题
时间:10-02
整理:3721RD
点击:
有如下问题请教大家,谢谢先!
1.目前已经实现PC机与单片机通信,传输的是分组的二进制信号,而且在PC可以收到分组的返回值。问想要把这些信号传输到一个通信系统中去,也就是说把01数据流输出,在单片机这里应该怎么实现?
(比如硬件连接怎么接,程序代码怎么写,有没有一些指导和建议)
再次感谢阅读本帖。
串口通信代码是别人给我的,这里是摘出来的一段,R_data是不是就是接收到的数据?如果加控制语句是不是在这句后面添加就可以?
我尝试加了之后没有成功,能不能具体指点下?麻烦了
1.目前已经实现PC机与单片机通信,传输的是分组的二进制信号,而且在PC可以收到分组的返回值。问想要把这些信号传输到一个通信系统中去,也就是说把01数据流输出,在单片机这里应该怎么实现?
(比如硬件连接怎么接,程序代码怎么写,有没有一些指导和建议)
再次感谢阅读本帖。
你能说的具体些 ,没太明白你想做什么
你能说的具体些 ,没太明白你想做什么
你好,我需要传输二进制数据流,然后通过串口通信把数据放在单片机里面,之后再送入一个通信系统的发射端。相当于是一个方波输入。现在是数据在单片机里,不懂单片机到输入端口这一部分怎么做。不知表达清楚没。
http://pan.baidu.com/s/1qWO6KOkhttp://pan.baidu.com/s/1qWO6KOk
不就是让单片机通过串口把0和1发送出去么?这有有什么问题吗?
您好,现在是pc和单片机建立了串口通信,占用了一个串口。而现在目标是把单片机内的10以电平形式输出,充当信源,输入电路。 您说的通过串口发出10,可以讲的详细一点吗。 我初学单片机,很多方面认识还很浅显。
页面不存在
那你就根据串口得到的数据控制单片机引脚高低电平不久得了
- /********************************************************************
- * 名称 : Uart_Int()
- * 功能 : 串口中断子函数
- * 输入 : 无
- * 输出 : 无
- ***********************************************************************/
- void Uart_Int(void) interrupt 4
- {
- // static uchar i = 7; //定义为静态变量,当重新进入这个子函数时 i 的值不会发生改变
- EA = 0;
- if(RI == 1) //当硬件接收到一个数据时,RI会置位
- {
- R_data= SBUF; //这里减去48是因为从电脑中发送过来的数据是ASCII码。
- RI = 0;
- R_flag=1;
- }
- EA = 1;
- }
串口通信代码是别人给我的,这里是摘出来的一段,R_data是不是就是接收到的数据?如果加控制语句是不是在这句后面添加就可以?
对,数据就存在R_data里了,然后就可以在主函数根据R_data的值进行相应的操作了
- #include<reg52.h>
- #include<intrins.h>
- typedef unsigned int uint;
- typedef unsigned char uchar ;
- uchar R_data;
- bit R_flag=0;
- /********************************************************************
- * 名称 : Uart_Init()
- * 功能 : 串口初始化,晶振11.0592,波特率9600,使能了串口中断
- * 输入 : 无
- * 输出 : 无
- ***********************************************************************/
- void Uart_Init(void)
- {
- TMOD = 0x20; //定时器工作在定时器1的方式2
- PCON = 0x00; //不倍频
- SCON = 0x50; //串口工作在方式1,并且启动串行接收
- TH1 = 0xFd; //设置波特率 9600
- TL1 = 0xFd;
- TR1 = 1; //启动定时器1
- ES = 1; //开串口中断
- EA = 1; //开总中断
- }
- /********************************************************************
- * 名称 : Uart_SendByte(uchar Byte)
- * 功能 : 串口发送1字节数据
- * 输入 : 无
- * 输出 : 无
- ***********************************************************************/
- void Uart_SendByte(uchar Byte)
- {
- SBUF = Byte;
- while(!TI) //如果发送完毕,硬件会置位TI
- {
- _nop_();
- }
- }
- /********************************************************************
- * 名称 : Main()
- * 功能 : 主函数
- * 输入 : 无
- * 输出 : 无
- ***********************************************************************/
- void main()
- {
- Uart_Init();
- while(1)
- {
- if(R_flag==1)
- {
- Uart_SendByte(R_data );
- R_flag=0;
- }
- }
- }
- /********************************************************************
- * 名称 : Uart_Int()
- * 功能 : 串口中断子函数
- * 输入 : 无
- * 输出 : 无
- ***********************************************************************/
- void Uart_Int(void) interrupt 4
- {
- // static uchar i = 7; //定义为静态变量,当重新进入这个子函数时 i 的值不会发生改变
- EA = 0;
- if(RI == 1) //当硬件接收到一个数据时,RI会置位
- {
- R_data= SBUF; //这里减去48是因为从电脑中发送过来的数据是ASCII码。
- RI = 0;
- R_flag=1;
- }
- EA = 1;
- }
我尝试加了之后没有成功,能不能具体指点下?麻烦了
关键是你现在想如何处理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,高低电平持续的时间根据你自己的需要控制合适的就行了