?? sh306.c
字號:
#include <reg52.h>
#include <absacc.h>
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#define uchar unsigned char
#define uint unsigned int
#define dsyawh XBYTE[0x0600] // 定義雙端口RAM中的存儲單元地址;
#define dsyawl XBYTE[0x0100]
#define dspitchh XBYTE[0x0200]
#define dspitchl XBYTE[0x0300]
#define dsrollh XBYTE[0x0400]
#define dsrolll XBYTE[0x0500]
sbit P1_0=P1^0;
sbit P1_2=P1^2;
uchar idata stringyaw[6];
uchar idata stringpitch[6];
uchar idata stringroll[6];
uint k, i,j;
uint yaw0,yaw0flag;
uint record,number;
uint iyaw, ipitch, iroll;
uint numbercoma;
uint len1,len2,len3;
uint numyaw,numroll,numpitch;
//主函數,初始化串口和變量
main()
{
TMOD=0x20;
TL1=0xfd;
TH1=0xfd;
SCON=0x50;
PCON=0x00;
IE=0x90;
TR1=1;
P1_0=0;
k=2;
dsyawh=0;
dsyawl=0;
dspitchh=0;
dspitchl=0;
dsrollh=0;
dsrolll=0;
yaw0flag=0;
i=0;
P1_2=1;
while(1);
}
// 由于采用的是專用的通信單片機,可以使用中斷方式進行串行通信,提高通信質量。
serial () interrupt 4 using 1
{
RI=0; //軟件清除中斷標志位
//判斷是否收到HPR格式語句的第一個字符"$",其數值為0x24,如果收到,則開始記錄數據,
//并設置記錄標志record=1。*/
if (SBUF==0x24)
{
record=1;
i=0;
iyaw=0; //記錄航向數據字符數量的變量
ipitch=0; //記錄俯仰數據字符數量的變量
iroll=0; //記錄橫滾數據字符數量的變量
numbercoma=0; // 記錄逗號數量的變量
}
if (record==1) // 開始處理HPR中的數據信息
{
//利用HPR數據中的逗號間隔,區分接收到的字符處于何種姿態數據中。
if(SBUF==0x2c) {numbercoma++;}
// 第一個逗號之后的字符屬于航向數據,參見HRP語句
if (numbercoma==1)
{
stringyaw[iyaw]=SBUF; // 將字符放入航向字符串"stringyaw[ ]"中
iyaw++;
}
// 第三個逗號之后的字符屬于俯仰數據
if (numbercoma==3)
{
stringpitch[ipitch]=SBUF; // 將字符放入俯仰字符串"stringpitch[ ]"中
ipitch++;
}
// 第五個逗號之后的字符屬于滾轉數據
if (numbercoma==5)
{
stringroll[iroll]=SBUF; // 將字符放入橫滾字符串"stringroll[ ]"中
iroll++;
}
//判斷是否收到HPR格式語句的字符"*",如果收到,則結束記錄,開始處理。
if (SBUF=='*')
{
stringyaw[iyaw]='\0'; // 給出結束航向數據字符串的結束符
stringpitch[ipitch]='\0';
stringroll[iroll]='\0';
// 開始處理航向數據的相關字符,轉化為數據格式
j=0;
// 將航向字符用sprintf()函數連接成字符串,并舍掉最后一個逗號
len1=sprintf(stringyaw,"%s",stringyaw+1);
//用atoi()函數將字符串轉化為數據格式
if (len1!=0)
{
numyaw=atoi(stringyaw);
}
// 開始處理俯仰數據的相關字符,轉化為數據格式
j=0;
len2=sprintf(stringpitch,"%s",stringpitch+1);
if (len2!=0)
{
numpitch=atoi(stringpitch);
}
// 開始處理滾轉數據的相關字符,轉化為數據格式
j=0;
len3=sprintf(stringroll,"%s",stringroll+1);
if (len3!=0)
{
numroll=atoi(stringroll);
}
// 返回初始值;
numyaw=0;
numroll=0;
numpitch=0;
numbercoma=0;
record=0;
ipitch=0;
iroll=0;
iyaw=0;
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -