Ⅰ 51单片机在什么情况下会产生串口中断
首先,你要用软件允许中断,即
C语言中
EA = 1; //允许总中断
ES = 1; //允许串口中断
汇编中可用
SETB EA ;允许总中断
SETB ES ;允许串口中断
当单片机接收到一帧数据后,RI会置1,向CPU申请中断,若之前有中断允许,则产生了中断,进入中断服务程序。当然,单片机发送完一帧数据,TI也会置1,同样会产生中断!
一般我们在发送数据时要关中断,因为一般你不用在发送时不用处理数据;接收数据时要开中断,以便你在中断服务程序中将接收到的数据进行存储并处理。
补充:其实,不管你有没有允许中断,上位机(此时即给单片机发送信息的机器)只要给单片机发送数据,单片机就会自动接收数据,并把它放在数据缓冲器SBUF中,如果你之前有允许串行口中断,RI就会置1,向单片机CPU申请中断,并进入中断服务程序,即你问题中的serial()函数,做完这个函数后就会自动返回断点。如果你没有允许中断,便不会产生串行中断。
其实,你的问题有个错误:别的中断都是某个I/O口电平变化产生。这只是外部中断产生条件,不过,你之前也需要用软件允许外部中断。另外,常见的51系列单片机有5个中断源三种中断5:1、外部中断0和1;2、定时器/计数器溢出中断0和1;3、串行口中断。另外,STC51系列还有定时器/计数器T2中断,A/D转换中断,PWM中断,串行中断2等等。你还有什么不懂的可以自己多翻一翻书,学到后面去了你就明白了。
你的问题中那个serial()函数中 P1=SBUF; 是把接收的数据送到并行P1口,然后那条 RI=0;是不可少的,这是用软件清零RI,准备再次接受一帧数据产生中断,如果你没有这条语句,就会进入死循环,出不来了。
有什么问题还可以Q我(1445090023),希望能给我评个最佳答案。
Ⅱ 51单片机串口中断是怎么触发的
比如51单片机:
根据你设置的串口工作方式,当接收或者发送够相应位的时候,,自动把TI和RI置1,就会进入串行中断,并且TI和RI需要软件清零。
当然,需要你总中断和串口中断打开的情况下。
Ⅲ 51单片机,无法进入串行口中断,求教
利用51单片机的定时器1的溢出率产生波特率,并不需要打开 T1 的中断。 如果打开了,你就应该编写相应的中断程序。 如果,你没有写中断程序,那么,它中断后,自然就会给你添乱。
Ⅳ 51单片机串口通信中断的问题
肯定不会运行while(TI==0);下面的程序的,因为你的中断开着,程序跳到中断服务程序里面了,然后中断处理结束了之后,TI自动清零了,所以一直在while(TI==0);无限循环。
程序里面,既然开通了中断功能,那你就一直使用中断功能,为什么你还要使用查询功能呢?甚至有时把中断给禁止了,这里面容易出现问题哈。
你不要使用查询功能,就一直使用中断,具体程序查看下面:
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
void delay(int z);
char a,flag;
void main()
{
EA=1;
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
ET1=0;
TR1=1;
ES=1;
REN=1;
SM0=0;
SM1=1;
while(1);
}
void ser_interrupt()interrupt 4
{
if(RI==1)
{
RI=0;
a=SBUF; //P1口接的发光二极管,以此查看接收到的数据
P1=a;
SBUF=a;
}
else if(TI==1)TI=0;
}
Ⅳ 51单片机有几个中断源,分别是什么
一共5种中断,优先级自上向下如下:
(1)函数名()interrupt 0 {} //对应外部中断0;
(2)函数名()interrupt 1 {} //对应定时器/计数器0中断;
(3)函数名()interrupt 2 {} //对应外部中断1;
(4)函数名()interrupt 3 {} //对应定时器/计数器1中断;
(5)函数名()interrupt 4 {} //对应串口中断;
51单片机是对所有兼容Intel 8031指令系统的单片机的统称。该系列单片机的始祖是Intel的8004单片机,后来随着Flash rom技术的发展,8004单片机取得了长足的进展,成为应用最广泛的8位单片机之一,其代表型号是ATMEL公司的AT89系列,它广泛应用于工业测控系统之中。
很多公司都有51系列的兼容机型推出,今后很长的一段时间内将占有大量市场。51单片机是基础入门的一个单片机,还是应用最广泛的一种。需要注意的是51系列的单片机一般不具备自编程能力。
(5)51单片机串行中断扩展阅读:
单片机入门:
实际上,其实不需要多少东西,会简单的C语言,知道51单片机的基本结构就可以了。一般的大学毕业生都可以了,自学过这2门课程的高中生也够条件。设备上,一般是建议购买一个仿真器。
例如,的“双功能下载线”就具有良好的稳定性和较快的下载速度,上位机可扩展,可以下载更多的单片机及嵌入式芯片。通过实验,这样才可以进行实际的,全面的学习。日后在工作上,仿真器也大有用处。
还有,一般光有仿真器是不行,还得有一个实际的电路,即学习板,如图,即为,单片机最小系统。
学习板以强大的接口为主,单片机的学习分两方面,一方面是单片机的原理及内部结构,另一方面是单片机的接口技术。这些都是需要平时多积累,多动手,多思考,这样才能学好单片机技术。
参考资料来源:
网络-51单片机
Ⅵ 51单片机串行通信,需要设置串行中断吗
串行发送的时候不用设置中断,而串行接收的时候必须设置中断,否则新来的数据就会把前面的数据从缓冲区里冲掉。如有帮助请采纳,手机则点击右上角的满意,谢谢!!
Ⅶ 51单片机串行中断问题求助
发送时关闭串口中断使能就OK了。
ORG 0000H
LJMP MAIN
ORG 0023H
LJMP SER_ISR
ORG 0030H
MAIN:
MOV TMOD,#20H
MOV SCON,#50H
MOV TH1,#0FDH
MOV TL1,#0FDH
SETB TR1
SETB ES
SETB EA
LOOP:
CLR ES
CLR A
MOV SBUF,A
JNB TI,$
CLR TI
SETB ES
LCALL DELAY
SJMP LOOP
DELAY:
MOV R0,#250
DJNZ R0,$
RET
SER_ISR:
JNB RI,SERN
CLR RI
MOV A,SBUF
SERN:
RETI
END
Ⅷ 51单片机中断系统的定时器中断请求的撤除方式与串行口中断请求撤除的区别
定时器中断请求的撤除方式是中断响应后自动撤除,而串行口中断请求撤除是指令清除。
因串行口是发送和接收共用一个中断,自动清除后就无法判断到底是哪一个原因引起的中断了。
Ⅸ c51单片机中断程序中的interrupt1,2,3是由什么决定的
由中断号决定,一般计数器0是interrupt 0,定时器0是interrupt 1,接下来是计数器1,再是定时器1,再是串口,有些单片机还会有ADC,串口2,PCI等中断,具体看单片机的资料。
Proteus 自从有了单片机也就有了开发系统,随着单片机的发展开发系统也在不断发展。 keil是一种先进的单片机集成开发系统。它代表着汇编语言单片机开发系统的最新发展,首创多项便利技术,将开发的编程/仿真/调试/写入/加密等所有过程一气呵成,中间不须任何编译或汇编。
(9)51单片机串行中断扩展阅读:
功能:
8位CPU·4kbytes程序存储器(ROM) (52为8K)。
128bytes的数据存储器(RAM) (52有256bytes的RAM)。
32条I/O口线·111条指令,大部分为单字节指令。
21个专用寄存器。
2个可编程定时/计数器·5个中断源,2个优先级(52有6个)
一个全双工串行通信口。
外部数据存储器寻址空间为64kB。
Ⅹ 51单片机的串口发送完成中断在哪里关闭
51的串口中断,接收和发送是共用一个中断向量的,没法单独关闭。一般在中断服务函数中检测TI标志并及时清零就可以了。