佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

查看: 1951|回复: 11

Micro C 8051 Development System 完整版

[复制链接]
发表于 11-12-2006 02:44 AM | 显示全部楼层 |阅读模式
小弟在此请问各位,有可能找到Micro C 8051 Development System 的完整版吗?

因为我下载了它的demo版,可是还不够compile完....

请高手们帮忙....

以下是我要用的 C program source codes....
http://chaokhun.kmitl.ac.th/~kswichit/thermo/thermo.c

有谁能帮帮吗?

小弟感激不尽...
回复

使用道具 举报


ADVERTISEMENT

发表于 11-12-2006 02:47 AM | 显示全部楼层
原帖由 Right 于 11-12-2006 02:44 AM 发表

有谁能帮帮吗?

小弟感激不尽...



对不起。 小弟帮不到忙
回复

使用道具 举报

发表于 15-12-2006 09:34 PM | 显示全部楼层
如果你要那个software的话我就没办法
不急的话,我用我学校的帮你build,我们是用silicon lab的
只是你的include file 我没有
回复

使用道具 举报

发表于 16-12-2006 02:29 AM | 显示全部楼层
我用keil....
如果你不介意, 可以send 给你。
不过没有library,一些function 你要自己写过。
回复

使用道具 举报

 楼主| 发表于 17-12-2006 10:11 AM | 显示全部楼层
原帖由 jie2003 于 15-12-2006 09:34 PM 发表
如果你要那个software的话我就没办法
不急的话,我用我学校的帮你build,我们是用silicon lab的
只是你的include file 我没有


Silicon Lab 是免费的吗?
如果你要header files,给我你的电邮,我寄给你让你build...
ok?
回复

使用道具 举报

 楼主| 发表于 17-12-2006 10:13 AM | 显示全部楼层
原帖由 fritlizt 于 16-12-2006 02:29 AM 发表
我用keil....
如果你不介意, 可以send 给你。
不过没有library,一些function 你要自己写过。


我也是有Keil,我试过改过一些function,但不成功。。。
让你看看一下:

/*
   thermo.c is a source program for interfacing 89C4051 with CA3162 10-bit
   ADC and 16x1 line LCD display. LM35 is used to be temperature sensor, 10ms
   cputick generates 100 ms timebase. LCD display shows time in sec unit
   and temperature in Celcius. FIR filters do filtering raw data producing
   0.1 C reading.
   Copyright (C) 1998 W.SIRICHOTE
*/

#include <8051io.h>
#include <8051reg.h>
#include <intrins.h>

extern  char cputick;  /* cputick increments by 1 every 10 ms */
unsigned  int count,i,adc,min,max;
unsigned  char sec100,sec10,ACC,initcount,flag;
unsigned  int msd,nsd,lsd;
unsigned  int xin[10];


void main(void)
{
  TMOD = 0x21;   /* set timer0 to 16-bit counter */
  
  cputick = 0;
  i = 0;
  count=0;
  sec100=0;
  sec10=0;
  flag = 0;
  initcount=0;
  #pragma asm
  E EQU $B5;   /* bit define for P3.5 and P3.4 */
  RS EQU $B4;
  CLR E;
  CLR RS;
  #pragma endasm
  P1 = 0;
  delay(5);
  i_LCD();
  puttitle ();
  delay(5000);  /* show quantities to be measured */
  flag |= 0x04;
  puttime();
  xin[0]=10000;  /* show invalid display by putting out-of-range xin value */
  flag |= 0x02;
  puttemp();
  TCON = 0x59;

  while(1)     /* run continuously */
  {
   do
    {
      _nop_();       /* put tasks require 51's speed here */
    }
    while ( cputick < 10);    /* 10 * 10 ms = 100 ms */
    cputick = 0;

/*   ____---____________________---___________________---________
         |<------- 100 ms ----->|
     _______----___________________----__________________----____
            time ~20 ms

*/
    /* put tasks requires 100 ms tick here */

    #pragma asm
    setb $b0;
    #pragma endasm
    time();         /* update time base */
    putxin();       /* put converted digital data to 10-word buffer */
    puttemp();      /* put temperature reading to LCD */
    puttime();      /* put second counter to LCD */
    #pragma asm
    clr $b0;
    #pragma endasm
     }


time();

/* flag
   %00000001 set bit0 every 100 ms
   %00000010 set bit1 after first 10-samples
   %00000100 set bit2 every 1 s

*/

{
   sec100++;
   if (sec100 >= 1)       /* 1 * 100 ms = 100 ms */
      {sec100 = 0;
        sec10++;
        initcount++;
        flag |= 0x01;    /* set bit 0 in flag */

        if (initcount >= 10)
            {initcount = 10;
            flag |= 0x02;
            }
        if (sec10 >= 10)
        { sec10 = 0;
            count++;   /* increment count every 1 sec */
            flag |= 0x04;
          /*  sendreading();  */
            }
       }
}

pause (j)
int j;
{
   int i;
   for (i = 0; i < j; i++)
   ;
}

LCDWI(A)     /* write instruction to LCD */
char A;

{
     ACC = A; /* use ACC for interfacing to Assembly */
     #pragma asm
        MOV A,ACC;
        CLR RS;
        CLR E;
        MOV P1,A;
        SETB E;
        NOP;
        CLR  E;
        SWAP A;
        MOV  P1,A;
        SETB E;
        NOP;
        CLR  E;
    #pragma endasm
    pause(1);

}

LCDWD(A)
char A;

{
     ACC = A; /* use ACC for interfacing to Assembly */
     #pragma asm
        MOV A,ACC;
        SETB RS;   /* write data */
        CLR E;
        MOV P1,A;   /* check for p1.0-p1.4 */
        SETB E;
        NOP;
        CLR  E;
        SWAP A;
        MOV  P1,A;
        SETB E;
        NOP;
        CLR  E;
    #pragma endasm
     pause(1);
}


i_LCD()    /* initialize LCD in accordance with Hitachi 44780 4-bit */
{
    P1 = 0x30;
    pulseE();
    delay(10);
    pulseE();
    delay(1);
    pulseE();
    delay(1);
    P1 = 0x20;
    pulseE();
    pulseE();
    pulseE();
    LCDWI(0x28);   /* function set 4-bit bus, 1/16 line, 5*7 dots */
    LCDWI(0x0c);   /* display on/off on display,off cursor, no blink */
    LCDWI(0x06);   /* entry mode DDRAM address + */
    LCDWI(1);      /* clear display */
    delay(5);
}

pulseE()
{
    #pragma asm
        SETB E;
        NOP;
        CLR E;
    #pragma endasm
}


puttime()
{
    int temp;
    char zero;
    if ((flag & 0x04) == 4)
    { flag &= ~0x04;
    zero = 0;
    LCDWI(0x80);     /* leftmost digit */
    if (count/10000 != 0)
        {
        LCDWD(count/10000+48);
        zero = 1;
        }
        else LCDWD(' ');
     temp = count%10000;

    if ((zero == 0) && (temp/1000 == 0))
        LCDWD(' ');
        else {
            LCDWD(temp/1000+48);
            zero = 1;
        }
    temp = temp%1000;
    if ((zero == 0) && (temp/100 == 0))
        LCDWD(' ');
        else {
            LCDWD(temp/100+48);
            zero = 1;
        }
    temp = temp%100;
    if ((zero == 0) && (temp/10 == 0))
        LCDWD(' ');
        else LCDWD(temp/10+48);
    temp = temp%10;
    LCDWD(temp+48);
    LCDWD(' ');
    LCDWD('s');
    LCDWD(' ');
    }
}
/*
puttime()
{
    int temp;
    char zero;
    zero = 0;
    LCDWI(0x80);     
    LCDWD(' ');
    LCDWD(count/10000+48);
    temp = count%10000;
    LCDWD(temp/1000+48);
    temp = temp%1000;
    LCDWD(temp/100+48);
    temp = temp%100;
    LCDWD(temp/10+48);
    temp = temp%10;
    LCDWD(temp+48);
    LCDWD(' ');
    LCDWD('s');

}

*/

time1ms()    /* 1 ms delay with XTAL 11.0592MHz */
{
    int i;
    for (i = 0; i < 8 ; i++)
    ;
}

delay(n)      /* do nothing n*1ms */
int n;
{
    int i;
    for (i=0; i< n ; i++)
    time1ms();

}

int readtemp()
{
    P1 = 0xff;       /* make P1.0 to P1.3 to be input port */
    #pragma asm
    SETB $B7;
    JNB $B7,*;
    JB $B7,*;
    #pragma endasm
    delay(1);
    msd = (P1 & 0x0f);
    delay(2);
    P1 = 0xff;
    lsd = P1 & 0x0f;
    delay(2);
    P1 = 0xff;
    nsd = (P1 & 0x0f);
    return(msd*100+nsd*10+lsd);

}

putxin()    /* put raw data to FIFO buffer */

{   if ((flag & 0x01) ==1)
    {flag &= 0xfe;
    xin[9]=xin[8];
    xin[8]=xin[7];
    xin[7]=xin[6];
    xin[6]=xin[5];
    xin[5]=xin[4];
    xin[4]=xin[3];
    xin[3]=xin[2];
    xin[2]=xin[1];
    xin[1]=xin[0];
    xin[0]=readtemp();
    }
}

int average()

{

return((xin[0]+xin[1]+xin[2]+xin[3]+xin[4]+xin[5]+xin[6]+xin[7]+xin[8]+xin[9])/10);

}

puttemp()

{
    int temp,t;
    if((flag & 0x02)== 2)
    { flag &= ~0x02;

    LCDWI(0xc0);
    LCDWD(' ');
    temp=average();
    adc=temp;
    if (temp < min)
       min = temp;
       if (temp > max)
        max = temp;

    if ( (temp < 999) && (temp > 0)) /* limit measuring range to 0-100 c */
    {
    t = temp/100;
    if(t != 0)
        LCDWD(t+48);
    else LCDWD(' ');
    temp = temp%100;
    LCDWD(temp/10+48);
    LCDWD('.');
    LCDWD(temp%10+48);
    }
    else
    {
        LCDWD('-');
        LCDWD('-');
        LCDWD('-');
        LCDWD('-');
    }
    LCDWD(0xdf);   /* i.e., 'C */
    LCDWD('C');
    LCDWD(' ');
    }
}

puttitle()

{
    LCDWI(0x80);
    LCDWD('D');
    LCDWD('i');
    LCDWD('g');
    LCDWD('i');
    LCDWD('T');
    LCDWD('h');
    LCDWD('e');
    LCDWD('r');
    LCDWI(0xc0);
    LCDWD('m');
    LCDWD('0');
    LCDWD('-');
    LCDWD('1');
    LCDWD('0');
    LCDWD('0');
    LCDWD(0xdf);
    LCDWD('C');

}
回复

使用道具 举报

Follow Us
发表于 17-12-2006 12:48 PM | 显示全部楼层
不好意思, 有点东西看不懂。
JB $B7,*;--->这个代表什么??
$B7 是什么??
记不起asembly里面有这样的syntax.
有没有msn or ym??
容易联络。


还有 , keil里面的header file 是不同的。

#include <8051io.h>
#include <8051reg.h>
#include <intrins.h>

换成
#include <reg52.h>
#include <intrins.h>

感觉上programming style btw micro c 和keil有很大的不同。
给我我会写过整个program.+_+

[ 本帖最后由 fritlizt 于 17-12-2006 12:56 PM 编辑 ]
回复

使用道具 举报

发表于 26-12-2006 11:18 PM | 显示全部楼层
原帖由 Right 于 17-12-2006 10:11 AM 发表


Silicon Lab 是免费的吗?
如果你要header files,给我你的电邮,我寄给你让你build...
ok?


只要买silicon lab 的8051就有了,很像是免费的
我的mail是
flame000230@gmail.com
回复

使用道具 举报


ADVERTISEMENT

 楼主| 发表于 27-12-2006 11:11 AM | 显示全部楼层
原帖由 jie2003 于 26-12-2006 11:18 PM 发表


只要买silicon lab 的8051就有了,很像是免费的
我的mail是
flame000230@gmail.com


你有silicon lab??免费的??
回复

使用道具 举报

发表于 30-12-2006 10:25 PM | 显示全部楼层
原帖由 Right 于 27-12-2006 11:11 AM 发表


你有silicon lab??免费的??


没有。。。
是学校的
回复

使用道具 举报

发表于 9-1-2007 09:05 AM | 显示全部楼层

回复 #9 Right 的帖子

小弟也是在找着8051 micro C的development system。但只找到Keil C的试用版。
回复

使用道具 举报

发表于 8-5-2007 06:41 PM | 显示全部楼层

回复 #9 Right 的帖子

Silicon lab 是免费的,网上下载就有啦!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

 

ADVERTISEMENT



ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


版权所有 © 1996-2023 Cari Internet Sdn Bhd (483575-W)|IPSERVERONE 提供云主机|广告刊登|关于我们|私隐权|免控|投诉|联络|脸书|佳礼资讯网

GMT+8, 23-12-2024 05:38 PM , Processed in 0.130619 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表