51单片机基础结构及编程要点
51单片机基础结构及编程要点
外部结构特性
DIP40封装双列直插设计,含P0-P3四个8位准双向I/O口。P0口需外接上拉电阻(如4.7kΩ至VCC)以输出高电平。复位引脚RESET(PIN9)通过10μF电容接VCC实现上电复位。外部晶振连接X1(PIN18)和X0(PIN19),频率为主频12倍。EA引脚(PIN31)需接高电平以运行内部ROM程序。P3口支持第二功能(如RXD/TXD串口通信、外部中断INT0/INT1等)。
内部资源控制
四个8位I/O端口(P0-P3)、两个16位定时器(TMOD/TCON等寄存器控制)、串口通信模块(SCON/SBUF)、中断系统(IE/IP寄存器)。特殊功能寄存器(SFR)定义见头文件AT89x52.h
,可直接操作寄存器控制硬件。
C语言编程关键技巧
位操作与数据类型
十六进制数0x5a对应二进制01011010B。若16位数赋给8位变量,自动截取低8位。位操作示例:
x |= 0x0f
等效于x = x | 0x0f
(置位低4位)TMOD = (TMOD & 0xf0) | 0x05
保留高4位,低4位赋值为0x05
循环与逻辑控制
while(1)
用于无限循环(如主程序阻塞)。++var
先自增后使用,var--
先使用后自减。
I/O端口操作实例
输出高低电平
#include <AT89x52.h>
void main() {P1_3 = 1; // P1.3输出高电平P2_7 = 0; // P2.7输出低电平while(1);
}
生成方波
通过循环切换高低电平实现:
#include <AT89x52.h>
void main() {while(1) {P3_1 = 1; // 高电平P3_1 = 0; // 低电平} // 形成方波
}
引脚电平取反输出
读取输入后取反输出:
#include <AT89x52.h>
void main() {P1_1 = 1; // 初始化P1.1为输入while(1) {P0_4 = !P1_1; // P0.4输出P1.1的反相}
}
端口批量操作
低四位取反输出至另一端口:
#include <AT89x52.h>
void main() {P3 = 0xff; // P3设为输入while(1) {P2 = P3 ^ 0x0f; // P3低四位取反输出到P2}
}
注意事项
- P0口需外接上拉电阻才能输出高电平。
- 输入前需先置对应引脚为高电平(准双向口特性)。
- 直接操作SFR寄存器(如
P0=0x0f
)可同时控制8个引脚状态,对应二进制位从D7(高位)到D0(低位)。