找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1216|回复: 15
打印 上一主题 下一主题
收起左侧

为什么不同款单片机包含的头文件却是一样的 STC的

[复制链接]
跳转到指定楼层
楼主
大家都知道STC89C52写程序时,包含的头文件是<reg51.h>;
  但是为什么STC8A8K64S4A12,给它写程序时,包含的头文件也是<reg51.h>,而且是他们的芯片手册上的推荐例程这么写的。
因为这两款芯片的资源很不一样啊,STC8A8K64S4A12多了这么多资源。

  1. //C 语言代码
  2. #include "reg51.h"
  3. #include "intrins.h"
  4. sbit P10 = P1^0;
  5. sbit P11 = P1^1;
  6. void INT0_Isr() interrupt 0
  7. {
  8. if (INT0) //判断上升沿和下降沿
  9. {
  10. P10 = !P10; //测试端口
  11. }
  12. else
  13. {
  14. P11 = !P11; //测试端口
  15. }
  16. }
  17. void main()
  18. {
  19. IT0 = 0; //使能 INT0 上升沿和下降沿中断
  20. EX0 = 1; //使能 INT0 中断
  21. EA = 1;
  22. while (1);
  23. }
复制代码

这是为什么呢?

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:213173 发表于 2023-12-27 14:16 | 只看该作者
当你用到哪个寄存器时可以定义地址,你这个程序要设置端口模式,否则不能正常运行。
//C 语言代码
#include "reg51.h"
#include "intrins.h"

sfr  P1M1 = 0x91;
sfr  P1M0 = 0x92;
sfr  P3M1 = 0xb1;
sfr  P3M0 = 0xb2;


sbit P10 = P1^0;
sbit P11 = P1^1;

void INT0_Isr() interrupt 0
{
        if (INT0) //判断上升沿和下降沿
        {
                P10 = !P10; //测试端口
        }
        else
        {
                P11 = !P11; //测试端口
        }
}
void main()
{
        P1M1=0x00;
        P1M0=0x00;
        P3M1=0x00;
        P3M0=0x00;

       
        IT0 = 0; //使能 INT0 上升沿和下降沿中断
        EX0 = 1; //使能 INT0 中断
        EA = 1;
        while (1);
}
回复

使用道具 举报

板凳
ID:1057978 发表于 2023-12-27 15:45 | 只看该作者
STC就是传承自51单片机,增加了许多其他资源,引用头文件一样,说明在内核设计上是兼容传统51单片机的
回复

使用道具 举报

地板
ID:814525 发表于 2023-12-27 15:59 | 只看该作者
STC单片机有很多与芯片对应的头文件,你要使用reg51.h。你说这是为什么???
回复

使用道具 举报

5#
ID:883242 发表于 2023-12-27 16:46 | 只看该作者
说明了你可以把这些单片机当成最基本的51单片机来用。
回复

使用道具 举报

6#
ID:57657 发表于 2023-12-27 18:18 | 只看该作者
wulin 发表于 2023-12-27 14:16
当你用到哪个寄存器时可以定义地址,你这个程序要设置端口模式,否则不能正常运行。
//C 语言代码
#inclu ...

reg51.h 是AT89系列单片机使用的,你应该引用STC对应的的头文件,而不是使用sfr去定义寄存器地址。
部分寄存器在扩展RAM区域(XDADA)区域,访问这些寄存器,需先将P_SW2的BIT7设置为1,才可正常读写。
不同系列单片机的相同的寄存器,地址可能会不一样,否则你这样出了问题都找不到北。
回复

使用道具 举报

7#
ID:1091094 发表于 2023-12-27 19:07 | 只看该作者
wulin 发表于 2023-12-27 14:16
当你用到哪个寄存器时可以定义地址,你这个程序要设置端口模式,否则不能正常运行。
//C 语言代码
#inclu ...

啊 什么是端口模式,只学了51 ,不懂端口模式
   不过我觉得每款芯片都应该有相应的头文件吧
   这样就不用自己来定义sfr P1M1=0X91,之类的了
回复

使用道具 举报

8#
ID:1091094 发表于 2023-12-27 19:09 | 只看该作者
张天师 发表于 2023-12-27 15:59
STC单片机有很多与芯片对应的头文件,你要使用reg51.h。你说这是为什么???

我说的是为什么他的芯片手册给出的例程也是使用REG51.H。
回复

使用道具 举报

9#
ID:1091094 发表于 2023-12-27 19:10 | 只看该作者
Hephaestus 发表于 2023-12-27 16:46
说明了你可以把这些单片机当成最基本的51单片机来用。

是的 确实如此,想问一下,如果要添加相应的头文件,去哪里找合适的头文件呢?
        谢谢谢谢
回复

使用道具 举报

10#
ID:748788 发表于 2023-12-27 22:00 | 只看该作者
就找stc呀——stc-isp
回复

使用道具 举报

11#
ID:213173 发表于 2023-12-28 07:25 | 只看该作者
发表于 2023-12-27 19:07
啊 什么是端口模式,只学了51 ,不懂端口模式。
   不过我觉得每款芯片都应该有相应的头文件吧
  ...

51hei.jpg (212.06 KB, 下载次数: 74)

51hei.jpg
回复

使用道具 举报

12#
ID:57657 发表于 2023-12-28 07:25 | 只看该作者
3038838599 发表于 2023-12-27 19:07
啊 什么是端口模式,只学了51 ,不懂端口模式。
   不过我觉得每款芯片都应该有相应的头文件吧
  ...

P1M1这个寄存器 STC89/90系列是没有的,你定义了也没用。
其他品牌单片机,该地址可能是别的寄存器,也可能是空白。
回复

使用道具 举报

13#
ID:879348 发表于 2023-12-28 08:32 | 只看该作者
因为51架构基本寄存器所有型号都是通用的,当你需要用那些额外的东西就要sfr定义寄存器
回复

使用道具 举报

14#
ID:526108 发表于 2023-12-28 08:44 | 只看该作者
是不一样的谢谢
回复

使用道具 举报

15#
ID:136485 发表于 2023-12-28 09:05 | 只看该作者
STC的下载软件那么方便,复制粘贴保存就行了,还在问这么低级的问题
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表