導航:首頁 > 編程知識 > 飛思卡爾編程出現c和h什麼意思

飛思卡爾編程出現c和h什麼意思

發布時間:2023-05-20 07:42:04

『壹』 飛思卡爾 s12x128編程問題

在大循環之前加上:
EnableInterrupts;
看看能解決嘛

『貳』 飛思卡爾單片機SCI編程求救!!!

void SendMsg(unsigned char msg[])

函數定義的這一行,msg[]的「[]」去掉

這個錯誤我相信是你的筆誤

函數的參團飢弊數不能是數組的,只能是數組肢配的首地址

而且,你這個明顯只是想傳遞數組中的一個元素過去,也就是說,傳遞到SendMsg函數中的,只是一個unsigned char型變數而已塌族,寫個中括弧做什麼

『叄』 我現在遍了一個程序,出現問題了,希望大神可以告訴我為什麼是飛思卡爾XS128的

if(flag==4)
LED=0x07;
else{
delay();
LED=(LED<<1)|1;
if(LED==0xff)
LED=0xfe;
}
存在邏輯錯誤輪老閉,只要flag不為4,均會臘裂執行else,即含兆左移。

『肆』 飛思卡爾單片機中 hidef.h 主要定義了什麼

這個文件主要定義了一些常用宏。
例如 DisableInterrrupts等。
基本上無需修改此文件。

『伍』 使用飛思卡爾單片機編程時頭文件的問題

可以告訴你,幾個抄主要的。

【hidef.h】 中包含了一些,累死硬體介面性的宏的定義,比如,如果你包含了hidef.h後,你就可以直接使用EnableInterrupts,和DisableInterrupts,這兩個宏替換了。很方便不是么,不然,你還需要嵌入匯編,這樣是比較麻煩的。

【mc9dg128.h 】中包含了,針對dg128晶元的所有寄存器的,宏定義。我想這一點你應該比較清楚,就是把搜有寄存器的地址替換成了一個好記的名稱,
例如:把地址0x0000 替換成PTA, 0X0001-PTA_BIT1,這樣你直接用名稱就ok了。不必記住地址了。

還有,你用codewarriorer是可以找到頭文件定義的。在你看到的宏上面,右鍵,goto definition 就可以找到對應的頭文件。

明白了么? 分給我得了~

『陸』 飛思卡爾的編程軟體codewarrior出現錯誤了,求高手幫忙分析原因下

你是不是用空大浮點運算了,再創建一個工程,選擇

應該就可以了斗好豎襪彎!

『柒』 飛思卡爾編譯器頭文件derivative.h有什麼作用

這個頭文件包含了你接下來編程用到的函數編譯環境,舉個例子就是51開頭會有#include<math.h>這個就是申明相當於,下面你用abs(v);或者sqar(m);這就能用了,如果開頭沒有那些就不能用,而#include<derivative.h>有類似的功能,只不過它申明的時特定的東西罷了。相互探討。

『捌』 飛思卡爾程序

我這只有舵機,攝像頭,和主程序,但是只是框架,要等調試。可以參考哈
#ifndef _WATCH_H_ //頭文件保護
#define _WATCH_H_
#ifndef ULONG
#define ULONG unsigned long
#define UCHAR unsigned char
#define UINT unsigned int
#endif
#define ROAD_MAX 10
////////////////代設值
#define MP0 //捕捉象素引腳
#define HREF //捕捉行中斷引腳
//////////////////
static unsigned char Colors[10][48]; //象素數組
static unsigned char JudgeMax; //最大象素
static unsigned char JudgeMin; //最小象素
unsigned char Over; //中斷函數處理完成
//使用數組後要清零

struct ROADS
{
unsigned char LeftRight; //1 left, 0 right 2 表示沒檢測到黑線 4表示起始線
unsigned int road; //轉向率,0表示直線或則沒檢測到黑線
}Roads[10]; //沒檢測到黑線一般為前方有大於90度的彎,
//行駛一會後數組會更新,不會因此丟掉跑道

unsigned long RoadLength; //mm單位
void GetRoads(); //取象素
void ProcessRoads(); //取轉向率
void delay(UINT); //延時函數
void ColorToRoads(UINT); //2值化與賦值
#endif //_WATCH_H_
以下為實現文件:
//watch.c
#include <hidef.h> /* common defines and macros */
#include <MC9S12XS128.h> /* derivative information */
#include "watch.h"

#pragma CODE_SEG NON_BANKED
#pragma TRAP_PROC
void GetRoads() //場中斷服務函數
{
UINT i;
UINT Href= 0;
delay(5);
while(HREF)
{
if(Href>= 270) //點讀取完畢,退出循環
break;
if((270-Href)%21!= 0 || Href< 60) //取60-270行中平均間隔的行數,共30行
{
Href++;
while(HREF); //等待此行掃描結束
while(!HREF); //等待新行開始掃描
continue;
}
delay(...); //根據調式結果具體設置
for(i= 0; i< 48; i++)
{
Colors[((270-Href)%21)][i]= MP0; //讀取引腳數據,後來會根據串口還是並口讀取做相應修改
if(MP0> judgeMax) //取最大最小值
JudgeMax= MP0;
if(MP0< JudgeMin)
JudgeMin= MP0;
delay(...); //具體設置
}
Href++;
while(HREF);
while(!HREF); //等待行中斷結束
}
Over= 1; //中斷函數處理完成
}

#pragma CODE_SEG DEFAULT

void ColorToRoads(UINT Href)
{
UINT i;
UINT temp; //用於起始線判斷
UINT temp2;
UINT temp3;
UCHAR Judge; //平均厥值
UINT j= 0;
UINT m_nCount= 0;

Judge= (JudgeMax+ JydgeMin)/2;
Roads[Href].road= 0;
Roads[Href].LeftRight= 0;
for(i= 0; i<48; i+= 3)
{
if(Colors[i]<= Judge||
Colors[i+ 1]<= Judge||
Colors[i+ 2]<= Judge)
{
Roads[Href].road&= (0x8000>> (UCHAR)j); //相應位賦值為1
m_nCount++;
}
j++;
}
if(Roads[Href].road== 0x00)
{
Roads[Href].LeftRight= 0x02; //沒有捕捉到黑線設置2
}
if(m_nCount> 1) //若黑點數大於1,從左向右數出連續的點中的中間點
{
j= 0;
i= 0;
while(!(Roads[Href].road& (0x8000>>(UCHAR)i)))
{
i++;
}
j= i;
while((Roads[Href].road& (0x8000>>(UCHAR)i))
{
i++;
if(i> 15)
break;
}
if(i< 15) //起始線判斷
{
temp= i;
while(!(Roads[Href].road& (0x8000>>(UCHAR)temp)))
{
temp++;
temp2= temp;
}
if(temp< 15)
{
while((Roads[Href].road& (0x8000>>(UCHAR)temp))
{
temp++;
temp3= temp;
if(temp> 15)
break;
}
if(temp< 15)
{
while(!(Roads[Href].road& (0x8000>>(UCHAR)temp)))
{
temp++;
}
if(temp< 15)
{
Roads[Href].LeftRight= 0x04;
Roads[Href].road&= 0x8000>>(UCHAR)((temp2+ temp3)/2);
return;
}
}
}
}
Roads[Href].road&= 0x8000>>(UCHAR)((i+j)/2);
}
}

void ProcessRoads() //路徑處理函數,在主函數中調用
{
int i;
for (i= 0;i< 10; i++)
{
ColorToRoads(i);
}
}

void delay(UINT m) //延時函數根據調試結果相應做改動
{
UINT i;
UINT j;
for(i= 0; i< m; i++)
{
for(j= 0; j< 200; j++)
}
}

再下面就是主函數實現文件:

#include <hidef.h> /* common defines and macros */
#include <MC9S12XS128.h> /* derivative information */
#pragma LINK_INFO DERIVATIVE "mc9s12xs128"

#include "watch.h" //攝像頭
#include "TurnAround.h" //舵機
//#include "..." //直流電機
//#include "..." //測速模塊

#ifndef TRUE
#define TRUE 1
#define FLASE 0
#endif

#define ULONG unsigned long
#define UCHAR unsigned char
#define UINT unsigned int

#define LITTLE
#define LARGE
//////////////////////全局變數
UCHAR m_nCount; //圈數計算
UCHAR m_nCount2;

////////////////////////////////函數定義
void init(); //初始化函數 待修改
UCHAR CheckRoad(UCHAR*,UCHAR*); //第1參數返回第幾個元素開始
//第2個參數返回第幾個元素結束
//0 直線, 0x11有小彎道, 0x21大彎道, 0x31終點

void CarRun(UCHAR, UCHAR, UCHAR); //小車行駛函數

#pragma CODE_SEG NON_BANKED
#pragma TRAP_PROC
void Int_TimerOverFlow(void) //32MHz TCNT 50000--200ms
{
static int m= 0;
if(m== 15) //3秒
{
m_nCount2= 0;
TSCR1_TEN= 0; //關定時器
TFLG2_TOF = 1;
}
m++;
}

#pragma CODE_SEG DEFAULT

void TimerInit()
{
TIOS= 0x00;
TSCR2_PR= 7; //默認情況下是32MHz bus clock,所以分頻後主時鍾為 0.25MHz
TSCR2_TOI= 1; //OverFlow方式
TCNT= 65535- 50000;
TSCR1_TEN= 1; //開定時器
}

////////////////////////////////
void main() //主程序
{
UCHAR ret;
UCHAR number1= 0;
UCAHR number2= 0;
init();
while(1)
{
while(over); //等待掃描完畢
over= 0;
IRQCR_IRQEN= 0; //關外部中斷IRQ
ProcessRoads(); //interface of watch.h
ret= CheckRoad(&number1, &number2); //檢測路徑
if(ret== 0x31)
break;
CarRun(number1, number2, ret);
}
PWME_PWME1= 0; //關閉PWM
while(1);
}

void init()
{
IRQCR_IRQE= 1; //下降沿觸發IRQ
PE1= 1;
EnableInterrupts; //開總中斷
INTCR_IRQEN= 1;
PWMInit(); //舵機初始化
Speed(MAX);
}

UCHAR CheckRoad(UCHAR* number1, UCHAR number2)
{
int i;
int sub= 0;
int psub= 0;
int temp;
bool flag;
UCHAR ret;
i= 0;
m_nCount2++;
while(!Roads[i].road)
{
i++;
}
*number1= i;
if(Roads[i].road>= Roads[i+ 1].road)
{
flag= TRUE;
psub= Roads[0].road- Roads[1].road;
}
else
{
flag= FALSE;
psub= Roads[1].road- Roads[0].road;
}
for(; i< 9; i++)
{
if(Roads[i].LeftRight== 0x04)
{
if(m_nCount2== 0)
{
m_nCount2= 1;
m_nCount++;
TimerInit();
}
}
if(m_nCount== 3)
{
Speed(0);
ret= 0x31;
goto _RET;
}
if(Roads[i+ 1].road== 0)
{
break;
}
if(flag)
{
sub= Roads[i].road- Roads[i+ 1].road;
}
else
{
sub= Roads[i+ 1].road- Roads[i].road;
}
sub>>= (UCHAR)i;
if(sub>= psub) //取差值
temp= sub- psub;
else
temp= psub- sub;
if(temp> LARGE) //大彎道
{
ret= 0x21;
while(Roads[i].road!= 0)
{
i++;
*number2= i;
if(i> 9)
break;
}
goto _RET;
}
if(temp> LITTLE) //小彎道
{
ret= 0x11;
while(Roads[i].road!= 0)
{
i++;
*number2= i;
if(i> 9)
break;
}
goto _RET;
}
*number2= i;
psub= sub;
}
_RET:
return ret;
}

void CarRun(UCHAR number1, UCHAR number2, UCHAR ret)
{
int end= Roads[number2].road;
Turn(number2- number1, end- 0x100, Roads[number2].LeftRight, ret); //舵機函數
IRQCR_IRQEN= 1; //開IRQ
}
下面為舵機頭文件:
//TurnAround.h
#ifndef _TURNAROUND_H_ //頭文件保護
#define _TURNAROUND_H_

void Turn(unsigned char, unsigned int, unsigned char, unsigned char); //轉角函數
void PWMInit(); //優先初始化

#endif

再以下為實現文件:(表內容待實驗後求得)
//TurnAround.c
#include <hidef.h> /* common defines and macros */
#include <MC9S12XS128.h> /* derivative information */
#pragma LINK_INFO DERIVATIVE "mc9s12xs128"
#include "TurnAround.h"
#include "..." //直流電機

#ifndef ULONG
#define ULONG unsigned long
#define UCHAR unsigned char
#define UINT unsigned int
#endif

/////////////////////////轉角定義
#define RIGHT60 1083
#define RIGHT45 1000
#define RIGHT30 917
#define RIGHT15 833
#define RIGHT5 778

#define MIDDLE 750

#define LEFT5 722
#define LEFT15 667
#define LEFT30 583
#define LEFT45 500
#define LEFT60 417

/////////////////////////速度定義
#define SPEED0 //直線速度
#define SPEED5
#define SPEED15
#define SPEED30
#define SPEED45
#define SPEED60

//PWM查詢表 7*10*2
static UINT PWMTable[]=
{
//Left
LEFT60, LEFT60, LEFT60, LEFT60, LEFT60, LEFT60, LEFT60, LEFT60, LEFT60, LEFT60,
LEFT60, LEFT60, LEFT60, LEFT60, LEFT60, LEFT60, LEFT60, LEFT60, LEFT60, LEFT60,
LEFT60, LEFT60, LEFT60, LEFT60, LEFT60, LEFT60, LEFT60, LEFT60, LEFT60, LEFT60,
LEFT60, LEFT60, LEFT60, LEFT60, LEFT60, LEFT60, LEFT60, LEFT60, LEFT60, LEFT60,
LEFT60, LEFT60, LEFT60, LEFT60, LEFT60, LEFT60, LEFT60, LEFT60, LEFT60, LEFT60,
LEFT60, LEFT60, LEFT60, LEFT60, LEFT60, LEFT60, LEFT60, LEFT60, LEFT60, LEFT60,
LEFT60, LEFT60, LEFT60, LEFT60, LEFT60, LEFT60, LEFT60, LEFT60, LEFT60, LEFT60,
//Right
RIGHT60, RIGHT60, RIGHT60, RIGHT60, RIGHT60, RIGHT60, RIGHT60, RIGHT60, RIGHT60, RIGHT60,
RIGHT60, RIGHT60, RIGHT60, RIGHT60, RIGHT60, RIGHT60, RIGHT60, RIGHT60, RIGHT60, RIGHT60,
RIGHT60, RIGHT60, RIGHT60, RIGHT60, RIGHT60, RIGHT60, RIGHT60, RIGHT60, RIGHT60, RIGHT60,
RIGHT60, RIGHT60, RIGHT60, RIGHT60, RIGHT60, RIGHT60, RIGHT60, RIGHT60, RIGHT60, RIGHT60,
RIGHT60, RIGHT60, RIGHT60, RIGHT60, RIGHT60, RIGHT60, RIGHT60, RIGHT60, RIGHT60, RIGHT60,
RIGHT60, RIGHT60, RIGHT60, RIGHT60, RIGHT60, RIGHT60, RIGHT60, RIGHT60, RIGHT60, RIGHT60,
RIGHT60, RIGHT60, RIGHT60, RIGHT60, RIGHT60, RIGHT60, RIGHT60, RIGHT60, RIGHT60, RIGHT60
};

//延時查詢表 6*6
static UNIT DelayTable[]=
{
0,0,0,0,0,0,
0,0,0,0,0,0,
0,0,0,0,0,0,
0,0,0,0,0,0,
0,0,0,0,0,0,
0,0,0,0,0,0
}

void PWMInit() //32HHz
{
PWMCTL_CON01= 1; //0, 1合為16bit
PWMCAE_CAE1= 1; //Center mode
PWMCLK_PLCK1= 0; //Clock A
PWMPRCLK_PCKA= 5; //Clock A= 32MHz/32= 1MHz
PWMPOL_PPOL1= 0; //開始為低電壓
PWMPER0,1= 10000; //50Hz PWM輸出
PWMDTY0,1= MIDDLE; //(10000- 750)* 100%= 92。5%占空比,1.5ms高電壓時間
PWME_PWME1= 1; //enable
}

static void delay(int ms)
{
int ii,jj;
if (ms<1) ms=1;
for(ii=0;ii<ms;ii++)
for(jj=0;jj<2770;jj++); //32MHz--1ms
}

static void SetPWM(UINT m_nPWM) //PWM設置
{
PWMDTY0,1= m_nPWM;
}

//number 9種情況,sub 7種情況,LeftRight 2中情況
//共128種情況,採用模糊控制暫時歸納為11種情況
//11種情況將填入表中提供查詢,11中情況分別為:
//左右5, 15, 30, 45, 60度
//和正中間0度
static UINT GetPWM(UCHAR number, UINT sub, UCHAR LeftRight)
{
switch(sub) //通過sub算出索引值
{
case 0x8000- 0x0100:
case 0x0100- 0x0001;
case 0x0100- 0x0002;
sub= 0;
break;
case 0x4000- 0x0100:
case 0x0100- 0x0004:
sub= 1;
break;
case 0x2000- 0x0100:
case 0x0100- 0x0008:
sub= 2;
break;
case 0x1000- 0x0100:
case 0x0100- 0x0010:
sub= 3;
break;
case 0x0800- 0x0100:
case 0x0100- 0x0020:
sub= 4;
break;
case 0x0400- 0x0100:
case 0x0100- 0x0040:
sub= 5;
break;
case 0x0200- 0x0100:
case 0x0100- 0x0100:
case 0x0100- 0x0080:
sub= 6;
break;

}
return PWMTable[number+ sub* 10+ LeftRight* 70];
}

//通過m_nPWM來改變速度,並返回改變的值
static UINT ChangeSpeed(UINT m_nPWM)
{
UINT m_nSpeed;
switch(m_nPWM) //根據m_nPWM 調節速度
{
case LEFT60:
Speed(SPEED60);
m_nSpeed= SPEED60;
break;
case LEFT45:
Speed(SPEED45);
m_nSpeed= SPEED45;
break;
case LEFT30:
Speed(SPEED30);
m_nSpeed= SPEED30;
break;
case LEFT15:
Speed(SPEED15);
m_nSpeed= SPEED15;
break;
case LEFT5:
Speed(SPEED5);
m_nSpeed= SPEED5;
break;
case MIDDLE:
Speed(SPEED0);
m_nSpeed= SPEED0;
break;
case RIGHT60:
Speed(SPEED60);
m_nSpeed= SPEED60;
break;
case RIGHT45:
Speed(SPEED45);
m_nSpeed= SPEED45;
break;
case RIGHT30:
Speed(SPEED30);
m_nSpeed= SPEED30;
break;
case RIGHT15:
Speed(SPEED15);
m_nSpeed= SPEED15;
break;
case RIGHT5:
Speed(SPEED5);
m_nSpeed= SPEED5;
break;
}
return m_nSpeed;
}

//獲得查表時的索引值
UINT GetIndex(UINT m_nSpeed)
{
if(m_nSpeed<= SPEED60)
{
m_nSpeed= 0;
}
else if(m_nSpeed<= SPEED45)
{
m_nSpeed= 1;
}
else if(m_nSpeed<= SPEED30)
{
m_nSpeed= 2;
}
else if(m_nSpeed<= SPEED15)
{
m_nSpeed= 3;
}
else if(m_nSpeed<= SPEED5)
{
m_nSpeed= 4;
}
else
{
m_nSpeed= 5;
}
return m_nSpeed;
}

//m_nSpeed2為欲設值
//m_nSpeed為當前速度
UINT GetDelay(UINT m_nSpeed, UINT m_nSpeed2)
{
m_nSpeed= GetIndex(m_nSpeed);
m_nSpeed2= GetIndex(m_nSpeed2);
return DelayTable[m_nSpeed* 6+ m_nSpeed2];
}

void Turn(UCHAR number, UINT sub, UCHAR LeftRight, UCHAR ret)//ret not be used now
{
UINT m_nPWM;
UINT m_nSpeed;
UINT m_nSpeed2;
UINT m_nDelay; //延時參數
m_nPWM= GetPWM(number, sub, LeftRight);
m_nSpeed= GetSpeed() //測速模塊
m_nSpeed2= ChangeSpeed(m_nPWM);
if(m_nSpeed2> m_nSpeed)
m_nSpeed= m_nSpeed2- m_nSpeed;
else
m_nSpeed= m_nSpeed- m_nSpeed2;
SetPWM(m_nPWM); //轉角
m_nDelay= GetDelay(m_nSpeed, m_nSpeed2);
delay(m_nDelay); //根據速度和角度延時
SetPWM(MIDDLE); //舵機擺正
}
最後說哈,程序只差調試就可以,筐架就是這。我是湖北賽區的,7月就要比賽了,他們車還沒做好啊。

閱讀全文

與飛思卡爾編程出現c和h什麼意思相關的資料

熱點內容
山西大同哪裡學編程課 瀏覽:316
許可證與配置文件 瀏覽:140
華為怎麼連接電腦數據線 瀏覽:288
核實數據後如何回復 瀏覽:572
jsb標簽放不了數字嗎 瀏覽:146
虛擬內存的數據存放在哪裡 瀏覽:601
神王霸業如何掛機升級 瀏覽:706
ps能否打開raf文件 瀏覽:496
華為手機文件夾清理 瀏覽:849
電腦falsh教程 瀏覽:75
有哪些不要會員的電影app嗎 瀏覽:15
鋼鐵俠製造用什麼編程 瀏覽:12
國內哪個app可以查機票信息 瀏覽:865
哪個app可以定製自駕游 瀏覽:787
find查找文件夾 瀏覽:175
多點app在哪裡找會員碼 瀏覽:785
人類高質量男性作者用的什麼app 瀏覽:562
cad另存為dxf文件變大 瀏覽:269
excel文件快速分類 瀏覽:571
蘋果電腦鍵盤怎麼刪除表格中數據 瀏覽:926

友情鏈接