单片机 编程 相关问题 我的单片机是STC89C51RC 商业级,最高40M运算速度。

1.写程序开头 都要写一行单词和符号吗?#include<reg52.h>
2.第二行些什么东西?
3.void main defind 等等,这些都是什么意思?有什么用?
4.大括号{}是干什么的?格式上都是要写成
{
DKUGNOIGERGKJFDF
}
这样的格式吗?而且一串字符前面还要空上四个空格?
5.++ == /* 等等这些符号什么意思?还有那些符号?
6.()这个小括号里面经常不写东西,它的作用是什么?不要他不行吗?
7.0xEF 0xef 这是两个程序中的,EF ef到底大写对,还是小写对?0是什么意思?x是什么意思?0xef又是什么意思?
8.把电脑中写好的程序,通过一根电线下载到单片机里面,是用单片机上面的哪个引脚下载的?这根电线里面一共有好几根小电线,怎么和单片机上面的引脚一一对应?
9.单片机这么多的引脚,分别是干什么用的?(这个问题回答与否是个人爱好,我觉得比较困难)

首先建议楼主系统的学一下C语言和单片机。下面针对每个问题尽力回答一下:

1、程序开头#include<reg52.h>,只在单片机的C语言中有用,PC机的C语言不需要。其含义是包含了51单片机单片机中的特殊功能寄存器的地址定义,换句话说比如单片机的累加器ACC,其实是助记符,程序中可以直接使用ACC这个助记符,在reg52.h文件中对这此字符做了定义,程序编译时看见ACC就会用其实际数据0xE0替换掉ACC。这种方式使得编程者不需要记忆实际数据,只记住助记符就可以了,一是方便而是不易出错。
2、同理,一般还有诸如#include<STDIO.h>等。.H文件作用很多,上面就是一种,还有其它许多功能,包含了一些常用的函数,如求三角函数值sin(x)、比较两个字符串是否相同strcmp(s1,s2)等,这些都可能是经常用的,所以编译器将这些功能都预先做完,编程者将.H文件这样写在程序中就可以直接调用了,否则编程者需要自己编岂不麻烦。
3.void main:是C语言程序的入口函数名,其中void属于函数返回值的数据类型(void本身是空数据类型,也就是没有返回值),main是C语言的保留字,代表整个程序入口,所有的C程序必须有且只有1个main函数。至于#defind,其含义就像1中所描述,可以将一些常量、表达式写成易于记忆的方式,便于后面程序的编写,比如圆周率,数据很长,程序中多次要用,可以这样定义:#define PAI 3.141592654... ,以后程序中要用时比如求周长L,半径为20,就可以这样写:L = 2*20*PAI ,可见这样又简单,又不易错。类似的还有诸如typedef、#ifdef等,还是等你学了C语言后再解释吧,否则说不清。
4.大括号{}:一般用于说明函数的函数体、循环语句的循环体、判断语句的结果执行体等等,总之就是标注了一组程序语句的范围,{是起始, }代表截止。至于前面的空格,仅仅是为了阅读的方便,就像写文章是每一段的开始都不会从该行头部开始,都会留2个汉字的空间。留几个空格就是为了看清程序的整体结构的层次,是编程者的良好习惯。至于用几个空格没关系。
5.++ == /* 等等这些符号什么意思:这些都是C语言中的运算符。C语言的运算符应该是比较多的,你还是看书比较全面。其中最基本的自然是+、-、X、/、=、%等,特殊的比如i++,代表i=i+1,也就是将变量i的内容+1后在送回给i变量;还有比如i+=2,含义是将变量i的内容+2后在送回给i变量;还有比如if(i==2),含义是判断i变量是否等于2,。。。。,还有很多,真的需要系统学习
6.()这个小括号里面经常不写东西,它的作用是什么?不要他不行吗?
这种情况一般出现在函数中,比如前面所说void main(),就是一例,两个小括号中没有内容代表此函数没有需要传递过来的其它参数。函数的作用主要是便于软件的模块话管理,比如一个简单的求两个数之和的函数可以这样写:
int Sum(int a,int b)
{
return a+b;
}
那么要求123+234结果并将结果放入变量C时就可以这样调用:
c = Sum(123,234)
()内包含的就叫参数,调用时将实际数据填入就行了。有些函数可能只是执行一个操作,不需要参数,那么此时()内就不需要写内容或写作(void),但必须有(),因为它表示这是一个函数。
7、0xEF 0xef :这代表两个常数,就像87,76等一样,这里采用大写、小写都行。0x整体表示此常数是16进制数,0xEF就是16进制数EF,也就是十进制的239。你可以使用Windows系统自带附件中的计算器软件体验一下数据类型关系。
8、单片机程序下载是通过单片机的串口实现的,一般串口就需要三根线:发送线、接收线、地线(地线作为参考电平或说收发信号回路吧),在单片机中,收、发两根线是固定的,不能随便接,而且单片机的这两条线只实现了基本功能,要和电脑实际链接还需要将这两条线经232电平转换芯片才行,否则可能会损坏单片机系统。就好比手机充电是需要一个变压器得到充电电压,直接将220v接入手机是不行的。信号线的连接上:PC机的发送线接单片机系统的接收线,PC机的接收线接单片机系统的发送线。此处还需要一定基础,建议先买个开发板看看其电路连接再讨论。
9、单片机引脚虽多(其实和ARM比起来少多了),40个管脚,其实就分几类
1)电源和地(2根)
2)晶振(2根)
3)复位脚(1根)
4)ALE(1根):用于访问外部数据存储器,开始可不关心,有一定基础后再深究
5)PSEN(1根):用于访问外部程序存储器,同样有一定基础后再深究;
6)EA(1根):程序存储器控制,记住一般接高电平,有一定基础后再深究;
7)IO口(4组32根):包括P0、P1、P2、P3四组8位口,这是实际使用的线,比如可以用1根线接到发光二极管,然后通过控制该线的高低电平达到点亮,熄灭发光管的目的。其中P3口有双重功能,比如上一问中的串口就是使用了P3口中的两根线实现的。

楼主提得问题确实太基础了,但并不奇怪,隔行如隔山嘛,真要了解确实需要从头学习C语言和单片机。
写这么多,希望有所帮助。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-07-30
楼主问的1~7题目,都是可学可不学的。
这都是C语言惹的祸。
C语言是高级语言,和硬件不搭边的。
楼主可以试试学习汇编语言,这是单片机的专用语言,比C语言简练多了。追问

那 C语言 与 汇编语言 ,他们的 优 劣 势 是什么呢?为什么会有两种编程的语言?

追答

CPU只能识别、执行机器语言。
一般人编写的程序,要由““编译软件””变换成机器语言。
编译软件,有很多种,它们可识别、转换的语言,就太多了。
那么,计算机语言的种类,常用的有几十种。
单片机方面所用的,有汇编和C,用熟了,两种都差不多。
看看:
http://hi.baidu.com/%D7%F6%B6%F8%C2%DB%B5%C0/

第2个回答  2011-07-29
你会C语言么? 这是单片机C编程必要的头文件(#include<reg52.h>) 还有一些定义(define 神马的) ,你应该看看郭天祥的视频 《十天学会单片机》网上很好搜。各大视频网站都有追问

他的视频我都下载了,看不懂!开始第一课,还行,往后越来越不懂!

追答

额 他讲的是最细致的了·····边看边练得,其实有很多东西会用就行 不用研究太明白·

追问

其实,我并非是喜欢钻牛角尖的人,也许是生活经历的原因,所以,对于每一件事,现在都变得非常的严谨,尤其是知识运用方面,生怕不了解详细,出了错误。作为一个生手,类似于“头文件”之类的单片机语言概念,我也已经听说了好几次,但是我就在想,难道就这一种头文件吗?不管变什么语言都需要着一种头文件吗?带着这些疑问,我来到了网上,所以,问得有些细致。

第3个回答  2011-08-01
LZ,这些都是基础呢,建议先学C语言
有些东西光是通过讲解和书本是无法深刻理解的,只有自己做过才知道其中的原因和来由
LZ不妨边学边做些基础练习(包括C语言 C51 汇编)
学习是个渐进的过程
切不可妄想一步登天
第4个回答  2011-07-29
这个说明LZ的基础不够。。

知道一点模拟电路,数字电路特别是数字电路方面的东西是很重要的。如果你学过微机原理,明白计算机是怎么工作的话,理解单片机就是很简单的事情。

1 第一行这个?#include<reg52.h>是C语言的头文件。这句话的意思是编译的时候呢,需要一个reg52.h的文件。
2 第二行写的东西有一些宏定义,变量的定义等
3 这三个都是关键词,void表示空,用来指明一个函数有返回或者参数传递;main 指明主函数(一个程序中只能有一个main);define用于宏定义
4这个大括号的使用是C语言中的一个规定格式,一个函数是要一个{}把它的语句括起来
5。。。。。。。。。。。。。。。。。
6.。。。。。。。。。。。。。。。。。。。
7.。。。。。。。。。。。。。。。。。
8.。。。。。。。。。。。。。。。。。。
9.。。。。。。。。。。。。。。。。。。

矮油,解释不下去了。。。你还是找一本谭浩强的C语言书好好看看吧,这些个东西太基础了。太基础的东西还是自己慢慢咀嚼得好追问

请朋友还是帮帮我吧,他们讲的我懂得已经记下来了,不懂得才上传到网上求助。