4988|13

70

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

请教一个PC机与单片机数据通信的问题 [复制链接]

请教各位大侠,有个问题是我想实现一个功能,PC机发送一个16进制的数到单片机,然后单片机将数值写到P1口,实现对P1口上接的LED控制,但是我不知道如何从单片机接收的缓冲变成P1口能认得的数据,拜托能给个代码么。
举例子,假如PC采集到了一组开关量组合成01010000,变成16进制的50 ,然后送到单片机,怎样才能实现P1=0X50呢。
现在我的接收字符是这样写的
void UART_SER () interrupt 4 using 2 //串行中断服务程序//串行中断服务程序
{
  unsigned  char  Temp;          //定义临时变量
    if(RI)                        //判断是接收中断产生
    {
        RI = 0;                      //标志位清零
        Temp = SBUF;
    }
    if(TI)                        //如果是发送标志位,清零
    TI=0;
}

最新回复

菜鸟水平低,请不要见笑  详情 回复 发表于 2009-12-17 17:55
点赞 关注

回复
举报

69

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
引用楼主 e170 的回复:
请教各位大侠,有个问题是我想实现一个功能,PC机发送一个16进制的数到单片机,然后单片机将数值写到P1口,实现对P1口上接的LED控制,但是我不知道如何从单片机接收的缓冲变成P1口能认得的数据,拜托能给个代码么。
举例子,假如PC采集到了一组开关量组合成01010000,变成16进制的50 ,然后送到单片机,怎样才能实现P1=0X50呢。
现在我的接收字符是这样写的
void UART_SER () interrupt 4 using 2 //串行中断服务程序//串行中断服务程序
{
? unsigned? char? Temp;? ? ? ? ? //定义临时变量
? ? if(RI)? ? ? ? ? ? ? ? ? ? ? ? //判断是接收中断产生
? ? {
? ? ? ? RI = 0;? ? ? ? ? ? ? ? ? ? ? //标志位清零
? ? ? ? Temp = SBUF;
        // 简单的做法,在这里对P1口赋值就可以了
         P1 = Temp;

? ? }
? ? if(TI)? ? ? ? ? ? ? ? ? ? ? ? //如果是发送标志位,清零
? ? TI=0;
}
 
 

回复

62

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
SBUF是串口接收缓冲区 ,单片机的串口缓冲区就是8位的,一个字节数据,你要把这个数据给了P1,然后去控制LED
软件:得到的数据给了P1,就可以了  即
        Temp = SBUF;
        P1 = Temp;  
硬件:P1接到8个LED上面,
这样得到的8位数据 就对应8个LED灯的亮灭
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

4
 
学习。
 
 
 

回复

62

帖子

0

TA的资源

一粒金砂(初级)

5
 
1楼2楼就是正解
 
 
 

回复

62

帖子

0

TA的资源

一粒金砂(初级)

6
 
学习了!!
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

7
 
引用 5 楼 superdd5568 的回复:
学习了!!

呵呵!
楼主是没有搞懂十六进制50就是0X50!
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

8
 
路过学习了。
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

9
 
引用 1 楼 zyzhang365 的回复:
引用楼主 e170 的回复:
请教各位大侠,有个问题是我想实现一个功能,PC机发送一个16进制的数到单片机,然后单片机将数值写到P1口,实现对P1口上接的LED控制,但是我不知道如何从单片机接收的缓冲变成P1口能认得的数据,拜托能给个代码么。
举例子,假如PC采集到了一组开关量组合成01010000,变成16进制的50 ,然后送到单片机,怎样才能实现P1=0X50呢。
现在我的接收字符是这样写的
void UART_SER () interrupt 4 using 2 //串行中断服务程序//串行中断服务程序
{
? unsigned? char? Temp;? ? ? ? ? //定义临时变量
? ? if(RI)? ? ? ? ? ? ? ? ? ? ? ? //判断是接收中断产生
? ? {
? ? ? ? RI = 0;? ? ? ? ? ? ? ? ? ? ? //标志位清零
? ? ? ? Temp = SBUF;
? ? ? ? // 简单的做法,在这里对P1口赋值就可以了
? ? ? ? P1 = Temp;
? ? }
? ? if(TI)? ? ? ? ? ? ? ? ? ? ? ? //如果是发送标志位,清零
? ? TI=0;
}



正解
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

10
 
问题是现在串口是接收很多种数据的,要用前缀来去分,比如说PC是发@A50# 过来,那一个TEMP只能得一个5吧,如何再组合出来呢.应该有很成熟的方法,但我是初学者,不太懂PC与单片机之间传送的方法
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

11
 
你要制定一个通讯协议,让你的单片机知道PC发来的是什么
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

12
 
可惜人家把答案说了。
 
 
 

回复

60

帖子

0

TA的资源

一粒金砂(初级)

13
 
协议有了,假如单片机收到的数据以@开头,第一位是定意送的是什么类型的数据,最后用#结束,现在我不懂的是,假如PC送了@A50# 怎么转换成0x50
 
 
 

回复

85

帖子

0

TA的资源

一粒金砂(初级)

14
 
菜鸟水平低,请不要见笑
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

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

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