跪求labview与单片机串口通信的labview程序和单片机程序,以及VISA驱动

如题所述

我近来也刚写了个,就发出来共享吧,助人为乐.呵呵

//chenhuiyang0000@163.com//
/*PC与单片机通信程序*/
/*
PC发送 MCU响应
H 返回字符串"OK"
J 开始计数
S 停止计数
A 1号灯亮,同时蜂鸣器响
B 1号灯灭,蜂鸣器停止响
C 2号灯亮,同时蜂鸣器响
D 2号灯灭,蜂鸣器停止响
R 单片机复位
*/
#include<reg52.h>
#include<stdio.h>
#define uint unsigned int
#define uchar unsigned char
sfr ISP_CONTR=0xe7;
sbit dula=P2^6;
sbit wela=P2^7;
sbit LIGHT1=P1^0;
sbit LIGHT2=P1^1;
sbit BUZZER=P2^3;
uchar num2,num,shi,ge,flag;
uint vo;
uchar tab[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71
}; //字符转换表
void _delay_ms(uint xms)
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
void init()
{
TMOD=0x21;//设定定时器0为工作方式1(M1M0为01),定时器1为工作方式2(0010)
// IE=0x12;//中断允许寄存器(0001 0010打开ES与ET0定时器/计数器0中断允许位)
PCON=0x80;//电源管理寄存器D7(SMOD=1),串口方式1,2,3时,波特率加倍9600*2=19200
SCON=0x50;//串口工作方式1,允许接收
TL1=0xfd;//设初值晶体为11.0592MHz时,波特率为9600的初值
TH1=0xfd;
TH0=(65536-45876)/256;
TL0=(65536-45876)%256;
TR1=1;//定时器1运行控制位
TR0=1;//定时器0运行控制位
ET0=0;//关定时器0中断
ES=1;//打开串口中断
EA=1;//开总中断
LIGHT1=1;
LIGHT2=1;
}
void disp(uchar shi,uchar ge)
{
dula=1;
P0=tab[shi];
dula=0;
P0=0xff;
wela=1;
P0=0xfe;
wela=0;
_delay_ms(5);
dula=1;
P0=tab[ge];
dula=0;
P0=0xff;
wela=1;
P0=0xfd;
wela=0;
_delay_ms(5);
}
void send_RESET_OK()
{
ES=0;
TI=1;
printf("RESET OK\n");
while(!TI);
TI=0;
ES=1;
}
void _send_H()
{
ES=0;
TI=1;
puts("\nPC发送 MCU响应\nJ 开始计数\nS 停止计数");
while(!TI);
TI=0;
TI=1;
puts("A 1号灯亮,同时蜂鸣器响\nB 1号灯灭,蜂鸣器停止响");
while(!TI);
TI=0;
TI=1;
puts("C 2号灯亮,同时蜂鸣器响\nD 2号灯灭,蜂鸣器停止响\nR 单片机复位\n");
while(!TI);
TI=0;
ES=1;
}
void main(void)
{
init();
send_RESET_OK();
while(1)
{
if(flag==1)
{
flag=0;
vo=(int)num;
ES=0;
TI=1;
printf("num %d\n",vo);
while(!TI);
TI=0;
ES=1;
}
disp(shi,ge);
}
}
void uart(void) interrupt 4 //串口中断
{
TI=0;
RI=0;
if(SBUF=='H') //接收到'H'字符发送'OK'
{
/*
SBUF='O';
while(TI==0);
TI=0;
SBUF='K';
while(TI==0);
TI=0;
*/
/*
ES=0;
TI=1;
puts("OK\n");
while(!TI);
TI=0;
ES=1;
*/
_send_H();
}
else
if(SBUF=='J') //接收到J
{
ES=0;
TI=1;
puts("Open counting");//发送字符串
while(!TI);
TI=0;
ES=1;
ET0=1;//开定时器0中断
}
else
if(SBUF=='S')
{
ES=0;
TI=1;
puts("Stop countiong");
while(!TI);
TI=0;
ES=1;
ET0=0;//关定时器0中断
}
else
if(SBUF=='A')
{
ES=0;
TI=1;
puts("Turn on the light led 1 with buzzer");
while(!TI);
TI=0;
ES=1;
LIGHT1=0;
BUZZER=0;
}
else
if(SBUF=='B')
{
ES=0;
TI=1;
puts("Turn off the lights led 1 with buzzer");
while(!TI);
TI=0;
ES=1;
LIGHT1=1;
BUZZER=1;
}
else
if(SBUF=='C')
{
ES=0;
TI=1;
puts("Turn on the light led 2 with buzzer");
while(!TI);
TI=0;
ES=1;
LIGHT2=0;
BUZZER=0;
}
else
if(SBUF=='D')
{
ES=0;
TI=1;
puts("Turn off the lights led 2 with buzzer");
while(!TI);
TI=0;
ES=1;
LIGHT2=1;
BUZZER=1;
}
else
if(SBUF=='R')
{
ISP_CONTR=0x20;//用软件实现系统复位
}
else
if(SBUF != '\0')
{
ES=0;
TI=1;
puts("Command error!");
while(!TI);
TI=0;
ES=1;
}
}
void T0_time() interrupt 1
{
TH0=(65536-45876)/256;
TL0=(65536-45876)%256;
num2++;
if(num2==20)//如果到了20次,说明1秒时间到
{
num2=0;
num++;
if(num==60)
{
num=0;
}
flag=1;
shi=num/10;
ge=num%10;
}
}






我用的单片机为郭天祥TX-1C的,要是别的单片机得动手改程序了,至于VISA你可在NI官方网下载。

http://pan.baidu.com/share/link?shareid=595407&;;uk=3407138493

可以到以下论坛地址下载

http://bbs.avrvi.com/htm_data/8/1304/237739.html

温馨提示:内容为网友见解,仅供参考
无其他回答

LabVIEW VISA快速实现串口程序
实际操作中,可以使用VISA串口API快速实现一个简单的串口助手工具。首先,通过配置API设置串口参数,然后在UI线程中利用写入API发送控制指令。对于数据读取,可采用队列循环读取的方式,提高效率。通过阻塞队列获取数据,避免频繁轮询带来的性能损失。此外,还需处理交互逻辑和缓冲区管理,以确保串口助手的正常运行...

labview2016visa等待事件的选择visa类在哪
我用的是单片机MG84,和Labview进行USB通讯。一、创建VISA USB驱动 通过Labview自带的软件 NI-VISA Driver Wizard 选择USB 选择你的设备,ID在设备管理器中看,我这是已经插上电脑的,没有插的选择other NEXT,选择路径,生成inf文件 生成好了后在进行安装 二、Labview写程序 首次程序是这样,会出现报错...

labview与单片机用visa进行串口通信
1、搞清楚串口协议标准,232,485协议编程会有所区别;2、编制对话规则。也就是上位机发出什么指令,下位机如何响应,这个需要做个对码表;3、串口一次发送的数据是16进制,可以让下位机解码为2进制的,每一位代表不同功能启用。这样就可以实现一次发送多个指令。比如发送16进制数FF,那么对应的2进制就...

labview与51单片机通信的问题
1)要安装visa labvieW2012支持的为visa530full.EXE.不要安装的版本太低了,否则不能用。2)我建议你先看看例程 例程是labvIEW->examples->instr->smplserl里的basic 2 port serial write and read.vi 里面还有一些例程你都可以试试,最简单的就是将发送和接受接到一起,然后运行,就能看出结果了。...

LABVIEW与51单片机串口通讯
使用labview上的VISA的读写功能,设置跟电脑相对应的串口,就能很方便的接收到单片机发送过来的数字,然后可以用数值显示函数或者字符显示函数来显示的。。。

基于LabVIEW和单片机的温度监控系统,我想知道这两个部分是怎么样联系通...
4.“串口通信”虚拟串口软件VSPM(Virtual Serial Port Software)?虚拟串行驱动程序VSPD(Virtual Serial Ports Driver XP)?不管你使用的是什么吧,因为不论串行设备或计算机程序都无法辨别真实串行与虚拟串行传输的不同,因此只要当成真实的串口使用VISA来编程就行了。VISA作为测试程序和数据传输总线的中间...

labview 串口通信 vi程序有时候这样报错 怎么解决啊?
建议:1.在visa write 这个部分加个延时,有可能还没发送完成,就把VISA关闭了,造成发送失败。2.检查和单片机的连接,是否存在连接松动。3.建议先给单片机通电,后才运行LabVIEW程序。4.检查单片机受到干扰造成。5.检查单片机的程序是否存在bug。

我想用labview做一个与单片机串口通信的软件,可是感觉ni visa 不好...
这个可以做的 Labview用来做上位机软件是很合适很方便的,可以对数据进行保存和实时的分析。想通过串口采集到下位机(单片机)的数据,可以实时显示波形和保存数据。我做过一个温度采集器,单片机用DS18B20采集温度数据后通过串口发送到PC端,Labview接收数据后实时波形显示温度的变化趋势,同时把温度数据保存在...

Labview跟串口通信问题
1、查看Max中串口是否能够正确识别,2、查看LabVIEW串口配置和单片机是否对应 2、命令是否正确,一般都是写十六进制的数字,你的字符串是否是十六进制显示模式?3、读取的延时是否正确,单片机需要一定时间来执行你发送的命令。可以采集visa的属性节点,VISA串口字节数来查看是否有数据返回。

labview怎么控制51单片机开发板的LED灯亮?
你要用labview控制51单片机,首先你要用labview和51单片机通讯,单片机里要有串口中断程序,还要有通讯协议,比如说labview通过串口向单片机发送0x55,单片机收到后执行点亮小灯的程序,labview要下载ni visa,labview通过visa控件就可以通过串口向外部发送指令。

相似回答