问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

keil 软件中没有找到 STC90c516RD+怎么办啊?

发布网友 发布时间:2022-04-29 05:34

我来回答

2个回答

热心网友 时间:2022-06-19 18:37

我来回答:

其实,STC大部分的单片机都是51内核或是52内核的。所以在选芯片的时候,只要选一款51体系的芯片就可以。我们用STC的时候,选的都是89C51的芯片。

但有一个问题要注意的就是: 在KEIL 仿真的时候,要注意区别,什么可以仿真,什么不可以仿真,这个就要求对51体系很懂。但如果你的水平足够高,可以通过分析程序和借助串口来判断,就没事。不要求仿真。、

还有一个问题就是。大部分的STC的芯片,虽是51体系,但在51基础上做了很大的改动。比如说,指令系统,虽没有增减指令个数,但是,在时序上改动特别大。有些指令1个系统时针就完成了。这在延时,和外围的接口,方面都要特别注意。一定要仔细看宏晶官网的资料。

当然,官网上提供的资料,有些示例程序,不一定就是最好的。很的程序,都写得很一般。甚至说很烂。不过,思路是对是。所以,示例程序,只是对你起一个指导做用。如果想写出好的程序,大部分的功能,最好是都要经过测试。

刚看了一下STC90c516RD+ 这芯片的功能并不是很强,只是FLASH达到了61K。当然,如果用到它增强方面的功能的话。就必须会定义特殊功能寄存器。下面附带了。

二, reg51.头文件剖析

我们平时写单片机应用程序的时候,所使用的头文件大多都是用的的reg51.h或是用reg52.h。会写C51的人都会用,但对其头文件内部的定义有所了解的人确并不多。
下面对其内部做详细解释,方便读者作进一步的了解,并能运用各类型号的单片机。因为增强型号的单片机的增强功能都是通过特殊功能寄存器控制。

打开 reg52.h 头文件,会发现是由大量的 sfr ,sbit的声明组成,甚至于还有sfr16.其实这样的声明都是与单片机内部功能寄存器(特殊功能寄存器)联系起来的,下面对其做出详细解释

sfr: 声明变量
SFR 声明一个变量,它的声明与其它的C变量声明基本相同,唯一的区别,SFR在声明的同时为其指定特殊功能寄存器作为存储地址,而不同于C变量声明的整型,字符型等等由编译器自动分配存储空间。

如reg52.h头文件,第一条声明就是sfr P0 = 0x80;
此处声明一个变量P0,并指定其存储地址为特殊功能寄存器0x80;,在加入reg52.h头文件后。编写应用程序时P0就可以直接使用而无需定义,对P0的操作就是,对内部特殊功能寄存器(0x80对应用MCU的P0口)的操作,可进行读写操作。
如果将第一条声明改为sfr K0 = 0x80; 那么,如果要把单片机的P0口全部拉低,则不能写P0=0x00;而应保存后再在应用程序中写成K0=0x00;否则编译器会提示“P0为未定义标识符”
使用方法:
sfr [variable] = [address] //为变量分配一个特殊功能寄存器。

1 等号右边,只能是十进制,十六进制整型的数据常量,,不允许带操作符的表达式
经典的8051内核支持的SFR地址从0x80H~0xFF 飞利浦80C51MX系列0x180H~0x1FF
2 SFR不能声明于任何函数内部,包括main函数。只能声明于函数外。
3 用SFR声明一个变量后,不能用取地址运算符&获取其地址, 编译无法通过,编译器会提示非法操作。
4 有一点须特别注意,51内核0x80~0xff,为特殊功能寄存器地址区间,但并不是所有的地址都有定义,如果说你所用的MCU芯片上对于某个地址没有定义,那么用sfr在定义变量的时候,不要把变量的地址分配到未定义的特殊功能寄存器上,虽然编译时能通过,用KEIL仿真时貌似是没有问题,但下载到芯片里运行时,是会出问题的。比如说,向一个未定义的特殊功能寄存器执行读操作,读出来的就是一个未知的数。(读者可自行测试,先把串口通信调通,然后做一个简单的人机交互。读出一个数后,再发给计算机,用串口调试助手或是串口监控查看。这用方法在仿真的时候很有用。)所以具体那些特殊功能寄存器能够用,就要查看你使用的芯片手册。
5若遇到增强性的单片机,只要知道其扩展的特殊功能寄存器的地址,用SFR定
就可以很方便进行编程。

sbit: 声明变量
sbit 同样是声明一个变量,和SFR 使用方法类似,但是SBIT是用来声明一个位变量,因为,在51系列的应用中,非常有必要对SFR的单个位进行存取,而通过bit 数据类型,使其具备位寻址功能。
如,在reg52.h中有如下声明
sfr IE = 0xA8;
sbit EA = IE^7;
sbit ET2 = IE^5; //8052 only
sbit ES = IE^4;
sbit ET1 = IE^3;
sbit EX1 = IE^2;
sbit ET0 = IE^1;
sbit EX0 = IE^0;
所以,对EA的操作即是对IE最高位的操作。

但如果想让 SP DPL DPH PCON TMOC TL0 TL1 TH0 TH1 SBUF这些特殊功能寄存器具备位寻址,采用上述如IE类似的定义,是不行的,虽然修改后,在编译的时候不会出现错误,但只要用到你定义的位变量名时就会出错。原因是,只有特殊功能寄存器的地址是8的倍数(十六进制以0或8结尾)才能进行位寻址。
打开reg52.h头文件可以看到,所有用sbit声明了的特殊功能寄存器的地址均是以0或8结尾
如硬要达到上述要求,可用带参的宏定义来完成。此处不做详细说明(意义并不大)。

下面对sbit的使用做详细介绍:
随着8051的应用,非常有必要对特殊功能寄存器的单个bit位进行存取,C51编译器通过sbit 数据类型,提供了对特殊功能寄存器的位操作。
以下是sbit的三种应用形式:
一,sbit name = sfr-name^bit-position;
sfr PSW =0xD0;
sfr IE =0xA8;

sbit OV= PSW^2;
sbit CY=PSW^7;
sbit EA= IE^7;
二,sbit name= sft-address^bit-position;
sbit OV =0xD0^2;
sbit CY =0xD0^7;
sbit EA =0xA8^7;
三,sbit name= sbit-address;
sbit OV =0xD2;
sbit CY =0xD7;
sbit EA =0xAF;

现对上述三种形式的声明做必要的说明
第一种形式sbit name = sfr-name^bit-position;如sbit OV= PSW^2; 当中的这个特殊功能寄存器必须在此之前已经用sfr 定义,否则编译会出错。
bit-position范围从0~7;
第二种形式 sbit name= sft-address^bit-position如sbit OV =0xD0^2; 与第一种形式不同之外在于,此处直接使用PSW的地址.第一种形式须先定义PSW
第三种形式. sbit name= sbit-address 如sbit OV =0xD2 是直接用的OV的地址
OV的地址计算方式,是OV所在的寄存器地址加上OV的bit-position

注意:
不是所有的SFR都可位寻址。只有特殊功能寄存器的地址是8的倍数(十六进制以0或8结尾)才能进行位寻址,并且sbit声明的变量名,虽可以是任意取,但是最好不要以下划线开头,因为以下划线开头的都保留给了C51的头文件做保留字。

sfr16: 声明变量
许多8051的派生型单片机,用两个连续地址的特殊功能寄存器,来存储一个16bit的值。例如,8052就用了0xCC和0xCD来保存定时/计数寄存器2的高字节和低字节。编译器提供sfr16这种数据类型,来保存两个字节的数据。虚拟出一个16bit的寄存器。
如下:
sfr16 T2 = 0xCC
存储方面为小端存储方式,低字节在前,高字节在后。定义时,只写低字节地址,如上,则定义T2为一个16位的特殊功能寄存器。 T2L= 0CCh, T2H= 0CDh
使用方法:
sfr [variable] = [low_address]
1 等号右边,只写两个特殊功能寄存器的低地址,且只能是十进制,十六进制的整型数据常量,不允许带操作符的表达式
2 SFR不能声明于任何函数内部,包括main函数。只能声明于函数外。
3 用SFR声明一个变量后,不能用取地址运算符&获取其地址, 编译无法通过,编译器会提示非法操作。
4 当你向一个sfr16写入数据的时候,KEIL CX51 编译器生成的代码,是先写高字节,后写低字节,(可通过返汇编窗口查看)在有些情况下,这并非我们所想要的操作顺序。使用时,须注意。
5 当你所要写入sfr16的数据,当是高字节先写还是低字节先写非常重要的时候,就只能用sfr 这个关键字来定义,并且任意时刻只保存一个字节,这样操作才能保证写入正确。

热心网友 时间:2022-06-19 18:37

用atmel89c52可以
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
管理员怎么设置? 企业微信管理员分为哪几种?应用权限上有什么区别?丨小裂变 我在网上下载了一个“系统之家GHOST WIN7 SP1完美激活旗舰版 V2.0... ...深度完美 GHOST WIN7 SP1 X86装机旗舰版V2012.11 我没有U盘需要怎么... 富士施乐 DocuPrint M158F基本参数 五年级语文造句!!十万火急 空的,都是五年级上册语文的,快!十万火急! 一份5年级语文期中试卷分析...十万火急!~~~今天就要 友情相遇经典诗词(描写友情的唯美诗句) 关于友谊诗词鉴赏(赠朋友的55句诗词) 关于地狱少女三鼎 求stc90c516rd单片机手册 谁能用发个用c#做的 资产管理软件(源代码) 给我 请问STC90C516RD+怎么判断它是12T的单片机,还是6T的单片机 婆婆对媳妇说,你儿子XXXX是什么意思? 有没有开源的小型企业固定资产管理系统 stc90c516有几路串口 stc90c516rd和stc89c58有什么不一样 定字少上面一点是什么字 单片机STC90C516RD+ 如何设置i/o口,或者说程序是什么样的 stc90c516rd+的晶振是多少? 猜一个字:在左边加三点水,右边加少字,上面可以加草字头,下面加木字,都是其他的字。 给婆婆的生日主持词 你有《毕业设计-基于JAVA语言固定资产管理系统》这篇论文里的源代码没? STC在选择单片机型号时找不到STC90C516RD+怎么办? 请问:狗狗牙结石较严重,己造成牙龈出血怎么办? 单片机90c516rd+中的rd+是什么意思,这款单片机内存多大 白老妇儿是什么东西 c语言程序设计之学校固定资产登记管理系统源程序 如何使铁类材质快速生锈 跪求STC90C51 6RD+的pcb封装文件啊 最新笑话!!! 用宏晶公司的芯片STC90C516RD+读取sht11数字传感器的湿度值 求!一套固定资产管理源代码。JAVA语言。 在《xxxholic》的占卜婆婆在《小鸠》的第几集出现过 求助!我需要一个企业资产管理软件(管理服务器,路由器等设备的软件)谁能推荐下,比较通用开源的软件! 石壕吏 的电视教材 jsp+oracle实现企业资产管理,有没有人有做过的,求源代码啊! 咒怨:白老妇电影 如何确定IT资产管理系统的适应部门服务器管理的系统? 枸杞可以打成果汁喝吗? 购置“资产管理系统”能不能采用单一来源招标方式 请问:用西红柿加鸡蛋打汤,再加一点枸杞子,这样,人喝了对人有什么好处?谢谢! 西红柿能解酒吗? 手机微信支付充值话费错了可以退吗 请问:韭菜,鸡蛋,枸杞子,西红柿,它们四样食物在一起吃,有什么好处和坏处?谢谢! 在微信把话费给充了我想退回来怎么退 QQ聊天记录如何转移 我用微信充错了话费。能退嘛? 怎样让腾讯微博的好友对自己取消关注