?? sh503.c
字號:
#include <reg52.h>
#include <absacc.h>
#define uchar unsigned char
#define uint unsigned int
/*輸出給舵機的控制信號:周期18ms,脈寬由原始控制信號輸入脈寬和陀螺反饋輸入脈寬計算得到的
方波*/
sbit P1_2=P1^2;
//sbit EXF2=T2CON^6; /*T2外中斷標志位*/
uchar flag_int0; // 外中斷輸入的標志位
uint HELMNUM=0; /*存放輸出給舵機的控制信號的脈寬時間*/
uchar N; // 定時器溢出次數
uchar time_sgn; // 輸入方波的周期變量
uchar T1H,T1L; // 定時器T1的高低位變量
main()
{
/*初始化:打開INT0、INT1和T2,設置T2的優先級為最高*/
// 這是因為T2所記錄的中斷是輸出信號的控制周期,所以其優先有必要設為最高。
EA=1; IT0=1; IT1=1;
EX0=1; EX1=1; ET2=1;
T2CON=0x08; /*設置T2工作方式:允許接收P1.1引腳的下降沿中斷,計數器停止*/
TMOD=0x99; /*設置T0、T1工作方式:門控方式1定時*/
TR0=1; TR1=1;
for (;;);
}
// 外中斷0的控制T1計數子程序
void int0svr(void) interrupt 0 using 1
{
if (flag_int0==1)
{
flag_int0=0;
T1H=TH1;
T1L=TL1;
time_sgn=N*65536+T1H*256*T1L;
TH1=0;
TL1=0;
}
if (flag_int0==0)
{
flag_int0=1;
TH1=0;
TL1=0;
TR1=1;
}
}
// T1計數子程序
void timer1(void) interrupt 3 using 1
{
TH1=0; // 定時器T1的高四位賦值
TL1=0; // 定時器T1的低四位賦值
N=N+1; // 定時器的溢出次數
}
/* 定時計數器2的中斷服務子程序 */
void timer2(void) interrupt 5 using 3
{
// 判斷中斷類型:EXF2=1時為P1.1引腳下降沿觸發的中斷;TF2=1為T2定時時間到觸發的中斷
if (TF2)
{
TF2=0;
TH2=- (time_sgn /4)/256;
TL2=- (time_sgn /4)%256;
T2CON=0x0c;
}
P1_2=!P1_2;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -