单片机串口发送数组

分类:函数知识网浏览量:1078发布于:2021-06-01 02:49:35

void main(void) { unsigned char nn; UartInit(); SendStr("How are you!\r\n"); while(1) //发送 delayms(10); //10ms发送一次数据 P1=0XFF; delayms(10); } nn=0; while(nn<16)

单片机串口一次只能收1个字节,如果单片机串口通信用中断处理,那么:电脑串口向单片机发送数组,数组是9字节,单片机将产生9个串口中断电脑串口向单片机发送数据是连续发送的,中途是不会停止的,不干单片机处不处理数据只要你的程序写得合理,就不存在你说的情况,因为中断是实时性的

发送的时候循环发送:中断方式:recive() { for(i=0;i<10;i++) { while(!RI); a[i]=SBUF; //a[]为数组,假设接收10个 RI=0; } } 接收完成后马上转发送 send() { for(i=0;i<10;i++) { TI=0; SBUF=a[i]; while(!TI); TI=0; } } 还有就是要选着串口方式及波特率.

接收的数串口,接收后可以存储到数组里面.比如:void uart() interrupt 4 { static i; if(RI) { RI=0; buf[i]=SBUF; } }

#include<stdio.h>#include<reg52.h>#define uchar unsigned char#define uint //发送标志 } 这只是一个简单的串口发送字符串程序,通过串口助手发送任意数据,单片机接

你用一个数组变量(也就是开辟一个接收缓冲区)就OK了如:#include#define uchar unsigned char uchar buf[16],num; void ser_isr() interrupt 4 { if(RI) { RI=0; buf[num]=SBUF; num++; num&=0x0f; } } main() { TMOD=0x20; SCON=0x50; TH1=TL1=0xfd; TR1=1; ES=1; EA=1; while(1); }

1、在temp[num]=SBUF增加一个点灯的代码 ,这样可以判定是串口是否收到数据;2、串口中断里面要作数组越界判断,具体是在num++;之后判定 这个num是否已经超过了你定义的temp[]这个数组的界限;3、由于在板子上电时,串口上可能有浪涌数据(这个数据是一个随机的值),所以可能导致你串口收到的数据里面0x31数据并不是在temp[1]中,最好让串口收到数据后立即也将数据发回到电脑4、检查你串口初始化时波特率是否设置正确,串口收发端的波特率是否是匹配的.

avr单片机的缓冲区串口收发,别的单片机 你改一下寄存器就行//芯片:mega16#include <ioavr.h>#define F 8000000#define BAUD 9600#define u8 unsigned char#define u

第一,你要解决数据是否同步的问题.电脑的频率比单片机的时钟频率快很多,所以串行通信选择同步传输.当单片机发送完数组的第一个数据,上位机接收到这个数据后

两边的速率要一致.上位机,随便用一个串口调试工具,都可以接收了.