很长一段时间以来在word上记了一些笔记,但却一直没能回头复习。再三斟酌,决定将笔记以博客的形式写出来,并借此机会对所学内容进行一次复习,我想应该不用太多时间就能搬运完。

C语言基础将从单片机开始写,直接学习C语言未免过于乏味,但如果通过C语言在单片机上的应用来间接学习C语言,就能让理论与实际充分结合,达到事半功倍的效果。

单片机可以做什么

单片机:CPU、存储器、IO接口、定时器集成到一个硅片上,具有小而完整的微型计算机系统。
单片机使用灵活,经过二次硬件和软件开发,实现不同功能,满足不同需求。
硬件工程师:根据单片机资源设计硬件电路、原理图设计、PCB绘制、硬件功能调试。
软件工程师:单片机C语言基础、程序开发环境、程序的烧录、软件功能调试与测试。

单片机资源有哪些

STC15W104接口资源介绍:

名称 资源数量或大小 资源作用
工作电压 2.4-5.5V
程序空间(FLASH ROM) 4K=4096bytes 用于存储单片机代码(code)
SRAM 128bytes 用来存储单片机代码中的变量(变量的定义不能大于128字节)
EEPROM 1K 具有掉电保存功能
IO 6个,P3.0-P3.5 单片机的输入输出端口。对于AT89C52芯片,P0.0-P0.7、P1.0-P1.7、P2、P3
定时器 2个 精准定时。电子时钟->定时器。
串口 串口是单片机与外部设备通讯的重要接口。芯片与芯片之间通讯。例WIFI/蓝牙/4G
ADC 稍高端的单片机集成。模拟的实际电压转成数字信号。普通IO接口只识别高低电平,有ADC的IO可识别模拟电压。
DAC 通过端口输出一个模拟电压。普通IO只输出高低电平,DAC可输出一个模拟电压(0-VCC)的一个任意电压。
SPI/IIC(串行协议) 都是标准通讯接口。一般用于实现芯片之间通讯。I2C和SPI总线对比
看门狗 用来防止代码程序死机与非正常运行。

进制的介绍与转换

最小储存单元为bit(比特),存0和1
8个储存元组成1Byte(字节)

二进制:单片机单个IO的配置,使用少,一般用16进制表示。

1
表示方法:b00100011

十进制:一般使用于单片机算术计算,逻辑计算。

1
表示方法:35

十六进制:寄存器配置、运算。

1
表示方法:0x23

C51点亮第一个LED灯

1
2
3
任务: 点亮无线门磁探测器的LED1 LED2 
准备:无线门磁探测器、烧录器、数字电源一台、电脑1台(安装KEIL C51)
原理:C语言源程序->C编译器->汇编代码->汇编器->机器代码(.hex .bin)

点亮LED灯有以下步骤

STC15W104 工程新建
STC15W104 生成烧录文件
HEX为单片机可识别的文件

STC15W104 单片机烧录方法
冷启动烧录:先下载程序再供电
热启动烧录:供电情况下烧录程序

点亮LED灯

单片机的高低电平:

1
2
低电平:GND    # 低压0V
高电平:VCC # 单片机的供电电压

单片机的普通IO口只能输出高电平或者低电平:

1
2
IO=0 则单片机的IO口输出低电平   0V
IO=1 则单片机的IO口输出高电平 VCC

具体操作步骤:

  1. 安装烧录接口驱动
  2. 在STC-ISP的“keil仿真设置”中点击“添加型号和头文件到keil中”,选择keil_C51所在文件夹
  3. 在keil中新建new project,设置项目文件夹与项目文件名,选择项目用到的芯片,建立项目
  4. 创建主函数文件main.c,并将之加入到project中,再继续编写main.c文件,添加头文件,将头文件修改成使用的型号,型号在keil目录中的INC文件夹中可以找到。
  5. 编写好主函数之后,点击option for taget,选择output选项卡,点击编译,生成HEX文件。
  6. 然后回到STC-ISP中,选择芯片,选择烧录器的串口,选择工作晶振频率5.5296Mhz,导入程序文件,连接烧录器和无线门磁探测器,再冷启动烧录。

关于延时函数:nop()函数存在于头文件#include "intrins.h"中,表示一个机械周期,一个机械周期包含12个时钟周期,一个时钟周期的时长为晶振频率的倒数。1个机械周期 = 12个时钟周期 = 12 * (1/f)。(f 为晶振频率)