📄 timer.c
字号:
#include<reg52.h>
#include <noname1.h>
#include <absacc.h>
#define uchar unsigned char
#define uint unsigned int
#define senddata_shu 20
sbit P3_3=P3^3;
sbit P3_5=P3^5;
sbit P1_2=P1^2;
sbit P1_5=P1^5;
sbit P1_6=P1^6;
sbit P1_7=P1^7;
uchar flag_int1; //外中断输入的标志位
uchar m_flag;
bit bhead=0;
bit send_flag=0;
void int0svr(void) interrupt 0
{
EX0=0; //关外部中断0
m_flag=1;
EX1=1; //开外部中断1
}
/*外中断0的控制T1计数子程序*/
void int1svr(void) interrupt 2
{
if(flag_int1==1)
{
time_sgn[l]=0;
TR0=0;
time_sgn[l]=TL0;
TL0=0;
TR0=1;
m++;
}
else
{
TR0=0;
TH0=0;
TL0=0;
TR0=1; //启动定时器
flag_int1=1;
l=0;
}
}
/*T1计数子程序*/
void timer1(void) interrupt 3
{
TH0=0;
TL0=0;
N=N+1;
}
void send() interrupt 4
{
TI=0;
EX1=0;
if(!bhead)
{
SBUF=0xee;
bhead=1;
}
else
{
if(l<senddata_shu)
SBUF=time_sgn[l];
else
{
SBUF=0xff ;
TI=0;
}
l++;
}
while(!TI);
}
void UART_INT(void)
{
EA=1;
IT0=1; //下降沿触发
IT1=1;
TMOD=0x21;
PCON=0x80; //波特率翻倍
SCON =0x50; //串口为工作1方式,波特率可变,允许串行接受
TH1 = 0xf3; //串口波特率设置,9600
TL1 = 0xf3;
ES = 1; //打开串口中断
ET1 = 0; //关闭计数器1中断
}
void main(void)
{
UART_INT();
P1_7=1;
m_flag=0;
flag_int1=0;
for(l=0;l<senddata_shu;l++)
time_sgn[l]=l;
l=0;
bhead=0;
TR1=1;
TI=1; //开中断,通过串口发送数据去打印
while(l<=senddata_shu); //等待发送数据
TI=0;
ES=0;
TR1=0;
// TH0=0;
// TL0=0;
while(1)
{
EX0=1; //打开外部中断0
m_flag=0;
while(m_flag==0);
l=0;
flag_int1=0;
while( m<senddata_shu);
EA=0; //采集2048个脉冲的频率后退出中断
EX1=0;
l=0;
P1_7=0;
EA=1;
ES=1;
TR1=1;
TI=1; //开中断,通过串口发送数据去打印
while(m<=senddata_shu); //等待发送数据
TI=0;
m=0;
bhead=0;
ES=0;
senddata=0;
TR1=0;
EX0=1;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -