
Keil.C.MUC.杂项
hehui211
这个作者很懒,什么都没留下…
展开
-
使用过的算法清单
使用过的各类算法原创 2022-07-21 11:14:51 · 206 阅读 · 1 评论 -
双麦降噪 突变信号消除算法
平稳信号,奇变信号处理算法原创 2021-12-18 14:32:54 · 761 阅读 · 0 评论 -
语音降噪-
matlab效果:杂音大过有效信号,播音出来完全识别不了是什么声音。经过filter后,与原音源差不多。ARM3核,keil平台实际项目验证ok,已做成lib方便以后应用。原创 2021-12-06 17:33:38 · 440 阅读 · 0 评论 -
语音-降噪算法
效果很明显,matlab算法,ARM内的C语言算法都完成。实际效果也比较好原创 2021-12-02 13:43:23 · 2845 阅读 · 0 评论 -
自适应滤波
上图,蓝色部分是原始数据,里面有100Hz,1K,2K干扰。如下图是它的频谱下图:处理后的数据频谱,1K,2K基本没有了。原创 2021-07-08 09:21:26 · 173 阅读 · 0 评论 -
STM32 UART1 DMA 发送数据
/**************************************2013-7-17 18:28:27 auto createMcuCode 2.1 Help you! hehui000@163.com**************************************/#define Uart_c#include "include.h"INT8U gU原创 2013-07-18 09:13:22 · 1743 阅读 · 0 评论 -
STM32F10x 调试口释放
STM32F10x 的DBG接口上电后默认为调试口,如果需要做为普通IO口则需要以下步骤操作。例如:需要将其PB4口做为普通口(即图中的001模式)RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);//使能AFIO的时钟AFIO->MAPR &= 0xF8FFFFFF; //[26-24]清0AFIO->MAPR |=原创 2013-07-16 10:45:00 · 726 阅读 · 0 评论 -
data,idata,xdata,pdata的区别
在51系列中data,idata,xdata,pdata的区别 data:固定指前面0x00-0x7f的128个RAM,可以用acc直接读写的,速度最快,生成的代码也最小。 idata:固定指前面0x00-0xff的256个RAM,其中前128和data的128完全相同,只是因为访问的方式不同。idata是用类似C中的指针方式 访问的。汇编中的语句为:mox ACC,@Rx.(不重要的补充:c中i原创 2012-12-06 08:50:44 · 646 阅读 · 0 评论 -
Keil c与汇编
在写这片文章之前,写了个试验程序,但总是通不过,查看汇编代码发现c文件中的语句根本没有被编译进去,怎么也找不到原因,郁闷~~ 最后在网上搜了个试验程序,把我的程序复制过去,可以编译成功,奇怪了,在我的project里就是不行,我注意到我的project编译后出现一条WARNING:*** WARNING L7: MODULE NAME NOT UNIQUE MOD原创 2012-12-06 08:49:34 · 1157 阅读 · 0 评论 -
Keil C调用汇编(一)
//c中的程序如下extern void DELAY(unsigned char i,unsigned int j);char CYZ;void main(void){DELAY(10,1000);};汇编程序如下:PUBLIC _DELAY ;程序段DELAYP SEGMENT CODE ;入口地址RSEG DE转载 2012-12-06 08:48:35 · 1524 阅读 · 0 评论 -
Keil
一、#pragma asm是什么意思? #pragma asmMOV P1,R7NOPNOPMOV P1,#0#pragma endasm实际上就是一个在C51中内嵌汇编语言的开关 二、一个 hex to bcd 的算法程序 HEX_BCD:CLR AMOV 30H,AMOV 31H,AMOV 32H,AMOV R2,#15H_B0: M转载 2012-12-06 08:48:17 · 918 阅读 · 0 评论 -
Keil内嵌汇编
前提你已建立好一个工程及一个c文件例如想在main.c文件中加入汇编。第一步:在main.c中工加入汇编的地方加入:#pragma asm;汇编指令#pragma endasm第二步:在main.c文件上点右键,option for file ....菜单进入后修改将以下两项选中Generate Assembler SRC FileAssemble SRC原创 2012-12-06 08:47:32 · 1885 阅读 · 0 评论 -
STM32 PWM底层驱动
//说明:利用TIMER1的CH1即PA8端口输出PWM驱动蜂鸣器。以下是代码(在STM32F103上应用的)void fn_pwm_init(INT16U _pwmFreq){//ToDo: Add your code Here: /* Timer1 Channel 1, PA8 IO初始化*/ GPIO_PinRemapConfig(GPIO_PartialRemap原创 2013-07-31 12:03:59 · 1639 阅读 · 0 评论 -
STM32F103系列 HSI 48M
void RCC_Configuration(void){ RCC_DeInit(); /*将外设RCC寄存器重设为缺省值 */// SystemInit();//源自system_stm32f10x.c文件,只需要调用此函数,则可完成RCC的配置.具体请看2_RCC RCC_HSEConfig(RCC_HSE_OFF);原创 2013-10-22 10:21:32 · 2180 阅读 · 0 评论 -
产品程序 单片机程序 规划
最近做了几个产品的程序,后来发现其它员工作的程序架构超乱,真的有点想重写。如果需要长期考虑真需要重写这此下属开发的软件。我们产品的MCU程序目前分为两种语言C和汇编。其这两种语言都能做得很好的结构。 设计程序的目标: 1、安全性:产品程序能稳定可靠的按我们的原意执行。 2、可读性:能让自已和别人很好地理解代码。 3、维护性:当产品部分功能变化时,能很原创 2014-11-27 09:28:31 · 739 阅读 · 0 评论 -
stm32f103rc
stm32f10x 唯一ID 获取原创 2015-02-27 21:25:29 · 970 阅读 · 0 评论 -
计算分贝与幅度关系
-3dB也叫半功率点或截止频率点。这时功率是正常时的一半,电压或电流是正常时的0.707。在电声系统中,±3dB的差别被认为不会影响总特性。所以各种设备指标,如频率范围,输出电平等,不加说明的话都可能有±3dB的出入。 根据电压幅度计算:20*log10(0.707)=-3dB 根据功率计算:10*log10(0.5)=-3dB根据dB计算幅度:exp(xdB/20)原创 2015-08-14 16:05:10 · 17138 阅读 · 1 评论 -
matlab 将wav文件转成 C 数组
嵌入式开发时,需要做一些提示音。那么网上下载的mp3如何转换成C语言数组,此文是实际项目的应用,供参考。原创 2016-06-28 14:57:33 · 2233 阅读 · 0 评论 -
STM32 心电滤波
STM32 ECG 滤波。原创 2017-07-12 19:56:49 · 2351 阅读 · 8 评论 -
动态存储分配
动态存储分配通过标准C 的功能函数malloc 和freeKeil C 提供了动态存储分配功能对大多数应用来说应尽可能在编译的时候确定所需要的内存空间并进行分配但是对于有些需要使用动态结构如树和链表的应用来说这种方式就不再适用了Keil C 对这种应用提供了有力的支持动态分配函数要求用户声明一个字节数组作为堆根据所需要动态内存的大小来决定数组的长度作为堆被声明的数组原创 2012-12-05 08:57:37 · 452 阅读 · 0 评论 -
Keil宏定义取代函数
#define ledon(i) {\if (i==50) P1=0;\else P1=0x21;\}原创 2012-12-06 08:43:14 · 2508 阅读 · 0 评论 -
常量定义及定的方法二
常量定位及初始化:新建一个TABLE.C 写入char code table[]={ 初始值};KEIL定位:选择 option-->BL51 Locate 在CODE:栏中写入如:?CO?TABLE(0x7000)这样,table[]表就定位到了0x7000开始的程序段。原创 2012-12-06 08:51:23 · 656 阅读 · 0 评论 -
Keil应用经验
keil c 中可以用关键字 reentrant 定义, 如:void fun(void) reentrant{} 但函数中不可以使用BOOL变量,以为KEIL默认 将所有变量定位到外部RAM的最高处,而外部RAM不可以位寻址。 另外如果你的外部RAM不足64K(0XFFFF),你还的更改KEIL系统文件STARTUP.A51中 XBPSTACKTOP EQU 0FFFFH+1;这一行原创 2012-12-06 08:51:06 · 1130 阅读 · 0 评论 -
Keil仿真命令
这里说一下我平常用Keil软仿真的一些感受,keil的软仿真功能是很强的,有方便的信息窗口,提供一输入信息的命令等首先用软仿真能够 找出一些软件的一些逻辑问题,也能看到一个软件整个流程是否和你之前写程序的思路一样,例如:|,和||打错了,本来是按位或的,结果打成了逻辑或,运算后的结果只有0或1,这时仿真就能发现,又如:串口中断,你忘记清除TI,RI等,仿真时会有提示,也能找出问原创 2012-12-05 08:59:37 · 1692 阅读 · 1 评论 -
Keil存储器模式
存储器模式C51 提供了3 种存储器模式来存储变量过程参数和分配再入函数堆栈你应该尽量使用小存储器模式很少应用系统需要使用其它两种模式像有大的再入函数堆栈系统那样一般来说如果系统所需要的内存数小于内部RAM 数时都应以小存储模式进行编译在这种模式下DATA 段是所有内部变量和全局变量的默认存储段所有参数传递都发生在DATA 段中如果有函数被声明为再入函数编译器会在内部RAM 中原创 2012-12-05 08:58:15 · 1048 阅读 · 0 评论 -
预处理
C程序的源代码中可包括各种编译指令,这些指令称为预处理命令。虽然它们实际上不是C语言的一部分,但却扩展了C程序设计的环境。本节将介绍如何应用预处理程序和注释简化程序开发过程,并提高程序的可读性。4.7.1C语言的预处理程序ANSI标准定义的C语言预处理程序包括下列命令:#define#error#include#if#else#elif#endif#ifde原创 2012-12-05 08:38:08 · 310 阅读 · 0 评论 -
C语言 编译提示信息大全
Ambiguous operators need parentheses 不明确的运算需要用括号括起 Ambiguous symbol ``xxx`` 不明确的符号 Argument list syntax error 参数表语法错误 Array bounds missing 丢失数组界限符 Array size toolarge 数组尺寸太大 Bad ch原创 2012-12-05 08:34:40 · 770 阅读 · 0 评论 -
单片机C语言
单片机C语言之一___________________________________________________________________ _____________________ 预处理一》宏定义:1、不带参数:#define 标识符 常量表达式 /*#define是宏定义命令,宏名(标识符)好习惯用大写*/#defi转载 2012-12-05 09:03:25 · 1191 阅读 · 1 评论 -
结构体和共用体合用(struct及union)
举例说明:当一个程序中应用两个char型变量,又有一个int型变量,但int变量是在char变量应用前使用,那么可以与占用那两个char变量的空间。那么可以以下方式定义,节省空间。union { uint i; struct { uchar bitcount; uchar bytecount; }tx; }count;速度会慢原创 2012-12-05 08:55:12 · 863 阅读 · 0 评论 -
Keil C的中断
以下是梦游的一些分析: 一、中断函数是一个特殊的函数,没有参数,也没有返回值;但是程序中允不允许使用return呢?答案是允许的,不过只能用"return;",不能用"return(z);";用在一些需要快速返回的地方,对应的汇编会有多个ret语句,相对效率会高一些。 二、using的用法,using可以修饰任何函数,不过个人建议只用来修饰中断函数;简单的说,“us原创 2012-12-05 08:54:03 · 2201 阅读 · 0 评论 -
volatile
总结:当一个局部变量,用到两次,但是在运行中会变,那么要用它来声明。这是编译器一般会选择直接取这前一次的值来充当当前值。详情见下: volatile的本意是“易变的” 由于访问寄存器的速度要快过RAM,所以编译器一般都会作减少存取外部RAM的优化。比如:static int i=0;int main(void){...while (1){if (i) d原创 2012-12-05 08:53:29 · 248 阅读 · 0 评论 -
static 应用
static变量大致分为三种用法: 1. 用于局部变量中,成为静态局部变量. 静态局部变量有两个用法,记忆功能和全局生存期. 2.用于全局变量,主要作用是限制此全局变量被其他的文件调用. 3.用于类中的成员.表示这个成员是属于这个类但是不属于类中任意特定对象 有时希望函数中的局部变量的值在函数调用结束后不消失而保留原值,即其占用的存储单元不释放,在下一次该函数原创 2012-12-05 08:52:02 · 303 阅读 · 0 评论 -
将PC串口转为MCU串口仿真
在单片机系统中,串口(UART,通用异步收发接口)是一个非常重要的组成部分。通常使用单片机串口通过RS232/RS485电平转换芯片与上位机连接,以进行上位机与下位机的数据交换、参数设置、组成网络以及各种外部设备的连接等。RS232/RS485串行接口总线具有成本低、简单可靠、容易使用等特点,加上其历史悠久,所以目前应用仍然非常广泛;特别对于数据量不是很大的场合,串口通信仍然是很好的选择,有着广阔转载 2012-12-05 09:01:42 · 949 阅读 · 0 评论 -
Keil3打字错位
打到Keil的安装目录下的TOOLS.INIBOOK0=UV3\RELEASE_NOTES.HTM("uVision Release Notes",GEN)ANSI=1//增加这一行,字错位即可解决。原创 2012-12-05 08:33:13 · 976 阅读 · 0 评论 -
Keil中高128地址
AT89s52 datasheet原文摘抄:特殊功能寄存器(SFR)的地址空间映象如表1所示。并不是所有的地址都被定义了。片上没有定义的地址是不能用的。读这些地址,一般将得到一个随机数据;写入的数据将会无效。AT89S52 有256 字节片内数据存储器。高128 字节与特殊功能寄存器重叠。也就是说高128字节与特殊功能寄存器有相同的地址,而物理上是分开的。当一条指令访问高于7FH 的地址时转载 2012-12-06 08:50:18 · 1743 阅读 · 0 评论 -
Keil C调用汇编(二)
NAME TX400us using 0TX_N_TIME EQU 80 ;405usTX_W_TIME EQU 250 ; ;1215usTX_S_TIME EQU 20;20同步宽度 68sendtimes EQU 6;发射次数 txpin BIT P0.5?PR?_tx400us?TX SEGMENT CODE转载 2012-12-06 08:49:11 · 536 阅读 · 0 评论 -
编写高度优化的代码
Keil 编译器能从你的C 程序源代码中产生高度优化的代码但你可以帮助编译器产生更好的代码下面将讨论这方面的一些问题8.1 采用短变量一个提高代码效率的最基本的方式就是减小变量的长度使用C 编程时我们都习惯于对循环控制变量使用int 类型这对8 位的单片机来说是一种极大的浪费你应该仔细考虑你所声明的变量值可能的范围然后选择合适的变量类型很明显经常使用的变量应该是unsign原创 2012-12-05 08:58:54 · 427 阅读 · 0 评论 -
I2C应用实例
I2C总线原理及应用实例 I 2 C(Inter-Integrated Circuit)总线是一种由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备。I 2 C总线产生于在80年代,最初为音频和视频设备开发,如今主要在服务器管理中使用,其中包括单个组件状态的通信。例如管理员可对各个组件进行查询,以管理系统的配置或掌握组件的功能状态,如电源和系统原创 2012-12-05 08:51:16 · 535 阅读 · 0 评论 -
Keil伪指令
1、DS ---预留存储区命令格式: 〔标号:〕 DS 表达式值其功能是从指定地址开始,定义一个存储区,以备源程序使用。存储区预留的存储单元数由表达式的值决定。TMP: DS 1从标号TEP地址处开始保留1个存储单元(字节)。2、BIT---定义位命令格式: 字符名称 BIT 位地址其功能用于给字符名称定义位地址。SPK BI原创 2012-12-05 08:36:52 · 1972 阅读 · 0 评论 -
Keil软仿真——串口
当电脑有两个串口时,(或用USB转换一个)利用电脑实现软件调试,很方便。硬件:将电脑的两个串TX、RX交叉,其他线不用接软件: MODE COMx baudrate, parity, databits, stopbits 如:MODE COM1 9600,0,8,1ASSIGN COM1SOUT 当单片机有多个串口时ASSIGN COM1SnOUT其中的n为单片机串原创 2012-12-05 08:33:54 · 567 阅读 · 0 评论