
单片机技术
zyboy2000
这个作者很懒,什么都没留下…
展开
-
什么是准双向口,双向口?
C51的说明书上说:”Because Ports 1, 2, and 3 have fixed internal pullups, they are sometimes called quasi-bidirectionalports. When configured as inputs, they pull high and source current (IIL) when external转载 2014-10-29 11:16:08 · 42633 阅读 · 4 评论 -
ARM与51编写程序的区别
测试环境:KEIL (1) int变量 在51 占2个字节;在ARM占4个字节 (2)结构体对齐 在51是按照一个字节对齐; 在ARM是按结构体默认对齐规则对齐 (3)字节在内存的排列顺序 在51是大端 ; 在ARM大多数是小端,但有的可以大小端选择。 在大端存储格式中,字数据的高字节存储在低地址中,而字数据的低字节则存放在高地址中在小端存储原创 2009-05-20 22:24:00 · 6743 阅读 · 2 评论 -
KEIL C51之绝对地址定位
单片机空间分配看*.M51文件,ARM,DSP空间分配看*.map文件 1、函数定位:假如要把C源文件 tools.c 中的函数int BIN2HEX(int xx){ ...}放在CODE MEMORY的0x1000处,先编译该工程,然后打开该工程的M51文件,在* * * C O D E M E M O R原创 2010-07-13 11:30:00 · 13186 阅读 · 2 评论 -
F020基础知识
25M 64kflash 4352:40969(片外)+256(片内)RAM 每个端口引脚的输出方式都可被配置为漏极开路或推挽方式,缺省状态为漏极开路。(缺省Pn=0xff)在推挽方式,向端口数据寄存器中的相应位写逻辑‘0’将使端口引脚被驱动到GND,写逻辑‘1'将使端口引脚被驱动到VDD。在漏极开路方式,向端口数据寄存器中的相应位写逻辑‘0’将使端口引脚被驱动到GND,写逻辑‘1原创 2009-05-09 22:58:00 · 1176 阅读 · 0 评论 -
C8051FXX 加密方法
C8051FXX单片机的加密方式,是通过修改FLASH存储器的0xfdfe和0xfdff这两个字节来实现的。其中0xfdfe是写保护字节。0xfdff是读保护字节。每个字节的8个位分别对应8K的FLASH存储空间,如果该存储空间的对应位被清除,则该空间也被加密。因此我们只要在编程的时候把该字节的写为0,则整个64K存储空间将被加密。一、Keil C51中如何加密1、 在编译好的H转载 2013-02-03 08:43:24 · 3188 阅读 · 0 评论 -
proteus入门小知识
将元件如何放在设计图中?单击之后选中之后,在设计图中再右键单击放置即可 (一):常用元件名 选择左边"Compoent mode" CAP,RES,NPN,OPAMP,NMOSFET,PMOSFET (二):元件翻转 小键盘的"+","-" (三)频率特性 选择左边“graph Mode"-->"FREQUENCY" 1.选择参考输入信号---"E原创 2010-04-11 20:17:00 · 2966 阅读 · 0 评论 -
为何一般不建议在中断中喂狗?
在"主程序喂狗论"中,最"强有的理论依据"就是---"程序跑飞了可是中断不一定会死" (中断一般都有自己固定不变的中断向量地址,这样即使主程序飞,中断也能正确地跳入自己的轨道继续运行.) 可如果只在主程序喂狗,由于中断被无意关断,那么主程序实际就只干傻喂狗功能,这种不工作也不死的。 所以建议:最好的办法是主程序和中断相结合的方法喂狗,这个需要根据实际程序中断的特点编写相应的喂狗功能转载 2012-06-14 23:11:26 · 16845 阅读 · 7 评论 -
FLASH 擦写时间比较
【Nand flash的一些典型(typical)特性】 k9f1208x0b1.页擦除时间是200us,有些慢的有800us。 (528)2.块擦除时间是2ms. (528*32) 看了24c512的手册,一个page才128个byte,512/8bit=64k byte总共个500原创 2009-09-01 11:33:00 · 24553 阅读 · 1 评论 -
8位单片机 16位 32位区别?
指CPU处理的数据的宽度,参与运算的寄存器的数据长度? 如果总线宽度与CPU一次处理的数据宽度相同,则这个宽度就是所说的单片机位数。如果总线宽度与CPU一次处理的数据宽度不同:1)总线宽度小于CPU一次处理的数据宽度,则以CPU的数据宽度定义单片机的位数,但称为准多少位。比如著名的Intel 8088,CPU是16位但总线是8位,所以它是准16位。2)总线宽度小于CPU一次处理转载 2012-04-24 22:27:10 · 15528 阅读 · 0 评论 -
数字PID算法
/*==================================================================================================== 这是从网上找来的一个比较典型的PID处理程序,在使用单片机作为控制cpu时,请稍作简化,具体的PID参数必须由具体对象通过实验确定。由于单片机的处理速度和ram资源的限制,一般不采转载 2009-05-11 15:54:00 · 6435 阅读 · 2 评论 -
空操作NOP指令在ARM和C51的区别
(一)C51调用方法#include _nop_();(二)ARM下调用方法 __asm void nop(void){ NOP}然后在之后的C代码中调用该函数:void main(){...nop();... } 关于NOP指令在MCS-51单片机指令集中NOP的指令码为0x00,而ARM指令集中的NO原创 2012-04-05 18:07:56 · 13427 阅读 · 1 评论 -
I2C上拉电阻取值问题
漏极开路上拉电阻取值为何不能很大或很小? 如果上拉电阻值过小,VDD灌入端口的电流(Ic)将较大,这样会导致MOS管(三极管)不完全导通(Ib*β 如果上拉电阻过大,加上线上的总线电容,由于RC影响,会带来上升时间的增大(下降延是芯片内的晶体管,是有源驱动,速度较快;上升延是无源的外接电阻,速度慢),而且上拉电阻过大,即引起输出阻抗的增大,当输出阻抗和负载的阻抗转载 2010-08-04 21:23:00 · 40145 阅读 · 3 评论 -
反动电势及续流二级管
续流二极管都是并联在线圈的两端,线圈在通过电流时,会在其两端产生感应电动势。当电流消失时,其感应电动势会对电路中的原件产生反向电压。当反向电压高于原件的反向击穿电压时,会把原件如三极管,等造成损坏。续流二极管并联在线两端,当流过线圈中的电流消失时,线圈产生的感应电动势通过二极管和线圈构成的回路做功而消耗掉。丛而保护了电路中的其它原件的安全。当流过线圈的电流大小发生改变时,线圈要产生一个转载 2010-03-15 18:17:00 · 5034 阅读 · 0 评论 -
“串口通信”
示波器查看串口注意地方:(1) RS232电平的定义是:-15V~-3V代表“1”,+3V~+15V代表“0”。(2) 低位在前,高位在后(3) TTL:无数据时候,都是高电平,起始位为低电平,停止位为高电平;RS232反之(4)每个字节头和尾都要加起始位(低电平)和结束位(高电平) (5)9600波特率相当1byte/ms ,115200波特率相当10byte/ms(6)原创 2009-05-15 08:41:00 · 4028 阅读 · 0 评论 -
环形队列串口(发)应用
环形缓冲区的实现原理:环形缓冲区通常有一个读指针和一个写指针。读指针指向环形缓冲区中可读的数据,写指针指向环形缓冲区中可写的缓冲区。通过移动读指针和写指针就可以实现缓冲区的数据读取和写入。在通常情况下,环形缓冲区的读用户仅仅会影响读指针,而写用户仅仅会影响写指针。如果仅仅有一个读用户和一个写用户,那么不需要添加互斥保护机制就可以保证数据的正确性在设计串口驱动的过程中,要遵循原创 2014-03-20 14:38:07 · 9229 阅读 · 1 评论 -
环形队列串口(收)应用
void CommISR(void) interrupt 4{ if (RI0) { RI0=0; CommRecBuffer[CommRecBufferTail]=SBUF0; //receive data CommRecBufferTail++; if (CommRecBufferTail==DB_RE原创 2014-04-04 12:00:57 · 6564 阅读 · 0 评论 -
论坛各种问题总结--(随时更新)
(-5) 为何现在串口速率比并口速率要快?并行通信的瓶颈:并行数据传输技术向来是提高数据传输率的重要手段,但是,进一步发展却遇到了障碍。首先,由于并行传送方式的前提是用同一时序传播信号,用同一时序接收信号,而过分提升时钟频率将难以让数据传送的时序与时钟合拍,布线长度稍有差异,数据就会以与时钟不同的时序送达,另外,提升时钟频率还容易引起信号线间的相互干扰,导致传输错误。串行通信的优势:串行通原创 2009-07-31 10:57:00 · 6474 阅读 · 0 评论 -
NOR NAND FLASH编程
NandFlash的数据是以bit 的方式保存在memory cell里的,一般来说,一个cell 中只能存储一个bit,这些cell 以8 个或者16 个为单位,连成bit line,形成所谓的byte(x8)/word(x16),这就是NAND Device 的位宽。这些Line原创 2013-12-20 10:08:51 · 1860 阅读 · 1 评论 -
单片机IO口模拟SPI四种模式的程序
/IO端口定义#define SPI_SCK PC0#define SPI_MOSI PC1#define SPI_MISO PC2#define SPI_DDR DDRC#define SPI_PORT PROTC#define SPI_PIN PINC//端口操作符定义#define SCK_SET SPI_PORT|=_BV(SPI_SCK)#转载 2013-09-21 10:00:02 · 32049 阅读 · 1 评论 -
单片机上电复位时间
单片机及其应用电路每次上电的过程中,由于电源回路中通常存在一些容量大小不等的滤波电容,使得单片机芯片在其电源引脚VCC和VSS之间所感受到的电源电压值VDD,是从低到高逐渐上升的。该过程所持续的时间一般为1~100 ms(记作taddrise)。上电延时taddrise的定义是电源电压从10% VDD上升到90% VDD所需的时间.在单片机电源电压上升到适合内部振荡电路运行的范围并且稳定下来之后,原创 2009-10-15 08:55:00 · 12291 阅读 · 0 评论 -
用法拉电容从容实现单片机掉电数据保存
公式Q = I*t;Q = C*U; 今天,因为MCU内部一般都带FLASH ROM和伴随着法拉级电容的出现,事实上已经宣布背掉电电池或者用达拉斯DS存储器实现掉电数据保存的传统的思维和电路已经成为历史!以下的电路,是一个可靠的简单的掉电检测、法拉电容能量储存等完整硬件电路和相应的软件细节,是笔者在产品上一个成熟的可靠的自诩经典电路和心血,在这里完全公开地提供给二姨转载 2009-05-25 17:13:00 · 7523 阅读 · 3 评论 -
10种软件滤波方法的示例程序
10种软件滤波方法的示例程序1、限幅滤波法(又称程序判断滤波法)A、方法:根据经验判断,确定两次采样允许的最大偏差值(设为A)每次检测到新值时判断:如果本次值与上次值之差如果本次值与上次值之差>A,则本次值无效,放弃本次值,用上次值代替本次值B、优点:能有效克服因偶然因素引起的脉冲干扰C、缺点无法抑制那种周期性的干扰平滑度差2、中位值滤波法A、方转载 2010-03-11 20:04:00 · 2011 阅读 · 0 评论 -
C8051F单片机使用注意事项
每个I/O 拉电流50mA 灌电流100mA 总电流800mA一、电源和地线方面的处理1、模拟电源和数字电源要分别供电,可以使用两个稳压源分别供电,但是两个电源之间的电压差必须满足数据手册中的规定(,小于0.3V是比较理想的)。实际应用中模拟电源和数字电源可以来自同一个稳压器的输出,只在AV+与VDD之间接简单的滤波器也是很有效的。这里要加一个小电感,也可以用低阻值的电阻(通常2欧姆,转载 2009-05-16 10:32:00 · 1726 阅读 · 0 评论 -
当主函数与中断函数共享变量问题
当时开发的一个产品,一项功能是在通电后播放40秒的语音.测试时发现,大约通电70-80次就有一次播放时间不够40秒就提前停止。当时以为复位有问题,换了复位片,没好。又先后换了CPU,语音芯片,还有电源,都没有好转。排除了硬件芯片原因导致的此现象.后来又从软件中查找原因。反复查找软件逻辑,也没发现问题。后来偶然发现在主while里增加大量延时后,稳定性提高。几乎不再出现问题。但是我还是转载 2009-05-11 09:29:00 · 9899 阅读 · 1 评论 -
软件复位问题(跳转PC)
#pragma asm ljmp 0#pragma endasm //C插入汇编实现深入--单片机软复位(PC跳转)对函数指针熟悉吗?熟悉一切都容易了!好书推荐《C陷阱与缺陷》《C专家编程》看看就上个档次就不是菜鸟了,呵呵(*(void(*)())0) (); //就是它了!晕了吗?没晕,不错不错,大哥,你扎这厉害呢!((void(*)原创 2009-05-11 09:27:00 · 2502 阅读 · 0 评论 -
C51 两种对内存空间地址写数据的方法
方法一:unsigned char volatile xdata CH375_CMD_PORT _at_ 0xBDF1; /* CH375命令端口的I/O地址 */CH375_CMD_PORT = Data; 方法二:*((unsigned char xdata *) 0xBDF1) = Data; 类似:DSP2407的头文件voatile unsigned i原创 2009-05-10 10:44:00 · 3549 阅读 · 0 评论 -
关于单片机的using使用
C51的中断函数的格式为:void FuncIr(void) interrupt x [using y]以下是梦游的一些分析: 一、中断函数是一个特殊的函数,没有参数,也没有返回值;但是程序中允不允许使用return呢?答案是允许的,不过只能用"return;",不能用"return(z);";用在一些需要快速返回的地方,对应的汇编会有多个ret语句,相对效率会高一些。 二转载 2009-05-10 10:39:00 · 3649 阅读 · 1 评论 -
KELl警告: MULTIPLE CALL TO SEGMENT
今天来说说*** WARNING L15: MULTIPLE CALL TO SEGMENT这个问题!其实这个问题实际上就是函数重入问题,在操作系统的多线程很常见。应该是引起注意的,有可能引起程序冲突,但是一般时候程序运行不会有问题,但是如果出来问题,那将会是很讨厌的问题.分析一下 产生这一警告的一个根源是:例如在主循环里调用了一个函数,而在中断服务中,你又一次调用了同样的函数。这样转载 2009-05-10 10:37:00 · 1750 阅读 · 0 评论 -
C51 指针问题
一般指针 一般指针的声明和使用均与标准C相同,不过同时还可以说明指针的存储类型,例如: long * state;为一个指向long型整数的指针,而state本身则依存储模式存放。 char * xdata ptr;ptr为一个指向char数据的指针,而ptr本身放于外部RAM区,以上的long,char等指针指向的数据可存放于任何存储器中。 一般指针本身用3个字节存放,分原创 2009-05-10 10:28:00 · 3186 阅读 · 0 评论 -
Keil的代码优化产生的问题
阅 读了《单片机与嵌入式系统应用》2005年第10期杂志《经验交流》栏目的一篇文章《Keil C5l对同一端口的连续读取方法》(原文)后,笔者认为该文并未就此问题进行深入准确的分析。文章中提到的两种解决方法并不直接和简单。笔者认为这并非是 Keil C51中不能处理对一个端口进行连续读写的问题,而是对Keil C51的使用不够熟悉和设计不够细致的问题,因此特撰写本文。本文中对原文提到的问题,提转载 2009-05-10 10:33:00 · 3039 阅读 · 0 评论 -
深入C51中断向量表
在FLASH中有一组特殊的保留单元000H~00ABH 0000H-0002H 这三个单元包含一个无条件跳转指令(LJMP),当系统复位后,PC=0000H,跳转到main函数(不确切)LJMP 是三字节指令。就是由 指令码02H(一个字节) + 16位地址(2个字节) 组成16位地址就是Main()函数的地址,其实也不然,由于main()函数在调用之前,要进行堆栈的初原创 2009-05-10 10:41:00 · 7237 阅读 · 0 评论 -
51单片机汇编指令速查表
51单片机汇编指令速查表指令格式 功能简述 字节数 周期一、数据传送类指令 MOV A, Rn 寄存器送累加器 1 1 MOV Rn,A 累加器送寄存器 1 1 MOV A ,@Ri 内部RAM单元送累加器 1 1 MOV @Ri ,A 累加器送内部RAM单元 1 1 MOV A ,#data 立即数送累加器 2 1 MOV A ,direct 直接寻址单元送累加器 2 1 MOV dir转载 2009-05-24 09:33:00 · 3426 阅读 · 2 评论 -
时钟周期,机器周期,指令周期
1、时钟周期 时钟周期T又称为状态周期,是时序中最小的时间单位。具体计算就是1/fosc。也就是说如果晶振为1MHz,那么时钟周期就为1us;6MHz的话,就是1/6us。 2、机器周期 机器周期定义为实现特定功能所需的时间,或完成某一规定操作所需的时间,通常由若干时钟周期构成。具体计算为:时钟周期 X cycles。如果单片机是转载 2009-11-12 09:52:00 · 1842 阅读 · 0 评论 -
MCS-51单片机模拟I2C软件包(转)
注意:普通M51单片机机器周期=12个时钟周期,f020机器周期=时钟周期对于nop指令,F020是一个时钟周期,例如f020晶振为22.1184M, 约为45ns /*函数是采用软件延时的方法产生SCL脉冲,固对高晶振频率要作 一定的修改....(本软件包是1us机器周期,即晶振频率要小于12MHZ)总线时序符合I2C标准模式,100Kbit/S。*/#include #in转载 2009-11-12 09:21:00 · 2657 阅读 · 0 评论 -
KEIL--生成多个工程
KEIL根据配置不同,可以生成多个工程,生成方法 Project-->Manage-->Project Components(或在工程名称右边图标) Project Components-->Project Targets的Tab中添加新的工程 不同工程也可以配置不同文件(Project Components-->file) 不同的工程可以配置不同信息,主要在Opt原创 2009-10-19 19:18:00 · 4460 阅读 · 1 评论 -
A(51)和C(51)相互调用
C51函数的参数和返回值一般都通过寄存器传递 C语言是一种编译型程序设计语言,它兼顾了多种高级语言的特点,并可以调用汇编语言的子程序。用C语言设计开发微控制器程序已成为一种必然的趋势。Franklin C51是一种专门针对Intel 8051系列微处理器的C开发工具,它提供了丰富的库函数,具有很强的数据处理能力,编程中对8051寄存器和存储器的分配均由编译器自动管理,转载 2009-06-12 09:56:00 · 1078 阅读 · 0 评论 -
80c51内部RAM空间分配
keil编译的时候,在开始时候会清零所有内存.在main之前,所以,只要复位,内存肯定是0 MCS-51单片机的内部数据存储器在物理上和逻辑上都分为两个地址空间,即:数据存储器空间(低128单元),“用户可用的”;特殊功能寄存器空间(高128单元);这两个空间是相连的,从用户角度而言,低128单元才是真正的数据存储器。下面我们就来详细的与大家讲解一下:低128单元: 片内原创 2009-06-08 16:45:00 · 8422 阅读 · 1 评论 -
深入剖析keil c51 --- 从汇编到c51
C插入汇编语句#pragma asmljmp 0#pragma endasm 如果就这样直接编译的话,会出现以下错误:error C272: asm/endasm requires src-control to be active 解决方法:在 Files Toolbar 中选中当前C51文件,点右键查看文件选项,将 Generate Assembler SRC F转载 2009-06-08 09:41:00 · 6926 阅读 · 1 评论 -
KEILC51可重入函数及模拟栈浅析
摘要:本文较详细的介绍了keilc51可再入函数和模拟堆栈的一些概念和实现原理,通过一个简单的程序来剖析keilc51在大存储模式下可重入函数的调用过程,希望能为keilc51和在51系列单片机上移植嵌入式实时操作系统的初学者提供一些帮助。 1、关于可重入函数(可再入函数)和模拟堆栈(仿真堆栈) “可重入函数可以被一个以上的任务调用,而不必担心数据被破坏。可重入函数任何时候都可以被中断转载 2009-06-07 18:30:00 · 1914 阅读 · 3 评论 -
F020在线升级程序
分为三大CODE保存区: 升级程序区 + 用户程序区 + 用户Main入口地址保存区 复位0x0000-0x0003 地址保存 LJMP main 命令例如C:0x0000 02F741 LJMP STARTUP1(C:F741)0x0000 – 0x0003 存储的就是 02F741 ,其中02是LJMP命令码,F741是跳原创 2009-08-13 11:32:00 · 1278 阅读 · 0 评论