本文目录一览

1,单片机在什么情况下可以引起串口中断

串口在单片机中是个独立于CPU的设备,它的工作速度低于CPU;当它发送完毕一帧、或者收齐一帧数据的时候,它将向CPU提出中断申请。如果CPU已经开放了串口的中断,那么就会......。

单片机在什么情况下可以引起串口中断

2,关于单片机串口中断问题

当然会执行,当有输入传入时就会进入中断,当然如果有数据发送,发送完毕也会进入中断。不会永远停留在中断函数中,你里面没有死循环语句。
#include void InitUART(void) { TMOD = 0x20; SCON = 0x50; TH1 = 0xFD; TL1 = TH1; PCON = 0x00; EA = 1; ES = 1; TR1 = 1; } void SendOneByte(unsigned char c) { SBUF = c; while(!TI); TI = 0; } void main(void) { InitUART(); } void UARTInterrupt(void) interrupt 4 { if(RI) { RI = 0; //add your code here! } else TI = 0; }直接贴代码了 RI TI是串口收发的标致
1,只要,ri和ti中有一个为1就会马上进入中断服务子程序。2,开了中断,不会先进入if(ri)的。3,不会在delay停留。会再次从while(1)开始。4,先串口初始化,进入动态扫描和判断ri(也就是while(1)中。如果ri为1,则向外发送receivingdata。发送完后就再打开中断。在中断服务程序中,先取出数据,并关中断。5,sbuf是同一地址。根据ri和ti可以判断是发送还是接收。大概就是这样了。。

关于单片机串口中断问题

3,上位机一直在向单片机发送数据串口中断怎么处理才能不影响其他功

由于你说的不详细,也不知道你晶振是多少,单片机是什么型号,波特率是多少。也才不清楚你单片机串口的数据是否是一直有用的。我就大概说一下,你可以参考:第一:如果串口的数据是在你需要的时候才有用,这样你可以在需要的地方打开串口中断,在中断中判断接收的是不是所用串口数据的最后一个字节,如果是那么就关闭中断,如果不是那么就就会继续接收。这样会提高串口和单片机的工作效率。第二:如果串口数据是必须接收的,那么1楼和2楼所说的就不可以了,其实正常的处理中断就可以了,只要注意中断的优先级就好。串口处理占用的时间其实不是你想的那么多,我不防给你算一下:假设波特率是9600B/S,晶振8M,至于单片机什么类型就不去假设了,毕竟太多了。串口数据8B一个字节,那么9600的波特率1S传播的次数也就是9600B/S/8B每次=1200次每秒,这个能理解吧。那么中断的时间间隔也就是1S/1200次每秒=0.83ms。再看单片机的处理速度,8M晶振(不算大吧),运行每条指令的时间基本上是1S/8M=0.125uS,(就算是51单片机,处理周期是晶振周期的12倍,那每条指令的时间周期也不过是1点几微秒),通过数据你看,一次中断单片机能处理上千条指令,所以不会出现你想的它只是在接收数据,其他什么也许不干的情况。你所要做的就是如果有其他中断,处理好中断的优先级,哪些中断重要,需要优先处理之类的事情即可。你不会存在误区吧,认为一直有数据,就一直在中断中吧,它接收是一个字节一个字节的。一个字节一中断。楼上说的定时器你还是不要考虑了,需要多少次数不定,处理定时器中断后还要在处理串口,耽误的时间会更多。而且可靠性不高,串口一直传输数据的项目我做过,正常处理就不会出问题

上位机一直在向单片机发送数据串口中断怎么处理才能不影响其他功

4,什么引起串口中断

流程是: (主程序中)发送数据--等待中断--发送成功产生中断--进入中断清除TI,再次发送--中断返回---等待中断---发送成功产生中断--进入中断清除TI,再次发送。。。。 循环而已需要注意的是:如果你用串行口工作方式1或者3,那么定时器1就被作为波特率发生器,是不能开定时器1的中断的。定时器0不受影响,可以用。如果你选的是方式2,则两个定时器都可以用,也可以组合使用,产生较长时间定时。综合来说就是中断可开可闭,也可以同时用两个甚至多个,但这样容易引起数据发不到就被另一个中断打断,最好根据实际情况选择其中一种关于计数结束你的计数结束表述不明确啊,是计数器溢出了计数结束呢,还是说后面没有脉冲了(即外部脉冲结束了)计数结束呢?如果是前者,很简单只要在计数器的中断处理程序中完成你所需的操作,如果是后者,就没那么简单了,因为单片机不可能知道什么时候外部脉冲什么时候结束,除非用外部中断的方式通知单片机,你可以在外部中断处理程序中,完成取数,给上位机通过串口送数,这时候你必须做出选择 1,如果某次计数结束,你上一次经过串口发送的数据,还没发送成功,你放弃本次发送 2,如果某次计数结束,你上一次经过串口发送的数据,还没发送成功,你继续发送,覆盖原来数据。其实你应该把你的东西详细说出来,你只说一个方面,可能你的想法不太对路,我还要按照你的不太对路的想法给你解释,这样不太方便。 如果你想计数的话,一般的方法是,给一个定时器设定一个时间,另一个做计数器,定时器时间一到,就在段中取数,给上位机送数,定时器可工作在方式2,循环送数。不知道你是不是想做这个。如果你是发送数据,你不应该把注意力放在串口中断上,除非你过分追求发送的成功率,一般情况下都能发送成功。你说的“用串口中断传数给上位机”,这句话本身就有问题,TI是在发送完毕后产生中断,你甚至可以不理它,用定时器中断的处理程序来完成取数,送数。所以说你必须明确到底是发送完毕后立即再次发送(利用TI),还是每次你所谓的“计数结束”后发送数据(此时劝你不要在意TI)。你问的最后一句,我不太清楚,不敢贸然回答。

文章TAG:串口中断  单片机在什么情况下可以引起串口中断  
下一篇