?? 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 + -