找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5606|回复: 0
收起左侧

sdcc下c51单片机通用头文件 寄存器详解

[复制链接]
ID:338578 发表于 2018-5-26 11:58 | 显示全部楼层 |阅读模式
一、前言

之前花了一点时间阅读了编译器sdcc的man文档,算是对这款交叉编译器有了基本的了解。但要写重新写单片机程序,还要对相应的知识做进一步的复习。下面我将阅读芯片的datasheet和application guide,结合一些实际的应用,对单片机的知识进行复习。我开发板上的芯片是stc90c51,不同型号的51芯片可能会略有差异。

二、外围电路

要使单片机正常工作,需要在VCC脚上给予5v/3.3v的电压,将GND脚接地。为了滤波 ,VCC和GND之间接两个电容。XTAL上接一个外部振荡器,RST脚上接外部复位电路。

虽然这些都已经标准化,无关编程。但在某些特殊情况下(比如晶振、稳压芯片坏了,虚焊等等),需要配合示波器等作出硬件故障的排除,就需要检查外围电路的工作状态。

三、片内资源

3.1 特殊功能寄存器&相关模块

这里贴一下sdcc下c51通用的头文件。可以清晰得看到控制GPIO,定时器,中断,串口的相关寄存器。

  1. #ifndef REG8051_H
  2. #define REG8051_H

  3. /*  BYTE Register  */
  4. __sfr __at (0x80) P0   ;
  5. __sfr __at (0x81) SP   ;
  6. __sfr __at (0x82) DPL  ;
  7. __sfr __at (0x83) DPH  ;
  8. __sfr __at (0x87) PCON ;
  9. __sfr __at (0x88) TCON ;
  10. __sfr __at (0x89) TMOD ;
  11. __sfr __at (0x8A) TL0  ;
  12. __sfr __at (0x8B) TL1  ;
  13. __sfr __at (0x8C) TH0  ;
  14. __sfr __at (0x8D) TH1  ;
  15. __sfr __at (0x90) P1   ;
  16. __sfr __at (0x98) SCON ;
  17. __sfr __at (0x99) SBUF ;
  18. __sfr __at (0xA0) P2   ;
  19. __sfr __at (0xA8) IE   ;
  20. __sfr __at (0xB0) P3   ;
  21. __sfr __at (0xB8) IP   ;
  22. __sfr __at (0xD0) PSW  ;
  23. __sfr __at (0xE0) ACC  ;
  24. __sfr __at (0xF0) B    ;


  25. /*  BIT Register  */
  26. /* P0 */
  27. __sbit __at (0x80) P0_0 ;
  28. __sbit __at (0x81) P0_1 ;
  29. __sbit __at (0x82) P0_2 ;
  30. __sbit __at (0x83) P0_3 ;
  31. __sbit __at (0x84) P0_4 ;
  32. __sbit __at (0x85) P0_5 ;
  33. __sbit __at (0x86) P0_6 ;
  34. __sbit __at (0x87) P0_7 ;

  35. /*  TCON  */
  36. __sbit __at (0x88) IT0  ;
  37. __sbit __at (0x89) IE0  ;
  38. __sbit __at (0x8A) IT1  ;
  39. __sbit __at (0x8B) IE1  ;
  40. __sbit __at (0x8C) TR0  ;
  41. __sbit __at (0x8D) TF0  ;
  42. __sbit __at (0x8E) TR1  ;
  43. __sbit __at (0x8F) TF1  ;

  44. /* P1 */
  45. __sbit __at (0x90) P1_0 ;
  46. __sbit __at (0x91) P1_1 ;
  47. __sbit __at (0x92) P1_2 ;
  48. __sbit __at (0x93) P1_3 ;
  49. __sbit __at (0x94) P1_4 ;
  50. __sbit __at (0x95) P1_5 ;
  51. __sbit __at (0x96) P1_6 ;
  52. __sbit __at (0x97) P1_7 ;

  53. /*  SCON  */
  54. __sbit __at (0x98) RI   ;
  55. __sbit __at (0x99) TI   ;
  56. __sbit __at (0x9A) RB8  ;
  57. __sbit __at (0x9B) TB8  ;
  58. __sbit __at (0x9C) REN  ;
  59. __sbit __at (0x9D) SM2  ;
  60. __sbit __at (0x9E) SM1  ;
  61. __sbit __at (0x9F) SM0  ;

  62. /* P2 */
  63. __sbit __at (0xA0) P2_0 ;
  64. __sbit __at (0xA1) P2_1 ;
  65. __sbit __at (0xA2) P2_2 ;
  66. __sbit __at (0xA3) P2_3 ;
  67. __sbit __at (0xA4) P2_4 ;
  68. __sbit __at (0xA5) P2_5 ;
  69. __sbit __at (0xA6) P2_6 ;
  70. __sbit __at (0xA7) P2_7 ;

  71. /*  IE   */
  72. __sbit __at (0xA8) EX0  ;
  73. __sbit __at (0xA9) ET0  ;
  74. __sbit __at (0xAA) EX1  ;
  75. __sbit __at (0xAB) ET1  ;
  76. __sbit __at (0xAC) ES   ;
  77. __sbit __at (0xAF) EA   ;

  78. /*  P3  */
  79. __sbit __at (0xB0) P3_0 ;
  80. __sbit __at (0xB1) P3_1 ;
  81. __sbit __at (0xB2) P3_2 ;
  82. __sbit __at (0xB3) P3_3 ;
  83. __sbit __at (0xB4) P3_4 ;
  84. __sbit __at (0xB5) P3_5 ;
  85. __sbit __at (0xB6) P3_6 ;
  86. __sbit __at (0xB7) P3_7 ;

  87. __sbit __at (0xB0) RXD  ;
  88. __sbit __at (0xB1) TXD  ;
  89. __sbit __at (0xB2) INT0 ;
  90. __sbit __at (0xB3) INT1 ;
  91. __sbit __at (0xB4) T0   ;
  92. __sbit __at (0xB5) T1   ;
  93. __sbit __at (0xB6) WR   ;
  94. __sbit __at (0xB7) RD   ;

  95. /*  IP   */
  96. __sbit __at (0xB8) PX0  ;
  97. __sbit __at (0xB9) PT0  ;
  98. __sbit __at (0xBA) PX1  ;
  99. __sbit __at (0xBB) PT1  ;
  100. __sbit __at (0xBC) PS   ;

  101. /*  PSW   */
  102. __sbit __at (0xD0) P    ;
  103. __sbit __at (0xD1) F1   ;
  104. __sbit __at (0xD2) OV   ;
  105. __sbit __at (0xD3) RS0  ;
  106. __sbit __at (0xD4) RS1  ;
  107. __sbit __at (0xD5) F0   ;
  108. __sbit __at (0xD6) AC   ;
  109. __sbit __at (0xD7) CY   ;

  110. /* BIT definitions for bits that are not directly accessible */
  111. /* PCON bits */
  112. #define IDL             0x01
  113. #define PD              0x02
  114. #define GF0             0x04
  115. #define GF1             0x08
  116. #define SMOD            0x80

  117. /* TMOD bits */
  118. #define T0_M0           0x01
  119. #define T0_M1           0x02
  120. #define T0_CT           0x04
  121. #define T0_GATE         0x08
  122. #define T1_M0           0x10
  123. #define T1_M1           0x20
  124. #define T1_CT           0x40
  125. #define T1_GATE         0x80

  126. #define T0_MASK         0x0F
  127. #define T1_MASK         0xF0

  128. /* Interrupt numbers: address = (number * 8) + 3 */
  129. #define IE0_VECTOR      0       /* 0x03 external interrupt 0 */
  130. #define TF0_VECTOR      1       /* 0x0b timer 0 */
  131. #define IE1_VECTOR      2       /* 0x13 external interrupt 1 */
  132. #define TF1_VECTOR      3       /* 0x1b timer 1 */
  133. #define SI0_VECTOR      4       /* 0x23 serial port 0 */

  134. #endif
复制代码

3.2 内部Ram&Rom

最初的51单片机有128byte的片内Ram和4K的片内的Rom,现在的51单片机可以有1K的片内Ram和64K片内的Rom。至于如何选择芯片型号要根据项目的实际需要和成本,参考选型指南、供应市场的具体情况作出。

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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