<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[luolt42的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/luolt42</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; luolt42]]></copyright><item><title><![CDATA[KEIL编译器错误精心整理]]></title><link>https://blog.youkuaiyun.com/luolt42/article/details/157102900</link><guid>https://blog.youkuaiyun.com/luolt42/article/details/157102900</guid><author>luolt42</author><pubDate>Sun, 18 Jan 2026 21:10:13 +0800</pubDate><description><![CDATA[C51编译器识别错类型有三种 1、致命错误：伪指令控制行有错，访问不存在的原文件或头文件等。 2、语法及语义错误：语法和语义错误都发生在原文件中。有这类错误时，给出 提示但不产生目标文件，错误超过一定数量才终止编译。 3、警告：警告出现并不影响目标文件的产生，但执行时有可能发生问题。程序 员应斟酌处理。 D.1 致命错误 C_51 FATAL_ERROR ACTION: <当前行为> LINE: <错误所在行> ERROR: <错误信息> terminated 或C_51 FATAL ERROR ACTIO]]></description><category></category></item><item><title><![CDATA[单片机晶振频率与波特率和定时器初值的关系]]></title><link>https://blog.youkuaiyun.com/luolt42/article/details/156950441</link><guid>https://blog.youkuaiyun.com/luolt42/article/details/156950441</guid><author>luolt42</author><pubDate>Wed, 14 Jan 2026 17:55:49 +0800</pubDate><description><![CDATA[摘要：本文分析了单片机中晶振频率与各时间周期的关系，包括振荡周期、状态周期、机器周期和指令周期。重点讨论了串口通信波特率的计算方法，指出方式1和3的波特率取决于定时器溢出速率，并给出了计算公式。特别说明使用12MHz晶振时难以精确产生9600波特率，而11.0592MHz晶振可实现精确计算。文章还比较了不同工作方式的波特率特性，为单片机时序设计和串口通信提供了重要参考。]]></description><category></category></item><item><title><![CDATA[PID控制算法：从连续到C语言数字控制]]></title><link>https://blog.youkuaiyun.com/luolt42/article/details/147526630</link><guid>https://blog.youkuaiyun.com/luolt42/article/details/147526630</guid><author>luolt42</author><pubDate>Sat, 26 Apr 2025 09:23:57 +0800</pubDate><description><![CDATA[（适合简单系统,经验丰富一些的工程师直接上手调，基本能够调节到满意的效果)•。]]></description><category></category></item><item><title><![CDATA[51内核单片机的data、idata、pdata、xdata、code]]></title><link>https://blog.youkuaiyun.com/luolt42/article/details/144744512</link><guid>https://blog.youkuaiyun.com/luolt42/article/details/144744512</guid><author>luolt42</author><pubDate>Thu, 26 Dec 2024 14:59:52 +0800</pubDate><description><![CDATA[因为Xdata修饰的变量，用的是DPTR(DPTRH和DPTRL)寻址，Pdata用的是R0和R1.DPTR因为是16位的，所以可以覆盖整个的64K外部Ram，R0和R1是8位，所以只能寻址最前面的256个，也就是外部Ram的第一页，但是，用R0寻址，比DPTR快一倍，代码也小的很多。注意： RAM就是存储变量的，但是有很多类型的RAM，比如SRAM，DRAM，FRAM（铁电随机存取存储器），MRAM（磁性随机存取存储器），本质还是RAM，区域的划分还是我们上面所言！片内存储器，可能是EEPROM吧。]]></description><category></category></item><item><title><![CDATA[【无标题】]]></title><link>https://blog.youkuaiyun.com/luolt42/article/details/144744067</link><guid>https://blog.youkuaiyun.com/luolt42/article/details/144744067</guid><author>luolt42</author><pubDate>Thu, 26 Dec 2024 14:41:02 +0800</pubDate><description><![CDATA[SRAM:内存，掉电消失，外部扩展RAM，比内部RAM稍慢，作用一样，用于定义变量。使用环境: keil2，生成的代码大小如下，data保存于内部RAM中，xdata保存于外部扩展SRAM中，code保存于FLASH中。char i :  使用的RAM前128字节。无修饰，等同与data char i，对应keil2编译后的data。code char i: 使用FLASH中的空间，不可更改，相当于存储常量。pdata char i :使用SRAM的前256字节，对应keil2编译后的 xdata。]]></description><category></category></item><item><title><![CDATA[单片机在不同内存空间（data xdata bdata）定义变量的注意事项]]></title><link>https://blog.youkuaiyun.com/luolt42/article/details/144743954</link><guid>https://blog.youkuaiyun.com/luolt42/article/details/144743954</guid><author>luolt42</author><pubDate>Thu, 26 Dec 2024 14:34:48 +0800</pubDate><description><![CDATA[固定指前面0x00-0xff的256个RAM,其中前128和data的128完全相同,只是因为访问的方式不同。外部扩展RAM的低256个字节,地址出现在A0-A7的上时读写,用movx ACC,@Rx读写。和 汇编一样,在C中定义的那些变量和数组的初始化就在startup.a51中进行,如果你在定义全局变量时带有数值,如unsigned char data xxx="100。固定指前面0x00-0x7f的128个RAM,可以用acc直接读写的,速度最快,生成的代码也最小。startup.a51的作用。]]></description><category></category></item><item><title><![CDATA[STC89C52RC单片机内部EEPROM和RAM的使用]]></title><link>https://blog.youkuaiyun.com/luolt42/article/details/144743701</link><guid>https://blog.youkuaiyun.com/luolt42/article/details/144743701</guid><author>luolt42</author><pubDate>Thu, 26 Dec 2024 14:29:20 +0800</pubDate><description><![CDATA[在Keil中编写程序，总程序中所有变量占用的字节数少于128B时候，并且储存模式为small时，对不定义的变量编译器将默认为0；一旦程序中变量总数量超过128B，必须对所有变量进行初始化，否则未被初始化的变量的默认值是不确定的。在small模式中，所有默认变量均装入单片机内部的RAM中，例如：uchar a;该模式的优点是空间大，可存变量多；在large模式中，所有默认变量可放在多达64KB的RAM中，包括内部RAM和外部RAM，在compact模式中，所有默认变量均位于单片机的256B RAM中，]]></description><category></category></item><item><title><![CDATA[c语言中的连接属性，extern与static]]></title><link>https://blog.youkuaiyun.com/luolt42/article/details/144734282</link><guid>https://blog.youkuaiyun.com/luolt42/article/details/144734282</guid><author>luolt42</author><pubDate>Thu, 26 Dec 2024 09:40:27 +0800</pubDate><description><![CDATA[就是对变量a进行定义，在main.c中的extern int  a;如果全局变量的定义放在头文件中，也就是.h文件中，如果要在另外一个文件中对定义在头文件中的external连接属性的变量进行访问， 不能通过extern关键字仅仅在源文件中进行声明，需要把头文件用include命令包含进源文件。我们一般定义的全局变量，如果前面没有加入static关键字，那么这个全局变量的连接属性就是external的，请注意在定义全局变量时请在源文件中定义，也就是在.c文件总定义，声明时在头文件中进行声明。]]></description><category></category></item><item><title><![CDATA[数码管驱动芯片TM1640的使用]]></title><link>https://blog.youkuaiyun.com/luolt42/article/details/144538495</link><guid>https://blog.youkuaiyun.com/luolt42/article/details/144538495</guid><author>luolt42</author><pubDate>Tue, 17 Dec 2024 16:20:13 +0800</pubDate><description><![CDATA[这个程序很简单啊，就是SCLK先变低，然后，判断，数据的最低位是否为高电平，如果是高电平，DIN就输出1，否则输出0。然后SCLK变高，TM1640读取数据，然后把下一位数据移动到最低位，然后重复上面的步骤，一直到8位传输完毕。在以后学习中，我们可以不写驱动程序，使用别人的程序也是可以的，但是，你要有写驱动程序的能力。一共三部分，先是设置地址模式，然后设置地址，发送数据，最后设置显示亮度。，就向联合体数组里写数据，然后，在数据发送函数里检测数据是否变化，如果变化，就把联合体数组里的数据发送出去。]]></description><category></category></item><item><title><![CDATA[NTC热敏电阻设计高精度温度计的方案2]]></title><link>https://blog.youkuaiyun.com/luolt42/article/details/144536300</link><guid>https://blog.youkuaiyun.com/luolt42/article/details/144536300</guid><author>luolt42</author><pubDate>Tue, 17 Dec 2024 15:09:45 +0800</pubDate><description><![CDATA[/==========================  存储  ====================================================//===========================    MAX512驱动程序  =======================================定义/===================================================================sendbyte]]></description><category></category></item><item><title><![CDATA[NTC热敏电阻设计高精度温度计的方案1]]></title><link>https://blog.youkuaiyun.com/luolt42/article/details/144536204</link><guid>https://blog.youkuaiyun.com/luolt42/article/details/144536204</guid><author>luolt42</author><pubDate>Tue, 17 Dec 2024 15:07:52 +0800</pubDate><description><![CDATA[/3.828伏=>R=32660   10K  Vref=5V。//2.32伏=>R=32660   2.5K  Vref=2.5V。//================  测试实际温度  ================///==============   制冷   =====================//*********************       主程序  *****************//-------------报警--------------------------]]></description><category></category></item><item><title><![CDATA[NTC测温中 经典温度查表算法--二分查找法]]></title><link>https://blog.youkuaiyun.com/luolt42/article/details/144535876</link><guid>https://blog.youkuaiyun.com/luolt42/article/details/144535876</guid><author>luolt42</author><pubDate>Tue, 17 Dec 2024 15:04:15 +0800</pubDate><description><![CDATA[/*******************************************
	
	说明：
	
	二分查找法的优点：查找速度快1024个长度的表最长只需10次查表就能得出结果
	在用NTC测试温度的方案中，NTC的温度表的长度一般是100-200有些达到400-500的长度
	在这种情况下如果用逐个查表比较的方法来查温度会导致查表的时间过长，影响程序的
	执行效率这里推出一个优秀的算法来取代这种最笨的做法
	
	应用实例如下：
	
	#defineTempSize10]]></description><category></category></item><item><title><![CDATA[STM32输出PWM状态总结]]></title><link>https://blog.youkuaiyun.com/luolt42/article/details/144532842</link><guid>https://blog.youkuaiyun.com/luolt42/article/details/144532842</guid><author>luolt42</author><pubDate>Tue, 17 Dec 2024 13:09:53 +0800</pubDate><description><![CDATA[1.输出极性高(Polarity_High)：高电平1为有效状态(active)，低电平0为无效状态(inactive)2.输出极性低(Polarity_Low)：低电平0为有效状态(active)，高电平1为无效状态(inactive)OC1REFC ( OC2REFC) 由 TIMx_CCR1 ， TIMx_CCR2控制。OC1REFC ( OC2REFC) 由 TIMx_CCR1 ， TIMx_CCR2控制。OC1REFC输出TIMx_CCR1 和 TIMx_CCR5的逻辑与(AND)]]></description><category></category></item><item><title><![CDATA[PID温度控制参数整定方法]]></title><link>https://blog.youkuaiyun.com/luolt42/article/details/144472943</link><guid>https://blog.youkuaiyun.com/luolt42/article/details/144472943</guid><author>luolt42</author><pubDate>Sat, 14 Dec 2024 17:06:22 +0800</pubDate><description><![CDATA[一般根据模型计算的参数不一定是适合所有的控制系统（这里实验得到的最佳Kd值为120，而我们算出来的是88），根据特定的环境调节参数范围，找到最优参数，因本系统是滞后系统，微分项起主导作用，我暂时还只做了调整kd值的实验，Ki一般反应在系统达到稳态的时候是否存在稳定误差，从实验结果得出，稳态误差几乎可以忽略。从上述的图一（将.csv格式的数据文件在excel中转换图表，将鼠标放在曲线上，会自动显示此点的坐标，如图所示），取4个震荡周期一共720个点，得出一个震荡周期为Pc=720*5/4= 900s。]]></description><category></category></item><item><title><![CDATA[PID温度控制的实现]]></title><link>https://blog.youkuaiyun.com/luolt42/article/details/144470812</link><guid>https://blog.youkuaiyun.com/luolt42/article/details/144470812</guid><author>luolt42</author><pubDate>Sat, 14 Dec 2024 14:49:18 +0800</pubDate><description><![CDATA[PID（Proportional Integral Derivative）控制是控制工程中技术成熟、应用广泛的一种控制策略，经过长期的工程实践，已形成了一套完整的控制方法和典型的结构。它不仅适用于数学模型已知的控制系统中，而且对于大多数数学模型难以确定的工业过程也可应用，在众多工业过程控制中取得了满意的应用效果。PID 工作基理：由于来自外界的各种扰动不断产生，要想达到现场控制对象值保持恒定的目的，控制作用就必须不断的进行。]]></description><category></category></item><item><title><![CDATA[NTC热敏电阻温度计算方法，B值法]]></title><link>https://blog.youkuaiyun.com/luolt42/article/details/144469795</link><guid>https://blog.youkuaiyun.com/luolt42/article/details/144469795</guid><author>luolt42</author><pubDate>Sat, 14 Dec 2024 13:28:50 +0800</pubDate><description><![CDATA[热敏电阻随环境温度(T)升高，电阻值®会下降，反之，当温度(T)下降，电阻值®会上升。NTC热敏电阻的计算公式有Steinhart-Hart方程和B值法两种方法，我只熟悉了B值法。参数：温度为(R25℃)时，阻值为10kΩ，B值(25/85)为3435。温度为（R25℃）时，阻值为100kΩ，B值(25/50)为3950。版权声明：本文为博主原创文章，遵循 CC 4.0 BY-SA 版权协议，转载请附上原文出处链接和本声明。这里T1和T2指的是K度即开尔文温度，K度=273.15(绝对温度)+]]></description><category></category></item><item><title><![CDATA[PID温度控制理解]]></title><link>https://blog.youkuaiyun.com/luolt42/article/details/144469554</link><guid>https://blog.youkuaiyun.com/luolt42/article/details/144469554</guid><author>luolt42</author><pubDate>Sat, 14 Dec 2024 13:15:29 +0800</pubDate><description><![CDATA[3、比例微分控制规律(PD)：微分具有超前作用，对于具有容量滞后的控制通道，引入微分参与控制，在微分项设置得当的情况下，对于提高系统的动态性能指标，有着显著效果。微分，反映系统偏差信号的变化率e(t)-e(t-1)，具有预见性，能预见偏差变化的趋势，产生超前的控制作用，在偏差还没有形成之前，已被微分调节作用消除，因此可以改善系统的动态性能。4、例积分微分控制规律(PID)：PID控制规律是一种较理想的控制规律，它在比例的基础上引入积分，可以消除余差，再加入微分作用，又能提高系统的稳定性。]]></description><category></category></item><item><title><![CDATA[Keil.STM32F1xx_DFP.2.3.0.pack下载安装说明，亲测可用]]></title><link>https://blog.youkuaiyun.com/luolt42/article/details/144421354</link><guid>https://blog.youkuaiyun.com/luolt42/article/details/144421354</guid><author>luolt42</author><pubDate>Thu, 12 Dec 2024 11:31:10 +0800</pubDate><description><![CDATA[双击下载的芯片包，就可以自动安装到KEIL MDK安装目录下，然后就可以正常使用了。安装下图1、2、3顺序点击即可下载。]]></description><category></category></item><item><title><![CDATA[同一台电脑如何让Keil4与keil5共存]]></title><link>https://blog.youkuaiyun.com/luolt42/article/details/144407118</link><guid>https://blog.youkuaiyun.com/luolt42/article/details/144407118</guid><author>luolt42</author><pubDate>Wed, 11 Dec 2024 18:15:21 +0800</pubDate><description><![CDATA[因为一些原因，电脑要同时安装keil4和keil5，但因为优先级原因，51的工程也是用keil5打开，造成了很多麻烦，所以就找了个时间完成了keil4与keil5的共存问题，以下是步骤，希望可以帮助到你。然后，打开keil4的安装地址对应的文件夹，复制名为C51的文件夹到keil5的文件夹中，（笔者的keil4安装在c盘的keil文件夹中，keil5安装在Keil_v5文件夹中）打开keil5的TOOLS，讲刚刚复制的keil4的TOOLS粘贴进去，注意不要替换原来的内容。Keil4与keil5共存问题。]]></description><category></category></item><item><title><![CDATA[char*型指针和int*型指针的区别是什么？]]></title><link>https://blog.youkuaiyun.com/luolt42/article/details/142648563</link><guid>https://blog.youkuaiyun.com/luolt42/article/details/142648563</guid><author>luolt42</author><pubDate>Mon, 30 Sep 2024 09:02:25 +0800</pubDate><description><![CDATA[3 、赋值时范围不同。用*p形式赋值时，如果是int*型的，会按照int来截取；如果是char *型的，会按照char的范围来截取。执行*pa = 0x12345678后，*pa的值就是0x12345678。执行*pb =0x12345678后，*pb的值就会被截取，值为0x78。int *指向空间需要有4个字节，char*指向空间有一个字节就可以了。如果int*指向的空间不足，那么对其读写时就会出现越界操作。用*取值时，int *得到的值是int类型的范围，而char *可以取到的值是char的返回。]]></description><category></category></item></channel></rss>