单片机与PC怎么 通信?
我手头现在有一个C8051F310的板子,准备用USB转485总线来通信。请问下是不是现在硬件上是不是可以通信了?那还需要什么软件?能不能简单介绍下通信是干什么的。为什么...
我手头现在有一个 C8051F310的板子, 准备用USB 转485总线来通信。
请问下是不是现在硬件上是不是可以通信了?那还需要什么软件?
能不能简单介绍下 通信是干什么的。为什么要通信,通过通信,我可以对程序运行,调试有帮助吗?我新手 暂时没什么概念,希望能帮我下 谢谢啦~~~ 展开
请问下是不是现在硬件上是不是可以通信了?那还需要什么软件?
能不能简单介绍下 通信是干什么的。为什么要通信,通过通信,我可以对程序运行,调试有帮助吗?我新手 暂时没什么概念,希望能帮我下 谢谢啦~~~ 展开
6个回答
展开全部
这个可以,但是蛮麻烦。建议直接用串口通信。
通信的目的一方面是为了调试方便,另一方面你可以把单片机采集的到数据传给电脑,也可以把电脑的控制指令传给单片机。
通信的目的一方面是为了调试方便,另一方面你可以把单片机采集的到数据传给电脑,也可以把电脑的控制指令传给单片机。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
D_9600 = 0x0c,
BAUD_19200 = 0x06,
BAUD_38400 = 0x03,
BAUD_57600 = 0x02,
BAUD_115200 = 0x01
};
enum Com_t
{
COM0 = 0xc0,
COM1 = 0xc1,
};
enum Mod_t
{
MOD0 = 0x00,
MOD1 = 0x01,
MOD2 = 0x02,
MOD3 = 0x03
};
enum Interrupt_Prio
{
Prio_0 = 0,
Prio_1 = 1,
Prio_2 = 2,
Prio_3 = 3
};
unsigned char SerialOpen (enum Mod_t Mod, enum Baud_t Baud, enum Interrupt_Prio Prio)
{
unsigned char result;
result = 0;
//设置串口工作模式和波特率
switch(Mod)
{
//8位同步移位模式,RXD:数据输入输出;TXD:同步移位时钟;低位在前
case(MOD0):
SM0 = 0;
SM1 = 0;
REN = 1;
// 波特率固定为Fosc/12
result = OK;
break;
//1起始位+8数据位(BT0-BT7)+1停止位
case(MOD1):
SM0 = 0;
SM1 = 1;
REN = 1; //允许串口0接收
AUXR |= 0x40; //T1*12 = 1,定时器1采用12倍频,工作在1T模式
TMOD = 0x21; //设置定时器1为8位自动重装计数器
if(Baud == BAUD_9600)
{
TH1 = 0xdc;
TL1 = 0xdc;
}
if(Baud == BAUD_19200)
{
TH1 = 0xee;
TL1 = 0xee;
}
if(Baud == BAUD_38400)
{
TH1 = 0xf7;
TL1 = 0xf7;
}
if(Baud == BAUD_57600)
{
TH1 = 0xfa;
TL1 = 0xfa;
}
if(Baud == BAUD_115200)
{
TH1 = 0xfd;
TL1 = 0xfd;
}
TR1 = 1; //开启定时器1
result = OK;
break;
//1位起始位+8位数据位+第九位编程位(SCON中的TB8/RB8)+1位停止位
case(MOD2):
SM0 = 1;
SM1 = 0;
REN = 1;
//当SMOD=0时,波特率 = 溢出率/64
//当SMOD=1时,波特率 = 溢出率/32
result = OK;
break;
//同模式2相同,区别在于波特率可以设置
case(MOD3):
SM0 = 0;
SM1 = 0;
REN = 1;
AUXR |= 0x40; //T1*12 = 1,定时器1采用12倍频,工作在1T模式
TMOD = 0x21; //设置定时器1为8位自动重装计数器
if(Baud == BAUD_9600)
{
TH1 = 0x00;
TL1 = 0xdc;
}
if(Baud == BAUD_19200)
{
TH1 = 0x00;
TL1 = 0xee;
}
if(Baud == BAUD_38400)
{
TH1 = 0x00;
TL1 = 0xf7;
}
if(Baud == BAUD_57600)
{
TH1 = 0x00;
TL1 = 0xfa;
}
if(Baud == BAUD_115200)
{
TH1 = 0x00;
TL1 = 0xfd;
}
TR1 = 1; //开启定时器1
result = OK;
break;
default:
result = ERR;
break;
}
//设置中断优先级
if(result == OK)
{
if(Prio == Prio_0)
{
// IP = ; //采用系统默认值
// IPH = ; //采用系统默认值
ES = 1; //开串口中断
EA = 1; //开总的中断控制位
}
if(Prio == Prio_1)
{
IP |= 0x10;
// IPH = ; //采用系统默认值
ES = 1;
EA = 1;
}
if(Prio == Prio_2)
{
// IP = ; //采用默认值
IPH |= 0x10;
ES = 1;
EA = 1;
}
if(Prio == Prio_3)
{
IP |= 0x10;
IPH |= 0x10;
ES = 1;
EA = 1;
}
}
return(result);
}
注意,以上是晶振为11.0592MHZ的参数配置。
你在下载程序的时候要注意:下载软件上要配置成外部晶振,且下一栏选择LOW
否则你的通信是不成功的
BAUD_19200 = 0x06,
BAUD_38400 = 0x03,
BAUD_57600 = 0x02,
BAUD_115200 = 0x01
};
enum Com_t
{
COM0 = 0xc0,
COM1 = 0xc1,
};
enum Mod_t
{
MOD0 = 0x00,
MOD1 = 0x01,
MOD2 = 0x02,
MOD3 = 0x03
};
enum Interrupt_Prio
{
Prio_0 = 0,
Prio_1 = 1,
Prio_2 = 2,
Prio_3 = 3
};
unsigned char SerialOpen (enum Mod_t Mod, enum Baud_t Baud, enum Interrupt_Prio Prio)
{
unsigned char result;
result = 0;
//设置串口工作模式和波特率
switch(Mod)
{
//8位同步移位模式,RXD:数据输入输出;TXD:同步移位时钟;低位在前
case(MOD0):
SM0 = 0;
SM1 = 0;
REN = 1;
// 波特率固定为Fosc/12
result = OK;
break;
//1起始位+8数据位(BT0-BT7)+1停止位
case(MOD1):
SM0 = 0;
SM1 = 1;
REN = 1; //允许串口0接收
AUXR |= 0x40; //T1*12 = 1,定时器1采用12倍频,工作在1T模式
TMOD = 0x21; //设置定时器1为8位自动重装计数器
if(Baud == BAUD_9600)
{
TH1 = 0xdc;
TL1 = 0xdc;
}
if(Baud == BAUD_19200)
{
TH1 = 0xee;
TL1 = 0xee;
}
if(Baud == BAUD_38400)
{
TH1 = 0xf7;
TL1 = 0xf7;
}
if(Baud == BAUD_57600)
{
TH1 = 0xfa;
TL1 = 0xfa;
}
if(Baud == BAUD_115200)
{
TH1 = 0xfd;
TL1 = 0xfd;
}
TR1 = 1; //开启定时器1
result = OK;
break;
//1位起始位+8位数据位+第九位编程位(SCON中的TB8/RB8)+1位停止位
case(MOD2):
SM0 = 1;
SM1 = 0;
REN = 1;
//当SMOD=0时,波特率 = 溢出率/64
//当SMOD=1时,波特率 = 溢出率/32
result = OK;
break;
//同模式2相同,区别在于波特率可以设置
case(MOD3):
SM0 = 0;
SM1 = 0;
REN = 1;
AUXR |= 0x40; //T1*12 = 1,定时器1采用12倍频,工作在1T模式
TMOD = 0x21; //设置定时器1为8位自动重装计数器
if(Baud == BAUD_9600)
{
TH1 = 0x00;
TL1 = 0xdc;
}
if(Baud == BAUD_19200)
{
TH1 = 0x00;
TL1 = 0xee;
}
if(Baud == BAUD_38400)
{
TH1 = 0x00;
TL1 = 0xf7;
}
if(Baud == BAUD_57600)
{
TH1 = 0x00;
TL1 = 0xfa;
}
if(Baud == BAUD_115200)
{
TH1 = 0x00;
TL1 = 0xfd;
}
TR1 = 1; //开启定时器1
result = OK;
break;
default:
result = ERR;
break;
}
//设置中断优先级
if(result == OK)
{
if(Prio == Prio_0)
{
// IP = ; //采用系统默认值
// IPH = ; //采用系统默认值
ES = 1; //开串口中断
EA = 1; //开总的中断控制位
}
if(Prio == Prio_1)
{
IP |= 0x10;
// IPH = ; //采用系统默认值
ES = 1;
EA = 1;
}
if(Prio == Prio_2)
{
// IP = ; //采用默认值
IPH |= 0x10;
ES = 1;
EA = 1;
}
if(Prio == Prio_3)
{
IP |= 0x10;
IPH |= 0x10;
ES = 1;
EA = 1;
}
}
return(result);
}
注意,以上是晶振为11.0592MHZ的参数配置。
你在下载程序的时候要注意:下载软件上要配置成外部晶振,且下一栏选择LOW
否则你的通信是不成功的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
单片机与PC通信通常用于工业控制领域。
工控指的是工业自动化控制,主要利用电子电气、机械、软件组合实现。即是工业控制(Factory control),或者是工厂自动化控制(Factory Automation control)。主要是指使用计算机技术,微电子技术,电气手段,使工厂的生产和制造过程更加自动化、效率化、精确化,并具有可控性及可视性。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
买一条窜口线吧(电脑没接口的话找个会电脑的帮你接跟出来就好,一根窜口线好像就几块吧,比USB便宜多了),我是用STC_ISP_V480把写好的程序写进单片机,至于通信,不通的话你程序写了有什么用,放不进芯片
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询