点亮一盏灯

前言

学无止境,上下求索。我是计算机专业的,毕业之后做了前端,一直在做上层应用,但是对一些比较底层的东西也很感兴趣,也想提升下自己。周围有一些朋友是电子信息类的专业,他们那里有很多开发板,学习条件得天独厚,闲暇之余学习一下嵌入式开发,点亮自己的第一盏灯,与诸君共勉,谨以此记。

准备工作

  1. 一个51单片机
  2. 下载安装 Keil5(MDK)
  3. 下载安装 C51
  4. 下载安装Proteus
  5. 下载安装STC-ISP及其驱动

具体的安装过程网上有很多不在此赘述,仅记录我安装时遇到的一些问题:

  • 使用注册机注册keil5时遇到 TOOLS.INI TOOLCHAIN NOT INSTALLED

解决办法: 参照网上说的在安装目录下找到TOOLS.INI文件加上以下内容,记得修改路径:

ini 复制代码
[C51]
PATH="C:\Keil_v5\C51"
VERSION=V9.51
BOOK0=HLP\Release_Notes.htm("Release Notes",GEN)
BOOK1=HLP\C51TOOLS.chm("Complete User's Guide Selection",C)
TDRV0=BIN\MON51.DLL ("Keil Monitor-51 Driver")
TDRV1=BIN\ISD51.DLL ("Keil ISD51 In-System Debugger")
TDRV2=BIN\MON390.DLL ("MON390: Dallas Contiguous Mode")
TDRV3=BIN\LPC2EMP.DLL ("LPC900 EPM Emulator/Programmer")
TDRV4=BIN\UL2UPSD.DLL ("ST-uPSD ULINK Driver")
TDRV5=BIN\UL2XC800.DLL ("Infineon XC800 ULINK Driver")
TDRV6=BIN\MONADI.DLL ("ADI Monitor Driver")
TDRV7=BIN\DAS2XC800.DLL ("Infineon DAS Client for XC800")
TDRV8=BIN\UL2LPC9.DLL ("NXP LPC95x ULINK Driver")
RTOS0=Dummy.DLL("Dummy")
RTOS1=RTXTINY.DLL ("RTX-51 Tiny")
RTOS2=RTX51.DLL ("RTX-51 Full")

貌似效果不是很好,然后我使用注册机又换了一个激活码,就得了。

  • keil构建项目报错:ERROR:failed to execute 'D:\Development\keil5\core\C51\BIN\C51.EXE'

解决办法:看到这里我下意识认为自己的TOOLS.INI文件配置错了,回去检查了一下,看一下有没有C51.EXE这个文件,没找到,连C51的文件夹都没有。随后拿起键盘在搜索引擎上一顿操作,发现网上说的后续解决流程很麻烦,我就死马当活马医缺啥补啥去到keil官网下载了C51的包安装(把之前在TOOLS.INI文件里面加的内容先删掉再安装),随后打开keil5重新运行就成功了。

下面放几张图:

  • 朋友拿来给我耍的经典51单片机套件
  • Keil5
  • Proteus

准备工作完成,要准备点灯了!想想就有点小激动!

写段点灯代码在Proteus试试

  • 先在Proteus画个带灯的简单板子
  • 在Keil5上写下这段代码
ini 复制代码
#include <reg51.h>

sbit led = P1 ^ 0;

void main()
{
		while (1)
	{
		led = 0;
	}
}

编译出hex文件在Proteus导入运行 很奇怪,灯不亮。

我又换了一段代码:

arduino 复制代码
#include <REGX52.H>
 
void main()
{
	P2 = 0x54;
}

这时候灯就亮了

这个情况让我感到困惑,因为我也是第一次写,怀疑是不是自己的包引入错了,修改如下:

ini 复制代码
#include <REGX52.H>

sbit led = P2 ^ 0;
 
void main()
{
	led = 0;
}

还有这样:

ini 复制代码
#include <reg51.h>

sbit led = P2 ^ 0;
 
void main()
{
	led = 0;
}

上面两段代码都能够在Proteus把灯点亮,这里我尝试写了sbit led = P1 ^ 0;不行,得写P2,这也让我困惑,因为从画的板子来看应该是P1才对,不解,稍后逮朋友问问。

点灯小能手

从仿真测试来看代码能够运行成功,准备上板,小激动哈哈,这里要吐槽一句Proteus老是闪退。。

成功路上多坎坷,STC-ISP进度一直不动,研究半天:

疑惑不解,咨询了一下朋友,说了什么冷启动热启动,找教程也看了一下,把按钮按了个遍还是不行。 最后朋友上场看了一下没按对开关,没上电,害。 下面就是激动人心的时刻了:

瞅着没,下面那盏红色小灯就是我点亮滴!

一闪一闪亮晶晶

更进一步,写个会闪的小灯:

ini 复制代码
#include <reg51.h>

sbit led = P2 ^ 0;

void Delay1000ms()		//@12.000MHz
{
	unsigned char i, j, k;
	i = 8;
	j = 154;
	k = 122;
	do
	{
		do
		{
			while (--k);
		} while (--j);
	} while (--i);
}


 
void main()
{
	while(1){
		led = 0;
		Delay1000ms();
		Delay1000ms();
		led = 1;
		Delay1000ms();
		Delay1000ms();
	}
}

噔噔噔:

成功点亮了自己的第一盏灯,希望是一个好的开始!(^▽^)

相关推荐
无际单片机编程14 小时前
嵌入式软件OTA升级,有哪几种Flash划分方式?
单片机·嵌入式硬件·学习·嵌入式
华清远见成都中心15 小时前
如何成为一名嵌入式软件工程师?
学习·嵌入式·华清远见
FreakStudio1 天前
一文速通 Python 并行计算:07 Python 多线程编程-线程池的使用和多线程的性能评估
python·单片机·嵌入式·多线程·面向对象·并行计算·电子diy
想拿高薪的韭菜1 天前
嵌入式基础(二)ARM基础
嵌入式
庐阳寒月2 天前
linux多线(进)程编程——番外1:内存映射与mmap
linux·c语言·嵌入式
Scout-leaf2 天前
UTC时间与正常时间相互转换的shell脚本
嵌入式
政安晨2 天前
【嵌入式人工智能产品开发实战】(二十)—— 政安晨:小智AI嵌入式终端代码解读:【B】小智AI嵌入式终端OTA升级功能深度解析
c++·人工智能·嵌入式·ota·小智ai·代码解读·ai聊天助手
塞尔维亚大汉2 天前
【鸿蒙南向开发】标准系统方案之瑞芯微RK3566移植案例(下)
操作系统·嵌入式·harmonyos
别说我什么都不会2 天前
OpenHarmony 实战开发 ——轻量型系统服务管理部件
物联网·嵌入式·harmonyos
塞尔维亚大汉3 天前
【鸿蒙南向开发】标准系统方案之瑞芯微RK3568移植案例(下)
物联网·嵌入式·harmonyos