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