当前位置: 首页 > 乐球直播在线
返回
列表

51单片机编程环境的搭建及代码编写的方法

发表时间: 2024-03-24 作者: 乐球直播在线

  51单片机是对所有兼容Intel8031指令系统的单片机的统称。目前教科书基本都是以早期的MCS-51为原型,讲解微机的原理及其接口技术的。早期的51单片机功能都较弱,需扩展rom,ram等才能组成一个较复杂的系统。而现今流行的8位51单片机都比早期芯片作了较多的功能扩展,性能强劲。生产51单片机的厂家有很多,像atmel的at80c51系列,华邦w78c051系列,宏晶stc80c51系列等,其中***宏晶stc系列51单片机在国内尤为流行。因此,笔者采用宏晶性价比较高的一款51单片机stc12c5a60s2来作开发讲解。该款51单片机已经是宏昌第N代产品了,其主要特征如下:

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

  1.4. 通用I/O口36个(以封装PDIP40为例),可设置成准双向口/弱上拉,推挽/强上拉,仅为输入/高阻,开漏,每个I/O口驱动能力均可达到20mA,但整个芯片最大别超过55Ma;

  1.5. ISP(在系统可编程)/IAP(在应用可编程),无需专用编程器,无需专用仿线)直接下载用户程序。

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

  尤其需注意的是stc新一代的单片机都是1T单时钟/机器周期,与课本介绍的早期51单片机是12T单周期是不一样的,软件实现延时时需作注意,其余扩充的特殊功能寄存器等请参考stc12c5a60s2的数据手册。

  51单片机开发软件基本无疑选用KeilC51集成开发环境。Keil C51是德国Keil Software公司(ARM公司收购了)出品的51系列兼容单片机C语言软件开发系统,提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等,目前最新版本已经到了uVision5。这里需要说明的是,Keil C51并不完全与ANSI C一样,Keil C51由于面向的是51单片机,为了更好地详述51的架构,Keil C51扩展了一些独特的关键字,语法描述等。如用code说明为常量放在代码区,data说明直接寻址区的变化,sfr声明特殊功能寄存器等。

  Keil集成开发环境除了编译链接工具外,还自带了一个功能强大的仿真调试器。当然软仿真是能清楚看到Keil编译后的汇编代码,单步调试可以跟踪各个寄存器的状态变化,但是软仿真的是没办法得到真实的外部输入状态的,如仿真真实开发板的按键输入等。代码调试时往往必须了解到编译器是否根据相关要求进行代码的编译处理,因此,可以让编译器输出它是如何编译,链接文件的,我们大家可以查看这些了解编译器编译c生成的汇编代码,链接的符号,内存分配之类的信息。Keil在Target属性中Listing列可进行设置,如C Compiler Listing选项中是c编译器输出选项,点上Assembly Code即输出c编译对应的汇编代码,在文件.lst中。C PreprocessorListing为c编译器预处理输出的信息,AssemblerListing为汇编器输出的处理信息,LinkerListing为链接器输出的处理信息(在.m51后缀文件中),这包括编译器对内存的分配,各个函数符号等。通常编译后的汇编代码以及代码的链接信息是可以跟踪查看,以判断代码的问题所在。

  Proteus软件是英国Lab Center Electronics公司出版的EDA工具软件,它不仅仅具备其它EDA工具软件的仿真功能,还能仿真单片机及外围器件。Proteus具有电路仿真功能,能仿真一些最基本电子元器件,如led,数码管,键盘等,并且是能仿线单片机代码运行的。在这里需要说明的是,请务必不能以仿真电路的效果图与真实的硬件开发混搅,电路仿真软件往往都是逻辑上的电路连接,完全不能够用来说明真实硬件开发过程。此外,Proteus仿线单片机也会有一些逻辑的问题,例如,在硬件上真实可运行的代码在Proteus上无法仿真达到效果,修改一下代码顺序即可。总之,对于小代码,Proteus都是可以胜任的,如果代码太复杂,仿线%,无法再进行仿真了。因此,笔者推荐对于初学者,可先用Proteus进行仿真,进行一些最基本的练习,熟悉汇编语言,51单片机状态变化,c语言等,验证自己在51单片机架构学习中的一些理解,代码实现的理解。学习到一定的程度还要一块51开发板进行开发练习的,毕竟仿真软件只能仿真很少部分的外围,也不能仿真复杂的硬件及代码。

  Keil C51编译生成的hex文件通过STC_ISP工具,连接串口线(一般都会采用usb转串口线)进行下载。代码烧写传输是通过51单片机的uart串口信号线Tx,Rx完成的,stc单片机实现isp下载是因为芯片内部有厂商的固化代码,上电复位后是先执行固化代码,检测串口有无接收到特定的命令,如果有则进入下载模式,与上位机的isp下载软件进行通信,从而把代码下载进单片机rom区。假如没有有效的串口下载命令,则跳转执行线H处开始执行代码。

  笔者认为学习51单片机并不是能通过别人的例子用c语言模仿写出类似的功能即可,必须要对自己的编码意图比较清晰,这样脱离任何例程都是能自己掌控编写代码。因此学习51单片机其实更准确来说是学习微机的原理以及接口技术。而微机的原理以及接口技术对于51,arm或其它架构的mcu都是通用的,通过51来学习微机原理会涉及到汇编语言,因为只有汇编语言才能直接描述51内部的工作状态。笔者以过来人的身份推荐初学者从51微机原理,汇编学起。C语言只是简化封装了汇编语言的一些处理过程,学完汇编,c语言也自然会达到相应的水平。此外,对于软件出错调试,只能跟踪汇编代码,查看寄存器的状态判断,而想学习arm,从事更深入的嵌入式开发,汇编是必不可少的。

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

  打开Keil C51,Project-》NewuVersion Project,保存项目后,选择cpu为Atmel的AT89C52的51单片机,这里需要说明的是,Keil没有stc系列的51单片机选择,只要是51内核,在Keil下可选择任一厂家,任一款51单片机进行代码编写,因为代码都是兼容的。而不同厂商芯片之间的差异只是rom大小,ram大小,片内外设以及一些厂家特有的特殊功能寄存器的定义。这些都可以在工程中,代码中重新定义,编译器会老老实实根据相关要求编译代码。选择了cpu后,会提示是否加入51的启动代码到工程中,由于我们编写的是汇编语言,此处不需要,加入后启动代码会与我们自己的汇编代码定义冲突。这里需要说明的是,启动代码是初始化c环境需要的文件,启动代码会设置c代码运行时的堆栈,清零全局变量,静态变量区等。这就是怎么回事我们在c文件中定义一个全局变量,默认这个变量的初始值为0(C标准)。

  创建一个新文件,命名为LEDs.ASM,ASM为51汇编文件后缀,保存并加入工程。汇编的一些基本用法在代码注释中有说明,更多的汇编用法请google,百度。这里需要说明的是,51单片机第一条指令位置是在0H,后面相邻的地址是分配给相应的中断进入的,因此第一条指令往往会跳转避开中断向量地址区。以下代码实现8个LED灯轮流点亮,点亮延时1s,这个汇编代码是模仿c语言函数结构化编程的,里面可以类似认识到c编译器大概是怎么样处理c函数并生成汇编的,当然编译器汇编质量基本是无法达到人工汇编质量的。

  0 引言 在工业现场,生产环境恶劣,不能长时间停留在现场采集温度数据,而有限传输具有温度检测难、可操作性差。高科技农业现场,采集温度时,布线困难复杂,成本高。为解决以上困难,采用无线方式。常用的无线 MHz小无线、ZigBee、CDMA/GPRS、3G等方式,考虑到性价比和现场情况,本系统采用JF24D?B完成无线收发。为了采集不同高度的温度,可在不同高度安置无线网络传感器。但考虑到成本和传感器的电源替换问题,采用简易螺旋直升机升降不同高度来采集温度。 经过控制直升机的升降让它达到测量高度进行温度测量并传送控制单元处理,测量完毕返回便于无线 总电路设计 为了采集高空温度,采

  的温度采集系统简单应用设计 /

  一.系统概述 系统使用的模块有AT89C51单片机+8位共阳极数码管+DS18B20温度检测模块+按键+小灯。 本设计采用51单片机为核心控制,使用数码管进行温度以及阈值的显示,通过按键可以对温度上限和温度的下限进行设置,当检测到温度超过温度上限和温度下限后会通过小灯进行报警。 二.仿线位共阳数码管显示实时温度。 2.通过按键能调节温度阈值,阈值分为上限和下限,通过按键可以对阈值进行加减调节。 3.当温度不高于温度下限阈值后黄灯就会亮。 4.当液位高于温度上限阈值后绿灯就会亮。 三.程序设计 使用Keil 51进行程序设计,打开Proteus时程序是默认烧录的状态,如果没有烧录点击AT89C

  的智能恒温箱设计 /

  DS1302时钟模块相关介绍 基本介绍 概述 DS1302 可慢速充电实时时钟芯片包含实时时钟/日历和 31 字节的非易失性静态 RAM。它经过一个简 单的串行接口与微处理器通信。实时时钟/日历可对秒,分,时,日,周,月,和年进行计数,对于小于 31 天的月,月末的日期自动做调整,还具有闰年校正的功能。时钟能够使用 24 小时格式或带 AM(上 午)/PM(下午)的 12 小时格式。31 字节的== RAM== 可拿来临时保存一些重要数据。使用同步串行通信, 简化了 DS1302 与微处理器的通信。与时钟/RAM 通信仅需3 根线)I/O(数据线)SCLK(串行时钟)。数据可以以每次一个字

  +DS1302时钟模块+LCD1602显示 /

  89C51芯片没有自带PWM发生器,如果要用51来产生PWM波就必须要用软件编程的方法来模拟。方法有可能可以分为软件延时和定时器产生两种方法。下面将逐一介绍。 1 软件延时法 利用软件延时函数,控制电平持续的时间,达到模拟pwm的效果。 程序如下: #include sbit pwm=P1^0; main() { while(1) { pwm=1; delayus(60);//置高电平后延时60us,占空比60% pwm=0; delayus(40); } } void delayus(uint x) { while(x--); } proteus软件仿真结果如下: 可见,用这种延时函数的方法就能简单地模拟出pwm输出。但是

  产生PWM软件延时和定时器产生两种方法 /

  80C51单片机是在8051的基础上发展起来的,也就是说在单片机的发展过程中是先有8051,然后才有80C51的。 8051单片机与80C51单片机从外形看是完全一样的,其指令系统、引脚信号、总线等完全一致(完全兼容),也就是说在8051下开发的软件可完全在80C51上应用,反过来,在89C51下开发的软件也可以在8051上应用。这两种单片机是完全可移植的。 既然这两种单片机外形及内部结构都一样,那它们之间的主要差别在哪里呢? 8051与80C51单片机的主要差别就在于芯片的制造工艺上。80C51的制造工艺是在8051基础上进行了改进。 8051系列单片机采用的是HMOS工艺:高速度、高密度; 80C51系列单片机采用的

  一、项目介绍 跟着社会经济的加快速度进行发展,人们对节能环保的要求慢慢的升高,电动车因其无污染、噪音小、使用成本低等优点慢慢的变成为了市场关注的焦点。同时,随着科学技术的慢慢的提升和应用,电动车的技术水平也在逐步的提升。 为了更好地满足市场需求和科学技术进步的要求,本项目基于51单片机设计了一款电动车控制器。最重要的包含电动车控制和驱动两个关键部分。其中,控制部分采用51单片机作为控制核心,通过编程实现电动车前后行驶、左右转向、加速等操作。而驱动部分则采用L298N驱动芯片驱动直流电机。当前设计的电动车,支持锂电池供电、支持按键实现电动车前后行驶、左右转向和加速等操作,电机采用直流电机,驱动芯片采用L298N。 二、系统架构 本系统由控制器、电机

  设计的电动车控制器 /

  超声波测距的模块,51单片机接上12864液晶,HC-SR04超声波模块,就可以了,具体程序没怎么看,超声波模块的硬件也不晓得。 超声波测距51单片机12864液晶显示源程序: #include #include //引脚定义 sbitRX=P1 ^ 1; sbitTX=P1 ^ 2; sbitCS=P3 ^ 3;//片选 高电平有效 单片LCD使用时可固定高电平 sbitSID=P3 ^ 4;//数据 sbitSCLK=P3 ^ 5;//时钟 //Function Definition函数声明 void Delay(int num); void Init_DS18B20(void); unsigned char ReadO

  AT89S51单片机是什么? AT89S51是什么? 书上和网络教程上可都是8051,89C51等 !没听说过有 89S51 ?! 这里,初学者要澄清单片机实际使用方面的一个产品概念,MCS-51单片机是美国INTE公司于1980年推出的产品,典型产品有 8031(内部没有程序存储器,实际使用方面已经被市场淘汰)、8051(芯片采用HMOS,功耗是630mW,是89C51的5倍,实际使用方面已经被市场淘汰)和8751等通用产品,一直到现在, MCS-51内核系列兼容的单片机仍是应用的主流产品(比如目前流行的89S51、已经停产的89C51等),各高校及专业学校的培训教材仍与MCS-51单片机作代表进行理论基础学习。 有些文献

  教程

  电动汽车电池管理系统(BMS)simulink完整模型(含SOC、主动均衡等算法)

  MPS电机研究院 让电机更听话的秘密! 第一站:电机应用知识大考!第三期考题上线,跟帖赢好礼~

  【下载】LAT1317 STM32CubeProgrammer和STM32CubeIDE协同调试的方法

  【下载】LAT1298 基于Azure USBx开发USB_OTG_HS MSC应用的几个问题

  【下载】LAT1306 使用STM32CubeIDE填充未用FLASH区域

  【视频】使用STM32cubeMX与STM32PackCreator的最初步骤

  【新品】STM32H5-Arm® Cortex®-M33 内核,主频高达250MHz,提升性能与信息安全性

  【新品】STM32MP13X-支持Linux、RTOS和Bare Metal应用,新一代通用工业级MPU

  【新品】Arm® Cortex®-M33处理器内核,运行频率160 MHz,基于Armv8-M架构并带有TrustZone®

  【下载】AN5609 基于STM32WB系列新产品开发Zigbee智能能源(SE)应用

  【下载】RM0490 STM32C0x1 Arm®32位MCU参考手册

  【下载】UM2986 STM32U5系列IEC 60730自测试库用户指南

  【AI】意法半导体发布安全软件,保护STM32边缘AI设备连接AWS IoT Core的安全

  【新品】意法半导体微控制器STM32H5探索套件加快安全、智能、互联设备开发

  强化MCU多元应用产品布局,持续深入细分市场,覆盖入门到高性能应用开发新竹,台湾,2024年3月20日 - 随工业5 0、AI和物联网应 ...

  面对智慧工厂传感器升级需求工业5 0注重智慧化、感测能力和高度自动化,代表着智慧工业领域的新一波革命,在这个背景下,工业自动化和物联 ...

  stdint h 这里放着C语言的标准表达方式typedefsignedcharint8_t;typedefsignedshortintint16_t;typedefsignedintint32_t;typedefsigned__i ...

  USART通用同步异步收发接收器,是一个串行通信设施,可以和外部设备进行灵活的全双工数据交换,有别于USART还有一个UART(在原来的基础上 ...

  1 简介 手势识别是计算机科学和语言技术中的一个主题,目的是通过数学算法来识别人类手势。 手势可以源自任何身体运动或状态,但通常源自 ...

  使用PlatformIO对Arduino UNO和STM32板进行编程

  站点相关:综合资讯51单片机PIC单片机AVR单片机ARM单片机嵌入式系统汽车电子消费电子数据处理视频教程电子百科其他技术STM32MSP430单片机资源下载单片机习题与教程