#include<reg52.h>
unsigned char a,k;
void init()
{
TMOD=0x20; //设定定时器1的工作方式为方式2
TH1=0xfd; //T1定时器装初值
TL1=0xfd; //T1定时器装初值
TR1=1; //打开定时器1
REN=1; //允许串行接收
SM0=0; //选择串口工作方式为方式1
SM1=1;
EA=1; //开总中断
ES=1; //开串口中断;
RI=0;
k=1;
}
void main()
{
init();
while(1);
}
void ser() interrupt 4
{
RI=0;
P0=0x01;
switch(k)
{
case 1:
{
k++;
P0=0xaa;//P0口 的灯就会隔一个亮一个
return ;
}
case 2:
{
k++;
P1=0xaa;
return ;
}
case 3:
{
P0=0xaa;
k=1;
}
}
}
上电后P0口的灯就会亮。
时间短能进入串口中断吗? 串口中断只有串口接收到数据才可以进入的 TH1 TL1都是对波特率的设置
追答请清楚buff
串口是可以正常发送和接收的,数据也正确。关键是现在我不明白的就是:如果我让case 1里面的P0=0x01;case 2的P0=0x02;case 3的P0=0x03;我上电后P0会亮0x01,接收到第一个数据的时候就会进入case 2,第二个数据就会进入case 3,这样循环下去。
谢谢啊
我就是想接受一次数据就跳出中断服务程序 我把REN = 1;放在SM1 =1;后面把问题解决了 把SM0 = 0;去掉不行。 谢谢你啊
本回答被提问者采纳