我的STC单片机型号是STC90C516RD+。在keil_c中64Kflash程序存储器怎么全把它用上啊?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我的STC单片机型号是STC90C516RD+。在keil_c中64Kflash程序存储器怎么全把它用上啊?相关的知识,希望对你有一定的参考价值。

我用官网STC-isp-15xx-v6.70的软件,把STC型号导入keil c中。新建项目选择芯片只有STC90c58RD+。而且说明是32K bytes flash ROM。

其实新建项目所选的型号是什么无所谓的,就算是不用STC型号的,就是选AT89C51型号的单片机,照样可以写出64KB的程序的,只要在下载时,单片机能下载全部程序就行了,这就要求实物的 flash ROM是真实的64KB就行。不过,真想写出64KB的程序还真的很难的,除非存放汉字的字模,否则,不论写什么也很难写出64KB的程序的。追问

就是有字模,无字库的19264,需要做N个界面。

追答

那就写好,没有关系的,完全可以写到64KB的,与型号没有什么关系。

参考技术A 这个不影响你写程序,你写多少程序就会生成多少,直接下载进去就行了 参考技术B 内存不足516,可能买到假元件了 参考技术C 可以通过定义变量时加上 idata,xdata,code等关键字来指定变量存储的位置。
通常不指定的话,只能使用单字节7位寻址的128个字节内存空间。(其实不足128,很多地址空间已经被单片机端口占用)
如果使用idata的话可以寻址最多256字节的RAM空间。
xdata是用双字节定位地址的,所以可以最大用到64K
code是让编译器将该变量定义在代码段。但是定义在代码段的变量只可读出,是不可写入的。

类似定义如下
unsigned int idata iTemp;
unsigned char xdata str[200];
unsigned int code PI=3.1415926;

keil C中你选择的单片机型号和使用的存储空间其实是没有什么关系的。STC提供的各种器件的头文件,最多定义了该器件的IO口,计时器,中断相关的宏,和这个器件能用多少存储空间没有任何关系。51单片机最多寻址空间也就是64K了。但是用编程工具往芯片中烧程序的时候一定要选对器件才行。

STC15系列之SDCCSTC15系列SDCC专用头文件内容分享

【STC15系列之SDCC】STC15系列SDCC专用头文件内容分享


如果使用VSCode PlatformIO开发STC单片机,所提供的型号的头文件很有限,除非自己添加,像STC系列单片机一些型号的头文件还没有只能依赖8052头文件使用,而8052的头文件所提供的的特殊功能寄存器是有限的。

自制STC15型号的头文件的话,需要参照8052或者STC12头文件参考来补充STC15型号的头文件。

VSCode PlatformIO平台的 SDCC编译器自带的头文件路径:C:\\Users\\Administrator\\.platformio\\packages\\toolchain-sdcc\\include

  • 具体型号的51单片机的头文件在:C:\\Users\\Administrator\\.platformio\\packages\\toolchain-sdcc\\include\\mcs51

VSCode PlatformIO开发的STC15系列单片机头文件内容

  • 这是我在这平台花积分下载下来的,源文件并不能直接使用,宏定义的特殊功能寄存器有问题所有的都没有加括号,导致里面的所有特殊功能寄存器的定义都是带波浪线的,全部一一做了补充了并在此基础上添加了bool类型的头文件,为了在调用的地方可以直接使用寄存器名字来赋值,而不会出线波浪线,以及link.h文件,compiler.h文件。
  • 为了让大家不采坑这里附上已经修改好的STC15.h头文件.
  • stc15.h文件内容如下:请自行复制保存为stc15.h文件,就不在分享文件了。
#ifndef __STC15F2K60S2_H_
#define __STC15F2K60S2_H_

#include <8051.h>     /* load definitions for the 8051 core */
#include <compiler.h>
#include<lint.h>//包含SDCC_mcs51定义
#include <stdbool.h>//添加此头文件目的是为了在调用的地方可以直接使用寄存器名字来赋值,而不会出线波浪线
#ifdef REG8051_H
#undef REG8051_H
#endif
/
//注意: STC15W4K32S4系列的芯片,上电后所有与PWM相关的IO口均为
//      高阻态,需将这些口设置为准双向口或强推挽模式方可正常使用
//相关IO: P0.6/P0.7/P1.6/P1.7/P2.1/P2.2
//        P2.3/P2.7/P3.7/P4.2/P4.4/P4.5
/

/

//包含本头文件后,不用另外再包含"REG51.H"

//内核特殊功能寄存器        // 复位值   描述
__sfr __at (0xE0)  ACC;         //0000,0000 累加器Accumulator
__sfr __at (0xF0)  B;              //0000,0000 B寄存器
__sfr __at (0xD0) PSW;          //0000,0000 程序状态字
__sbit __at (0xD7) CY;
__sbit __at (0xD6) AC;
__sbit __at (0xD5) F0;
__sbit __at (0xD4) RS1;
__sbit __at (0xD3) RS0;
__sbit __at (0xD2) OV;
__sbit __at (0xD1) F1;
__sbit __at (0xD0) P;
__sfr __at (0x81) SP;            //0000,0111 堆栈指针
__sfr __at (0x82) DPL;          //0000,0000 数据指针低字节
__sfr __at (0x83) DPH;         //0000,0000 数据指针高字节


//I/O 口特殊功能寄存器
__sfr __at (0x80) P0;   //1111,1111 端口0
__sbit __at (0x80) P00;
__sbit __at (0x81) P01;
__sbit __at (0x82) P02;
__sbit __at (0x83) P03;
__sbit __at (0x84) P04;
__sbit __at (0x85) P05;
__sbit __at (0x86) P06;
__sbit __at (0x87) P07;

__sfr __at (0x90) P1;   //1111,1111 端口1
__sbit __at (0x90) P10;
__sbit __at (0x91) P11;
__sbit __at (0x92) P12;
__sbit __at (0x93) P13;
__sbit __at (0x94) P14;
__sbit __at (0x95) P15;
__sbit __at (0x96) P16;
__sbit __at (0x97) P17;

__sfr __at (0xA0) P2;   //1111,1111 端口2
__sbit __at (0xA0) P20;
__sbit __at (0xA1) P21;
__sbit __at (0xA2) P22;
__sbit __at (0xA3) P23;
__sbit __at (0xA4) P24;
__sbit __at (0xA5) P25;
__sbit __at (0xA6) P26;
__sbit __at (0xA7) P27;

__sfr __at (0xB0) P3;   //1111,1111 端口3
__sbit __at (0xB0) P30;
__sbit __at (0xB1) P31;
__sbit __at (0xB2) P32;
__sbit __at (0xB3) P33;
__sbit __at (0xB4) P34;
__sbit __at (0xB5) P35;
__sbit __at (0xB6) P36;
__sbit __at (0xB7) P37;

__sfr __at (0xC0) P4;   //1111,1111 端口4
__sbit __at (0xC0) P40;
__sbit __at (0xC1) P41;
__sbit __at (0xC2) P42;
__sbit __at (0xC3) P43;
__sbit __at (0xC4) P44;
__sbit __at (0xC5) P45;
__sbit __at (0xC6) P46;
__sbit __at (0xC7) P47;

__sfr __at (0xC8) P5  ;//xxxx,1111 端口5
__sbit __at (0xC8) P50;
__sbit __at (0xC9) P51;
__sbit __at (0xCA) P52;
__sbit __at (0xCB) P53;
__sbit __at (0xCC) P54;
__sbit __at (0xCD) P55;
__sbit __at (0xCE) P56;
__sbit __at (0xCF) P57;

__sfr __at (0xE8) P6;   //0000,0000 端口6
__sbit __at (0xE8) P60;
__sbit __at (0xE9) P61;
__sbit __at (0xEA) P62;
__sbit __at (0xEB) P63;
__sbit __at (0xEC) P64;
__sbit __at (0xED) P65;
__sbit __at (0xEE) P66;
__sbit __at (0xEF) P67;

__sfr __at (0xF8) P7;   //0000,0000 端口7
__sbit __at (0xF8) P70;
__sbit __at (0xF9) P71;
__sbit __at (0xFA) P72;
__sbit __at (0xFB) P73;
__sbit __at (0xFC) P74;
__sbit __at (0xFD) P75;
__sbit __at (0xFE) P76;
__sbit __at (0xFF) P77;

__sfr __at (0x94) P0M0;  //0000,0000 端口0模式寄存器0
__sfr __at (0x93) P0M1;  //0000,0000 端口0模式寄存器1
__sfr __at (0x92) P1M0;  //0000,0000 端口1模式寄存器0
__sfr __at (0x91) P1M1;  //0000,0000 端口1模式寄存器1
__sfr __at (0x96) P2M0;  //0000,0000 端口2模式寄存器0
__sfr __at (0x95) P2M1;  //0000,0000 端口2模式寄存器1
__sfr __at (0xB2) P3M0;  //0000,0000 端口3模式寄存器0
__sfr __at (0xB1) P3M1;  //0000,0000 端口3模式寄存器1
__sfr __at (0xB4) P4M0;  //0000,0000 端口4模式寄存器0
__sfr __at (0xB3) P4M1;  //0000,0000 端口4模式寄存器1
__sfr __at (0xCA) P5M0;  //0000,0000 端口5模式寄存器0
__sfr __at (0xC9) P5M1;  //0000,0000 端口5模式寄存器1
__sfr __at (0xCC) P6M0;  //0000,0000 端口6模式寄存器0
__sfr __at (0xCB) P6M1;  //0000,0000 端口6模式寄存器1
__sfr __at (0xE2) P7M0;  //0000,0000 端口7模式寄存器0
__sfr __at (0xE1) P7M1;  //0000,0000 端口7模式寄存器1

//系统管理特殊功能寄存器
__sfr __at (0x87) PCON;  //0001,0000 电源控制寄存器
__sfr __at (0x8E) AUXR;   //0000,0000 辅助寄存器
__sfr __at (0xA2) AUXR1;  //0000,0000 辅助寄存器1
__sfr __at (0xA2) P_SW1;  //0000,0000 外设端口切换寄存器1
__sfr __at (0x97) CLK_DIV;  //0000,0000 时钟分频控制寄存器
__sfr __at (0xA1) BUS_SPEED;  //xx10,x011 总线速度控制寄存器
__sfr __at (0x9D) P1ASF;   //0000,0000 端口1模拟功能配置寄存器
__sfr __at (0xBA) P_SW2;   //0xxx,x000 外设端口切换寄存器


//中断特殊功能寄存器
__sfr __at (0xA8) IE;   //0000,0000 中断控制寄存器
__sbit __at (0xAF) EA; 
__sbit __at (0xAE) ELVD; 
__sbit __at (0xAD) EADC; 
__sbit __at (0xAC) ES; 
__sbit __at (0xAB) ET1;
__sbit __at (0xAA) EX1;  
__sbit __at (0xA9) ET0;
__sbit __at (0xA8) EX0;  

__sfr __at (0xB8) IP;   //0000,0000 中断优先级寄存器
__sbit __at (0xBF) PPCA; 
__sbit __at (0xBE) PLVD; 
__sbit __at (0xBD) PADC; 
__sbit __at (0xBC) PS; 
__sbit __at (0xBB) PT1;
__sbit __at (0xBA) PX1;  
__sbit __at (0xB9) PT0;
__sbit __at (0xB8) PX0; 

__sfr __at (0xAF) IE2;   //0000,0000 中断控制寄存器2
__sfr __at (0xB5) IP2;   //xxxx,xx00 中断优先级寄存器2
__sfr __at (0x8F) INT_CLKO; //0000,0000 外部中断与时钟输出控制寄存器


//定时器特殊功能寄存器
__sfr __at (0x88) TCON;  //0000,0000 T0/T1控制寄存器
__sbit __at (0x8F) TF1;
__sbit __at (0x8E) TR1;
__sbit __at (0x8D) TF0;
__sbit __at (0x8C) TR0;
__sbit __at (0x8B) IE1;
__sbit __at (0x8A) IT1;
__sbit __at (0x89) IE0;
__sbit __at (0x88) IT0;

__sfr __at (0x89) TMOD; //0000,0000 T0/T1模式寄存器
__sfr __at (0x8A) TL0;//0000,0000 T0低字节
__sfr __at (0x8B) TL1;//0000,0000 T1低字节
__sfr __at (0x8C) TH0;//0000,0000 T0高字节
__sfr __at (0x8D) TH1;//0000,0000 T1高字节
__sfr __at (0xD1) T4T3M;//0000,0000 T3/T4模式寄存器
__sfr __at (0xD1) T3T4M;//0000,0000 T3/T4模式寄存器
__sfr __at (0xD2) T4H;//0000,0000 T4高字节
__sfr __at (0xD3) T4L; //0000,0000 T4低字节
__sfr __at (0xD4) T3H; //0000,0000 T3高字节
__sfr __at (0xD5) T3L;//0000,0000 T3低字节
__sfr __at (0xD6) T2H;//0000,0000 T2高字节
__sfr __at (0xD7) T2L;//0000,0000 T2低字节
__sfr __at (0xAA) WKTCL;//0000,0000 掉电唤醒定时器低字节
__sfr __at (0xAB) WKTCH; //0000,0000 掉电唤醒定时器高字节
__sfr __at (0xC1) WDT_CONTR;//0000,0000 看门狗控制寄存器

//串行口特殊功能寄存器
__sfr __at (0x98) SCON;//0000,0000 串口1控制寄存器
__sbit  __at (0x9F) SM0;
__sbit  __at (0x9E) SM1;
__sbit  __at (0x9D) SM2;
__sbit  __at (0x9C) REN;
__sbit  __at (0x9B) TB8;
__sbit  __at (0x9A) RB8;
__sbit  __at (0x99) TI;
__sbit  __at (0x98) RI;

__sfr __at (0x99) SBUF;   //xxxx,xxxx 串口1数据寄存器
__sfr __at (0x9A) S2CON;   //0000,0000 串口2控制寄存器
__sfr __at (0x9B) S2BUF;   //xxxx,xxxx 串口2数据寄存器
__sfr __at (0xAC) S3CON;   //0000,0000 串口3控制寄存器
__sfr __at (0xAD) S3BUF;   //xxxx,xxxx 串口3数据寄存器
__sfr __at (0x84) S4CON;   //0000,0000 串口4控制寄存器
__sfr __at (0x85) S4BUF;   //xxxx,xxxx 串口4数据寄存器
__sfr __at (0xA9) SADDR;   //0000,0000 从机地址寄存器
__sfr __at (0xB9) SADEN;   //0000,0000 从机地址屏蔽寄存器

//ADC 特殊功能寄存器
__sfr __at (0xBC) ADC_CONTR;   //0000,0000 A/D转换控制寄存器
__sfr __at (0xBD) ADC_RES;   //0000,0000 A/D转换结果高8位
__sfr __at (0xBE) ADC_RESL;   //0000,0000 A/D转换结果低2位

//SPI 特殊功能寄存器
__sfr __at (0xCD) SPSTAT;   //00xx,xxxx SPI状态寄存器
__sfr __at (0xCE)SPCTL;   //0000,0100 SPI控制寄存器
__sfr __at (0xCF) SPDAT;   //0000,0000 SPI数据寄存器

//IAP/ISP 特殊功能寄存器
__sfr __at (0xC2) IAP_DATA;   //0000,0000 EEPROM数据寄存器
__sfr __at (0xC3) IAP_ADDRH;   //0000,0000 EEPROM地址高字节
__sfr __at (0xC4) IAP_ADDRL;   //0000,0000 EEPROM地址第字节
__sfr __at (0xC5) IAP_CMD;   //xxxx,xx00 EEPROM命令寄存器
__sfr __at (0xC6) IAP_TRIG;   //0000,0000 EEPRPM命令触发寄存器
__sfr __at (0xC7) IAP_CONTR;   //0000,x000 EEPROM控制寄存器

//PCA/PWM 特殊功能寄存器
__sfr __at (0xD8) CCON;//00xx,xx00 PCA控制寄存器
__sbit __at (0xDF) CF;
__sbit __at (0xDE) CR;
__sbit __at (0xDA) CCF2;
__sbit __at (0xD9) CCF1;
__sbit __at (0xD8) CCF0;

__sfr __at (0xD9) CMOD;   //0xxx,x000 PCA 工作模式寄存器
__sfr __at (0xE9) CL ;   //0000,0000 PCA计数器低字节
__sfr __at (0xF9) CH;   //0000,0000 PCA计数器高字节
__sfr __at (0xDA) CCAPM0;   //0000,0000 PCA模块0的PWM寄存器
__sfr __at (0xDB) CCAPM1;   //0000,0000 PCA模块1的PWM寄存器
__sfr __at (0xDC) CCAPM2;   //0000,0000 PCA模块2的PWM 寄存器
__sfr __at (0xEA) CCAP0L;   //0000,0000 PCA模块0的捕捉/比较寄存器低字节
__sfr __at (0xEB) CCAP1L;   //0000,0000 PCA模块1的捕捉/比较寄存器低字节
__sfr __at (0xEC) CCAP2L ;   //0000,0000 PCA模块2的捕捉/比较寄存器低字节
__sfr __at (0xF2) PCA_PWM0;   //xxxx,xx00 PCA模块0的PWM寄存器
__sfr __at (0xF3) PCA_PWM1;   //xxxx,xx00 PCA模块1的PWM寄存器
__sfr __at (0xF4) PCA_PWM2;   //xxxx,xx00 PCA模块1的PWM寄存器
__sfr __at (0xFA) CCAP0H;   //0000,0000 PCA模块0的捕捉/比较寄存器高字节
__sfr __at (0xFB) CCAP1H;   //0000,0000 PCA模块1的捕捉/比较寄存器高字节
__sfr __at (0xFC) CCAP2H;   //0000,0000 PCA模块2的捕捉/比较寄存器高字节

//比较器特殊功能寄存器
__sfr __at (0xE6) CMPCR1;   //0000,0000 比较器控制寄存器1
__sfr __at (0xE7) CMPCR2;   //0000,0000 比较器控制寄存器2

//增强型PWM波形发生器特殊功能寄存器
__sfr __at (0xF1) PWMCFG;   //x000,0000 PWM配置寄存器
__sfr __at (0xF5) PWMCR;   //0000,0000 PWM控制寄存器
__sfr __at (0xF6) PWMIF;   //x000,0000 PWM中断标志寄存器
__sfr __at (0xF7) PWMFDCR;   //xx00,0000 PWM外部异常检测控制寄存器

//如下特殊功能寄存器位于扩展RAM区域
//访问这些寄存器,需先将P_SW2的BIT7设置为1,才可正常读写
#define PWMC        (*(unsigned int  volatile xdata *)0xfff0)
#define PWMCH       (*(unsigned char volatile xdata *)0xfff0)
#define PWMCL       (*(unsigned char volatile xdata *)0xfff1)
#define PWMCKS      (*(unsigned char volatile xdata *)0xfff2)
#define PWM2T1      (*(unsigned int  volatile xdata *)0xff00)
#define PWM2T1H     (*(unsigned char volatile xdata *)0xff00)
#define PWM2T1L     (*(unsigned char volatile xdata *)0xff01)
#define PWM2T2      (*(unsigned int  volatile xdata *)0xff02)
#define PWM2T2H     (*(unsigned char volatile xdata *)0xff02)
#define PWM2T2L     (*(unsigned char volatile xdata *)0xff03)
#define PWM2CR      (*(unsigned char volatile xdata *)0xff04)
#define PWM3T1      (*(unsigned 怎么在KEIL里添加STC89C52型号的单片机

第二章 搭建51单片机开发环境

STC_ISP检查MCU失败

如何在Keil uVision4 中加入STC系列单片机型号

STC15双串口printf调试输出案例

《爱上单片机》· 没提到的东西