导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→请大家帮我看看程序

* 97267: 请大家帮我看看程序

   czoowl 
czoowl发表的帖子 

 请大家帮我看看程序
51单片机,用T2方波发生器发射方波,用74HC259分成八路分时输出由两个按键控制,一个按键P1_2控制通道的切换,另一个按键P1_3按下时发射方波。
  我的程序在KeilC编译的时候总是有Warning,下面把程序和Warning给大家看看,请多多指点,看看问题出在哪里了。


程序:
/************************************************************
SAmain.c
Name: 新背投六轴控制程序
Creat: 2006/08/29
************************************************************/
#define uchar unsigned char
#define uint unsigned int
//#include "89c55wd.h"

#include   <AT89X55.H>  
uchar bdata channel_num = 0x00;
uchar bdata work_flag = 0x00;
sbit one_pulse = work_flag^0;  // 1:single step complete
sbit run_stop = work_flag^1;    // 1:run     0:stop

void delay (uchar h_data)
{
   uchar bdata l_data;
   while (h_data--)
   {
      for (l_data = 0x00; l_data   < 0xff; l_data++);
   }
}

void initialize (void)
{
   EA = 0;
   EX0 = 0;
   T2CON = 0x00;
   T2MOD = T2MOD|0x02;
   RCAP2H = 0x00;
   RCAP2L = 0x00;
   IE = 0x01;    //INT0
   IT0 = 1;    //edge
   run_stop = 0;
}

uchar keyscan (void)
{
   uchar bdata time_delay = 0x10;
   uchar bdata p1_bak;
   uchar bdata result = 0x00;
   if (P1 & 0x0c != 0x0c)
   {
      delay (time_delay);
      if (P1 & 0x0c != 0x0c)
      {
          p1_bak = P1 & 0x0c;
          if (p1_bak == 0x08) result = 0x01;
          if (p1_bak == 0x04) result = 0x02;
      }
   }
   return (result);
}

void main(void)
{
   uchar bdata key_order;
   uchar bdata i, j;
   uchar bdata onestep_delay;
   initialize();
   EA = 1;
   while (1)
   {
      key_order = keyscan();
      if (key_order == 0x01)
      {
         channel_num++;
         if (channel_num >   0x06) channel_num = 0x00;
           
         switch (channel_num)
         {
            case 0:
               P1_4 = 0;
               P1_5 = 0;
               P1_6= 0;
               break;
            case 1:
               P1_4 = 1;
               P1_5 = 0;
               P1_6= 0;
               break;
            case 2:
               P1_4 = 0;
               P1_5 = 1;
               P1_6 = 0;
               break;
            case 3:
               P1_4 = 1;
               P1_5 = 1;
               P1_6 = 0;
               break;
            case 4:
               P1_4 = 0;
               P1_5 = 0;
               P1_6 = 1;
               break;
            case 5:
               P1_4 = 1;
               P1_5 = 0;
               P1_6 = 1;
               break;
            case 6:
               P1_4 = 0;
               P1_5 = 1;
               P1_6 = 1;
               break;
            default:
               P1_4 = 1;
               P1_5 = 1;
               P1_6 = 1;
         }//end switch (channel_num);
      }
      else if (key_order == 0x02)
      {
         if (~run_stop)
         {
            EX0 = 1;
            TR2 = 1;
            one_pulse = 0;
            i = 0x00;
            j = 0x00;
            while (~one_pulse)
            {
               i++;
               if (~i) j++;
               if (j == 0xff) break;
            }

         }
         else
         {
            onestep_delay ++;
            if (onestep_delay == 0xff)
            {
               EA = 1;
               TR2 = 1;
               onestep_delay++;
            }
            
         }
      }
      else
      {
         TR2 = 0;
         EX0 = 0;
         run_stop = 0;
      }
   }
}


void ext0_int(void) interrupt 0 using  2
{
   EA = 0;
   TR2 = 0;
   one_pulse = 1;
}

下面是编译时报的Warning:
Build target 'Target 1'
assembling STARTUP.A51...
compiling SAmain.c...
linking...
*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
    SEGMENT: ?PR?_DELAY?SAMAIN
Program Size: data=19.0 xdata=0 code=379
"NewSix" - 0 Error(s), 1 Warning(s).

发表时间:2006年8月30日21:35:18

  
回复该帖

本主题共有 4 帖,分页:>>>>>该主题的所有内容[4]条

 *树形目录 只列出部分跟帖的标题以及简单的摘要信息 该主题的部分跟帖如下:

  97351.[详细]方波脉冲八路分时输出程序
摘要:抱歉,原来的程序没有经过仿真验证就发出来了,结果漏洞百出,让大家见笑了。下面的是我上机仿真之后修改过的程序,修改了一些地方,此外加了一些注释,大家帮我看看,挑挑毛病,谢谢!  /*********************......(4458字)
- [czoowl][1224次] 2006年9月2日

  97504.[详细]这是1.02版程序,请大家帮我看看,有什么不好的习惯,用法请大家指出来,谢谢!..
摘要:/************************************************************ SAmain.c 摘要: 新背投六轴控制程序 当前版本: 1.02......(6541字)
- [czoowl][1017次] 2006年9月7日

  97505.[详细]这是原理图
摘要:[upload=jpg]uploadfile/2006-9-7_16-45-29_84.jpg[/upload]......(56字)
- [czoowl][985次] 2006年9月7日

[上一篇帖子]:驱动lcd各个引脚电压基本都对,但不能显示,背光都打不开,请教!我驱动240*128lcd各个引脚电
[下一篇帖子]:投诉你们的板子简直就是垃圾一片,质量太差,所有程式都是左抄右抄,I2C和SD两个程式完全行不到,真的