具体步骤如下:
1、首先,开启我们的keil软件,具体的安装步骤就不做太多的介绍了;
开启后,点击菜单栏上的Project选项,创建我们的工程,如图所示;
2、点击后,d出图中的窗口,在箭头所指的文本框中输入你的芯片型号进行查找,如果没有需要自行将芯片添加到keil软件的库下,如图所示;
3、选中芯片点击Ok即可,在左侧的文本框中,选中图中选项右键选择Add New选项,如图所示;
4、选择c的文件,输入文件名以及文件的存储目录,如图所示;
5、点击OK后,在我们添加的文本框中输入我们的程序代码,如图所示;
6、编写好代码以后,选择菜单栏上的魔法棒选项,如图所示;
7、选择Output选项,将图中箭头所指的选项,选中,点击ok,如图所示;
8、然后点击编译选项,如图所示;
编译完成后,在我们的文件夹下找到hex的文件,将其烧写到我们的芯片中即可。
51单片机的几种精确延时实现延时通常有两种方法:一种是硬件延时,要用到定时器/计数器,这种方法可以提高CPU的工作效率,也能做到精确延时;另一种是软件延时,这种方法主要采用循环体进行。
1 使用定时器/计数器实现精确延时
单片机系统一般常选用11059 2 MHz、12 MHz或6 MHz晶振。第一种更容易产生各种标准的波特率,后两种的一个机器周期分别为1 μs和2 μs,便于精确延时。本程序中假设使用频率为12 MHz的晶振。最长的延时时间可达216=65 536 μs。若定时器工作在方式2,则可实现极短时间的精确延时;如使用其他定时方式,则要考虑重装定时初值的时间(重装定时器初值占用2个机器周期)。
在实际应用中,定时常采用中断方式,如进行适当的循环可实现几秒甚至更长时间的延时。使用定时器/计数器延时从程序的执行效率和稳定性两方面考虑都是最佳的方案。但应该注意,C51编写的中断服务程序编译后会自动加上PUSH ACC、PUSH PSW、POP PSW和POP ACC语句,执行时占用了4个机器周期;如程序中还有计数值加1语句,则又会占用1个机器周期。这些语句所消耗的时间在计算定时初值时要考虑进去,从初值中减去以达到最小误差的目的。
2 软件延时与时间计算
在很多情况下,定时器/计数器经常被用作其他用途,这时候就只能用软件方法延时。下面介绍几种软件延时的方法。
21 短暂延时
可以在C文件中通过使用带_NOP_( )语句的函数实现,定义一系列不同的延时函数,如Delay10us( )、Delay25us( )、Delay40us( )等存放在一个自定义的C文件中,需要时在主程序中直接调用。如延时10 μs的延时函数可编写如下:
void Delay10us( ) {
_NOP_( );
_NOP_( );
_NOP_( );
_NOP_( );
_NOP_( );
_NOP_( );
}
Delay10us( )函数中共用了6个_NOP_( )语句,每个语句执行时间为1 μs。主函数调用Delay10us( )时,先执行一个LCALL指令(2 μs),然后执行6个_NOP_( )语句(6 μs),最后执行了一个RET指令(2 μs),所以执行上述函数时共需要10 μs。 可以把这一函数当作基本延时函数,在其他函数中调用,即嵌套调用\[4\],以实现较长时间的延时;但需要注意,如在Delay40us( )中直接调用4次Delay10us( )函数,得到的延时时间将是42 μs,而不是40 μs。这是因为执行Delay40us( )时,先执行了一次LCALL指令(2 μs),然后开始执行第一个Delay10us( ),执行完最后一个Delay10us( )时,直接返回到主程序。依此类推,如果是两层嵌套调用,如在Delay80us( )中两次调用Delay40us( ),则也要先执行一次LCALL指令(2 μs),然后执行两次Delay40us( )函数(84 μs),所以,实际延时时间为86 μs。简言之,只有最内层的函数执行RET指令。该指令直接返回到上级函数或主函数。如在Delay80μs( )中直接调用8次Delay10us( ),此时的延时时间为82 μs。通过修改基本延时函数和适当的组合调用,上述方法可以实现不同时间的延时。
22 在C51中嵌套汇编程序段实现延时
在C51中通过预处理指令#pragma asm和#pragma endasm可以嵌套汇编语言语句。用户编写的汇编语言紧跟在#pragma asm之后,在#pragma endasm之前结束。
如:#pragma asm
…
汇编语言程序段
…
#pragma endasm
延时函数可设置入口参数,可将参数定义为unsigned char、int或long型。根据参数与返回值的传递规则,这时参数和函数返回值位于R7、R7R6、R7R6R5中。在应用时应注意以下几点:
◆ #pragma asm、#pragma endasm不允许嵌套使用;
◆ 在程序的开头应加上预处理指令#pragma asm,在该指令之前只能有注释或其他预处理指令;
◆ 当使用asm语句时,编译系统并不输出目标模块,而只输出汇编源文件;
◆ asm只能用小写字母,如果把asm写成大写,编译系统就把它作为普通变量;
◆ #pragma asm、#pragma endasm和 asm只能在函数内使用。
将汇编语言与C51结合起来,充分发挥各自的优势,无疑是单片机开发人员的最佳选择。
23 使用示波器确定延时时间
利用示波器来测定延时程序执行时间。方法如下:编写一个实现延时的函数,在该函数的开始置某个I/O口线如P10为高电平,在函数的最后清P10为低电平。在主程序中循环调用该延时函数,通过示波器测量P10引脚上的高电平时间即可确定延时函数的执行时间。方法如下:
sbit T_point = P1^0;
void Dly1ms(void) {
unsigned int i,j;
while (1) {
T_point = 1;
for(i=0;i<2;i++){
for(j=0;j<124;j++){;}
}
T_point = 0;
for(i=0;i<1;i++){
for(j=0;j<124;j++){;}
}
}
}
void main (void) {
Dly1ms();
}
把P10接入示波器,运行上面的程序,可以看到P10输出的波形为周期是3 ms的方波。其中,高电平为2 ms,低电平为1 ms,即for循环结构“for(j=0;j<124;j++) {;}”的执行时间为1 ms。通过改变循环次数,可得到不同时间的延时。当然,也可以不用for循环而用别的语句实现延时。这里讨论的只是确定延时的方法。
24 使用反汇编工具计算延时时间
用Keil C51中的反汇编工具计算延时时间,在反汇编窗口中可用源程序和汇编程序的混合代码或汇编代码显示目标应用程序。为了说明这种方法,还使用“for (i=0;i<DlyT;i++) {;}”。在程序中加入这一循环结构,首先选择build taget,然后单击start/stop debug session按钮进入程序调试窗口,最后打开Disassembly window,找出与这部分循环结构相对应的汇编代码,具体如下:
C:0x000FE4CLRA//1T
C:0x0010FEMOVR6,A//1T
C:0x0011EEMOVA,R6//1T
C:0x0012C3CLRC//1T
C:0x00139FSUBBA,DlyT //1T
C:0x00145003JNCC:0019//2T
C:0x00160E INCR6//1T
C:0x001780F8SJMPC:0011//2T
可以看出,0x000F~0x0017一共8条语句,分析语句可以发现并不是每条语句都执行DlyT次。核心循环只有0x0011~0x0017共6条语句,总共8个机器周期,第1次循环先执行“CLR A”和“MOV R6,A”两条语句,需要2个机器周期,每循环1次需要8个机器周期,但最后1次循环需要5个机器周期。DlyT次核心循环语句消耗(2+DlyT×8+5)个机器周期,当系统采用12 MHz时,精度为7 μs。
当采用while (DlyT--)循环体时,DlyT的值存放在R7中。相对应的汇编代码如下:
C:0x000FAE07MOVR6, R7//1T
C:0x00111F DECR7//1T
C:0x0012EE MOVA,R6//1T
C:0x001370FAJNZC:000F//2T
循环语句执行的时间为(DlyT+1)×5个机器周期,即这种循环结构的延时精度为5 μs。
通过实验发现,如将while (DlyT--)改为while (--DlyT),经过反汇编后得到如下代码:
C:0x0014DFFE DJNZR7,C:0014//2T
可以看出,这时代码只有1句,共占用2个机器周期,精度达到2 μs,循环体耗时DlyT×2个机器周期;但这时应该注意,DlyT初始值不能为0。
注意:计算时间时还应加上函数调用和函数返回各2个机器周期时间。
示波器嘛自然是观察波形的,可以对各种波形进行定量定性和采集数据,也可以观测波形宽度、幅度、测量占空比等一些相关参数。一般来说带宽越宽越好,但是带宽越宽也意味着价格越高,如果仅仅研究单片机的话我认为100M足够了,再高也就没什么意义了,何况单片机用到示波器的时候也不是很多。可以买数字示波表,小巧、精度高价格也不是太贵的
问题一:51单片机芯片烧入程序 买一个烧录器就好了,杜邦线直接插到DIP脚上
问题二:单片机如何烧录程序 STC系列单片机为例:
首先,需要安装keil软件和STC_ISP程序下载软件。
先对你想要实现对单片机的功能用keil编程,然后用STC_ISP下载软件下载到单片机上,最后打开给单片机提供电源就可以观察单片机开发板或是自己搭建的板子上的现象了通过不断修改程序,下载程序,最终获得自己在实验板上想要的结果。这样就可以了
实验板与PC机的连接:一般对现成购买的开发板来说,会有一个USB接口提供5v电源、提供通信或另一个USB用来下载接口驱动程序,同时有RS232串口,实现MAX232电平与单片机TTL电平之间转换,用来进行通信下载程序和数据;;对自己搭建的电路板来说,仍会有MAX232芯片和RS232串口用来实现程序的烧写,实现对单片机写入数据和程序的下载。用的是RS232串口实现的程序烧写!
若要用USB来烧写,需要一个相应的ISP下载软件和硬件烧写器,一般这种烧写器价格不菲。用的是USB口实现烧写程序!
一般的,烧写程序还是选用可以用ISP下载的,自己搭建个RS232串口的电路,简单实用,对单片机烧写程序就够用了。
问题三:单片机中烧程序是什么意思 看处你刚刚入门。单片机是个有意思的东西,好好学。keil是电脑上的编程软件,烧程序你就理解为往单片机中下载程序。
问题四:单片机开始可以烧程序用了几次就烧不进去 怎么回事? 有可能已经烧坏了,特别是89c52系列 更特别是STC品牌的89C52的。很容易坏,
你要注意了,你电压可能有问题。
还有就是烧程序的时候需要复亥,如果以前你能烧现在不能烧,说明你复位电路没有问题,经常复位电路影响烧程序。
问题五:第一次给单片机烧程序要注意什么 use转232应该没有问题,我用现代的芯片试过已经通过。首先我们要分析你有没有进入ISP模式,用示波器观察一下串口的波形是否正常,再就是芯片各个管脚的电压是否正常。排除硬件原因后仍不能解决,建议换一下你的USB转232线,这方面的牌子实在太多了,虽然原理都一样,但作为一个故障点来分析也是应该考虑的。
问题六:为什么单片机程序烧不进去 用的是什么型号的单片机?会不会是烧写前没有先擦除?单片机保存程序是使用EEPROM或者flash的,都需要先擦除,才能写入的。第一次能烧进去,是因为单片机出场时本来就是已擦除过的,可以写入。但之后的写入之前,都需要先擦除。
问题七:单片机程序烧入rom之后怎样执行 1,HEX文件包含了代码数据。是由链接器统一分配ROM地址。
2 程序中的变量,也是在编译连接时,分配了RAM地址。不存在载入的问题,程序指令对变量的 *** 作,就是对RAM地址的 *** 作,地址值存在在指令中。
3 堆栈在程序初始化时设置堆栈指针。Keil C 会自动设置好。
4 一般的51单片机代码是从 0000开始执行,这是它的复位地址。也有别的型号的单片机并不一定从0开始执行。程序从0开始执行,但它执行的第一句往往是一个跳转指令(这个Keil C也是自动写好的),跳到另一块地址去执行,而不会顺序执行到 中断的地址的。
你如果是用汇编写程序,这些都是要你自己去分配的,用C写程序,由编译器来完成这些底层 *** 作。
问题八:怎么程序突然烧不进单片机了??? 这种情况会有很多种可能性:
1、单片机已经损坏,楼主换个单片罚试试。
2、单片机开发板损坏,这个情况基本上不可能发生,但楼主需做好准备。
3、USBISP损坏,概率不大,换一个试试。
4、下载软件出问题了,楼主看看自己的程序下载软件的型号是否为“AT89S52”。
5、单片机在插座上插反了。
6、某条连接线不牢固。
7、开发板的晶振松了,或数值不对。
问题九:8051单片机通过什么口烧程序? at89c系列是用并口下载。at89系列可以用isp方式下载。 stc系列可以通过串口下载。51有专门的仿真芯片。。
isp可以用串口或者并口,或者串口转u (这种方式最方便,笔记本上也可以下载)。isp就用到单片机的io口(P15,P16,P17),还有RST引脚+74h373+并口,就可以下载了。。
它实现的大概过程是:
1、AD 输入监测,这个单片机是自带AD转换的
2、监测到的信号,通过单片机处理转换,变成量化的值
3、AD被量化后,通过串口发送到主机
4、主机通过对接收到的数据进行分析,画出曲线或直接显示等等。
1)有认真理解和学习好全局变量、局部变量的含义和使用情况;
你有两处使用到变量 i,应该设为局部变量,这样才不至于产生相互影响;
2)要保证单片机运行的代码在可预知的地址范围内执行,如在 main()中,得加入while(1);语句,让其最后在此进入死循环,不然机器会继续往下执行就跑到不可知的地方去,输出就不能确定了;
3)示波器问题,可能你得需要个带存储功能的数字示波器,因为仅输出一百个脉冲信号,很快就完结了,你可能还没来得及看,波形就没了;
一般来说接在单片机上振荡输出脚波形较大,振荡输入脚小,是不是本来有的,只是小,而被忽略了。
单片机(Microcontrollers)是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的微型计算机系统,在工业控制领域广泛应用。从上世纪80年代,由当时的4位、8位单片机,发展到现在的300M的高速单片机。
示波器是一种用途十分广泛的电子测量仪器。它能把肉眼看不见的电信号变换成看得见的图像,便于人们研究各种电现象的变化过程。示波器利用狭窄的、由高速电子组成的电子束,打在涂有荧光物质的屏面上,就可产生细小的光点(这是传统的模拟示波器的工作原理)。在被测信号的作用下,电子束就好像一支笔的笔尖,可以在屏面上描绘出被测信号的瞬时值的变化曲线。利用示波器能观察各种不同信号幅度随时间变化的波形曲线,还可以用它测试各种不同的电量,如电压、电流、频率、相位差、调幅度等等。
恩,这个我记得我做过啊,不难就是LCD要有打点的,我可以发你一个。原理就是点x,y,x是横的,就是一个for循环啊,然后y把他根据电压的数值对应比例转换为64高度上的数值啊,比如1v对应y=30,处理好这个数据就在刚才的for里面显示就行,关键是打点哦
以上就是关于单片机应用程序的开发步骤全部的内容,包括:单片机应用程序的开发步骤、51单片机中 怎么得到精确延时、研究单片机,示波器的主要作用是什么,需要买多少M的等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)