计算机与单片机的通信
想利用电脑USB口与单片机进行通信,并控制单片机。需要用c++对电脑编程,用汇编对单片机编程。谁有好的意见,或能提供源代码,或相关经验,谢谢!...
想利用电脑USB口与单片机进行通信,并控制单片机。
需要用c++对电脑编程,用汇编对单片机编程。谁有好的意见,或能提供源代码,或相关经验,谢谢! 展开
需要用c++对电脑编程,用汇编对单片机编程。谁有好的意见,或能提供源代码,或相关经验,谢谢! 展开
展开全部
汇编一定要学好,但对单片机编程不要用汇编。
这样你很难找到错误。不超过100行的可以试试。
c语言是你最常用的编程工具。所有的芯片都会提供给你一个c语言编译器。所以c是最常用的。
c学好了可以试一试学习plc,它也是常用的。
下面是跑马灯的源代码:
#include<reg52.h>
sbit ALE = P2^6;
sbit EOC = P2^5;
sbit OE = P2^4;
sbit RED = P3^6; //正弦波时红灯亮
sbit GREEN=P3^7; //方波时绿灯亮
sbit key =P2^3;
sbit d0 = P2^0; //显示138选通位
sbit d1 = P2^1;
sbit d2 = P2^2;
sbit sw = P2^7; //脉冲判断位,是0则为脉冲
#define uchar unsigned char
#define ulong unsigned long int
#define uint unsigned int
bit dipin= 0x00; //低频判断位,为1时为低频;
bit zhan = 0x01; //测量占空比标致位,为1时测量脉宽;
uchar r0;
uchar r1;
uchar r2;
uchar r3;
uchar r4;
uchar r5;
uchar r6;
uchar r7;
uchar display_num[8];
uchar maikuan[8];
ulong counter=0;
uchar count=0;
float zhouqi,zhankong,zhankong_num;
ulong counter_num;
uchar th1,tl1;
char disnumb[10]={0xFC,0x60,0xDA,0xF2,0x66,0xB6,0xBE,0xE0,0xFE,0xF6};
//////////
//================函数申明=============================================
void initial(void);
void display(void);
void fre(void);
void tiemr0(void);
void timer1(void);
void zhankongbi(void);
uchar i,j,m,n,l;
uchar k;
void toint(void);
///==============主函数====================================
void main()
{
initial();
RED = 0;
GREEN=0;
while(1)
{ while(TR1==0)
fre();
display();
}
}
//================频率测量=========================================
void fre()
{ TR0=1;
TR1=1;
}
//================初始化===================================================
void initial()
{ TMOD=0x16;
TH0=0x00;TL0=0x00; //T0用于计数,工作在方式2
th1=0xd8;tl1=0xef;
TH1=th1;TL1=tl1; //T1用于定时一秒,工作在方式1
ET0=1;ET1=1;
ES=1;
EA=1;
}
//================数码管显示程序===========================================
void display()
{ j=0x08;
n=0;
for(i=0;i<8;i++)
{ j=j-1;
ACC=j;
P2=ACC;
m=display_num[n];
SBUF=disnumb[m];
while(!TI);
TI=0;
k=250;
while(k)
k--;
n=n+1;
P2=0x07;
}
}
//==================中断子程序===================================
void tiemr0() interrupt 1 using 0
{
counter+=1;
}
void toint() interrupt 4
{ while(0);
}
void timer1() interrupt 3 using 0
{
TH1=0xd8;TL1=0xf6;
count=count+1;
if(count==100)
{ TR1=0;
TR0=0;
counter_num=(counter*256)+TL0;
//zhouqi=1.0/(float)counter_num;
display_num[3]=counter_num/10000;
display_num[4]=counter_num%10000/1000;
display_num[5]=counter_num%1000/100;
display_num[6]=counter_num%100/10;
display_num[7]=counter_num%10;
count=0;
counter_num=0;
counter=0;
TH1=0xd8;TL1=0xef;
TH0=0x00;TL0=0x00;
}
}
这样你很难找到错误。不超过100行的可以试试。
c语言是你最常用的编程工具。所有的芯片都会提供给你一个c语言编译器。所以c是最常用的。
c学好了可以试一试学习plc,它也是常用的。
下面是跑马灯的源代码:
#include<reg52.h>
sbit ALE = P2^6;
sbit EOC = P2^5;
sbit OE = P2^4;
sbit RED = P3^6; //正弦波时红灯亮
sbit GREEN=P3^7; //方波时绿灯亮
sbit key =P2^3;
sbit d0 = P2^0; //显示138选通位
sbit d1 = P2^1;
sbit d2 = P2^2;
sbit sw = P2^7; //脉冲判断位,是0则为脉冲
#define uchar unsigned char
#define ulong unsigned long int
#define uint unsigned int
bit dipin= 0x00; //低频判断位,为1时为低频;
bit zhan = 0x01; //测量占空比标致位,为1时测量脉宽;
uchar r0;
uchar r1;
uchar r2;
uchar r3;
uchar r4;
uchar r5;
uchar r6;
uchar r7;
uchar display_num[8];
uchar maikuan[8];
ulong counter=0;
uchar count=0;
float zhouqi,zhankong,zhankong_num;
ulong counter_num;
uchar th1,tl1;
char disnumb[10]={0xFC,0x60,0xDA,0xF2,0x66,0xB6,0xBE,0xE0,0xFE,0xF6};
//////////
//================函数申明=============================================
void initial(void);
void display(void);
void fre(void);
void tiemr0(void);
void timer1(void);
void zhankongbi(void);
uchar i,j,m,n,l;
uchar k;
void toint(void);
///==============主函数====================================
void main()
{
initial();
RED = 0;
GREEN=0;
while(1)
{ while(TR1==0)
fre();
display();
}
}
//================频率测量=========================================
void fre()
{ TR0=1;
TR1=1;
}
//================初始化===================================================
void initial()
{ TMOD=0x16;
TH0=0x00;TL0=0x00; //T0用于计数,工作在方式2
th1=0xd8;tl1=0xef;
TH1=th1;TL1=tl1; //T1用于定时一秒,工作在方式1
ET0=1;ET1=1;
ES=1;
EA=1;
}
//================数码管显示程序===========================================
void display()
{ j=0x08;
n=0;
for(i=0;i<8;i++)
{ j=j-1;
ACC=j;
P2=ACC;
m=display_num[n];
SBUF=disnumb[m];
while(!TI);
TI=0;
k=250;
while(k)
k--;
n=n+1;
P2=0x07;
}
}
//==================中断子程序===================================
void tiemr0() interrupt 1 using 0
{
counter+=1;
}
void toint() interrupt 4
{ while(0);
}
void timer1() interrupt 3 using 0
{
TH1=0xd8;TL1=0xf6;
count=count+1;
if(count==100)
{ TR1=0;
TR0=0;
counter_num=(counter*256)+TL0;
//zhouqi=1.0/(float)counter_num;
display_num[3]=counter_num/10000;
display_num[4]=counter_num%10000/1000;
display_num[5]=counter_num%1000/100;
display_num[6]=counter_num%100/10;
display_num[7]=counter_num%10;
count=0;
counter_num=0;
counter=0;
TH1=0xd8;TL1=0xef;
TH0=0x00;TL0=0x00;
}
}
展开全部
找一些关于CH341的资料基本就可以解决此问题了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
一般的单片机不可能用USB与电脑通讯的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
那你要是真想实现单片机和PC机通讯的话那去买一根USB转串口线不就行了啊,干嘛这么费事啊,
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询