导航:首页 > 操作系统 > 单片机接收数据

单片机接收数据

发布时间:2023-07-23 06:56:18

‘壹’ 单片机怎么用C语言处理接收的数据

main()
{
//初始化串口

for(i=0;i<4;i++)
{ while(!RI);
RI = 0;
_nop_();
led[i]=SBUF;
}

P0=led[0];
P1=led[1];
P2=led[2];
P3=led[3];
while(1);
}

我不知道你问的是不是接受机的代码,这个用的是查询实现的。
如果你还需要干别的,换中断实现比较合适。

‘贰’ 单片机接收数据

你可以在你的电脑和单品机通信的时候,自己定义一个通信协议——也就是定义一种通信格式:以什么字符作为一个数据包的开始如(0x66 0xab)代表数据帧的开头,之后的一个自己单表数据帧的总长度(如果所有的数据包是定长的可以不需要该字段),之后一个自己定义为命令的类型(如:0x01 表示电动机的转动方向;0x02 代表转动圈数等),之后跟上实际要发送给单品机的数据,如正传还是反转,转动的圈数是多少等。如果不放心你可以在最后加上数据帧的校验和,用来保证数据再传输过程中没有出错。

‘叁’ 51单片机通过串口实现数据的发送与接收程序

串口收发,要有通信协议。也就是什么时候开始接收,接收到指令后,转发什么数据。这个要知道,才可以写。而且使用不同的51单片机,其内部寄存器配置是不同的。
一般来说,过程如下:
1,配置串口参数、波特率等,开启串口中断;
void Init_UART()
{

}
2,中断函数里写中断响应函数,根据接收的指令或者数据,执行相应的动作;
程序一般为:
void UART_ISR() interrupt x using y
{
;串口中断处理函数
}
x - 单片机的C51中断号
y - 指定使用的当前工作寄存器组号(0-3 PSW中的RS0,RS1组合)

3,主程序
int main(void)
{
Init_UART();
while(1)
{
;//数据发送函数
}
}

‘肆’ 如何用单片机接收ADC0809的数据

先看ADC0809的资料:
ADC0809芯片有28条引脚,采用双列直插式封装,下面说明各引脚功能。 IN0~IN7:8路模拟量输入端。
2-1~2-8:8位数字量输出端。
ADDA、ADDB、ADDC:3位地址输入线,用于选通8路模拟输入中的一姿慧孙路 ALE:地址锁存允许信号,输入,高电平有效。
START: A/D转换启动脉冲输入端,输入一个正脉冲(至少100ns宽)使其启动(脉冲上升碧败沿使0809复位,下降沿启动A/D转换)。
EOC: A/D转换结束信号,输出,当A/D转换结束时,此端输出一个高电平(转换期间一直为低电平)。
OE:数据输出允许信号,输入,高电平有效。当A/D转换结束时,此端输入一个高电平,才能打开输出三态门,输出数字量。
CLK:时钟脉冲输入端。要求时钟频率不高于640KHZ。
REF(+)、REF(-):基准电压。
Vcc:电源,单一+5V。
GND:地。

首先输入3位地址,并使ALE=1,将地址存入地址锁存器中。选通8路模拟输入之一到比较器。START上升沿将逐次逼近寄存器复位。下降沿启动 A/D转换,之后EOC输出信号变低,指示转换正在进行。直到A/D转换完成,EOC变为高电平,指示A/D转换结束,结果数据已存入锁存器,这个信号可用作中断申请。当OE输入高电平 时,输出三态门打开,转换结果的数字量输出到数据总线上。

看了资料就知道咋个接了。接的方法有多种,我举个例子:
P0接2-1~2-8:P1的0 1 2三个脚接ADDA、ADDB、ADDC:
ALE接单片机ALE;START接迹链P2^0;EOC接P2^1;OE接P2^3。CLK接定时器输出。

P1的低三位选择通道,然后P2^0置高,P2^1、P2^2置低。查询等待P2^2变高。从P0读转换后的数据。

‘伍’ 51单片机接受数据怎么接受的

串口通信如例程

#include <reg52.h>

#define uchar unsigned char

#include <stdio.h>

unsigned char* c;

sbit k0=P3^2;

sbit k1=P3^3;

sbit k2=P3^4;

sbit k3=P3^5;

sbit k4=P3^7;

sbit led1=P1^7;

uchar k;

bit y0,y1,y2,y3,y4,y5;

bit t,s,ld;

uchar table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d};

void SendOneChar(char c) //发送字节到PC

{

TI=0;

SBUF = c;

while(!TI);

TI=0;

}

void SendString(char *st) //发送字符串到PC

{

while(*st)

{

SendOneChar(*st++);

}

}

void main()

{

SCON = 0x50; //SCON: mode 1, 8-bit UART, enable rcvr

TMOD = 0x20; //TMOD: timer 1, mode 2, 8-bit reload

PCON = 0x80; // 数据位8、停止位1。效验位无 (11.0592M)

TH1 = 0xF4; //TH1: reload value for [email protected]

TR1 = 1; //启动定时器1

ES = 1; //允许串口中断位

EA = 1; //允许总中断位

c=0;

s=1;

k=0;

P1 =~table[k];

while(1)

{

if(k0==0 && y0==0)

{

y0=1;

c = "as";

SendString(c); //发送字符串

}

if(k0==1 ) { y0=0; }

if(k1==0 && y1==0)

{

y1=1;

c = "bs";

SendString(c); //发送字符串

}

if(k1==1 ) { y1=0; }

if(k2==0 && y2==0)

{

y2=1;

c = "ds";

SendString(c); //发送字符串

}

if(k2==1 ) { y2=0; }

if(k3==0 && y3==0)

{

y3=1;

c = "es";

SendString(c); //发送字符串

}

if(k3==1 ) { y3=0; }

if(k4==0 && y4==0)

{

y4=1;

c = "fs";

SendString(c); //发送字符串

}

if(k4==1 ) { y4=0; }

// for(i = 0; i < 4000; i++); //延迟一小段时间

}

}

void chuankou(void) interrupt 4

{

if(RI==1)

{

RI = 0;

if(t==1)

{

if(SBUF=='z') { k++;ld=~ld; }

s=1; t=0;

if(k==10) { k=0;}

P1 =~table[k];

led1=ld;

}

if(SBUF=='a' && s==1) { t=1;s=0;}

}

}

/////////////

#include <reg51.h> // 接收 试试

#define uchar unsigned char

unsigned char* c;

sbit led1=P3^2; // 接收 az , P.2 输出低电平, P3.3 输出高电平。

sbit led2=P3^3; // 接收 aa , P.2 输出高电平, P3.3 输出低电平。

sbit k0=P3^5;

bit y0,t,s;

uchar k;

uchar table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d};

void SendOneChar(char c) //发送字节到PC

{

TI=0;

SBUF = c;

while(!TI);

TI=0;

}

void SendString(char *st) //发送字符串到PC

{

while(*st)

{

SendOneChar(*st++);

}

}

void main (void)

{

SCON = 0x50; // REN=1允许串行接受状态,串口工作模式1

TMOD = 0x21; // 定时器工作方式2

PCON = 0x80; // 数据位8、停止位1。效验位无 (11.0592M)

TH1 = 0xF4; // TH1 = 0xFD; 波特率 2400

TH0=(65536-54253)/256; // 50 mS

TL0=(65536-54253)%256;

TR1 = 1;

ES = 1; // 开串口中断

EA = 1; // 开总中断

led1=1;led2=0;

// ET0=1;

// TR0=1;

s=1;

k=0;

P1 =~table[k];

while(1)

{

if(k0==0 && y0==0)

{

y0=1;

c = "az";

SendString(c); //发送字符串

}

if(k0==1 ) { y0=0; }

}

}

void chuankou(void) interrupt 4

{

if(RI==1)

{

RI = 0;

if(t==1)

{

if(SBUF=='s') {led1=~led1;led2=~led2; k++; }

//if(SBUF=='s') {led1=1;led2=0; k--; }

s=1; t=0;

if(k==10) { k=0;}

if(k==255) { k=9; }

P1 =~table[k];

}

if(SBUF=='a' && s==1) { t=1;s=0;}

}

}

void T0_time()interrupt 1

{

TH0=(65536-54253)/256; // 50 mS

TL0=(65536-54253)%256;

k++;

if(k==10) // 这里修改时间

{

k=0;

led1=1;

led2=1;

}

}

阅读全文

与单片机接收数据相关的资料

热点内容
阿里云服务器网页怎么找到 浏览:958
数控车床如何进行自动编程 浏览:11
app网课视频怎么拷贝到电脑上 浏览:710
安卓国服光遇小王子季节什么时候结束 浏览:537
恢复的音乐在哪个文件夹 浏览:595
qq传输文件夹压缩包 浏览:911
sha1加密算法java 浏览:232
单片机ds1302程序 浏览:738
杜比压缩开还是关怎样判断 浏览:366
对象类型转换java编译和运行 浏览:284
行政命令是什么 浏览:371
android调用系统邮件 浏览:33
测温软件app是如何实现的 浏览:585
江苏服务器机房按需定制云主机 浏览:639
c程序员笔试 浏览:694
excel怎么引用统一文件夹 浏览:249
怎么把微信抖音加密 浏览:306
android滑动进度条 浏览:836
javagmt转换 浏览:827
linux查看snmp 浏览:26