?? wx.c
字號:
#include <reg52.h>
#include <absacc.h>
#include <stdio.h>
#define uchar unsigned char
#define uint unsigned int
#define COMI XBYTE[0x3100]
#define C0I XBYTE[0x0100]
#define C1I XBYTE[0x1100]
#define C2I XBYTE[0x2100]
#define COMII XBYTE[0x3300]
#define C0II XBYTE[0x0300]
#define C1II XBYTE[0x1300]
#define C2II XBYTE[0x2300]
#define adch0 XBYTE[0x0200]
sbit P1_6=P1^6;
sbit P1_7=P1^7;
sbit P1_2=P1^2;
sbit EXF2=T2CON^6;
uint i;
uint BUF810,BUF811,BUF812;
uchar h,l;
uchar sf1,sf2,sf3,sf4,send;
uint yawh,yawl,pitchh,pitchl,rollh,rolll;
int yaw,pitch,roll,yawold,pitchold,rollold,delta;
uint ch0datal,ch0datah,ch0data,sendflag;
/*主程序, 定義中斷源,并對定時器賦初值,以及向8253寄存器寫控制字。*/
void main(void)
{
/*以下是設(shè)置中斷和定時器*/
EA=1; PT0=1;
ET0=1;
IT0=1;IT1=1;
EX0=1;EX1=1;ET2=1;
T2CON=0x08;
TMOD=0x21;
/*定時器0為產(chǎn)生18ms的中斷,定時器1為9600bit/s 的波特率發(fā)生器*/
TH0=0xB9;
TL0=0xB0;
TL1=0xfd;
TH1=0xfd;
SCON=0x50;
PCON=0x80;
/*向8253中寫入控制字,門控的方式1計數(shù)方式*/
COMI=0x30;
C0I=0;C0I=0;
COMI=0x70;
C1I=0;C1I=0;
COMI=0xB0;
C2I=0;C2I=0;
/*開定時器*/
TR1=1;
TR0=1;
TI=1;
sendflag=1;
while(1){}
}
/*中斷0的服務子程序,單片機讀入8253計數(shù)器0中的計數(shù)值*/
void intsvrex0(void) interrupt 0
{
/*中斷0到來,單片機讀入8253計數(shù)器0中的計數(shù)值*/
COMI=0x00;
l=C0I;
h=C0I;
BUF810=-(h*256+l);
COMI=0x30;
C0I=0;C0I=0;
}
/*中斷1的服務子程序,單片機讀入8253計數(shù)器1中的計數(shù)值。*/
void intsvrex1(void) interrupt 2
{
/*中斷1到來,單片機讀入8253計數(shù)器1中的計數(shù)值*/
COMI=0x40;
l=C1I;
h=C1I;
BUF811=-(h*256+l);
COMI=0x70;
C1I=0;C1I=0;
}
/*中斷3的服務子程序,單片機讀入8253計數(shù)器2中的計數(shù)值。*/
void intsvr2(void) interrupt 5
{
/*中斷3到來,單片機讀入8253計數(shù)器2中的計數(shù)值*/
EXF2=0;
COMI=0x80;
l=C2I;
h=C2I;
BUF812=-(h*256+l);
COMI=0xB0;
C2I=0;C2I=0;
}
/*定時器0的中斷服務程序,產(chǎn)生18ms的計數(shù)中斷,讀取姿態(tài)數(shù)據(jù),并向串口發(fā)送姿態(tài)數(shù)據(jù)。*/
void intsvr1(void) interrupt 1
{
/*讀取姿態(tài)數(shù)據(jù)*/
yawh=XBYTE[0x6000];
yawl=XBYTE[0x1000];
yaw=yawh*256+yawl;
pitchh=XBYTE[0x2000];
pitchl=XBYTE[0x3000];
pitch=pitchh*256+pitchl;
rollh=XBYTE[0x4000];
rolll=XBYTE[0x5000];
roll=rollh*256+rolll;
/*重新裝入定時器0的初值;*/
TH0=0xB9;
TL0=0xB0;
switch(sendflag)
{
/*向串口發(fā)送8253的計數(shù)值;*/
case 1:
{
printf("$%d,%d,%d,%d*",BUF810,BUF811,BUF812);
sendflag=0;
}break;
/*向串口發(fā)送姿態(tài)反饋的數(shù)值;*/
case 0:
{
printf("$%d,%d,%d,%d*",yaw,pitch,roll);
sendflag=1;
}break;
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -