📄 main.c.bak
字号:
//说明:
//曲轴脉冲信号进入ECU之前接入延时装置
//中断TX1----曲轴脉冲信号 (输入)
//P1^2----延时输出曲轴脉冲信号 (输出)
//延时时间计算 360 X 角度(inputAngle)/256
//作者:邓天民
//时间:2005/07/26
//补充;程序中有很多可以删除
#include <reg51.h>
#include <stdio.h>
#include <intrins.h>
#include <absacc.h>
#define UINT unsigned int
#define UCHAR unsigned char
sbit RunLed = P1^7; //程序正常标志
sbit halfMinLed = P1^5; //半秒信号
sbit TurnLed = P1^0; //曲轴转动输出信号
volatile UINT base; // 基本定时单元
void Delay(int dtime); // 延时
void dlyus();
//--------------------------------------------------------------------------
// 变量初始化子程序
//--------------------------------------------------------------------------
void init()
{
RunLed = 1;
TurnLed = 1;
}
//--------------------------------------------------------------------------
// 系统初始化,初始化寄存器
//--------------------------------------------------------------------------
void initsys()
{
EA = 1; //全局中断允许
ET0 = 1; //定时器0中断允许
ET1 = 1; //定时器1中断允许
// PT1 = 1; //T1中断优先级最高
TMOD = 0x11; //T0工作方式1,计时1ms
TH0=0xFC;
TL0=0x21;
TR0 = 1; //启动T0;
//外部中断1
IT1=1; //负跳变触发
EX1=1; //外中断1允许
PX1 = 1;
}
//--------------------------------------------------------------------------
// 主程序
//--------------------------------------------------------------------------
void main(void)
{
init(); //变量初始化
initsys(); //系统初始化
while(1){
Delay(500);
}
}
//--------------------------------------------------------------------------
// 中断1子程序//点火信号检测
//--------------------------------------------------------------------------
void intersvr1(void) interrupt 2 using 1
{
//曲轴转动信号处理
TurnLed = 1;
TH1=0xEC;
TL1=0x77;
TR1 = 1; //启动T1;
}
//--------------------------------------------------------------------------
// T1中断子程序
//--------------------------------------------------------------------------
void time1(void) interrupt 3 using 1
{
TurnLed = 0;
TR1 = 0; //停止T1;
}
//--------------------------------------------------------------------------
// T0中断子程序
//--------------------------------------------------------------------------
void time0(void) interrupt 1 using 1
{
TH0=0xFC;
TL0=0x21;
if(++base==1000){ //1秒信号
base = 0;
halfMinLed = !halfMinLed;
RunLed = !RunLed;
}else if(base==500){ //半秒信号
halfMinLed = !halfMinLed;
}
}
//延时dtime 毫秒
void Delay(int dtime)
{
UCHAR i,j;
for(i=0;i<dtime;i++)
{
for(j=0;j<250;j++)
{
dlyus(); // 延时40us
}
}
}
//---------------------------------------------------------------------------
// 延时函数,延时时间为28*4/12=us+调用和返回时间,大约为40us
//---------------------------------------------------------------------------
void dlyus()
{
_nop_();_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -