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

 我来答
vichen201012
2013-04-05 · 超过12用户采纳过TA的回答
知道答主
回答量:24
采纳率:100%
帮助的人:24万
展开全部

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

//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

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式