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

作者&投稿:衡哪 (若有异议请与网页底部的电邮联系)
如何找到STC89C52RC单片机RXD TXD GND VCC及各针脚的定义~

89C51是一种低电压、高性能的CMOS 8位微处理器,具有4K字节闪存可编程只读存储器e68a847a643133433616238,俗称单片机,单片机的可擦除只读存储器可重复擦除100次,该器件采用ATMEL高密度非易失性存储器,与MCS-51指令集和输出管脚兼容。
单片机的可擦除只读存储器可重复擦除100次,该器件采用ATMEL高密度非易失性存储器,与MCS-51指令集和输出管脚兼容。
由于多功能8位CPU和闪存在一块芯片中的结合,ATMEL的89C51是一款高效的微控制器,89C2051是它的简化版,89C单片机为许多嵌入式控制系统提供了一种灵活、廉价的方案。

扩展资料:
它具有以下标准功能:8K字节闪存、512字节ram、32位I/O端口线、看门狗定时器、内置4kbeeprom、max810复位电路、3个16位定时器/计数器、6矢量2级中断结构、全双工串行端口。
另外,stc89x52还可以简化为0Hz静态逻辑运算,支持两种软件选择节电模式。
在空闲模式下,CPU停止工作,允许ram、定时器/计数器、串行端口和中断继续工作。
在断电保护模式下,保存RAM内容,冻结振荡器,单片机的所有工作停止,直到下一次中断或硬件复位。
参考资料来源:
百度百科-STC89C52单片机

你是烧程序进去吗?程序要看实际情况来写啊,如果芯片不一样那肯定不行了

首先建议楼主系统的学一下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~7题目,都是可学可不学的。
这都是C语言惹的祸。
C语言是高级语言,和硬件不搭边的。
楼主可以试试学习汇编语言,这是单片机的专用语言,比C语言简练多了。

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

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

这个说明LZ的基础不够。。

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

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

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


敦化市15323994759: 怎么我的单片机程序老跑飞?(STC的)而且跑飞后再写也写不进去. -
阎狄艾悉: 1、你好我想问你知道跑飞的意思吗,程序跑飞一般是指PC指针不按照你的程序思路去指向了,比如你退出中断的时候应该回到之前的那个压栈PC处却没有,这样的现象我们认为程序跑飞.2、对于程序跑飞一般我们采用看门狗的方式来让程序...

敦化市15323994759: 51单片机编程遇见的问题 求大神指导!
阎狄艾悉: 1. 单片机在上电时,大部分寄存器都有一个默认初值(数据手册中都会提到).这些初值标定了一种状态,只有和自己需求不符合的才进行改动,否则都不用写出来. 2.这是使用的中断向量标号,用来确定是那种中断 3.定时器定时完成后,有两种方式,咱自己去查询标志位(当标志位置一时说明计时1/120s到了)或者他自动直接产生中断进入中断函数处理. good luck! 步行者===电子单片机团 qq:1320249827

敦化市15323994759: 单片机 编程 相关问题 我的单片机是STC89C51RC 商业级,最高40M运算速度. -
阎狄艾悉: 首先建议楼主系统的学一下C语言和单片机.下面针对每个问题尽力回答一下:1、程序开头#include,只在单片机的C语言中有用,P...

敦化市15323994759: 一个关于单片机编程的问题 -
阎狄艾悉: 要实现你说的功能,需要使用EEPROM,单片机上电后需要去读取EEPROM中的密码,修改密码后再将新密码写入EEPROM中,这样就可以了.

敦化市15323994759: 单片机的编程 -
阎狄艾悉: 单片机用的C语言仅是C语言中极少的一部分,也是最基础的,所以我觉得没有必要重新学C,多看看这方面别人编的单片机C语言例程,有看不懂的地方再看一下书,多动下手,我觉得就很容易上手了,C语言的一大优点就是易读懂,所以我觉得在单片机上直接用C语言写就行. 我学单片机和你一样,刚开始也是学汇编的,再去学C,学C时也没有把C语言研究的很透,但我觉得已够用了!

敦化市15323994759: 请问一个单片机C语言编程问题用keil编有关单片机的程序如果要有
阎狄艾悉: 在电脑上编译通过不仅看不到结果,也不能说明你写的程序的正确性.通常情况下,仅在电脑上编译通过的程序很难一次就运行成功.你需要一块针对你开发程序的开发板,然后反复将编译见过放到开发板里,进行测试,知道正确为止 通常开发板是买的,不同的开发板价格不同

敦化市15323994759: 单片机的编程问题 大家来帮忙啊
阎狄艾悉: MOV R1,#50H ;R1用来表示RAM的起始地址,主要是为了实现8次循环数据地址的移动 MOV R0,#0;用来存放相加结果的高字节;注两个单字节相加有可能会溢出,比如A=255+1;那么最后A=0;C=1;我把C存入R0中,这样你就知道实际结果...

敦化市15323994759: 单片机方面的问题 -
阎狄艾悉: 学习单片机是需要多方面知识的支持,学好单片机首先需要多动手,多做实验,在玩中学习单片机.至于用什么语言编程,我认为应该从汇编语言学起,这样可以更多的理解单片机的内部构造,C语言需要学精.当然这些都不难,要学单片机还需要学习电子电路,这是难点,在今后的单片机应用中,根据你的需要你要精通各种电路(模拟、数字和混合)的设计,新元件的应用,原件的选型,元器件数值的计算,这需要你平时多注意搜集和研究.还需学习电路设计软件(如Protel 99 SE)和单片机编译软件(如Keil 或伟福).如果你掌握了以上知识你就是一名合格的单片机设计师了.

敦化市15323994759: 单片机程序问题
阎狄艾悉:由福州卓跃为您解答问题:不同的编译器的目的不一样,他所支持的命令也不一样,keil C 一般拿来做八位单片机的程序,这些程序结构简单,而且需要运行速度有限.所以用不着栈,于是他就不设置了,但是win32为是32甚至64位机,内存上G,CPU也有好几个G,这么高的速度,当然对一些程序有高要求了.但是如果你一定要用栈的话,建议你在Linux的对单片机进行编程,那样子会好一点.

敦化市15323994759: 谁帮我解答一下单片机程序的问题 -
阎狄艾悉: #include unsigned char flag;//定义一个变量(标志位) unsigned char temp;//定义一个变量 main() { TMOD=0x20; //设置定时器1为工作方式2(自动装初值) TH1=0xFD; //用来给TL1的初值 TL1=0xFD; //定时器1的初值 TR1=1; //开启定时...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网