单片机(Microcontroller Unit, MCU)是一种将中央处理单元(CPU)、存储器、输入输出接口等集成在一块芯片上的微型计算机系统。本教程旨在为初学者提供一个简单的单片机入门指南,并通过具体的代码示例来加深理解。
一、单片机简介
单片机广泛应用于工业控制、家用电器、汽车电子等多个领域。常见的单片机包括8位的AT89系列、16位的MSP430系列以及32位的STM32系列。
二、环境搭建
2.1 开发工具选择
对于初学者而言,推荐使用Keil μVision作为开发环境,它支持多种单片机架构。
2.2 开发板准备
- 硬件准备:购买一款基于AT89S51/STC89C51的开发板。
- 软件安装:下载并安装Keil μVision IDE。
三、第一个程序:点亮LED
3.1 硬件连接
确保LED正极接到单片机的一个I/O口上,负极接地。
3.2 编写代码
```c
#include // 包含头文件
void delay(unsigned int i); // 延时函数声明
void main()
{
P1 = 0x00; // 初始化P1口全为0,即所有接LED的引脚为高电平
while(1) // 无限循环
{
P1_0 = 0; // 让P1.0口输出低电平
delay(10000); // 调用延时函数
P1_0 = 1; // 让P1.0口输出高电平
delay(10000); // 再次调用延时函数
}
}
void delay(unsigned int i) // 延时函数定义
{
unsigned int j;
for(;i;i--)
for(j=110;j;j--);
}
```
3.3 下载与调试
使用编程器将上述代码下载到单片机中,并观察现象。
四、进阶操作:使用定时器实现精确延时
4.1 定时器配置
设置定时器的工作模式与预分频值。
```c
TMOD = 0x01; // 设置定时器T0为工作模式1
TH0 = (65536 - 50000) / 256; // 高8位赋初值
TL0 = (65536 - 50000) % 256; // 低8位赋初值
TR0 = 1; // 启动定时器T0
```
4.2 中断服务程序
编写定时中断服务程序。
```c
void timer0_ISR() interrupt 1 using 1
{
TH0 = (65536 - 50000) / 256; // 重新加载计数器高8位
TL0 = (65536 - 50000) % 256; // 重新加载计数器低8位
P1_0 = !P1_0; // 反相输出,实现闪烁
}
```
4.3 主程序
```c
void main()
{
TMOD = 0x01; // 设置定时器T0为工作模式1
TH0 = (65536 - 50000) / 256; // 高8位赋初值
TL0 = (65536 - 50000) % 256; // 低8位赋初值
TR0 = 1; // 启动定时器T0
EA = 1; // 开启总中断
ET0 = 1; // 开启定时器T0中断
while(1);
}
```