C语言,单片机主要运用到那些?
在单片机的开发和应用中,高级语言已经逐渐被引入。
c语言就是其中之一。对于习惯于组装的人来说,他们总是觉得可控性高级语言的不好,所以不如汇编自由。
但是,只要我们有一定的C语言知识,有些东西还是很容易做出来的。以下是笔者在实际工作中遇到的一些问题,希望对C51初学者有所帮助。
一、C51热启动代码的编译
对于工业控制计算机,通常有一个看门狗电路。当看门狗动作时,计算机复位,这是热启动。
一般情况下,热态启动时不允许从零开始,这会导致现有的测量值或计算值被重置,从而导致系统运行异常。
所以当一个程序必须判断是热启动还是冷启动时,常见的方法有:确定某个内存单元为标志位(如0x7f位和0x7e位),
启动时,首先读取存储单元的内容,如果它等于特定值(例如,两个存储单元都是0xaa),则认为是热启动。
否则就是冷启动,程序执行初始化部分,给这两个存储单元赋值0xaa。
按照上面的设计思路,在编程的时候,设置一个指针指向某个特定的存储单元,比如0x7f,然后在程序中进行判断。该计划如下:
voidmain()
{chardata*HotPoint(char*)0x7f
if((*hotpoint0xaa)ampamp(*(-hotpoint)0xaa))
{
}
其他
{HotPoint0x7e
}
但在实际调试中发现,无论是热启动还是冷启动,启动后所有存储单元的值都被重置为0,当然也无法实现热启动的要求。这是为什么呢?原来用C语言编程时,启动时执行的代码并不是从main()函数的第一句开始,而a开始代码应该在main()函数的第一句执行之前执行。正是这个代码执行清除工作。c编译器提供了这个初始代码的源程序,命名为CSTARTUP。A51打开这个文件,可以看到下面的代码:
。
IDATAl:
如果IDATALENltgt0
MOVR0,#伊达伦-1
CLRA
IDATALOOP:·MOV
DJNZR0,IDATA环
ENDIF
。
可以看出,初始代码在执行代码判断是否热启动之前,已经清空了所有的存储单元。如何解决这个问题?幸运的是,可以通过修改startup.a51的源文件,然后用编译器附带的a51.exe程序编译startup.a51得到startup.obj文件,再用这段代码替换原来的启动代码,来改变启动代码。具体步骤是(设C源程序命名为HOTSTART。c):
修改startup.a51源文件(该文件位于C51LIB目录中)。
执行以下命令:
A51startup.a51获取startup.obj文件。将该文件复制到HOTSTART的目录中。C
用C51.EXE编译编译好的C源程序,得到目标文件HOTS。
酸酸的。OBJ.
使用命令L51HOTSTART,STARTUP进行连接。OBJ获得绝对目标文件热启动。
获得快速启动。带OHS51热启动的十六进制文件。
startup.a51的修改要根据自己的需求进行。例如,如果IDATAL:。
LCALL0DEOOH
用C语言编程如何实现这个功能?C语言中有一个函数指针的概念,可以用函数指针来调用函数。函数指针变量的定义格式为:
类型标识符(*指针变量名)()
定义指针后,可以给指针变量赋值以指向函数的起始地址,然后使用
(*指针变量名)()可以调用这个函数。例如:
无效总管(无效)
{
Void(*DispBuffer)()
DispBuffer0xde00
用于()
{密钥()
调度缓冲区()
}
}
3、将浮点数转换成字符数组
作者在编写应用程序时有这样一个要求:运算结果(浮点数)存储在EEPROM中。我们知道,浮点数在C语言中是以IEEE格式存储的,一个浮点数占用四个字节。例如,浮点数34.526存储为四个数字(160,26,10,66)。要求在EEPROM中存储一个浮点数,其实就是存储这四个数。那么如何在程序中得到一个浮点数的组成呢?
存储浮点数时,它们存储在连续的字节中。只要你试着找到存放地点,就能得到这些数字。可以定义一个void的指针,将指针指向要存储的浮点数,然后将指针强制转换为char类型,这样就可以使用指针得到构成浮点数的每个字节的值。具体程序如下:
#defineucharunsignedchar#defineuintunsignedintvoidFtoC(void)
浮动a
uchari,*px
Ucharx[4]
Pfampa
a34.526
用于(Ioilt4I)
{*(pxi)*((char*)pfi)
}
}
如果号码已经存在EEPROM中,就要取出来合并,方法相同。请参考以下程序。
#defineuchar无符号char#defineuint无符号int
voidCtoF(无效)
浮动a
uchari,*px
ucharx[4]{56,180,150,73}
void*pf
pxx
普法帕
用于(Ioilt4I)
{*((char*)pfi)*(pxi)
}
}
上面使用的C语言是富兰克林C51V
什么叫单片机?
什么是单片机?
答::单片机因将其主要部件集成在一个芯片上而得名,具体来说就是将中央处理器、随机存取存储器ROM(只读存储器、中断系统、定时器/计数器、I/O(输入/输出)接口电路等主要微机部件集成在一个芯片上。虽然单片机只是一个芯片,但从组成和功能上来说,它具有计算机系统的属性,所以简称为单片机(SCMC)。
单一的单片机的发展历史并不长,但单片机发展很快,种类太多,从1位、4位、8位到16位、32位单片机,集成度更高,功能更强,应用更广。如今,高速单片机已经发展到300M。
单片机的分类及应用领域
1.单片机的分类
根据控制应用的需要,单片机可分为通用型和专用型。通用单片机是一种基础芯片,内部资源丰富,性能全面,适用性强,可以覆盖多种应用需求。用户可以根据自己的需求为不同的应用设计控制系统,即一般的单片机都有一个重新设计的过程。
通过用户的进一步设计,可以形成以通用单片机为核心,配以其它外围电路的应用控制系统。
2.单片机的应用领域
(1)工业自动化。工业生产的自动化可以使工业系统处于最佳状态,提高经济效益,提高产品质量,降低操作人员的劳动强度。因此,自动化技术已广泛应用于机械、电子、电力、石油、化工、纺织、食品等轻重工业领域。在工业自动化技术中,无论是过程控制技术、数据采集与测控技术,还是生产线上的机器人技术,都需要单片机的参与。在工业自动化领域,机电一体化技术将发挥越来越重要的作用。在这项集机械、微电子和计算机技术于一体的综合技术中,单片机将发挥越来越重要的作用。
(2)仪器仪表。现代仪器仪表的自动化、智能化要求越来越高,最好用单片机来实现。随着单片机的使用,将加速仪器仪表的数字化、智能化、多功能化和柔性化。
性化的发展。而且,单片机的使用还有助于提高仪器的精度和准确度,简化结构,减小体积和质量,便于携带和使用。还具有降低成本、增强抗干扰能力、便于增加显示、报警和自诊断等功能。
(3)家用电器。智能化是家电的发展趋势,也是家电产品的进一步提高。;智能化需要单片机的参与,所以厂家经常标榜"计算机控制与应用提高自己产品的档次,如洗衣机、冰箱、空调、微波炉、电视机和视听设备等。"计算机与电子产品这里说的其实是单片机。
幸福在于知足上海2019年7月25日。