- 博客(84)
- 收藏
- 关注
转载 51内核单片机的data、idata、pdata、xdata、code
因为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吧。
2024-12-26 14:59:52
385
转载 【无标题】
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。
2024-12-26 14:41:02
115
转载 单片机在不同内存空间(data xdata bdata)定义变量的注意事项
固定指前面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的作用。
2024-12-26 14:34:48
271
转载 STC89C52RC单片机内部EEPROM和RAM的使用
在Keil中编写程序,总程序中所有变量占用的字节数少于128B时候,并且储存模式为small时,对不定义的变量编译器将默认为0;一旦程序中变量总数量超过128B,必须对所有变量进行初始化,否则未被初始化的变量的默认值是不确定的。在small模式中,所有默认变量均装入单片机内部的RAM中,例如:uchar a;该模式的优点是空间大,可存变量多;在large模式中,所有默认变量可放在多达64KB的RAM中,包括内部RAM和外部RAM,在compact模式中,所有默认变量均位于单片机的256B RAM中,
2024-12-26 14:29:20
738
转载 c语言中的连接属性,extern与static
就是对变量a进行定义,在main.c中的extern int a;如果全局变量的定义放在头文件中,也就是.h文件中,如果要在另外一个文件中对定义在头文件中的external连接属性的变量进行访问, 不能通过extern关键字仅仅在源文件中进行声明,需要把头文件用include命令包含进源文件。我们一般定义的全局变量,如果前面没有加入static关键字,那么这个全局变量的连接属性就是external的,请注意在定义全局变量时请在源文件中定义,也就是在.c文件总定义,声明时在头文件中进行声明。
2024-12-26 09:40:27
69
转载 数码管驱动芯片TM1640的使用
这个程序很简单啊,就是SCLK先变低,然后,判断,数据的最低位是否为高电平,如果是高电平,DIN就输出1,否则输出0。然后SCLK变高,TM1640读取数据,然后把下一位数据移动到最低位,然后重复上面的步骤,一直到8位传输完毕。在以后学习中,我们可以不写驱动程序,使用别人的程序也是可以的,但是,你要有写驱动程序的能力。一共三部分,先是设置地址模式,然后设置地址,发送数据,最后设置显示亮度。,就向联合体数组里写数据,然后,在数据发送函数里检测数据是否变化,如果变化,就把联合体数组里的数据发送出去。
2024-12-17 16:20:13
1314
转载 NTC热敏电阻设计高精度温度计的方案2
/========================== 存储 ====================================================//=========================== MAX512驱动程序 =======================================定义/===================================================================sendbyte
2024-12-17 15:09:45
86
转载 NTC热敏电阻设计高精度温度计的方案1
/3.828伏=>R=32660 10K Vref=5V。//2.32伏=>R=32660 2.5K Vref=2.5V。//================ 测试实际温度 ================///============== 制冷 =====================//********************* 主程序 *****************//-------------报警--------------------------
2024-12-17 15:07:52
131
转载 NTC测温中 经典温度查表算法--二分查找法
/******************************************* 说明: 二分查找法的优点:查找速度快1024个长度的表最长只需10次查表就能得出结果 在用NTC测试温度的方案中,NTC的温度表的长度一般是100-200有些达到400-500的长度 在这种情况下如果用逐个查表比较的方法来查温度会导致查表的时间过长,影响程序的 执行效率这里推出一个优秀的算法来取代这种最笨的做法 应用实例如下: #defineTempSize10
2024-12-17 15:04:15
174
转载 STM32输出PWM状态总结
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)
2024-12-17 13:09:53
244
转载 PID温度控制参数整定方法
一般根据模型计算的参数不一定是适合所有的控制系统(这里实验得到的最佳Kd值为120,而我们算出来的是88),根据特定的环境调节参数范围,找到最优参数,因本系统是滞后系统,微分项起主导作用,我暂时还只做了调整kd值的实验,Ki一般反应在系统达到稳态的时候是否存在稳定误差,从实验结果得出,稳态误差几乎可以忽略。从上述的图一(将.csv格式的数据文件在excel中转换图表,将鼠标放在曲线上,会自动显示此点的坐标,如图所示),取4个震荡周期一共720个点,得出一个震荡周期为Pc=720*5/4= 900s。
2024-12-14 17:06:22
3028
转载 PID温度控制的实现
PID(Proportional Integral Derivative)控制是控制工程中技术成熟、应用广泛的一种控制策略,经过长期的工程实践,已形成了一套完整的控制方法和典型的结构。它不仅适用于数学模型已知的控制系统中,而且对于大多数数学模型难以确定的工业过程也可应用,在众多工业过程控制中取得了满意的应用效果。PID 工作基理:由于来自外界的各种扰动不断产生,要想达到现场控制对象值保持恒定的目的,控制作用就必须不断的进行。
2024-12-14 14:49:18
1870
转载 NTC热敏电阻温度计算方法,B值法
热敏电阻随环境温度(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(绝对温度)+
2024-12-14 13:28:50
4236
转载 PID温度控制理解
3、比例微分控制规律(PD):微分具有超前作用,对于具有容量滞后的控制通道,引入微分参与控制,在微分项设置得当的情况下,对于提高系统的动态性能指标,有着显著效果。微分,反映系统偏差信号的变化率e(t)-e(t-1),具有预见性,能预见偏差变化的趋势,产生超前的控制作用,在偏差还没有形成之前,已被微分调节作用消除,因此可以改善系统的动态性能。4、例积分微分控制规律(PID):PID控制规律是一种较理想的控制规律,它在比例的基础上引入积分,可以消除余差,再加入微分作用,又能提高系统的稳定性。
2024-12-14 13:15:29
376
原创 Keil.STM32F1xx_DFP.2.3.0.pack下载安装说明,亲测可用
双击下载的芯片包,就可以自动安装到KEIL MDK安装目录下,然后就可以正常使用了。安装下图1、2、3顺序点击即可下载。
2024-12-12 11:31:10
1406
转载 同一台电脑如何让Keil4与keil5共存
因为一些原因,电脑要同时安装keil4和keil5,但因为优先级原因,51的工程也是用keil5打开,造成了很多麻烦,所以就找了个时间完成了keil4与keil5的共存问题,以下是步骤,希望可以帮助到你。然后,打开keil4的安装地址对应的文件夹,复制名为C51的文件夹到keil5的文件夹中,(笔者的keil4安装在c盘的keil文件夹中,keil5安装在Keil_v5文件夹中)打开keil5的TOOLS,讲刚刚复制的keil4的TOOLS粘贴进去,注意不要替换原来的内容。Keil4与keil5共存问题。
2024-12-11 18:15:21
1173
转载 char*型指针和int*型指针的区别是什么?
3 、赋值时范围不同。用*p形式赋值时,如果是int*型的,会按照int来截取;如果是char *型的,会按照char的范围来截取。执行*pa = 0x12345678后,*pa的值就是0x12345678。执行*pb =0x12345678后,*pb的值就会被截取,值为0x78。int *指向空间需要有4个字节,char*指向空间有一个字节就可以了。如果int*指向的空间不足,那么对其读写时就会出现越界操作。用*取值时,int *得到的值是int类型的范围,而char *可以取到的值是char的返回。
2024-09-30 09:02:25
366
1
转载 C语言中bit和sbit的区别
如用sfr P1 = 0×90这一句定P1为P1端口在片内的寄存器,在后面的语句中我们用以用P1 = 255(对P1端口的所有引脚置高电平)之类的语句来操作特殊功能寄存器。sfr关键定后面是一个要定义的名字,可任意选取,但要符合标识符的命名规则,名字最好有一定的含义如P1口可以用P1为名,这样程序会变的好读好多.等号后面必须是常数,不允许有带运算符的表达式,而且该常数必须在特殊功能寄存器的地址范围之内(80H-FFH),具体可查看附录中的相关表.当然您也可以自己写自己的定义文件,用您认为好记的名字。
2024-09-29 17:48:06
437
转载 keil C中 data、bdata、idata、pdata、xdata、hdata的区别解释
程序可以简单的分为code(程序)区,和data (数据)区,code区在运行的时候是不可以更改的,data区放全局变量和临时变量,是要不断的改变的,cpu从code区读取指令,对data区的数据进行运算处理,因此code区存储在什么介质上并不重要,象以前的计算机程序存储在卡片上,code区也可以放在rom里面,也可以放在ram里面,也可以放在flash里面(但是运行速度要慢很多,主要读flash比读ram要费时间),因此一般的做法是要将程序放到flash里面,然后load到ram里面运行的;
2024-09-23 14:48:47
1984
转载 合泰单片机#pragma rambank0
合泰单片机的内部可能会有多个ram bank ,bank0、bank1等,但是位变量的定义其要求必须定义到bank0内。根据其手册内容其他变量也尽可能定义到bank0内,这样读取速度更快。合泰单片机的位变量定义时,根据其C语言规范,需要将位变量定义到#pragma rambank0和#pragma norambank之间。原文链接:https://blog.csdn.net/sailor_shuishou/article/details/6953773。
2024-06-22 15:01:33
129
转载 以浪涌抗扰度的视角谈前级EMC的设计
本文章结合了一个简单的实例,从浪涌试验的角度介绍了前级电路器件选型和典型电路,在以后的文章中我们将继续更深入的探讨抗浪涌电路相关内容,并从其他EMC性能指标的角度来设计EMC前级电路。当对ACL-PE或ACN-PE测试6KV浪涌时,即共模浪涌试验,共模路径等效为一个内阻约为12Ω,脉冲电压为6KV的电压源与共模电感、Y电容串联。如图1所示为小功率电源模块中常用的EMC前级原理图,FUSE为保险丝,MOV为压敏电阻,Cx为X电容,LDM为差模电感,Lcm为共模电感,Cy1和Cy2为Y电容,NTC为热敏电阻。
2024-04-25 16:57:20
280
转载 干货分享「UC3842内部工作原理」
输出经过一个稳压器得到高精度的5V电压,其中一路输出给RC充放电,产生一定频率的三角波,还有一路经过精密电阻分压产生2.5V输入给误差放大器的正输入端,而2脚负输入端一般接反馈电压,经过误差放大器放大输出,1脚作为放大器输出端,引出来的目的之一就是作反馈和作输出补偿,和负输入端之间一般接个电容,构成积分电路,使电压变得缓慢,起到补偿作用;此处应该是:当过流保护后,很快电流信号变无,此处R的高电平维持时间端,小于S的高电平时间,故此刻状态不会出现,亦或者是,上图中的T触发器作用,此处为猜测。
2024-04-12 18:02:15
1176
转载 PCB 叠层(四层板)
如此看来,图1中的叠层结构性能不如图2的层叠结构,因为其信号层与参考层之间的绝缘层厚度更大,所以信号层和参考层的耦合度更低。通常,可以通过布置靠近IC的去耦电容来解决瞬间电源问题,但是如果需要电源频率过高,高于去耦电容自身的谐振频率,那么电容将变成一颗电感,而失去存储电能的作用。所以,信号回流可以通过相邻的参考层,从而减小信号回路面积,减小信号路径的电感。最后,图6和7的叠层结构中,高速信号可以换层,因为信号的参考有完整的参考地平面(两边都有),地平面间摆放的过孔提过良好的连通性,从而减小回流路径的阻抗。
2024-02-18 00:38:40
5718
转载 干货|555定时器原理+3钟工作状态讲解,原理框图分析,通俗易懂
1)上面的比较器(阈值比较器)的输入是连接到同相输入(+)的阈值引脚,2/3Ucc的参考电压连接到比较器的反相输入 (-)。另一个外部引脚“控制电压”连接到该比较器的反相输入(-),这样就可以覆盖2/3Ucc的参考电压,还可以改变输出信号的宽度。当S输入为逻辑“1”时,设置触发器输出逻辑“1”,当R引脚为逻辑“1”时,触发器输出逻辑“1”。触发器的输出是 Q 和 /Q ,其中 Q 和 /Q 互为补集。触发器有两个输入:标记位“A”的阈值比较器的输出连接到R,标记为“B”的触发器的输出连接到S。
2024-01-17 16:11:49
11956
转载 PWM互补输出死区时间设定
上图1红圈里的互补PWM输出会造成问题的,首先,半导体器件内部都有结电容的,列如MOS管,MOS管导通,需要对MOS管的GS电容进行充电,只用GS电压大于阈值电压,MOS管才能导通;所以,在控制波形沿跳变时刻,一个MOS管GS电容在充电,一个MOS管GS电容在放电,这样会存在两个管子同时导通的情况,一个管子还没关断,另一个管子就开通了,从而造成VCC和GND短路。那么,如果两个管子都用PWM波控制的话,则两个PWM波形极性相反,图1中红色圈内的波形,高低电平相反,我们把这种波形称为互补PWM波形。
2024-01-05 18:30:00
3616
1
转载 NMOS与PMOS的导通条件与使用方法
如果MOS管用作开关时,(不论N沟道还是P沟道),一定是寄生二极管的负极接输入边,正极接输出端或接地。如图2所示 由于寄生二极管直接导通,因此S极电压可以无条件到D极,MOS管就失去了开关的作用。常见的有:AOL1448,AOL1428A,AON7406,AON7702,MDV1660,常见的有:AOL1448,AOL1428A,AON7406,AON7702,MDV1660,比如常见的:2N7002,2N7002E,2N7002K,2N7002D,FDV301N。要么都由S指向D,要么都由D指向S。
2024-01-04 16:49:22
32749
3
转载 定时器模拟PWM输出(三款代码介绍)
/频率一定,调整占空比。#define FLAG_F1 ((K1==1)&&(K2==1)&&(K3==1)&&(K4==1)) //第1档。#define FLAG_F2 ((K1==0)&&(K2==1)&&(K3==1)&&(K4==1)) //第2档。#define FLAG_F3 ((K1==1)&&(K2==0)&&(K3==1)&&(K4==1)) //第3档。#define FLAG_F4 ((K1==1)&&(K2==1)&&(K3==0)&&(K4==1)) //第4档。
2024-01-04 16:42:37
1795
1
转载 C语言利用共用体实现位操作
这样定义了这个共用体后,由于Test_u16变量和Bits结构体共用体一个内存空间,因此对Bits的成员变量操作,也就是一个位的操作,就能同时对Test_u16的对应位操作,也就实现了对Test_u16进行位操作。共用体实现位操作的关键就在于这个内部的结构体,首先明确一个知识,就是结构体内存中是连续的,但是不需要是一个完整的字节,因此定义内部定义16个一bit的位域,例如:u8 bit0 : 1;先定义一个共用体,内部定义一个16位的变量,内部再定义一个结构体。这样就实现了位操作。
2024-01-03 18:02:27
199
转载 【无标题】
如果MOS管用作开关时,(不论N沟道还是P沟道),一定是寄生二极管的负极接输入边,正极接输出端或接地。如图2所示 由于寄生二极管直接导通,因此S极电压可以无条件到D极,MOS管就失去了开关的作用。常见的有:AOL1448,AOL1428A,AON7406,AON7702,MDV1660,常见的有:AOL1448,AOL1428A,AON7406,AON7702,MDV1660,比如常见的:2N7002,2N7002E,2N7002K,2N7002D,FDV301N。要么都由S指向D,要么都由D指向S。
2023-12-28 09:25:20
78
转载 串口流控(CTS/RTS)使用详解
硬流控的RTS 、CTS :RTS (Require ToSend,发送请求)为输出信号,用于指示本设备准备好可接收;CTS (Clear ToSend,发送清除)为输入信号,有效时停止发送。假定A、B两设备通信,A设备的RTS 连接B设备的CTS;A设备的CTS连接B设备的RTS。前一路信号控制B设备的发送,后一路信号控制A设备的发送。对B设备的发送(A设备接收)来说,如果A设备接收缓冲快满的时发出RTS信号(高电平)(意思通知B设备停止发送),B设备通过CTS 检测到该信号,停止发送;
2023-12-20 14:49:06
6477
转载 一分钟读懂WIFI模块无线网络工作模式AP和STA的区别
顾名思义,这是一种混合模式,指的是WIFI模块工作时既支持AP模式,又支持STA模式。当WIFI模块的这两种模式共存时,既可以作为STA设备连接其它AP设备,又可以作为AP设备让别的STA模式设备进行接入,这两个过程可以同时进行,这样可以通过互联网控制可实现无缝切换,更加方便操作。STA是Station的缩写,它是无线网络中的一个终端站点设备,可以看成是一个客户端,一般来说,处在STA模式下的设备本身不接受无线的接入,该设备连接到AP节点进行网络访问,STA模式下的设备之间的通信可以通过AP进行转发实现。
2023-09-04 10:08:53
12649
转载 【无标题】
子网掩码通常有十进制和二级制两种表现形式,255.255.0.0用二进制表示则为1111111.11111111.00000000.00000000,其中,前面2个字节的16位“1”表示网络号,后面2个字节的16位“0”表示主机号。子网掩码有两个特殊地址,当子网掩码的主机地址全为0时,表示该网络地址,当子网掩码的主机地址全为1时,表示该网络的广播地址。上文中的26代表主机ID的掩码地址长度,从前往后有26位,即子网掩码的地址是255.255.255.192。1)将主机数目转化为二进制来表示,总位数是N;
2023-07-20 18:18:18
157
转载 干货|8款开关电路设计详解,电路图+工作原理,图文结合,秒懂
与此同时,感应电压给 C1 充电,随着 C1 充电电压的增高, VT1 基极电位逐渐变低,致使 VT1 退出饱和区, Ic 开始减小,在 L2 中感应出使 VT1 基极为负、发射极为正的电压,使 VT1 迅速截止,这时二极管 VD1 导通,高频变压器T初级绕组中的储能释放给负载。开关电源高频化是其发展的方向,高频化使开关电源小型化,并使开关电源进入更广泛的应用领域,特别是在高新技术领域的应用,推动了开关电源的发展前进,每年以超过两位数字的增长率向着轻、小、薄、低噪声、高可靠、抗干扰的方向发展。
2023-03-20 20:19:33
23744
1
转载 RS485电路设计原理图
485芯片 有很多种,根据个人需要选型 ,我目前使用的是3.3V供电的工业芯片MAX3485(也可以选择5.0V供电的MAX485),数据传输速率可高达10Mbps。RS485是差分信号,,半双工、平衡传输线多点通信的标准,两个设备之间使用双绞屏蔽线缆连接,两个线缆分别传输A和B信号。高电平(1):B线上的电压减去A线上的电压是+(0.2—6) V时,表示高电平。低电平(0):B线上的电压减去A线上的电压是-(0.2—6)V时,表示低电平。RS485总线具有两种逻辑电平:高电平(1)和低电平(0)
2023-03-20 19:34:26
2977
转载 干货|TTL电路详细讲解,工作原理+电路图,图文结合,轻松搞定
F 处的低电平正向偏置晶体管 Q 1 的发射极-基极结,并使电阻 R1 的电流从晶体管Q分流2使 Q 2关断,从而使晶体管 Q 4关断。E 处的低电平还正向偏置二极管 D 2以从晶体管 Q 3的基极分流电流,因此 Q 3也关闭。R1 中的电源电压下降,晶体管 T2 关断,因为它没有足够的电压来导通。这里用到的与非门是74L00或54L00型的,这种类型的 TTL 的结构几乎与标准 TTL 的结构相似,只是电阻值更高。当晶体管 Q 4关闭时,输出 Y 将为高电平,而当 Q 4导通时,输出将为低电平。
2023-03-20 19:33:55
50241
4
转载 详解电池管理系统,这一篇就够了!
温控探头能实时监测电池组或工作环境的温度变化,当监测到温度超出设定的值(硬件的温控保护默认:充电-20~55℃,放电-40~75℃,可根据客户的要求更改,客户不能自行设置)时,断开电池组的充放电,当温度恢复指合理范围后,才可继续充放电,起到保护作用。过充保护功能:充电时,保护板会实时监测电池组的每串电压,只要有其中一串电压到达过充保护值(三元的过充电压默认为4.25V±0.05V,铁锂的过充电压默认为3.75V±0.05V),保护板就会切断电源,整组锂电池都停止充电。(一)感知和测量测量电池的状态。
2023-03-20 19:31:39
3152
转载 汽车电子常用外围硬件电路设计
GSR_SW和ACC_ON及VBUS另一组或多组高电平时,电源使能PWR_EN为高电平,开机后通后POWER_HOLD至高来保持PWR_EN为高电平。3)高速CAN BUS电路(波特率40K~1Mbits/s)1)LIN BUS电路 (最大波特率20Kbits/s)2).低速CAN电路(最大波特率125Kbits/s)5、MOS管设计参考应用(控制电源输出通断)2、外接信号输入设计参考(和按键有点类似)1、按键电路的常用设计参考。3、输出电路继电器设计参考。6、输入电源设计参考应用。
2023-03-20 19:26:41
2209
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人