导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→有关模块化编程和非模块化编程的问题?

* 96280: 有关模块化编程和非模块化编程的问题?

   雷影 
雷影发表的帖子 

 有关模块化编程和非模块化编程的问题?
C51编程:同一程序模块化编程和非模块化编程为什么出现模块化的编译通过后在硬件上通不过呢? [雷影] 2006-8-2 1:10:09
不得不请教各位高手了:同一程序模块化编程和非模块化编程,为什么出现模块化的编译通
过后在硬件上通不过呢?不是提倡要模块化编程吗?结果却是非模块化编程在硬件上能顺利
工作,但是模块化的不行。下面是两种编程的原程序。
模块化编程:
文件1:dingshiqimain.c
#include  <reg51.h>  
display();
main()
{
 TMOD=0x01;//定时器0方式1
 TH0=(65536-50000)/256;//50ms定时初值
 TL0=(65536-50000)%256;//50ms定时初值
 EA=1;//开总中断
 ET0=1;//开分中断
 TR0=1;//启动定时
 while(1)
 {
  display();//循环调用显示函数
  }
}
文件2:display.c
#include  <reg51.h>  
#define uchar unsigned char
sbit P0_6=P0^6;//十位数码管公共极
sbit P0_7=P0^7;//个位数码管公共极
uchar min_buffer1,min_buffer0;//十位,个位显示缓冲区
extern min;//引用timer0interrupt.c定时中断文件的变量
delay3ms();//数码管显示的时间
uchar code discode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//共阴
极数码管的段码

/************************************
*显示函数
*************************************/
display()
{
  min_buffer0=min%10;//取分的个位 
  min_buffer1=min/10;//取分的十位
 P1=discode[min_buffer1];//取分的十位显示段码送P1口
 P0_6=0;//开十位数码管
 delay3ms();//显示时间3ms
 P0_6=1;//关十位数码管
 P1=discode[min_buffer0];//取分的个位显示段码送P1口
 P0_7=0;//开个位数码管
 delay3ms();//显示时间3ms
 P0_7=1;//关个位数码管
}

delay3ms()
{
 uchar v,w;
 for(v=0;v  <6;v++)
  for(w=0;w  <248;w++);
}
文件3:timer0interrupt.c
#include  <reg51.h>  
#define uchar unsigned char
uchar secflag=0;//秒标志位
uchar sec=0;//秒初值
uchar min=15;//分初值
extern min_buffer1,min_buffer0;//引用display.c显示文件中的变量

/******************************************************
*定时器T0的中断函数
*******************************************************/
timer0interrupt() interrupt 1 using 0
{
 TH0=(65536-50000)/256;//重新付初值
 TL0=(65536-50000)%256;//重新付初值
 secflag++;//秒标志加1
 if(secflag==20)//是否一秒到
 {
  secflag=0;
  sec++;
   if(sec==60)//是否一分中到
    {
       sec=0;
      --min;//分减一
      if(min==0)//分是否减到为0
    {            
      TR0=0;//停止定时器
     }
   }
  }
 }
非模块编程:
#include  <reg51.h>  
#define uchar unsigned char
sbit P0_6=P0^6;
sbit P0_7=P0^7;
uchar min_buffer0,min_buffer1;
uchar secflag=0;
uchar sec=0;
uchar min=15;
uchar code discode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
display();
delay3ms();

main()
{
 TMOD=0x01;
 TH0=(65536-50000)/256;
 TL0=(65536-50000)%256;
 EA=1;
 ET0=1;
 TR0=1;
 display();
 while(1)
 {
  
  display();
  }
}

display()
{
  min_buffer0=min%10; 
   min_buffer1=min/10;
 P1=discode[min_buffer1];
 P0_6=0;
 delay3ms();
 P0_6=1;
 P1=discode[min_buffer0];
 P0_7=0;
 delay3ms();
 P0_7=1;
}

delay3ms()
{
 uchar v,w;
 for(v=0;v  <6;v++)
  for(w=0;w  <248;w++);
}

timer0interrupt() interrupt 1 using 0
{                                                      
 TH0=(65536-50000)/256;
 TL0=(65536-50000)%256;
 secflag++;
 if(secflag==20)
 {
  secflag=0;
  sec++;
  if(sec==60)
  {
     sec=0;
     --min;
     if(min==0)
     {           
        TR0=0;
     }
           
   }
  }
 }



发表时间:2006年8月2日8:09:52

  
回复该帖

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

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

[上一篇帖子]:谢谢你了啊我按你说的改成如下,发现还不是不行,你能不能在帮我看一下.急用啊!!!!!谢谢!
[下一篇帖子]:keil软件不能识别P端口我的keil软件在检测错误时,错误信息提示P0,P1,P2,P3口是不明确