您的位置 首页 国产IC

51单片机编程环境的建立及代码编写的办法

51单片机编程环境的搭建及代码编写的方法-51单片机开发软件基本无疑选用Keil C51集成开发环境。Keil C51是德国Keil Software公司(ARM公司收购了)出品的51系列兼容单片机C语言软件开发系统,提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等,目前最新版本已经到了uVision5。

1. 51单片机概述

51单片机是对一切兼容Intel 8031指令体系的单片机的总称。现在教科书根本都是以前期的MCS-51为原型,解说微机的原理及其接口技能的。前期的51单片机功用都较弱,需扩展romram等才干组成一个较杂乱的体系。而如今盛行的8位51单片机都比前期芯片作了较多的功用扩展,功用微弱。出产51单片机的厂家有许多,像atmel的at80c51系列,华邦w78c051系列,宏晶stc80c51系列等,其间台湾宏晶stc系列51单片机在国内尤为盛行。因而,笔者选用宏晶性价比较高的一款51单片机stc12c5a60s2来作开发解说。该款51单片机现已是宏昌第N代产品了,其主要特征如下:

1.1. 增强型8051 CPU,1T,单时钟/机器周期,指令代码彻底兼容传统8051;

1.2. 作业频率规模:0 – 35MHz,相当于一般8051的 0~420MHz;

1.3. 用户运用程序空间60K字节,片上集成1280字节RAM;

1.5. ISP(在体系可编程)/IAP(在运用可编程),无需专用编程器,无需专用仿真器 可经过串口(P3.0/P3.1)直接下载用户程序。

1.6. 内部集成MAX810专用复位电路,2路PWM,8路高速10位A/D转化(250K/S),EEPROM,看门狗,内部RC振荡器,4个定时器,7路外部I/O口中止等。

特别需留意的是stc新一代的单片机都是1T单时钟/机器周期,与讲义介绍的前期51单片机是12T单周期是不相同的,软件完结延不时需作留意,其他扩大的特别功用寄存器等请参阅stc12c5a60s2的数据手册。

2. 51单片机编程环境概述2.1. 代码编译东西

51单片机开发软件根本无疑选用Keil C51集成开发环境。Keil C51是德国Keil Software公司(ARM公司收买了)出品的51系列兼容单片机C言语软件开发体系,供给了包含C编译器、宏汇编、衔接器、库办理和一个功用强大的仿真调试器等,现在最新版本现已到了uVision5。这儿需求阐明的是,Keil C51并不彻底与ANSI C相同,Keil C51因为面向的是51单片机,为了更好地胪陈51的架构,Keil C51扩展了一些共同的关键字,语法描绘等。如用code阐明为常量放在代码区,data阐明直接寻址区的改变,sfr声明特别功用寄存器等。

51单片机编程环境的建立及代码编写的办法

图2.1-1

2.2. 代码调试东西2.2.1. Keil自带仿真调试器

Keil集成开发环境除了编译链接东西外,还自带了一个功用强大的仿真调试器。当然软仿真是能够看到Keil编译后的汇编代码,单步调试能够盯梢各个寄存器的状况改变,可是软仿真是无法得到实在的外部输入状况的,如仿实在在开发板的按键输入等。代码调试时往往需求知道编译器是否依照要求进行代码的编译处理,因而,能够让编译器输出它是怎么编译,链接文件的,咱们能够检查这些了解编译器编译c生成的汇编代码,链接的符号,内存分配之类的信息。Keil在Target特点中LisTIng列可进行设置,如C Compiler LisTIng选项中是c编译器输出选项,点上Assembly Code即输出c编译对应的汇编代码,在文件.lst中。C Preprocessor LisTIng为c编译器预处理输出的信息,AssemblerLisTIng为汇编器输出的处理信息,LinkerListing为链接器输出的处理信息(在.m51后缀文件中),这包含编译器对内存的分配,各个函数符号等。一般编译后的汇编代码以及代码的链接信息是能够盯梢检查,以判别代码的问题所在。

2.2.2. Proteus仿真软件

Proteus软件是英国Lab Center Electronics公司出书的EDA东西软件,它不只具有其它EDA东西软件的仿真功用,还能仿真单片机及外围器材。Proteus具有电路仿真功用,能仿真一些最根本电子元器材,如led,数码管,键盘等,并且是能仿真51单片机代码运转的。在这儿需求阐明的是,请有必要不能以仿真电路的作用图与实在的硬件开发混搅,电路仿真软件往往都是逻辑上的电路衔接,彻底不能够用来阐明实在硬件开发进程。此外,Proteus仿真51单片机也会有一些逻辑的问题,例如,在硬件上实在可运转的代码在Proteus上无法仿真到达作用,修正一下代码次序即可。总归,关于小代码,Proteus都是能够担任的,假如代码太杂乱,仿真使命会到达100%,无法再进行仿真了。因而,笔者引荐关于初学者,可先用Proteus进行仿真,进行一些最根本的操练,了解汇编言语,51单片机状况改变,c言语等,验证自己在51单片机架构学习中的一些了解,代码完结的了解。学习到必定的程度仍是需求一块51开发板进行开发操练的,究竟仿真软件只能仿真很少部分的外围,也不能仿真杂乱的硬件及代码。

51单片机编程环境的建立及代码编写的办法

图2.2.2-1

2.3. 代码烧录东西

Keil C51编译生成的hex文件经过STC_ISP东西,衔接串口线(一般选用usb转串口线)进行下载。代码烧写传输是经过51单片机的uart串口信号线Tx,Rx完结的,stc单片机完结isp下载是因为芯片内部有厂商的固化代码,上电复位后是先履行固化代码,检测串口有无接收到特定的指令,假如有则进入下载形式,与上位机的isp下载软件进行通讯,从而把代码下载进单片机rom区。假如没有有用的串口下载指令,则跳转履行真实的用户代码,即从0000H处开端履行代码。

51单片机编程环境的建立及代码编写的办法

图2.3-1

3. 汇编流水灯入门代码

笔者以为学习51单片机并不是能经过他人的比如用c言语仿照写出相似的功用即可,有必要要对自己的编码目的比较明晰,这样脱离任何例程都是能够自己掌控编写代码。因而学习51单片机其实更精确来说是学习微机的原理以及接口技能。而微机的原理以及接口技能关于51,arm或其它架构的mcu都是通用的,经过51来学习微机原理睬涉及到汇编言语,因为只需汇编言语才干直接描绘51内部的作业状况。笔者以过来人的身份引荐初学者从51微机原理,汇编学起。C言语仅仅简化封装了汇编言语的一些处理进程,学完汇编,c言语也自然会到达相应的水平。此外,关于软件犯错调试,只能盯梢汇编代码,检查寄存器的状况判别,而想学习arm,从事更深化的嵌入式开发,汇编是必不可少的。

3.1. 硬件原理图

8个LED衔接到P0口,当短接CON2后,只需P0口对应位为0(低电平),相应的LED则被点亮。此外阐明一下为什么不必P0对应位为1时点亮而用0,因为传统51单片机I/O口是弱上拉的,高电平是输不出大电流的(相对低电平),高电平拉电流估量是ua级,但低电平灌电流几个ma是不成问题的。关于stc系列51单片机,I/O口是能够装备成推挽输出的,这样凹凸电平都是能够到达20ma(手册数据)的输出/吸收电流。

51单片机编程环境的建立及代码编写的办法

图3.1-1

3.2. 工程建立

翻开Keil C51,Project-》NewuVersion Project,保存项目后,挑选cpu为Atmel的AT89C52的51单片机,这儿需求阐明的是,Keil没有stc系列的51单片机挑选,只需是51内核,在Keil下可挑选任一厂家,任一款51单片机进行代码编写,因为代码都是兼容的。而不同厂商芯片之间的差异仅仅rom巨细,ram巨细,片内外设以及一些厂家特有的特别功用寄存器的界说。这些都能够在工程中,代码中从头界说,编译器会老老实实依照要求编译代码。挑选了cpu后,会提示是否参加51的发动代码到工程中,因为咱们编写的是汇编言语,此处不需求,参加后发动代码会与咱们自己的汇编代码界说抵触。这儿需求阐明的是,发动代码是初始化c环境需求的文件,发动代码会设置c代码运转时的仓库,清零全局变量,静态变量区等。这便是为什么咱们在c文件中界说一个全局变量,默许这个变量的初始值为0(C规范)。

3.3. 代码编写

创立一个新文件,命名为LEDs.ASM,ASM为51汇编文件后缀,保存并参加工程。汇编的一些根本用法在代码注释中有阐明,更多的汇编用法请google,百度。这儿需求阐明的是,51单片机第一条指令方位是在0H,后边相邻的地址是分配给相应的中止进入的,因而第一条指令往往会跳转避开中止向量地址区。以下代码完结8个LED灯轮番点亮,点亮延时1s,这个汇编代码是仿照c言语函数结构化编程的,里边能够相似认识到c编译器大概是怎么处理c函数并生成汇编的,当然编译器汇编质量根本是无法到达人工汇编质量的。

ORG 0H ; 表明后边紧跟的那条指令的地址是 0000H

JMP Begin; 无条件跳转到Begin处,以防止中止向量地址

ORG 0BH ;000BH处为定时器T0的中止处理进口

JMP T0_INT ; 未运用T0定时器中止,只供代码阐明

T0_INT:

; 中止产生时会主动把当时程序运转地址PC压入栈sp

; 中止处理完后用RETI中止回来,从栈sp中出栈到PC回来打断程序处

RETI

LED1 EQUP0.0 ; LED1由P0口第0位操控,以下相似

LED2 EQU P0.1

LED3 EQU P0.2

LED4 EQU P0.3

LED5 EQU P0.4

LED6 EQU P0.5

LED7 EQU P0.6

LED8 EQU P0.7

ORG 100H

Begin:

MOV P0, #0xff ;P0口输出全1,一切LED灭

LOOP:

; R6,R7为调用函数的参数传入,参数为16位,需2字节

; _Delay_ms对应c函数原型为void Delay_ms(intnCount)

; 共延时nCount * 1ms(12M一般8051),关于stc指令周期1T的

; 延时nCount * (1/6)ms (12M)

CLR LED1 ;直接位清0指令,铲除P0口第0位,LED1亮

MOV R7, #(1000& 0xff) ; 参数为1000,一般8051延时1s

MOV R6, #((1000》》8) & 0xff) ; 16位变量

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/bandaoti/ic/345832.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部