查看: 1952|回复: 11
|
Micro C 8051 Development System 完整版
[复制链接]
|
|
发表于 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');
} |
|
|
|
|
|
|
|
发表于 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 |
|
|
|
|
|
|
|
楼主 |
发表于 27-12-2006 11:11 AM
|
显示全部楼层
|
|
|
|
|
|
|
发表于 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 是免费的,网上下载就有啦! |
|
|
|
|
|
|
| |
本周最热论坛帖子
|