volatile的意思是易变的、可变的,作用是限制编译器优化某些变量。首先看一段C51程序: Keil在优化级别是为8时得到如下汇编代码(部分未列出): 可以看到,变量d的值赋给x,y,z时,只有x中
Keil C51编译器是一个完全支持ANSI标准的C语言编译器,除少数关键地方外,KEILC和标准ANSI C语言是基本类似的;但是由于51单片机结构的特殊性,KEIL C进行了一些扩展。 KEIL C51的扩展类型如
USB固件分为通用枚举配置部分和类协议部分。以利用CH375主机端协议与大容量存储设备(例如U盘等)通信为例,介绍固件编程中重要的函数及其实现方法。 主机要想识别USB设备,必须获得设备的各
FFT算法是计算离散傅里叶变换的方法,它大大地减少了运算量,缩短了运算时间,使实时分析成为可能。 按时间抽取的FFT算法通常将原始的数据倒位序存储,最后按照正常顺序输出结果X 下面是128点
单片机的一个浮点数一般在KeilC51中是以4字节形式存储的,格式严格遵循IEEE-754标准。在单片机二进制数据中,浮点数用两个部分来表示,基C为2,E为阶码,M为尾数,E的保存形式是一个0~255的8位值,
为了更好的与实际衔接,有三个方面要考虑:发送FSK信号的形式和参数,解调器的抗干扰性能,即差错率与输入信号比的关系,技术的可行性及设备成本等。从抗干扰性能上考虑我们采用相干解调法最好,但
我们可以用数字滤波方法的C语言程序代码子函数,来完成软件滤波功能。我们假定,从8位AD中读取数据,如果是更高位的AD可以定义数据类型为int,子程序定义为get_ad()。 (1)算术平均滤波程序,
串行A/D转换器转换后的结果是以串行方式输出,数字量以串行方式输出可简化系统的连线,缩小电路板的面积,节省系统的资源。下面以TLC2543为例,介绍串行A/D驱动程序的设计。 89C51单片机与T
AVR单片机问世以来,获得广泛关注。它是一种采用精简指令集、以时钟周期为机器周期的高速单片机。它采用快速寄存器文件(共有32个寄存器 R0~R31,其中R16~R31具有较强通用功能)、快速单周期指令。另外
1.带进位位(C)的寄存器f内容左移循环指令 格式: RLF f.d 其中d=1,结果→f;d→0,结果→w,功能如下图所示。 2.带进位位(C)的寄存器f内容右移循环指令 格式:RRFf.dd的取值
假定从8位AD中读取数据(如果是更高位的AD可定义数据类型为int),子程序为get_ad();1、限副滤波/* A值可根据实际情况调整 value为有效值,new_value为当前采样值 滤波程序返回有效的实际值 */#defin
/*==============================================================1ms时标 混合式调度器(一个抢占式任务,多个合作式任务)作者:shadow.hu======================================================
一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存
随着计算机技术的更新换代,USB接口已经成为个人计算机上最重要的外部设备扩展接口,在进行USB外设开发的过程中需要编写其固件程序。在此对USB接口固件程序进行了开发,在Keil C51软件环境中,采用C语