完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
感觉网络上关于labview控制单片机的资料很少,自己正在努力学习这方面的东西。找了很多资料都没有实现(百度),感谢颛孙康白的分享,在单片机与PC通信这个帖子里发现了有用的东西,通过解读里面的代码实现了Labview与51单片机的简单通信,结合昨天学过的知识和写的程序,成功实现了Labview发送一个字符(16进制),51单片机就反应依次在数码管的第一位从0显示到9,间隔500ms。 程序如下: /************************************************************************ 说明:本程序主要完成上位机发送字符给单片机控制外围器件的任务 作者:赵伟雄 时间:2011.7.30 修改于2016.7.27 说明:在上述程序基础上,一旦在Labview发送数据,在数码管第一位输出0——9显示 作者:诗翔 *************************************************************************/ //头文件 #include //宏定义 #define uchar unsigned char #define uint unsigned int uchar code leddata[]={ //存储在程序存储空间 0x3F, //"0" 0x06, //"1" 0x5B, //"2" 0x4F, //"3" 0x66, //"4" 0x6D, //"5" 0x7D, //"6" 0x07, //"7" 0x7F, //"8" 0x6F, //"9" 0x77, //"A" 0x7C, //"B" 0x39, //"C" 0x5E, //"D" 0x79, //"E" 0x71, //"F" 0x76, //"H" 0x38, //"L" 0x37, //"n" 0x3E, //"u" 0x73, //"P" 0x5C, //"o" 0x40, //"-" 0x00, //熄灭 0x00 //自定义 }; ***it wei = P2^7; ***it duan = P2^6; void delay(uint z) { uintx,y; for(x= z;x > 0;x--) for(y= 120; y > 0; y--); } uchar rev[1]={0}; //接收到的字符 //----------------------------------------------------------------------- //函数声明 void System_Init(); //初始化 //----------------------------------------------------------------------- /************************************************************************ 主函数 *************************************************************************/ void main() { System_Init(); while(1) { } } /************************************************************************ 初始化函数 *************************************************************************/ void System_Init() { SCON= 0X50; PCON= 0X00; TMOD= 0X20; TH1= 0XFD; TL1= 0XFD; EA= 1; ES= 1; TR1= 1; } /************************************************************************ 串口中断函数 *************************************************************************/ void Serial_Rxd() interrupt 4 //interrupt 4表示其为一个中断函数 //且其函数的入口地址是固定的好象为4*8+3=0x23 { ES=0; if(RI) { uchar i; rev[0]= SBUF; RI = 0; wei = 1; //打开位选 P0= 0xfe; //控制数码管位选 wei= 0; //关闭位选 for(i=0;i<10;i++) { duan= 1; //打开段选 P0= leddata; //控制数码管段选 duan= 0; //关闭段选,锁存 delay(500); } SBUF= rev[0]+1; while(!ti); TI= 0; } ES=1; } 一个问题:我对这个中断函数理解不深(没对应电路引脚图去仔细研究),大致看懂了是通过中断方式读取端口的数据,我在labview发送某个十六进制字符,返回加一,VISA读取缓冲区的数据显示有时候是空的,有时候显示两个,有时候结果是00,这个是什么原因呢?? |
|
相关推荐
|
|
如果你不会单片机“中断”比较难理解。中断是暂停主程序执行临时执行子程序完成后再执行主程序。你其实也不用太懂这个关于你说有时候会有两个数字可能是延时时间长上一次收到的数据没有及时读取。显示00就不清楚了
|
|
|
|
|
|
ShuiMoLise 发表于 2016-7-28 11:52 谢谢啊,我也是这样想的,但是现在还没掌握怎么处理这个问题,等我慢慢修炼修炼。 |
|
|
|
|
|
这个只不过是一个简单通讯例子。工程里面通讯经常是有 帧头、校验、帧尾。或者是一问一答式(有时候返回数据长度是固定的这时候可以没有帧头帧尾) |
|
|
|
|
|
ShuiMoLise 发表于 2016-7-28 16:41 嗯嗯 现在所学尚浅 |
|
|
|
|
|
791 浏览 1 评论
2300 浏览 2 评论
2044 浏览 4 评论
labview如何实现电机位置与图像清晰度计算值相对应,或者说如何实现电机每步距计算一次清晰度值?
2247 浏览 2 评论
2774 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-2-24 07:01 , Processed in 0.734639 second(s), Total 86, Slave 67 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191