rprt.net
当前位置:首页 >> 求单片机串口中断接收程序,怎样一次性接受多个字符? >>

求单片机串口中断接收程序,怎样一次性接受多个字符?

定义一个10个字节的数据缓冲区,然后发送的时候循环发送10次就全部发送出去了.

每接收一个字符,单片机就会uart中断,在中断过程中,你把读取的那个sbuf字符,全部赋值给rxddata数组,比如你读取到的字符是0x01,那rxddata[0]-rxddata[3]均为0x01.由于你发送的是2835,当接收到2时,rxddata[0]-rxddata[3]均为2,当接

对于51而言,每帧产生一次中断.接收4个字节是分4次中断接收完成的.51的UART模块从串行移位寄存器接收完成后是直接放入接收缓冲的,而且接收缓冲只有一个单元.

void main() { scon = 0x50; tmod = 0x20; //设置定时器1为工作方式2 th1 = 0xf4; tl1 = 0xf4; tr1 = 1; ea = 1; es = 1; while(1) { if(flag) { flag = 0; //不关闭串口中断,要让它继续接收 num1++; //超过255,自动就是0 sbuf = num1; while(!ti); ti = 0; sbuf = a; while(!ti); ti = 0; } } } void ser() interrupt 4 { if (ri) { ri = 0; a = sbuf; flag = 1; } }

你发送时,用循环控制,发几个字节,循环几次.连续发送多个数据,都是小意思,也是最基本的了.接收更好办了,用中断接收,中断一次接收一次,你就保存一次呗,这有什么难的.

ORG 00H AJMP MAIN ORG 23H AJMP URT ;串口中断 ORG 30H MAIN: MOV SP,#60H MOV R0,#50H MOV TMOD,#20H ; T1工作方式2 SETB EA ;开总中断 ACALL URTINIT ;串口初始化 AJMP $ ;等待串口中断 URT: ;串口中断每次只

快下班了,给你一个思维吧声明一个数组来缓存数据,声明一个变量来顺序接收,在声明一个定时器中断变量来判断一帧数据是否接收完成.unsigned char ucUartRecv_Arr[256];unsigned char ucUartRecv_Cnt = 0; //顺序接收数据unsigned char

收/发一个数据会了,那收/多个的方法也相同.接收最好用中断方式,不影响其它程序执行.发送时,采用查询方式比较方便好写.发送多个,可用for循环控制,循环体内就是发送一个数据的程序,只是循环发送了.在循环发送前,把串口中断关了,ES=0;发送结束再打开中断,ES=1;

希望对你有帮助!voidsys_init(void)//UARTTIMER0初始化{TH0=0xB8;TL0=0x00;//20ms的时钟基准//串口中断TI=0;RI=0;SCON=0x50;//选用方式1TMOD=0x20;TMOD=(TMOD&0xf0)|1;//MODE1TH1=0xfd;//波特率为9600TL1=0xfd;PCON=0x00;

我还是说下我的想法吧计设步骤:1串口初始化.设定一个计数单元,并清02等待,接收数据.3接收到数据,清接收RI,计数单元加1,将取得数据存到,60H+计数单元的值,判断计数是否到9(也就是收到第10个).如果收完10个数,关串口,中断反回,如果未到,则中断返回.大概就是这样

rtmj.net | hbqpy.net | dbpj.net | eonnetwork.net | nnpc.net | 网站首页 | 网站地图
All rights reserved Powered by www.rprt.net
copyright ©right 2010-2021。
内容来自网络,如有侵犯请联系客服。zhit325@qq.com