⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 project based on embeded system(c51).txt

📁 一个基于嵌入式内核做的项目的源代码(c51的).
💻 TXT
📖 第 1 页 / 共 5 页
字号:
/*****************************************************************************/
//文件说明:
//       1。整个程序是基于small rtos51编写的,并遵守了使用协议
//       2。这是一个正式产品的程序的一个部分,省略了一部分控制方面的关键代码,和实现产品中的特殊功能的代码,但关于嵌入式small rtos51应用的部分都已经给出
//       3。本文所述的产品,我已经写了相关的文章,对于任务的规划进行了简单的说明,
//           文章已经被《单片机与嵌入式系统应用》录用,  不过估计要等几个月才能刊出,可以向本人索取,
//       4。在整个程序的编写过程中,得到了陈明计先生的热心指导,在此表示衷心的感谢
//       5。文件是用keil7.07版本编译的,如果需要工程文件,请和我联系
//       6。本人对于51的理解不够深刻,而且刚开始接触嵌入式系统,水平有限,希望与大家交流。
//       7。希望各位高手能指点一二:对程序的各个方面  , 希望您给我一点建议,能让我的水平有一个很大的提升
// *************************************************************************************************/
//   我的联系方式:
//                   陈杰峰   wishercjf@163.com 
//                                                欢迎各位大侠拍砖

/*********************************************************************************************************

**--------------文件信息--------------------------------------------------------------------------------
**文   件   名: main.c
**创   建   人: 陈杰峰   wishercjf@163.com 
**最后修改日期:  2004年6月2日
**描        述: 本文件是整个系统的核心,完成系统的大部分功能
*************************************************************************************
** 修改人:
** 日 期:
** 描 述:
**
**------------------------------------------------------------------------------------------------------
***********************************************************************************************************/

#include "config.h"
sbit motor=P1^0;      //连接电机
sbit speaker=P1^1;    //连接蜂鸣器
sbit red=P1^6;         //红色报警灯
sbit yellow=P1^7;     //黄色加温灯
sbit powerkey=P1^2;    //连接电压报警
sbit SPI_CLK=P1^4;     //da输出脉冲
sbit SPI_DATA=P1^3;    //da输出数据
sbit CS_DA=P1^5;       //da片选




uint8 OS_Q_MEM_SEL NotUse _at_ 0x0000;      //指针的NULL为0,这个变量占用0地质避免出现有效的NULL指针
uint8 OS_Q_MEM_SEL CommandData[16];         //给命令消息队列分配的队列空间
uint8 OS_Q_MEM_SEL Drip[5];                //存储反馈的滴数
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;

//转速表,修改具体数据,实际转速对应已经去掉
uint16 code rate[4][301]={

0
};
//停止时间表
uint16 code stoptimebiao[4][301]={
0

};


/*********************************************************************************************************
** 函数名称:  intdata()
** 功能描述: 初始化函数,设置了全局变量的初值
** 输 入: 无
** 输 出: 无
** 全局变量: 无
** 调用模块: 
**
** 作 者: 陈杰峰   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;
}


/*********************************************************************************************************
** 函数名称: init
** 功能描述: 初始化函数,一般在多任务环境启动前调用
** 输 入: 无
** 输 出: 无
** 全局变量: 无
** 调用模块: 
**
** 作 者: 陈杰峰   wishercjf@163.com 
** 日 期: 2004年5月4日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/

        void init(void)
{
    //"系统初始化"
    //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;         //"清除中断优先级"
    //PS = 1;         //"串行中断优先"
    //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触发方式 0=电平 1=边沿"
    //IE0             "外部中断0申请标志"
    IT0 = 1;        //"外部中断0触发方式 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位异步收发 |  定时器控制   |"
    //"|   1    0 | 方 式 2   | 11位异步收发 |fosc/32|fosc/64|"
    //"|   1    1 | 方 式 3   | 11位异步收发 |  定时器控制   |"
    //"SM2 多机通讯允许"
    //"REN 接收允许控制"
    //"TB8 发送数据第9位"
    //"RB8 接收数据第9位"
    //"TI  发送中断标志"
    //"RI  接受中断标志"
    //PCON "电源控制寄存器"
    //SMOD"波特率选择位 =1 方式1,2,3 波特率加倍"
    //"波特率=2^(sod)*fosc/(32*12*(256-初值))"
    
                                            //使用定时器0设置蜂鸣器频率,频率为3000Hz

                                            //系统节拍中断使用定时器2,中断频率为600Hz

}

/*********************************************************************************************************
** 函数名称: Delay(unsigned int time)
** 功能描述: 延时函数,在操作系统中,其实不需要这个函数,
**            但是我用的液晶速度比较慢,要等待一段时间
** 输 入: 无
** 输 出: 无
** 全局变量: 无
** 调用模块: 
**
** 作 者: 陈杰峰   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++);
    }
}

/*********************************************************************************************************
** 函数名称: main
** 功能描述: 主函数,用户程序从这里执行
** 输 入: 无
** 输 出: 无
** 全局变量: 无
** 调用模块: 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();
}
/*********************************************************************************************************
** 函数名称: command
** 功能描述: 命令处理任务,高层命令由这个任务执行,相当于应用程序

** 输 入: 无
** 输 出: 无
** 全局变量: 无
** 调用模块: 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:

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -