?? project based on embeded system(c51).txt
字號:
/*****************************************************************************/
//文件說明:
// 1。整個程序是基于small rtos51編寫的,并遵守了使用協(xié)議
// 2。這是一個正式產(chǎn)品的程序的一個部分,省略了一部分控制方面的關(guān)鍵代碼,和實現(xiàn)產(chǎn)品中的特殊功能的代碼,但關(guān)于嵌入式small rtos51應(yīng)用的部分都已經(jīng)給出
// 3。本文所述的產(chǎn)品,我已經(jīng)寫了相關(guān)的文章,對于任務(wù)的規(guī)劃進行了簡單的說明,
// 文章已經(jīng)被《單片機與嵌入式系統(tǒng)應(yīng)用》錄用, 不過估計要等幾個月才能刊出,可以向本人索取,
// 4。在整個程序的編寫過程中,得到了陳明計先生的熱心指導(dǎo),在此表示衷心的感謝
// 5。文件是用keil7.07版本編譯的,如果需要工程文件,請和我聯(lián)系
// 6。本人對于51的理解不夠深刻,而且剛開始接觸嵌入式系統(tǒng),水平有限,希望與大家交流。
// 7。希望各位高手能指點一二:對程序的各個方面 , 希望您給我一點建議,能讓我的水平有一個很大的提升
// *************************************************************************************************/
// 我的聯(lián)系方式:
// 陳杰峰 wishercjf@163.com
// 歡迎各位大俠拍磚
/*********************************************************************************************************
**--------------文件信息--------------------------------------------------------------------------------
**文 件 名: main.c
**創(chuàng) 建 人: 陳杰峰 wishercjf@163.com
**最后修改日期: 2004年6月2日
**描 述: 本文件是整個系統(tǒng)的核心,完成系統(tǒng)的大部分功能
*************************************************************************************
** 修改人:
** 日 期:
** 描 述:
**
**------------------------------------------------------------------------------------------------------
***********************************************************************************************************/
#include "config.h"
sbit motor=P1^0; //連接電機
sbit speaker=P1^1; //連接蜂鳴器
sbit red=P1^6; //紅色報警燈
sbit yellow=P1^7; //黃色加溫?zé)?sbit powerkey=P1^2; //連接電壓報警
sbit SPI_CLK=P1^4; //da輸出脈沖
sbit SPI_DATA=P1^3; //da輸出數(shù)據(jù)
sbit CS_DA=P1^5; //da片選
uint8 OS_Q_MEM_SEL NotUse _at_ 0x0000; //指針的NULL為0,這個變量占用0地質(zhì)避免出現(xiàn)有效的NULL指針
uint8 OS_Q_MEM_SEL CommandData[16]; //給命令消息隊列分配的隊列空間
uint8 OS_Q_MEM_SEL Drip[5]; //存儲反饋的滴數(shù)
uint8 OS_Q_MEM_SEL serial[5]; //液晶要顯示的東西
uint8 shengyin;
uint8 moshi,wendu;
uint16 sheding,yijing,sudu;
uint8 run;
uint16 runtime,stoptime;
uint8 dripnub;
uint8 testpage,test;
uint8 yeup,keytime;
uint8 power,powertime;
uint8 setbaojing;
//轉(zhuǎn)速表,修改具體數(shù)據(jù),實際轉(zhuǎn)速對應(yīng)已經(jīng)去掉
uint16 code rate[4][301]={
0
};
//停止時間表
uint16 code stoptimebiao[4][301]={
0
};
/*********************************************************************************************************
** 函數(shù)名稱: intdata()
** 功能描述: 初始化函數(shù),設(shè)置了全局變量的初值
** 輸 入: 無
** 輸 出: 無
** 全局變量: 無
** 調(diào)用模塊:
**
** 作 者: 陳杰峰 wishercjf@163.com
** 日 期: 2004年5月4日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void intdata()
{
moshi=1;
wendu=45;
run=0;
dripnub=0;
testpage=0;
test=2;
sheding=1000;
yijing=0;
sudu=150;
yeup=0;
keytime=0;
serial[0]=0;
serial[1]=0;
serial[2]=0;
serial[3]=0;
serial[4]=0;
}
/*********************************************************************************************************
** 函數(shù)名稱: init
** 功能描述: 初始化函數(shù),一般在多任務(wù)環(huán)境啟動前調(diào)用
** 輸 入: 無
** 輸 出: 無
** 全局變量: 無
** 調(diào)用模塊:
**
** 作 者: 陳杰峰 wishercjf@163.com
** 日 期: 2004年5月4日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void init(void)
{
//"系統(tǒng)初始化"
//IE = 0x00; //"清除中斷"
//ES = 1; //4"串行中斷允許"
EX0 = 1; //0"外部中斷0允許"
ET0 = 1; //1"定時器0中斷允許"
EX1 = 1; //2"外部中斷1允許"
// ET1 = 1; //3"定時器1中斷允許"
//ET2 = 1;
//IP = 0; //"清除中斷優(yōu)先級"
//PS = 1; //"串行中斷優(yōu)先"
//PX0 = 1; //"外部中斷0"
PT0 = 1; //"定時器中斷0"
//PX1 = 1; //"外部中斷1"
//PT1 = 0; //"定時器中斷1"
//TCON "定時器控制寄存器"
// TCON = 0;
//TF1 "T1溢出標志"
//TR1 = 1; //"T1運行控制"
//TF0 "T0溢出標志"
//TR0 = 1; //"T0運行控制"
//IE1 "外部中斷1申請標志"
IT1 = 1; //"外部中斷1觸發(fā)方式 0=電平 1=邊沿"
//IE0 "外部中斷0申請標志"
IT0 = 1; //"外部中斷0觸發(fā)方式 0=電平 1=邊沿"
//TMOD "定時器模式控制寄存器"
// |GATE |C//T |M0 |M1 |GATE |C//T |M0 |M1 |
//"高4位用于T1 低4位用于T0"
//SCON "串行控制"
//| SM0 | SM1 | SM2 | REN | TB8 | RB8 | TI | RI |
//"| SM0 SM1 | 工作方式 | 說 明 | 波 特 率 |"
//"| 0 0 | 方 式 0 |? 同步移位 | fosc/12 |"
//"| 0 1 | 方 式 1 | 10位異步收發(fā) | 定時器控制 |"
//"| 1 0 | 方 式 2 | 11位異步收發(fā) |fosc/32|fosc/64|"
//"| 1 1 | 方 式 3 | 11位異步收發(fā) | 定時器控制 |"
//"SM2 多機通訊允許"
//"REN 接收允許控制"
//"TB8 發(fā)送數(shù)據(jù)第9位"
//"RB8 接收數(shù)據(jù)第9位"
//"TI 發(fā)送中斷標志"
//"RI 接受中斷標志"
//PCON "電源控制寄存器"
//SMOD"波特率選擇位 =1 方式1,2,3 波特率加倍"
//"波特率=2^(sod)*fosc/(32*12*(256-初值))"
//使用定時器0設(shè)置蜂鳴器頻率,頻率為3000Hz
//系統(tǒng)節(jié)拍中斷使用定時器2,中斷頻率為600Hz
}
/*********************************************************************************************************
** 函數(shù)名稱: Delay(unsigned int time)
** 功能描述: 延時函數(shù),在操作系統(tǒng)中,其實不需要這個函數(shù),
** 但是我用的液晶速度比較慢,要等待一段時間
** 輸 入: 無
** 輸 出: 無
** 全局變量: 無
** 調(diào)用模塊:
**
** 作 者: 陳杰峰 wishercjf@163.com
** 日 期: 2004年5月4日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
Delay(unsigned int time)
{unsigned int ii,jj;
for (jj=0;jj<time;jj++);
{
for (ii=0;ii<100;ii++);
}
}
/*********************************************************************************************************
** 函數(shù)名稱: main
** 功能描述: 主函數(shù),用戶程序從這里執(zhí)行
** 輸 入: 無
** 輸 出: 無
** 全局變量: 無
** 調(diào)用模塊: init(),OSStart()、Delay()、intdata();
**
** 作 者: 陳杰峰 wishercjf@163.com
** 日 期: 2004年5月4日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void main(void)
{
unsigned int i;
for(i=0;i<500;i++)
{
Delay(100); //延時0.2秒
}
intdata();
init();
OSStart();
}
/*********************************************************************************************************
** 函數(shù)名稱: command
** 功能描述: 命令處理任務(wù),高層命令由這個任務(wù)執(zhí)行,相當(dāng)于應(yīng)用程序
** 輸 入: 無
** 輸 出: 無
** 全局變量: 無
** 調(diào)用模塊: OSSemCreate(),OSQPend()
** OSQIntPost(),
** 作 者: 陳杰峰 wishercjf@163.com
** 日 期: 2004年5月15日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void Command(void)
{
uint8 KeyTemp[4];
while(1)
{
OSQPend(KeyTemp,KeyReadBuf,0);
OSQPend(KeyTemp + 1,KeyReadBuf,0);
switch(KeyTemp[0])
{
case KEY_DOWN:
switch(test)
{
case 2://第二個實驗頁面
switch(KeyTemp[1])
{
case KEYMOSHI:
moshi++;
if(moshi>4)
{
moshi=1;
}
serial[0]=CMOSHI;
OSQIntPost(CommandData, serial[0]);
break;
case KEYQUEDING:
serial[0]=CYEMIAN;
serial[1]=5;
OSQIntPost(CommandData, serial[0]);
serial[0]=CYEMIAN;
serial[1]=6;
OSQIntPost(CommandData, serial[0]);
serial[0]=CSHEDING;
serial[1]=sheding/256;
serial[2]=sheding%256;
serial[3]=1;
OSQIntPost(CommandData, serial[0]);
serial[0]=CSUDU;
serial[1]=sudu/256;
serial[2]=sudu%256;
serial[3]=0;
OSQIntPost(CommandData, serial[0]);
test=3;
break;
default:
break;
}
break;
case 3://第三個實驗頁面
switch(KeyTemp[1])
{
case KEYJIA:
if(yeup==0)
{
sheding++;
serial[0]=CSHEDING;
serial[1]=sheding/256;
serial[2]=sheding%256;
serial[3]=1;
OSQIntPost(CommandData, serial[0]);
}
else
{
sudu++;
serial[0]=CSUDU;
serial[1]=sudu/256;
serial[2]=sudu%256;
serial[3]=1;
OSQIntPost(CommandData, serial[0]);
}
break;
case KEYJIAN:
if(yeup==0)
{
sheding--;
serial[0]=CSHEDING;
serial[1]=sheding/256;
serial[2]=sheding%256;
serial[3]=1;
OSQIntPost(CommandData, serial[0]);
}
else
{
sudu--;
serial[0]=CSHEDING;
serial[0]=CSUDU;
serial[1]=sudu/256;
serial[2]=sudu%256;
serial[3]=1;
OSQIntPost(CommandData, serial[0]);
}
break;
case KEYQUEDING:
if(yeup==0)
{
serial[0]=CSHEDING;
serial[1]=sheding/256;
serial[2]=sheding%256;
serial[3]=0;
OSQIntPost(CommandData, serial[0]);
serial[0]=CSUDU;
serial[1]=sudu/256;
serial[2]=sudu%256;
serial[3]=1;
OSQIntPost(CommandData, serial[0]);
yeup=1;
}
else
{
serial[0]=CYEMIAN;
serial[1]=7;
OSQIntPost(CommandData, serial[0]);
serial[0]=CYEMIAN;
serial[1]=8;
OSQIntPost(CommandData, serial[0]);
runtime=rate[moshi-1][sudu];
stoptime=stoptimebiao[moshi-1][sudu];
yeup=0;
test=4;
}
break;
default:
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -