STC12 想让外部中断 接受高电平后 计算心跳时间
#include<h.h>
#define S2RI 0x01
#define S2TI 0x02
unsigned char flag1,flag2,temp1,temp2;
unsigned int key1,key2,keynum,num;
sbit GO_OUT=P3^2;
void delay(unsigned long time)
{
unsigned long i,j;
for(i=0;i<time;i++)
for(j=0;j<19;j++);
}
void InitUART(void)
{
SCON=0X50; //设置为工作方式1
SM0 = 0;
SM1 = 1; //方式1
REN = 1; //串口允许接收
TMOD=0X20; //设置计数器工作方式2
PCON=0X80; //
TH1=0XF3; //计数器初始值设置,注意波特率是4800的
TL1=0XF3;
ES=1; //打开接收中断
EA=1; //打开总中断
TMOD=0x00; //设置定时器0为工作方式0
TH0=(8192-5000)/32; //装入初值,怎么计算,下面分析
TL0=(8192-5000)%32;
EA=1; //开总中断
ET0=1; //开定时器中断
TR0=1;
}
void main(void)
{
InitUART();
key2=0;
GO_OUT=0;
while(1)
{
if(GO_OUT == 1)
{
key1=num;
keynum =key1-key2;
key2=key1;
SBUF=keynum;//将接收到的数据放入到发送寄存器
while(!TI); //等待发送数据完成
TI=0; //清除发送完成标志位
}
}
}
void T0_time() interrupt 1
{
TH0=(8192-5000)/32; //重装初值,如果不重装,中断只触发一次
TL0=(8192-5000)%32;
num++;
}
void Usart() interrupt 4
{
keynum=SBUF;//出去接收到的数据
RI = 0;//清除接收中断标志位、
}
#include<h.h>
#define S2RI 0x01
#define S2TI 0x02
unsigned char flag1,flag2,temp1,temp2;
unsigned int key1,key2,keynum,num;
sbit GO_OUT=P3^2;
void delay(unsigned long time)
{
unsigned long i,j;
for(i=0;i<time;i++)
for(j=0;j<19;j++);
}
void InitUART(void)
{
SCON=0X50; //设置为工作方式1
SM0 = 0;
SM1 = 1; //方式1
REN = 1; //串口允许接收
TMOD=0X20; //设置计数器工作方式2
PCON=0X80; //
TH1=0XF3; //计数器初始值设置,注意波特率是4800的
TL1=0XF3;
ES=1; //打开接收中断
EA=1; //打开总中断
TMOD=0x00; //设置定时器0为工作方式0
TH0=(8192-5000)/32; //装入初值,怎么计算,下面分析
TL0=(8192-5000)%32;
EA=1; //开总中断
ET0=1; //开定时器中断
TR0=1;
}
void main(void)
{
InitUART();
key2=0;
GO_OUT=0;
while(1)
{
if(GO_OUT == 1)
{
key1=num;
keynum =key1-key2;
key2=key1;
SBUF=keynum;//将接收到的数据放入到发送寄存器
while(!TI); //等待发送数据完成
TI=0; //清除发送完成标志位
}
}
}
void T0_time() interrupt 1
{
TH0=(8192-5000)/32; //重装初值,如果不重装,中断只触发一次
TL0=(8192-5000)%32;
num++;
}
void Usart() interrupt 4
{
keynum=SBUF;//出去接收到的数据
RI = 0;//清除接收中断标志位、
}


