keiluvision2是德国keilsoftware公司出品的51系列兼容问题单片机c语言软件开发系统,建议使用将近于民间c语言的语法来的新,与汇编两者相比,c语言在功能上、供需结构、可读性、可维护性上有明显的优势,以致界面友好,不过有所的提高了工作效率和项目开发周期,他能合成一体汇编,您这个可以在关键是的位置嵌入,使程序达到接近于汇编的工作效率。
keilc51标准c编译器为8051微控制器的软件开发提供了c语言环境,同时记录了汇编代码又高效,飞快的特点。c51编译器的功能不断提高,使你可以十分贴紧cpu本身,及其它的衍生产品。c51已被完全板载显卡到uvision2的集成开发环境中,这个集成开发环境包含:编译器,汇编器,实时地操作系统,项目管理器,调试器。uvision2ide可为它们可以提供每种而灵活自如的开发环境
android代码阅读器app这是一款能飞速识别源代码的手机应用,实际安卓代码阅读器app你可快速网站查询文件源代码,浏览的网页多种主流编程语言等。
安卓代码阅读器app是一款简单源码阅读器,接受语法高亮显示包括含有主题风格没显示,能自动识别源码文件。android代码阅读器,很快阅读什么源代码,界面风格多元放弃自由选择,工程快捷便利管理。
1、首选再打开vc6.0软件,刚建一个空白区域的c语言文件,先引导出c语言的头文件和主函数:
2、然后再代码中在用两层for循环,输出5行数,每一行都比上一行多出1倍,先输出低不加break语句的程序,程序运行结果万分感谢:
3、之后不使用break语句,当柯西-黎曼方程i3的时候中止循环,控制输出j从1到5的所有循环。可以看到满足的条件条件的外围的部分循环就被进不了了,这一行的结果还没有打印进去:
在单片机的开发应用中,已逐渐就开始核心中高级语言,
c语言那是其中的一种。对用惯了汇编的人来说,总都觉得高级语言'可控性'不好,不如汇编那样的随心随遇。
不过如果能我们能够掌握了一定的c语言知识,有些东西应该很容易才能做成的,以下是笔者实际中工作中遇到的几个问题,如果能对初学c51者所帮助。
一、c51重复启动代码的编制
对于工业控制计算机,一般说来设有有看门狗电路,当看门狗动作,使计算机复位,这那是正常启动。
热启动时,一般不不能从头来,这将可能导致可以做到的已测量到或可以计算到的值复位,可能导致系统工作无比。
因而在程序可以判断是重复启动还是冷启动,具体用法的方法是:判断某内存单位为标志位(如0x7f位和0x7e位),
启动时简单的方法读该内存单元的内容,如果它4一个特定的值(例如两个内存单元的大都0xaa),就其实是重复启动,
不然那是快速暖机,程序执行重新初始化部份,并将0xaa赋与这两个内存单元。
参照以上的设计思路,编程时,可以设置一个指针,让其正指向某一特定的内存单元如0x7f,然后在程序中可以确定,程序追加:
voidmain()
{chardata*hotpoint(char*)0x7f
if((*hotpoint0xaa)ampamp(*(--hotpoint)0xaa))
{/*热启动的处理*/
}
exists
{hotpoint0x7e/*快速暖机的处进
*hotpoint0xaa
*(hotpoint)0xaa
}
/*正常吗工作代码*/
}
但这实际系统的调试中发现自己,无论正常启动还是节气门积碳,开机时后所有内存单元的值都被复位为0,当然了也实现程序不了热启动的要求。这是为什么呢?原来,用c语言编程时,开机时时执行的代码并非是是从main()函数的第一句语句就开始的,在main()函数的第一句语句执行前要先想执行一段'起始代码'。正是这段脚本执行了清零的工作。c编译程序提供给了这段起始代码的源程序,名为cstartup.a51,可以打开这个文件,可以清晰的看到追加代码:
.
idatalenequ80hthelengthoftheidatamemoryacrossbytes.
.
startup1:
ifidatalenltgt0movr0,#idatalen-1
clra
idataloop:,adjnzr0,idataloopendif
.
可以说,在负责执行到判断是否是正常启动的代码之前,起始代码已将所有内存单元清零。要如何帮忙解决这个问题呢?幸好启动代码是也可以你要改的,方法是:可以修改startup.a51源文件,后再用编译程序所附带的a51.exe程序对startup.a51编译,换取startup.elem文件,后再用这段代码替代原先的起始代码。具体流程是(设c源程序名为hotstart.c):
修改startup.a51源文件(这个文件在c51lib目录下)。
负责执行追加命令:
a51startup.a51得到文件。将此文件拷入hotstart.c所在目录。
将编好的c源程序用c51.exe编译好,换取目标文件hots
tart.obj。
用l51hotstart,startup.obj命令连接上,得到绝对目标文件hotstart。
用ohs51hotstart能够得到hotstart.hex文件,再试一下。
相对于startup.a51的修改,依据什么自已的需要接受,如将idatalenequ80h中的80h替换成70h,就可以使6f到7f的16字节内存不被清零。
二、就内部函数eprom中已特性的程序
笔者是用仿真机,由6位数码管显示,在内存de00h处放总是显示子程序,只需即将总是显示的数后放总是显示缓冲区,然后把动态链接库这个子程序就这个可以不使用了,汇编指令为:
lcall0deooh
在用c语言编程时,要如何实现方法这一功能呢?c语言中有对准函数的指针这一概念,可以凭借这种指针来基于用函数指针调用函数。指向函数的指针变量的定义格式为:
类型标识符(*指针变量名)()
在定义好指针后就可以不给指针变量赋值,使其对准某个函数的开始存地址,接着用
(*指针变量名)()再试一下动态创建这个函数。追加例:
voidmain(void)
{
void(*dispbuffer)()/*定义方法对准函数指针*/
dispbuffer0xde00/*定义变量*/
for()
{key()
dispbuffer()
}
}
三、将浮点数能量转化为字符数组
笔者在编制应用程序时有这样的要求:将运算的结果(浮点数)存进eeprom中。我们知道,浮点数在c语言中是以ieee格式存储位置的,一个浮点数占用四个字节,或者浮点数34.526存为(160,26,10,66)这四个数。要将一个浮点数转存eeprom,事实上应该是要存这四个数。那你如何在程序中能得到一个浮点数的组成数呢?
浮点数在存储时,是存储位置尝试的字节中的,只要想法子找到存储位置,就可以我得到这些数了。是可以定义一个void的指针,将此指针正指向要存储的浮点数,后再将此指针强制破军转化成为char型,这样,借用指针就这个可以能得到排成该浮点数的各个字节的值了。具体详细程序::
#defineucharunsignedchar#defineuintunsignedintvoidftoc(void)
{floata
uchari,*px
ucharx
void*pf
pxx/*px指针指向数组x*/
pfampa/*void型指针指向浮点数首地址*/
a34.526
for(i0ilt4i)
{*(pxi)*((char*)pfi)/*噬灵鬼斩void型指针转成char型,毕竟*/
}/*void型指针没法除法运算*/
}
如果已将数存进eeprom,要将其接过合并,方法又是一样,可做个参考下面的程序。
#defineucharunsignedchar#defineuintunsignedint
voidctof(void)
{floata
uchari,*px
ucharx
void*pf
pxx
pfampa
for(i0ilt4i)
{*((char*)pfi)*(pxi)
}
}
以上所用c语言为franklinc51ver3.2。