大家说STC的写单片机程序开始地址,有没有必要写一个芯片支持包

sponsored links
STC 8051单片机扩展SRAM介绍、使用以及配置
STC8051系列单片机中很多具有内部扩展的数据存储器SRAM(单片机内部的RAM一般都是SRAM,区别于SDRAM,下面叙述中的RAM,即表示SRAM),所谓的内部扩展RAM,即是说在基本型的8051基础上扩展数据存储空间。从逻辑上来说,扩展的RAM空间应该是在芯片外部通过外部总线读取的,但从物理上看却又是在芯片内部的,一定数目的RAM空间被集成到了单片机内部,从而扩大了单片机的RAM。
片内RAM介绍以及使用
STC系列单片机内部RAM及其可扩展情况如下图1所示:
Idata空间表示单片机自身具有的基础RAM,xdata即是STC额外扩展的位于芯片内部的RAM。Idata和xdata所代表的意思即是是说数据到底是在片内的低256字节还是扩展的RAM地址上。
在程序中可以通过在类型后面声明来指定位置,如果不声明的话,数据存放的默认位置和编译器的SRAM编译设置有关。(此点后面介绍)。
U//定义一个uchar型变量,将会在程序运行时,被分配到低256或128字节的RAM上去
U//定义一个uint型变量,程序运行建立该变量时,将会被指定到扩展的RAM区域去。
这儿注意,STC的单片机只有40个引脚以上的才可以进行片外RAM扩展,最多支持片外字节地址为64KB。
其实,低256字节的RAM空间也并不是全部能通用访问的,其中还有工作组寄存器,堆栈指针寄存器,SFRs等,大体分布如图2,这些都是很多8051书上讲得很详细了,这里就不再赘述。
STC8051的内部RAM计量方法是:标称RAM=集成RAM+扩展RAM。例如:stc15f2k60s2,内部具有2K的ram,这2K的RAM其实是由256字节的集成RAM和1792字节的扩展RAM构成的。在Keil中开发时,如果需要使用超过256字节的RAM,则应该在Keil的工程Option中设置MemoryModel为:Large:Variables in XDATA.,并勾选”use on-chip XRAM选项”(如图3所示),这样在代码中默认声明的变量即为xdata型变量,如果要使用集成RAM那部分空间,还需要额外声明idata.
以上为STC 8051单片机的一般性RAM使用方法。接下来说一下STC单片机片外扩展RAM的使用和设置方法。
&片外扩展RAM介绍以及使用
在工程中,我们可能遇到需要较大的数据暂存空间的情况,这个时候内部的2K、4K RAM就完全不够用了。使用单片机内部自带的EEPROM或Flash存储空间不失为一种方法,不过存在擦写次数有限和操作周期长的问题,在某些对实时性要求较高的场合,会耽误MCU对其它任务的处理。
&1)硬件连接
这儿先来介绍下STC单片机扩展片外RAM的物理连接方式:通过使用P0、P2端口来进行地址、数据传输,其中P0口为数据/地址复用端口,并通过锁存芯片进行地址锁存。其他使用的信号还包括:ALE(P4.5),用于控制P0口连接的数据/地址数据线的锁存芯片,RD(P4.4)和WR(P4.2)用于对RAM存储芯片进行读写指示。具体的连接示例如图4所示:
STC单片机片外扩展RAM空间的逻辑地址最大支持64Kbyte,此64KB是指除了单片机内部基本的256字节之外能扩展的地址,所以如果单片机内部进行了RAM扩展,使用了一部分地址,那么片外扩展的存储芯片地址就不一定能全部使用。
例如:stc15f2K60s2,如果同时使用内部和外部扩展的RAM空间地址,那么扩展的片外RAM空间最多只能访问:64k-(2k-256)=62.75k个字节地址了。
&2)片外RAM编程使用介绍以及工程设置
根据STC手册,控制是否使用内部扩展的RAM决定于AUXR寄存器的EXTRAM位。当该位为1,则不使用单片机内部扩展的RAM,而直接使用片外扩展的RAM。所以如果此时外部扩展了一片64K字节的RAM芯片,那该RAM芯片的所有地址都是可以访问到的。如果该位为0,则内部扩展的RAM和片外扩展的RAM都会使用,扩展地址总和同样是64K,但由于单片机内部扩展的RAM使用了一部分扩展地址,所以此时所能使用到的片外RAM 空间为64K与内部扩展RAM地址空间的差值了。如图5
在EXTRAM为0情况下,STC单片机会首先使用内部扩展RAM,当地址超过了内部扩展RAM地址时,会自动地使用外部RAM的,这就不用我们操心了。(STC 单片机复位时,EXTRAM位为0,即默认是内部和外部扩展RAM都会使用的。)
同时,要使用片外的扩展RAM,在Keil中同样要进行相应的设置,指定外部RAM的起始字节地址以及大小。如图6所示:
我实际使用的是 STC15F2K60S2(2K RAM,60K ROM)型单片机并使用32KByte的RAM芯片进行片外扩展,起始地址Start由图6可以看出是:0x0700。这个起始地址是这样计算的:2K(92=0x0700,这就是片外扩展的RAM起始地址。空间大小Size由图6可以看出是:0x7D00,计算过程为:32K=32*=0x8000.这样就完成了Keil中使用片外扩展RAM的配置。
我在程序中如此定义一个变量:
#define DATA_NUM&&&&&&&&&&&&&& 32768
uchar xdata P_rBuff1[DATA_NUM];
其它还有一些定义的idata和xdata变量。
Keil中程序编译结果如图7:
程序经过测试,也能正常运行。
&3)片外RAM访问时序和速度介绍
最后还有一点,STC15系列还有一个特殊功能寄存器(SFR)专门用于控制外部64K数据总线速度:BUS_SPEED。该寄存器的低两位:EXRTS[1:0]可以控制片外RAM访问动作的建立、保持、读或写所需的CPU时钟周期。
众所周知的是,片外RAM访问,时序大致分这样几个阶段:地址数据建立、地址数据保持(MCU的ALE管脚控制锁存地址数据)、数据的读或写。如图8所示:
所以访问外部的RAM所需要的时钟周期也至少是这几部分动作的周期和,再加上额外的一些CPU跳转周期。而BUS_SPEED就是控制这些动作所需持续的时间的。
所以该寄存器数值和访问速度关系如图9所示:
图9中两条MOVX命令都是访问片外RAM的,只是前者是访问片外RAM 8位地址,后者是访问片外RAM 16位地址,差别仅为一个周期,所以不用过多纠结此处。
接下来请看图10和图11:
图10是读写片内扩展RAM所需时钟周期,图11是读写片外扩展RAM(BUS_SPEED已设置为最快速度)所需时钟周期。8位的读写也是与此类似的。从对比中我们可以知道,片外扩展的RAM访问所需时间是片内扩展RAM所需时间的2~3倍。所以即便是在考虑使用片外扩展的RAM,也要注意其存取速度是否能够满足要求。另外还要考虑的是存储芯片的数据信号跳变所需时间。
STC51单片机作为国产的8位51系列增强型单片机,使用起来的性价比还是不错的,入手也很简单,其功能还是能够满足一般的开发应用的。但同时也存在一些功能还不够好的,如UART。使用手册的一些介绍也不够详细。要在芯片制造领域达到比较先进的水准,还是需要多静下来研究的,我们也会在STC51能够胜任的条件下优先选择STC51,支持本土芯片的发展。
原文地址::http://baike.baidu.com/link?url=JPrmjSHEDdtPVstEYj2OnmOK-lt-QwmKqprxEgjE47hG0QT_5tbGokwAZdZywkW56iEo8Zu0jUAcT8bJb4a3e_ 相关文章 1.STC15系列单片机数据手册.pdf----http://download.csdn.net/d ...
1 基本原理 类似于其他引导装载升级程序的方法,在系统中必须始终存在一段用于程序装载的代码(bootloader),该代码在启动时被运行.其基本功能是根据外部条件来判断是运行现有版本的程序还是从主机下载新程序.8051具有选择执行片内或者片外程序的功能,而对片内E2PROM编程过程相对比较复杂,因此这里将程序引导装载代码烧结在内部程序空间中,并不准备改变:而 ...
FxCAD 实验七 8051单片机绘制
要绘制8051,首先在FxClassLibrary目录下创建一个类文件(这里就以创建一个名为&FxBox_pcb8051.cs&的类文件为例),接着要在FxControlle目录下的VerticalToolTabs文件中ToolWindowHost文件中创建一个&8051&quo ...
Ext扩展组件介绍之一--Ext.Drawing.Surface绘图组件(vml/svg)
Kimm King 日0:53:15
作为一个Ext JS的fans,我一直为Ext JS的UI为傲. 但是Ext JS的类库中并未提供关于Graphics的部分,不得不说的是一种遗憾. 可能是目前各个浏览器上并没有统一 ...
因为最近要用单片机DIY一些电子制作,所以将电子制作写成文章,希望能对别人有所帮助. 本文章将简要说明51单片机扩展ram的方法,为了避免以后再扩展ram,我一步到位的将ram扩展到64KB 一.原理图 说明: 1. 图中未提供电源部分,由外部排针供电 2. 图中未提供串口下载部分,由外部串口模块插到P30, P31实现下载 二.实物图 三.Keil设置 请 ...豆丁微信公众号
君,已阅读到文档的结尾了呢~~
基于STC89C52单片机智能循迹小车(可编辑),智能循迹小车,智能小车循迹原理,循迹小车,循迹小车程序,循迹小车论文,循迹小车原理,红外循迹小车程序,51循迹小车程序,循迹避障小车
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
基于STC89C52单片机智能循迹小车(可编辑)
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='http://www.docin.com/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
提供MCU单片机和IC芯片的解密,部分厂家如下: ATMEL(AVR)& MICROCHIP& SYNCMOS WINBOND& STC& MSP430系列 C8051F系列 CYPRESS& EMC& Feeling& FUJITSU& HOLTEK& MDT& MIKKON& SinoWealth& SONIX& ST& TENX& HITACHI& (PHILIPS& INTEL& MOTOROLA& ATTINY& SST& LATTICE& XILINX ATMEL(爱特梅尔)单片机解密的型号如下:& AT89C51 AT89S51
STC解密热线: & & 联系人:钟红兵
&&&&&&&&&&& 飞利浦单片机是由著名半导体公司恩智浦生产。经过本人长期不懈的努力,终于发现部分PHILIPS芯片的漏洞,研制出PHILIPS单片机解密器。该PHILIPS解密器能破解以下单片机(其它类型也可以试验): &&&&&&&&&&&&&P89C038MBA P89C038MBA/8 P89C038MBA/B P89C038MBA8 P89C038MBAB P89C038MBP/B P89C038MBPB P89C038UBA P89C138 P89C138MBA/A P89C138MBB P89C138MBB/B P89C138MBBB
STC单片机解密大优惠,部分单片机解密400元起!手机: 联系人:钟红兵 STC单片机破解的方法目前有两大种:软破解和硬破解。软破解主要针对STC89系列片机和STC90系列单片机,软解密单片机主要优点是成本低和速度快。例如以下单片机采用软解方法:STC89C51 STC89LE51RC STC89C51RC STC89C52 STC89LE52RC STC89C52RC STC89C53 STC89LE53RC STC89C53RC STC89C54 STC89LE54RD+ STC89C54RD+ STC89C55 STC89C55RD+ STC89C58 STC89LE58RD+ STC89C58RD+ STC89C516 STC89LE516RD+ STC89C516RD+
提供MCU单片机和IC芯片的解密,部分厂家如下: ATMEL(AVR)& MICROCHIP& SYNCMOS WINBOND& STC& MSP430系列 C8051F系列 CYPRESS& EMC& Feeling& FUJITSU& HOLTEK& MDT& MIKKON& SinoWealth& SONIX& ST& TENX& HITACHI& PHILIPS& INTEL& MOTOROLA& ATTINY& SST& LATTICE& XILINX (联系人:钟红兵 手机:) ATMEL(爱特梅尔)单片机解密的型号如下:&
加密狗破解 软件破解 加密锁破解 USB加密狗解密 qq:1. 破解USB加密狗及汉化2. 软件中英文汉化破解3. 微狗破解4. 软件注册码时钟狗、智能狗破解5. 软件注册机提取5. 数据库密码各类串并口加密狗破解6. WinLicense加密脱壳7. Themida加密脱壳8. upx加密脱壳9. aspack脱壳加密10.PECompact脱壳加密11.WWPACK脱壳加密12.PEPACK脱壳加密13.armadillo脱壳加密14.去软件使用时间限制15.解除软件功能限制16.解除软件用户数限制17.软件重新加密制作注册机18.无源码软件界面修改、软件汉化改造
(手机:联系人:钟红兵)经常有网友写信说他的单片机的程序被解密 问我有什么办法.解密毕竟不是正道 拿"为了找回自己的程序"这种借口去解密的 谁都知道是一个谎言 但是做解密的公司乐得做个顺手推舟 好吧,给我money,我找回你丢失的程序 .在21ic的论坛上 也看到有网友专门做解密的工作的.那么做为开发人员的我们 该如何防止他人解密 以保护自己的合法的利益?我在这里谈论如何解密单片机的同时 重点将会是如何来防范.针对目前解密用到的手段 我们如何做相应的对策.只有让广大的程序设计人员懂得别人是怎样解密的 才可以采取有效的措施来应对 因为解密让我们变得一文不值 我们程序员的利益被人非法的掠夺.我希望大家通过编写自己的程序来得到合法的利益 而不是靠解密他人的东西来取得利益.翻遍众多单片机的书 都没有关于如何解密的介绍.这使得我们的程序员懂得怎么去设计程序 但对防止解密却一无所知 就算是一个搞了10年的设计程序的人 也是如此 这个真是悲哀.
&& 华邦解密器又可称为新茂解密器,该解机器与早期的机器相比有如下特点: && 1,利用单片机的EA漏洞,不伤母片,无须寻找芯片内的连续空位。 &&&2,对于非烧断管脚芯片成功率100%。 &&&3,通过电脑的串口直接与机器相连,就是一台编程器一样,操作非常简单。
AL和GAL都属于简单PLD,结构简单,设计灵活,对开发软件要求低。 可编程逻辑器件PLD(Programmable Logic Device)是ASIC的一个重要分支,是厂家作为一种通用性器件生产的半定制电路,用户可通过对器件编程实现所需要的功能。可编程逻辑阵列PLA(Programmable Logic Array),与20世纪70年代中期出现,它是由可编程的与阵列和可编程的或阵列组成。可编程阵列逻辑PAL(Programmable Array Logic)器件是1977年美国MMI公司率先推出的,它由于输出结构种类很多,设计灵活,因而得到普遍使用。通用阵列逻辑器件GAL(Generic Array Logic)器件是1985年LATTICE公司最先发明的可电擦除、可编程、可设置加密位的PLD。具有代表性的GAL芯片有GAL16V8、GAL20,这两种GAL几乎能
&&&&&&&&& 通过研究发现新茂和华邦单片机在制造上还存在更为严重的新利用EA漏洞。此方法比以前方法更好,不用寻找芯片内的连续空位,更安全,不伤母片。有兴趣的朋友我与我联系027-,联系人钟红兵。
1& 引言  单片机(Microcontroller)一般都有内部ROM/EEPROM/FLASH供用户存放程序。为了防止未经授权访问或拷贝单片机的机内程序,大部分单片机都带有加密锁定位或者加密字节,以保护片内程序。如果在编程时加密锁定位被使能(锁定),就无法用普通编程器直接读取单片机内的程序,这就是所谓拷贝保护或者说锁定功能。事实上,这样的保护措施很脆弱,很容易被破解。单片机攻击者借助专用设备或者自制设备,利用单片机芯片设计上的漏洞或软件缺陷,通过多种技术手段,就可以从芯片中提取关键信息,获取单片机内程序。因此,作为电子产品的设计工程师非常有必要了解当前单片机攻击的最新技术,做到知己知彼,心中有数,才能有效防止自己花费大量金钱和时间辛辛苦苦设计出来的产品被人家一夜之间仿冒的事情发生。2& 单片机攻击技术
  同时打开SCH和PCB,PCB中要无元件被选中。  在原理图中选择相关电路元件,再Tools-Select PCB components。  自动转到了PCB中并显示所有被选中元件,用Tools-交互布局的矩形内部排列功能单独放一起,再X-A一次。  这一堆元件同理可更细分,如把电源滤波电容再单独分出来等。  这一堆元件布局完成后可联合起来。
一个印制板的布线是否能够顺利完成,主要取决于布局,而且,布线的密度越高,布局就越重要。几乎每个设计者都遇到过这样的情况,布线仅剩下几条时却发现无论如何都布不通了,不得不删除大量或全部的已布线,再重新调整布局!合理的布局是保证顺利布线的前提。 && 一个布局是否合理没有绝对的判断标准,可以采用一些相对简单的标准来判断布局的优劣。 && 最常用的标准就是使飞线总长度尽可能短。 && 一般来说,飞线总长度越短,意味着布线总长度也是越短(注意:这只是相对于大多数情况是正确的,并不是绝对正确);走线越短,走线所占据的印制板面积也就越小,布通率越高。在走线尽可能短的同时,还必须考虑布线密度的问题。 && 如何布局才能使飞线总长度最短并且保证布局密度不至于
摘要:介绍了单片机内部密码破解的常用方法,重点说明了侵入型攻击/物理攻击方法的详细步骤,最后,从应用角度出发,提出了对付破解的几点建议。& 1 引言 单片机(Microcontroller)一般都有内部ROM/EEPROM/FLASH供用户存放程序。为了防止未经授权访问或拷贝单片机的机内程序,大部分单片机都带有加密锁定位或者加密字节,以保护片内程序。如果在编程时加密锁定位被使能(锁定),就无法用普通编程器直接读取单片机内的程序,这就是所谓拷贝保护或者说锁定功能。事实上,这样的保护措施很脆弱,很容易被破解。单片机攻击者借助专用设备或者自制设备,利用单片机芯片设计上的漏洞或软件缺陷,通过多种技术手段,就可以从芯片中提取关键信息,获取单片机内程序。因此,作为电子产品的设计工程师非常有必要了解当前单片机攻击的最新技术,做到知己知彼,心中有数,才能有效防止自己花费大量金钱和时间辛辛苦苦设计出来的产品被人家一夜之间仿冒的事情发生。
& 单片机编程/STC单片机解密(400元起)/GAL PAL解密(最低300元)/售飞利浦PHILIPS解密设备/售华邦WINBOND解密设备/售GAL/PAL解密设备/售新茂SYNCMOS解密设备 地址:武汉市江汉区前进一路110号景江华庭A座1521 电话:027- 手机: QQ: QQ: &
最后登录加载中...
this.p={b:2,ua:39, ub:'http://img.bimg.126.net/photo/2s9T4LKa7MDLmBrD6nRZyQ==/3248634.jpg',us:'他', friendstatus:'none',followstatus:'unFollow',hmcon:'1',aShowT:'0',guideId:6};
积分 ${data.totalScore} 分,距离下一等级还有 ${data.nextGradeNeedScore}分
心情随笔列表加载中...
this.p={b:2,n:5,r:'http://.blog.163.com/blog/#m=1&c=',mset:'000',mcon:'',srk:-100};
{if defined('fl')&&fl.length>0} {list fl as x}
${x.content|xescape:x.id,x.moveFrom} ${x.publishTime|xtime}
{if x.moveFrom&&x.moveFrom=='wap'} && {/if} {if x.moveFrom&&x.moveFrom=='mobile'} && {/if}
{/list} {else} 暂无心情随笔记录! {/if}
模块内容加载中...
公司网站及网店
模块内容加载中...
模块内容加载中...
我要留言 & &
& 留言列表加载中...
this.p={b:2,nv:false,cn:5,ct:5};
模块内容加载中...
& & & & & &
网易公司版权所有&&
{list x.l as y}
{/list} {/list}
{if defined('wl')} {list wl as x}{/list} {/if}Stc单片机烧录软件 6.85 中文版
当前位置:
STC-ICP是一个超强的STC单片机烧录软件工具箱,就是给STC单片机下载程序的。这款stc烧录软件提供了多款系列的仿真、烧录支持,可以实现直接打包,直接对目标芯片下载烧录。内附详细安装说明,支持XP/Win7/8系统。有需要的朋友们千万别错过,欢迎大家到第七下载体验使用!
1. 首先选择目标芯片的型号
2. 打开程序代码文件
3. 设置好相应的硬件选项
4. 试烧一下芯片,并记下目标芯片的ID号
(如不需要对目标芯片的ID号进行校验,可跳过此步)
5. 设置自动增量(如不需要自动增量,可跳过此步)
6. 设置485控制信息(如不需要485控制,可跳过此步)
7. 设置用户自定义下载命令(如不需要此功能,可跳过此步)
8. 点击界面上的"读取本机硬盘号"按钮,并记下目标电脑的硬盘号
(如不需要对目标电脑的硬盘号进行校验,可跳过此步)
9. 点击"发布项目程序"按钮,进入发布应用程序的设置界面
10.根据各自的需要,修改发布软件的标题、下载按钮的名称、
重复下载按钮的名称、自动增量的名称以及帮助信息
11.若需要校验目标电脑的硬盘号,则需要勾选上"校验硬盘号",
并在后面的文本框内输入前面所记下的目标电脑的硬盘号
12.若需要校验目标芯片的ID号,则需要勾选上"校验芯片ID号",
并在后面的文本框内输入前面所记下的目标芯片的ID号
13.最后点击发布按钮,将项目发布程序保存,即可得到相应的可执行文件
校验硬盘号与校验目标芯片ID号的功能仅对如下系列
及新出的单片机有效:
STC15F2K60S2/STC15L2K60S2
IAP15F2K61S2/IAP15L2K61S2
STC15F104W/STC15L104W
IAP15F105W/STC15L105W
STC15W104SW/IAP15W105W
STC15W201S/IAP15W205S
STC15F408AD/STC15L408AD
IAP15F413AD/IAP15L413AD
Ver6.85H ()
1. 支持PL2303进行仿真
2. 修正发布项目的不兼容问题
3. 增加对STC15H4K64S4型号的支持(测试阶段)
Ver6.85G ()
1. 内部测试版
Ver6.85F ()
1. 代码文件和数据文件的校验和增加为3字节
2. ISP下载时增加对PL2303的支持(部分国产兼容芯片的仿真暂未支持)
Ver6.85E ()
1. 修正U8工具对如下型号的旧固件版本在脱机下载时的问题
IAP12C5A60S2 (固件版本6.2I或6.5I)
IAP12LE5A60S2 (固件版本6.2I或6.5I)
IAP11F60XE (固件版本6.2L或6.5L)
IAP11L60XE (固件版本6.2L或6.5L)
2. 加强发布项目文件的加密性
由于固件版本为x.x.3的芯片对使用485下载时的时序要求比较高 若是必须采用485进行升级下载的产品请使用固件版本为x.x.4的芯片 具体每个系列的固件版本请参考"固件版本备注"页面中的说明
其他下载地址:
171.93 MB2.71 GB1.03 GB39.63 MB61.6 MB7.25 MB34.6 MB41.82 MB19.29 MB66.96 MB574.94 MB152.94 MB
56.05 MB72.53 MB165.31 MB519.41 MB4.34 MB61.09 MB329.5 MB329.5 MB329.5 MB10.4 MB523.6 MB1024 MBSTC15单片机注意事项
经过一个月的鏖战,现在来总结一下STC15F2K61S2。我和高天宇各负责各负责一部分,因此我们彼此接触的STC15F2K61S2知识有部分区别。我所负责的部分是飞控部分,因此,我涉及到是I2C、定时器、外部时钟、串口、PWM方面的知识。
STC15F2K61S2芯片是51芯片的升级版,51上的定义配置,也可以在15上面使用。为什么我会这么说呢,因为等到我们想51芯片掌握精通了之后,再去接触430、STM32或者是更高级的芯片的时候我们就会发现,我们设置每个I\O口的时候不会像51和15那样直接就可以使用。这是应为随着芯片等级的提高芯片功能就会提高,但是一个芯片就只有那些引脚。像430、STM32或者更高的芯片他们就用一个引脚有多个功能(就像越是高等的人才,他们的技能绝不是单一的,不能固步自封,只有将多技能基于一身,成为全面型人才,成功才会出其不意的找上门来)。所以,越高级的芯片每次使用I\O口的时候都要选择设置一下,有的还有设置定时器是输出时间更为精确。
芯片配置:(1)3个定时器。(2)3个外部中断、2个串行口、1个SPI中断、CCP/PWM/PCA中断(3)3路硬件I2C
(4)4个串行接口、2个SPI接口(5)内部自带晶振(这个高天宇说过了)(6)大容量1024字节内RAM数据存储器(7)1个时钟/机器周期,增强型8051内核,速度比倍。(8)IAP可以在线仿真,直接方便我们我们检测出错误。
下面我要讲一下我在制作中设计的定时器、串口、PWM和我所遇到的知识和解决小方法。
(1)首先我们讲一下定时器。STC15F2K61S2芯片有3个定时器(这个地方很坑),Datasheets上面说过15芯片有5个定时器,结果我用了一个晚上的时间调试定时器3怎么也调不出来,第二天打电话给STC公司询问,他们告诉我STC15F2K61S2只有定时器0、1、2.(我当时就泪奔了)。不过辛亏我打了个电话,要不就在这个地方死扣了,你们也要注意,如果怎么做还是有问题的时候,就要咨询一下官方了,绝不能在一个地方死扣,要灵活解决问题。
每个定时器有4个模式,以定时器0为例。定时器0模式0为自动重装,模式1为16位不可重装模式,模式2为8位自动重装模式,模式3为不可屏蔽中断16位自动重装载,实时操作系统用节拍定时器。我们要根据自己的需要选择模式。
1.每次我们配置定时器的时候首先设置TCON来选择哪个定时器,如果我们设置定时器0的话就让TCON中的TR0=1使定时器0中断打开。
2.选择TMOD定时器工作模式(1个是定时器、一个是计数器)这个在TMOD中的C/T中选择。如果C/T =
1为定时器,相反为计数器。
3.给TL0和TH0赋初值具体赋值要看你选择的模式。如果你选择的是自动重装模式,你再进定时器的时候就不用自动重新装初值了,因为他会自动生成。如果不是自动重装模式,那么切记再次进入定时器的时候一定要重新赋值。
4.IE = 1中断允许寄存器打开。(这个方面一定要记得写,如果不写那么定时器虽然打开却没有被允许是无法工作的。)
这是辅助寄存器,在这里我们可以选择1T模式还是12T模式。(这里我给大家扩展一下,8051上面一个机器周期是又12个时钟周期组成,所以每个时钟周期的时间是1/选择晶振的时间,而机器周期就是12*1/12M的时间,这就是所谓的12T模式。如果是1T模式的话,就是一个机器周期就是一个时钟周期,那么一个机器周期的时间就是1/选择晶振的时间。所有运行时间大大缩短,执行效率大大提高。)
6.最后是EA = 1是总中断打开。
这是定时器0的初始化void
Time0Init(void)&&&
//500微秒@24.000MHz
&&& AUXR |=
//定时器时钟1T模式
//设置定时器模式
//设置定时初值
//设置定时初值
//清除TF0标志
//定时器0开始计时
//定时器0开始计时
我编写飞控程序的时候借鉴了匿名四轴的程序,学到了他的一个变成思想,我想分享给大家。原来我们编写程序的时候基本上将程序全部都写到了main函数中,定时器只是起到辅助的作用。而匿名的程序是将主要的程序全部写到定时器中,每2ms进行一次姿态解算,每4ms进行一次PID运算。这样是程序运行起来效率更高,各司其职,不需要等一条指令执行完,再去执行下一条指令。还有我们选择定时器的时候一定要看他们的数据手册,不要盲目的凭借自己的经验。数据手册给你的是正确的(当然不包括定时器3)。
(2)串口设置。这里我先帮大家解除一个误区,这个也误导我好长时间。要不是因为芯片功能太有限了,和郭老师告诉我,我还是不会了解。每次我们设置串口的时候,要设置串口中断来接受数据和发送数据。因此我们要产生定时器,我以为每个串口要消耗一个定时器,后来在做飞控的时候定时器实在不够用了,郭老师告诉我我才将两个串口公用一个定时器,因为定时器在串口中只是产生波特率的作用。两个串口可以共同接收和共同发送,但是一个接收、一个发送就出现问题了,这个我要再进一步解决。还有,串口发送的时候有测忙标志,因为芯片运行速度没有那么快,当要发送的时候,程序还在测忙阶段,这样数据就发送不出去了。当我们以后数据发送不出去的时候不妨看一下是不是这个地方有问题。
1.我们要选择波特率,两方数据通信的时候波特率必须一样,否则无法接受到数据。一般大家设置为00
2.SCON串口控制设置,通过SM0、SM1选择工作方式有8位波特率可变、9位波特率、9位波特率可变
3.AUXR选择定时器是否分频,这样可以是串口高效率工作,不用高速度执行低速的事情。
4.TH0、TL0这是在设置定时器产生的波特率。
5.ES = 1是CPU总中断开放。
6.SBUF是数据包,8位。接收数据和发送数据都是并行发送8位数据。串行一个一个字节发送。
这是串口2的初始化void InitUART2(void)
~S2_S0;&&&&&&&&&&&
//S2_S0=0 (P1.0/RxD2, P1.1/TxD2)
&&& S2CON =
//8位数据,可变波特率
&&& AUXR |=
//定时器2时钟为Fosc,即1T
&&& T2L = (65536
- (FOSC/4/BAUD2));&&
//设置波特率重装值
&&& T2H = (65536
- (FOSC/4/BAUD2))&&8;
&&& AUXR |=
//启动定时器2
0x01;&&&&&&&&&&&&&&&&
//使能串口2中断
(3)硬件PWM产生。这个PWM是8位的PWM,当然我们可以选择7位、6位的PWM,不过这样我们产生的PWM的可调范围就很小了。一开始我们产生PID用8位的PWM控制电机旋转,因为8位可以产生0~256的数值,但是电调范围必须为243到230这样我们只有12个档可调。导致我们的飞机在倾斜到一定角度后才发现倾斜,纠正过来幅度又很大,导致飞机一直摇摆。而且,我们产生PWM的频率必须要求在50Hz,八位的PWM的频率
PCA时钟输入源频率/256。PCA时钟输入源可以从以下8种中选择一种:SYSclk,SYSckl/2,SYSclk/4,SYSclk/6,SYSclk/8,SYSclk/12,定时器0的溢出,ECI/P1.2输入。如果产生50Hz的频率要PCA时钟输入源频率为12800.这时我们的SYSclk为24M除以12的不出来12800数值。所有我们只有两个方案,方案一、为用定时器0溢出,也就是说要产生78us的定时器。但是问题就是我们已经将定时器0作为心跳功能了,所有我们不能再将定时器0作为SYSclk了,所以方案一基本告废。方案二、我们就想到用ECI/P1.2输入,这是一个外部时钟接口。我们只需用另一个单片机产生78us的定时器输入到ECI中就可以产生50Hz的频率。当我们解决了产生8位的50Hz的PWM时,我们就可以控制电机的控制。但是问题有出来了,还是刚才说的8位的PWM调节范围太小,导致飞机一直在颤抖。因此我们想是不是可以产生16位的PWM。郭老师教导我,让我用数据手册带的16位软硬结合的方法调节PWM,这样我们就产生了16位0~1000的PWM。我们PWM产生的波形更加的连续,可是因为16位的PWM是软硬结合的方法产生。就因为我们用到串口中断读取陀螺仪MPU6050和无线数据模块发送来的数据,使得我们产生的PWM在时间上出了干扰,使得PWM也时常有跳变,这个跳变是我们无法解决的。
1.CMOD是PCA工作模式寄存器。刚才说过PCA用8种模式,在CMOD中用CPS2、CPS1、CPS0就是选择这8个工作模式
2.CCON是PCA控制寄存器。因为CCON中CF是PCA计数器阵列溢出标志位。CR是PCA计数器阵列运行控制位。该位通过软件置位,用来启动PCA计数器阵列计数。改为通过软件清零,用来关闭PCA计数器。
3.CCAPMn是选择功能寄存器。
4.低8位CL和高8位CH,PCA计数通过CL和CH来计数。一般情况下先清0.
5.CCAPnL和CCAPnH
在PWM模式时,他们用来控制输出的占空比。这样我们就可以通过给CCAPnL和CCAPnH就可以赋值。这个和8051有很大的区别,也是硬件PWM的优点。因为PWM产生是通过占空比产生的。而占空比又是通过高电平占用总周期的时间叫占空比。比如我们产生20ms周期也就是50Hz的PWM,高电平可以是1~19ms。
6.PCA_PWMn选择6~8位的PWM。
7.AUXR1/P_SW1是选择外围设备切换控制器寄存器。这是STC15的最大优势。15的功能比8051强大的多,所以功能就更加的多。这样会有你想用的功能但是被其他的功能占用着。这就体现优势的时候了。我们可将功能对应的引脚切换成没有功能占用的引脚。在这里PWM模块也是这样的。PWM有3个模块我们可以在这个寄存器中选择模块来选择对应的引脚。模块0连接到P1.1/CCP0或P3.5/CCP0_2或P2.5/CCP0_3或/P1.2/ECI;模块1连接到P1.0/CCP1或P3.6/CCP1_2或P2.6/CCP1_3或P3.4/ECI_2;模块2连接到P3.7/CCP2或P3.7/CCP2_2或P2.7/CCP2_3或P2.4/ECI_3;
以下是PWM初始化的例程&&&
ACC = P_SW1;
&= ~(CCP_S0 |
CCP_S1);&&&&&
//CCP_S0=0 CCP_S1=0
&&& P_SW1 =
ACC;&&&&&&&&&&&&&&&&&&&
//(P1.2/ECI, P1.1/CCP0, P1.0/CCP1, P3.7/CCP2)
//& ACC = P_SW1;
//& ACC &= ~(CCP_S0 |
CCP_S1);&&&&&
//CCP_S0=1 CCP_S1=0
//& ACC |=
CCP_S0;&&&&&&&&&&&&&&&&&
//(P3.4/ECI_2, P3.5/CCP0_2, P3.6/CCP1_2, P3.7/CCP2_2)
//& P_SW1 = ACC;&
//& ACC = P_SW1;
//& ACC &= ~(CCP_S0 |
CCP_S1);&&&&&
//CCP_S0=0 CCP_S1=1
//& ACC |=
CCP_S1;&&&&&&&&&&&&&&&&&
//(P2.4/ECI_3, P2.5/CCP0_3, P2.6/CCP1_3, P2.7/CCP2_3)
//& P_SW1 = ACC;&
&&& CCON =
0;&&&&&&&&&&&&&&&&&&&&&&
//初始化PCA控制寄存器
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
//PCA定时器停止
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
//清除CF标志
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
//清除模块中断标志
0;&&&&&&&&&&&&&&&&&&&&&&&&
//复位PCA寄存器
&&& CMOD =
0x02;&&&&&&&&&&&&&&&&&&&
//设置PCA时钟源
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
//禁止PCA定时器溢出中断
&&& PCA_PWM0 =
0x00;&&&&&&&&&&&&&&&
//PCA模块0工作于8位PWM
&&& CCAP0H =
0x20;&&&&&&&&
//PWM0的占空比为87.5% ((100H-20H)/100H)
&&& CCAPM0 =
0x42;&&&&&&&&&&&&&&&&&
//PCA模块0为8位PWM模式
&&& PCA_PWM1 =
0x40;&&&&&&&&&&&&&&&
//PCA模块1工作于7位PWM
&&& CCAP1H =
0x20;&&&&&&&&
//PWM1的占空比为75% ((80H-20H)/80H)
&&& CCAPM1 =
0x42;&&&&&&&&&&&&&&&&&
//PCA模块1为7位PWM模式
&&& PCA_PWM2 =
0x80;&&&&&&&&&&&&&&&
//PCA模块2工作于6位PWM
&&& CCAP2H =
0x20;&&&&&&&&
//PWM2的占空比为50% ((40H-20H)/40H)
&&& CCAPM2 =
0x42;&&&&&&&&&&&&&&&&&
//PCA模块2为6位PWM模式
1;&&&&&&&&&&&&&&&&&&&&&&&&
//PCA定时器开始工作
(4)现在我们再讲一下I2C。在我们将STM32的飞控程序移植到STC15芯片上时真是很艰难。因为STM32和STC15的运行速度是不一样的我们一开始直接照搬STM32的I2C的程序结果怎么都读取不了数据。没有办法我们只能使用8051的I2C的程序。再通过示波器一点点调试最后总算出来了。经过调试I2C我总结了一下。首先,我们调试I2C的时候一定要看数据手册给的I2C时序。因为不同的I2C可能时序有些不同。我们在调试I2C和SPI的时候一定要按着标准的时序来调试。其次,我们调试I2C的时候用到了示波器。这是个很好的工具。因为我们在调试I2C和SPI时序的时候我们不可能通过做Debug灯来看是否出现错误。所以我们通过示波器显示的波形和Datasheets给的时序比较。
解决错误小方法:(1)Debug灯,我们如果程序无法执行的时候可以做个小灯来看程序的那个部分出现
错误。(2)示波器,我们在调试串口数据、I2C、SPI等数据传输的时候就可以通过示波器的显示来判断问题所在。(3)设置固定的PWM值,这是在PWM问题中通过设置固定的PWM配合着示波器来判断,这种方法在我们产生16位PWM的时候,电机1和3、电机2和4的PWM始终相同,结果我们就是通过这种方法解决了。(4)万用表测试电压的多少,这是用于硬件检测。这些只是我暂时用到的方法以后遇到更好的方法一定告诉大家,也希望你们如果有更好的方法告诉我。
经过这一个月的鏖战STC杯拉下了帷幕。在这里我真的要谢谢郭老师、高天宇、刘显超。正如NBA说的那样“比赛是5个人的”,我们一个人是做不出来的,是需要团队协作的力量才能克服一切困难。我们不需要英雄主义,我们只要团队协作。郭老师让我学会了解决问题最重要的不是你有多努力,而是你有没有好的解决问题的思路。遇到问题不慌不忙,按着思路解决问题。谢谢,希望这些对你们有用。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

我要回帖

更多关于 怎么用vs2017写单片机 的文章

 

随机推荐