找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 927|回复: 48
打印 上一主题 下一主题
收起左侧

什么是单片机的“手动编程”?

  [复制链接]
跳转到指定楼层
楼主
本帖最后由 海阔天空8 于 2026-3-12 10:18 编辑

首先“手动编程”这个词也不是我发明的。手动编程究竟存不存在?它和单片机有没有关系?折腾了多年我对单片机的理解进展不大。是到了请高人给“手动编程”下个准确定义的时候了。
现在我理解的“手动编程”的产生,是在电脑还没普及的年代不用编程器通过硬件手段对单片机裸芯片里的存储器写入数据(0.1),由单片机的输出脚输出的过程。这个过程不需要先对单片机烧写软件程序。它和单片机一般使用要由电脑通过编程器先对单片机裸芯片烧写程序,单片机才能运行程序不同。实质上不是单片机运行而是单片机里的存储器运行。
折腾来折腾去没什么进步,请各位老师指正,真的感谢!

补充内容:不用电脑,不用编程器,不会C语言,用几个按键,开关给单片机2051的不同地址“写入”不同的数据(“写入”状态),然后设置成“读出”状态,写入不同地址的数据就能够在单片机的8个输出口按地址顺序输出写入的数据(0/1电平)。
我现在认识到,这不是给单片机编程(单片机编程要通过预先烧录到d单片机里的软件完成,单片机裸芯片办不到。),倒像是给单片机里的存储器编程?如果说学单片机误入歧途我不反对。感谢大家!

是到了给“手动编程”做一个准确,具体定义的时候了。
各位老师的精彩回答摘录:
-----手动编程是存在过的。
-----看来楼主是要用硬件的思路来理解软件。
-----跟单片机说话,要说它能听懂的话,它能听懂的话就是“正确的。固件”。
-----不借助电脑,把程序写纸上。(这才是正儿八经的手动编程
-----手动编程是几十年前没有电脑,自己用手动输入高低电平来实现编程的一种办法,非常浪费时间,极度容易出错。
这种方法虽然能让单片机“机械性”的输出,但它输出的只是你预设的最终结果
-----不用电脑             对,的确不用电脑。
不用编程器          不对,那个东西本身就是编程器,只不过是“半自动”的。
不要计算机语言    不对,用的是汇编语言
-----“要解释AT89C2051能不能手动编程很简单,能,但为啥不这么做,因为效率极低”-
-----真正的编程,其实是给单片机写软件那个环节(就是生成那一堆0和1的过程)
-----一个人只会说汉语,另一个人只会说英语,除了大眼瞪小眼,两个人能沟通吗?
-----“”单片机本质来说,不运行代码的话,本身就是一个存储器“”—
第二个问题:存储器手动编程”和单片机编程有本质的区别(单片机需要软件运行存储器不需要)
给存储器写入特定的数据,其实就是代码编程
-----有意义的数据虽然也都是0和1,但不是你随便写的,得符合单片机的要求。


最简手动烧写2-1.jpg (396.31 KB, 下载次数: 0)

最简手动烧写2-1.jpg

2051擦写读.jpg (1.07 MB, 下载次数: 0)

2051擦写读.jpg
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1107340 发表于 2026-3-5 21:46 | 只看该作者
原来的eprom是可以手动编程的。
回复

使用道具 举报

板凳
ID:102168 发表于 2026-3-5 21:47 | 只看该作者
正常情况,烧写进单片机里面的数据,一般称为固件,相当于单片机的“软件”。实质也都是一堆0和1。

你之前手动写进单片机又读出来的那一堆0和1,只能称为乱码,总不能你随意写一堆0和1就成了单片机能运行的软件吧。

之前给你的最简手动编程电路里面,有个“读取”操作,那个读取是为了校验。也就是说给单片机烧写固件之后,需要一个校验的过程。

为什么要校验?因为单片机存储器的写入次数有限,如果写入次数太多了,存储器里面数据可能出错。如果只管往里面写,不读出来确认,出错了你也不知道。

烧写是往单片机里面写数据,校验是从单片机里面读出来之前写进去的数据,然后由你人工或者烧写器跟原始固件内容逐个字节进行对比。

校验失败,也就是意味着烧写过程出错了,可能烧写过程受干扰了,或者单片机存储器有问题了。。。不管什么原因,校验失败了就是不行。

以上内容,你能理解多少?
回复

使用道具 举报

地板
ID:460466 发表于 2026-3-6 08:45 | 只看该作者
changchieh 发表于 2026-3-5 21:46
原来的eprom是可以手动编程的。

eprom是什么?你不解释我怎么会明白?难怪现在很多呼吁外语要减分,,,,,,,,,,,,可擦除可编程只读存储器=======eprom!!!!!!要想叫我看明白您就不能用外文交流!!!您别介意“隔靴搔痒“!””
回复

使用道具 举报

5#
ID:170318 发表于 2026-3-6 08:52 | 只看该作者
我当时接触单片机已经到了8048和8051年代,在没有电脑时,用汇编语言编写单片机程序,进行人工编译,通过手动编程器将编译的一行行16进制代码输入编程器,烧录至单片机的片外ROM(如2716、2732、27C16、27C32、2764、27C64等,需用紫外线擦除,21V烧录程序的,最明显的就是有个玻璃窗口看见里面的硅片),单片机没有片内ROM、RAM和EEPROM,有了电脑后,省了人工编译,开始时还得要通过手动编程器将编译的一行行16进制代码输入编程器,烧录至单片机的片外ROM,后期可以通过电脑烧录。现在的单片机集成了ram和EEPROM(或flash),省了一大堆事情。也许上世纪70-90年代就应该叫“手动编程”
回复

使用道具 举报

6#
ID:996773 发表于 2026-3-6 09:00 | 只看该作者
手动编程是存在过的,我没经历过那个年代,那时候没有电脑转换编程语言到二进制,是用类似于纸带
或磁带代替单片机的程序存储器,当然是记录的有洞和无洞的0和1,玩这个得清楚知道命令和数据之间
的关系,现在么如果喊哪个网友写个让p0.0拉低点亮一个灯或闪烁的程序编译成0和1,楼主在手动编入
到单片机,也能执行。算是正儿八经的手动编程,前期应该有人教过楼主了,不知道后面怎样了
回复

使用道具 举报

7#
ID:170318 发表于 2026-3-6 09:00 | 只看该作者
还有在纸袋上打孔的,也叫“手动编程”吧
回复

使用道具 举报

8#
ID:460466 发表于 2026-3-6 09:02 | 只看该作者
changchieh 发表于 2026-3-5 21:46
原来的eprom是可以手动编程的。

我越来越觉得我把AT89C2051单片机当存储器用了还美其名曰“手动编程”!和单片机运行是两码事?
回复

使用道具 举报

9#
ID:460466 发表于 2026-3-6 09:10 | 只看该作者
xiaocake 发表于 2026-3-5 21:47
正常情况,烧写进单片机里面的数据,一般称为固件,相当于单片机的“软件”。实质也都是一堆0和1。

你之 ...

“”之前给你的最简手动编程电路里面,有个“读取”操作,那个读取是为了校验。也就是说给单片机烧写固件之后,需要一个校验的过程"----------------------哦!在您的帮助下,照方抓药,手动编程可以使2051的8个口完成LED流水灯等变化了(或者说可以叫8个输出端的电平按要求变化),现在我理解这不叫单片机运行(单片机运行要有软件),这应该是把单片机里的存储器单独拿来完成数据的写入-读出把?
回复

使用道具 举报

10#
ID:996773 发表于 2026-3-6 09:11 | 只看该作者
海阔天空8 发表于 2026-3-6 09:02
我越来越觉得我把AT89C2051单片机当存储器

你的行为是手动烧写,不算编程
回复

使用道具 举报

11#
ID:460466 发表于 2026-3-6 09:50 | 只看该作者
本帖最后由 海阔天空8 于 2026-3-6 12:45 编辑
hi等你 发表于 2026-3-6 09:11
你的行为是手动烧写,不算编程

“”手动烧写,不算编程“”---------------烧写?不就是对相关引脚加0或1的电压吗?这0或1的电压按一定的顺序输出,这”一定的顺序输出数据"不就是输入的按程序输出吗?
回复

使用道具 举报

12#
ID:102168 发表于 2026-3-6 11:09 | 只看该作者
海阔天空8 发表于 2026-3-6 09:02
我越来越觉得我把AT89C2051单片机当存储器用了还美其名曰“手动编程”!和单片机运行是两码事?

过去给单片机写”软件“,是看单片机的手册,不借助电脑,把程序写纸上。(这才是正儿八经的手动编程)程序写纸上是给人看的,要写进单片机才能看程序是否如期运行。所以又手动把程序写进单片机。
写完后要再读出来跟纸上的内容对照检查一下(校验)。


给单片机烧写数据,就是给单片机”装软件“,至少有以下两个环节:
1. 烧写,把单片机切换到烧写模式,给单片机内置存储器写进数据(软件)。     具体怎么烧写,暂且不谈。

2. 校验,把单片切换到检验模式,把单片机内置存储器里面的数据读出来再检查一遍,确保没有错误。    具体怎么读取,暂且不谈。

软件装好后,下一步是让单片机运行软件。
怎么运行? 把单片机切换到运行模式,(确保供电、晶振、复位等都正常)单片机才会运行你装进去的软件。


就这么个过程,不难理解吧。




回复

使用道具 举报

13#
ID:814322 发表于 2026-3-6 12:32 | 只看该作者
“想”的太多,“学”的太少。
回复

使用道具 举报

14#
ID:460466 发表于 2026-3-6 13:19 | 只看该作者
本帖最后由 海阔天空8 于 2026-3-6 13:25 编辑
xiaocake 发表于 2026-3-5 21:47
正常情况,烧写进单片机里面的数据,一般称为固件,相当于单片机的“软件”。实质也都是一堆0和1。

你之 ...

“”你之前手动写进单片机又读出来的那一堆0和1,只能称为乱码“”---------------这句话不理解。他是按一定的规律写入到存储器里的(单片机不也是用存储器存储数据吗?)并且能按一定的规律输出,怎么称为乱码?
回复

使用道具 举报

15#
ID:460466 发表于 2026-3-6 13:23 | 只看该作者
本帖最后由 海阔天空8 于 2026-3-6 13:25 编辑
hi等你 发表于 2026-3-6 09:11
你的行为是手动烧写,不算编程

“手动烧写”的结果是?能把烧写进去的数据按原顺序输出的。这有一定规律的数据叫什么?不能叫程序吗?
回复

使用道具 举报

16#
ID:460466 发表于 2026-3-6 21:13 | 只看该作者
xiaocake 发表于 2026-3-6 11:09
过去给单片机写”软件“,是看单片机的手册,不借助电脑,把程序写纸上。(这才是正儿八经的手动编程)程 ...

我这个“手动编程”这3步似乎都完成了?8个输出/输入端写进去的输出电位高低顺序切换到“”读出“”可以看到和输入的数据一样呀!断电后再开机输出不变(6116存储器断电后输出就丢失了)。
回复

使用道具 举报

17#
ID:102168 发表于 2026-3-6 23:09 来自触屏版 | 只看该作者
海阔天空8 发表于 2026-3-6 13:23
“手动烧写”的结果是?能把烧写进去的数据按原顺序输出的。这有一定规律的数据叫什么?不能叫程序吗?

手动烧写的结果,是把有用的数据写进单片机的存储器。目前你写进去的是无用的数据。

1.你写进去的数据只是你认为有规律,单片机不认识,因为数据内容不符合它的要求,对它来说就是乱码。

2.你说的按顺序,这是单片机厂家规定的数据烧写和读取的方式,没有其他的方式。存储器的读写方式跟读写的数据内容无关。

回复

使用道具 举报

18#
ID:102168 发表于 2026-3-6 23:19 来自触屏版 | 只看该作者
海阔天空8 发表于 2026-3-6 21:13
我这个“手动编程”这3步似乎都完成了?8个输出/输入端写进去的输出电位高低顺序切换到“”读出“”可以 ...

1。你看单片机手册了嘛?你知道正常的固件对应的数据是啥样的嘛?目前你不了解怎么写固件,所以现状是:你还没能力写固件。
2。目前你已经会单片机固件烧录的过程了,只是还没有烧写过正确的固件。

回复

使用道具 举报

19#
ID:814322 发表于 2026-3-7 02:45 | 只看该作者
xiaocake 发表于 2026-3-6 23:19
1。你看单片机手册了嘛?你知道正常的固件对应的数据是啥样的嘛?目前你不了解怎么写固件,所以现状是: ...

他连烧录都还没学会呢
回复

使用道具 举报

20#
ID:460466 发表于 2026-3-7 08:35 | 只看该作者
xiaocake 发表于 2026-3-6 23:09
手动烧写的结果,是把有用的数据写进单片机的存储器。目前你写进去的是无用的数据。

1.你写进去的数据 ...

1.你写进去的数据只是你认为有规律,单片机不认识,----------------------这话怎么理解?我写进去的数据,在读出状态可以从输出的io口输出的呀?怎么能说“不认识“?它记住了呀?
回复

使用道具 举报

21#
ID:460466 发表于 2026-3-7 09:53 | 只看该作者
xiaocake 发表于 2026-3-6 23:19
1。你看单片机手册了嘛?你知道正常的固件对应的数据是啥样的嘛?目前你不了解怎么写固件,所以现状是: ...

“”正确的固件"是什么?单片机认识的才叫"正确“吗?
回复

使用道具 举报

22#
ID:102168 发表于 2026-3-7 10:30 | 只看该作者
ldasta 发表于 2026-3-7 02:45
他连烧录都还没学会呢


不是的,他已经会手动烧写了,只是他对自己在干啥还缺乏足够的认知。

关于手动编程,他最初是看了“89C2051的手动编程_吴伟江”这个文章(见附件)
文章介绍的是个半自动的烧录器,用了555还有几个数字逻辑芯片,线路其实比较复杂的,他没做。


然后我给他画了最简手动编程电路 (见附件)。里面切换烧录,校验,地址以及脉冲输入等操作,全都是人工用实物开关完成。
然后他就用那个最简手动编程电路,把他自己随意编的数据写进单片机了,然后还能读出来,读出来是用8个LED显示。


如果他写进去的是单片机能运行的固件,那就是正常的单片机烧录了。


目前他一直在“编程”(烧录和校验)这个环节转圈圈,单片机对他来说还是个黑盒子。




89C2051的手动编程_吴伟江.pdf (347.72 KB, 下载次数: 0)

89C2051编程说明以及最精简的手动烧写电路V1.pdf (168.26 KB, 下载次数: 0)



回复

使用道具 举报

23#
ID:102168 发表于 2026-3-7 11:14 | 只看该作者
海阔天空8 发表于 2026-3-7 09:53
“”正确的固件"是什么?单片机认识的才叫"正确“吗?

对,对,对。你前面自己都说过了,跟单片机说话,要说它能听懂的话,它能听懂的话就是“正确的固件”。
回复

使用道具 举报

24#
ID:460466 发表于 2026-3-8 17:48 | 只看该作者
xiaocake 发表于 2026-3-7 10:30
不是的,他已经会手动烧写了,只是他对自己在干啥还缺乏足够的认知。

关于手动编程,他最初是看了“ ...

目前他一直在“编程”(烧录和校验)这个环节转圈圈,单片机对他来说还是个黑盒子。-----确实是。
回复

使用道具 举报

25#
ID:460466 发表于 2026-3-8 18:00 | 只看该作者
xiaocake 发表于 2026-3-7 10:30
不是的,他已经会手动烧写了,只是他对自己在干啥还缺乏足够的认知。

关于手动编程,他最初是看了“ ...

“”把他自己随意编的数据写进单片机了,然后还能读出来,读出来是用8个LED显示。
如果他写进去的是单片机能运行的固件,那就是正常的单片机烧录了。--------------------------------------确实是这个意思(随意编的数据,比如各种“流水灯”)!用8个单片机输出端读出来的。哦!因为我写进去的数据单片机不认识。单片机不能运行。我怎样写进数据单片机才能认识逆呢?那就需要单片机先要装进软件(程序)吗?--------“”因为单片机裸芯片什么也不能干”这样理解对吗?
回复

使用道具 举报

26#
ID:460466 发表于 2026-3-8 18:04 | 只看该作者
xiaocake 发表于 2026-3-7 10:30
不是的,他已经会手动烧写了,只是他对自己在干啥还缺乏足够的认知。

关于手动编程,他最初是看了“ ...

“”单片机能听懂的话“--------------------------那就有单片机自己的一套规则了?这就涉及到各种“语言”了?也就是规则了?看来要对单片机编程还是绕不过“语言”的?
回复

使用道具 举报

27#
ID:996773 发表于 2026-3-9 08:59 | 只看该作者
我也下载看了一下,这个吴伟江写的手动编程现在已经是毫无用的资料,却成了永远压死楼主不能开窍的一张破纸
回复

使用道具 举报

28#
ID:460466 发表于 2026-3-9 20:31 | 只看该作者
hi等你 发表于 2026-3-9 08:59
我也下载看了一下,这个吴伟江写的手动编程现在已经是毫无用的资料,却成了永远压死楼主不能开窍的一张破纸 ...

不管怎么说,不用管它叫什么名称,它确实是一种不用电脑,不用编程器,不用计算机语言的控制单片机输出端的一种方法。
回复

使用道具 举报

29#
ID:88256 发表于 2026-3-9 21:17 | 只看该作者
hi等你 发表于 2026-3-9 08:59
我也下载看了一下,这个吴伟江写的手动编程现在已经是毫无用的资料,却成了永远压死楼主不能开窍的一张破纸 ...

看吧,又形成一个完美的闭环,大家又白操心了。
回复

使用道具 举报

30#
ID:123917 发表于 2026-3-10 09:24 | 只看该作者
你好,如果加密了,按你的设置,还能显示对应地址的数据吗?
回复

使用道具 举报

31#
ID:460466 发表于 2026-3-10 12:07 | 只看该作者
xiaocake 发表于 2026-3-5 21:47
正常情况,烧写进单片机里面的数据,一般称为固件,相当于单片机的“软件”。实质也都是一堆0和1。

你之 ...

“”单片机的功能是不是通过输出端口的不同时间,不同电位高低组合驱动执行电路完成的?“”如果是的话,我通过“”手动编程“”(或称别的方式不用电脑,编程器,计算机语言)如果能实现“”输出端口的不同时间,不同电位高低组合“”那叫不叫使用单片机?我大胆猜想单片机的使用模式可能不仅是一种?为什么就不能用不同的方式去实现单片机“”输出端口的不同时间,不同电位高低组合“呢?
回复

使用道具 举报

32#
ID:460466 发表于 2026-3-10 12:51 | 只看该作者
xiaocake 发表于 2026-3-6 11:09
过去给单片机写”软件“,是看单片机的手册,不借助电脑,把程序写纸上。(这才是正儿八经的手动编程)程 ...

“”不借助电脑,把程序写纸上。(这才是正儿八经的手动编程)“”---------------如此说来也算编程?(烧写模式)?如果烧写完成后检验模式无误后下一步就是运行”软件"了?这里的"软件“是指什么?我那板子上根本就没有晶振呀?就是靠地址进位完成运行的。(手动或自动)
回复

使用道具 举报

33#
ID:1064915 发表于 2026-3-10 14:19 | 只看该作者
海阔天空8 发表于 2026-3-10 12:51
“”不借助电脑,把程序写纸上。(这才是正儿八经的手动编程)“”---------------如此说来也算编程?( ...

开始还以为是勤学好问,现在知道就是个不学无术
回复

使用道具 举报

34#
ID:468878 发表于 2026-3-10 15:05 | 只看该作者
不要想什么手动编程了既然想学单片机,就好好按新思路学。手动编程是几十年前没有电脑,自己用手动输入高低电平来实现编程的一种办法,非常浪费时间,极度容易出错,现在可能也基本没几个人掌握这种技能了。按照现在的方法:在KEIL 软件写C代码,再把C代码编译成HEX文件,再通过烧录器,把HEX文件烧录到单片机,单片机就能根据程序的设置工作了。假如在单片机P1.0口外接一个LED,如何让这个LED闪烁起来,就写如下代码就行。
// 包含STC89C51寄存器定义头文件(不同编译器可能为reg51.h,效果一致)
#include <STC89C5xRC.H>  

// 延时函数:通过空循环实现简单延时(约500ms,晶振11.0592MHz)
void Delay500ms(void)  
{
    unsigned int i, j;
    for(i=500; i>0; i--)
        for(j=110; j>0; j--);
}

void main(void)  // 主函数,程序入口
{
    while(1)  // 无限循环,让LED持续闪烁
    {
        P1_0 = 0;  // P1.0口置低电平(假设LED负极接P1.0,正极接VCC,低电平点亮)
        Delay500ms();  // 保持点亮500ms
        
        P1_0 = 1;  // P1.0口置高电平,LED熄灭
        Delay500ms();  // 保持熄灭500ms
    }
}
回复

使用道具 举报

35#
ID:412177 发表于 2026-3-10 15:45 | 只看该作者
当年的手动编程是相当麻烦的,浪费时间,浪费精力,容易出错。知道就行了,没必要深究,有电脑有K软件代替,节约时间,节约精力,不容易出错,不是更好吗?
回复

使用道具 举报

36#
ID:1152952 发表于 2026-3-10 16:21 | 只看该作者
现在喜欢机器码编程的人大有人在,网上一块能用机器码编程的51板子可不便宜
昨天还刷了个视频有人在Bendix G15上用打孔带写程序
即便不用单片机玩机器码,pld,cpld不照样玩,同样也不需要晶振,玩什么不都是玩
回复

使用道具 举报

37#
ID:460466 发表于 2026-3-10 19:46 | 只看该作者
想后看开 发表于 2026-3-10 15:45
当年的手动编程是相当麻烦的,浪费时间,浪费精力,容易出错。知道就行了,没必要深究,有电脑有K软件代替 ...

您这样一说我就明白了,这是当年玩单片机的一种早已淘汰了的方法。它和目前主流方法是根本不同的,但他的特点是不用电脑,编程器,计算机语言是它的特点。历史上确实存在过,,,,,,,,,,,,所以各位老师给我用目前的主流方法讲解,根本听不懂,也就不奇怪了。
回复

使用道具 举报

38#
ID:88256 发表于 2026-3-10 20:18 | 只看该作者
海阔天空8 发表于 2026-3-6 08:45
eprom是什么?你不解释我怎么会明白?难怪现在很多呼吁外语要减分,,,,,,,,,,,,可擦除可编程 ...

我也不会英文,岁数也一样不小了,但我不会像你这样倚老卖老,有些东西还真的要用英文,RAM、ROM等用中文就复杂多了,C语言的“C”你要用什么代替?还有很多软件的名称,真的是无法用中文直接替代的,总不能因为你不学英文就给你创造一些中文出来代替吧?当然如果你是邻国那位世传领袖那就不一样了,可惜你不是。
回复

使用道具 举报

39#
ID:140411 发表于 2026-3-11 08:45 | 只看该作者
海阔天空8 发表于 2026-3-9 20:31
不管怎么说,不用管它叫什么名称,它确实是一种不用电脑,不用编程器,不用计算机语言的控制单片机输出端 ...

这种方法虽然能让单片机“机械性”的输出,但它输出的只是你预设的最终结果,没有“灵气”,它不能根据读入的数据进行各种逻辑运算,也不能自主的判断和分析是否符合某种条件后实时动态的输出我们想要的最佳值。
回复

使用道具 举报

40#
ID:102168 发表于 2026-3-11 09:18 | 只看该作者
海阔天空8 发表于 2026-3-10 12:51
“”不借助电脑,把程序写纸上。(这才是正儿八经的手动编程)“”---------------如此说来也算编程?( ...

那个最简电路是为了满足你“手动编程”的愿望。如果用上晶振,你就无法“手动”完成了。

然后最简电路只是为了给单片机“烧写”软件,AT89C2051要运行“软件”,得给他补充外围电路(晶振,复位)。

这种基础的问题,但凡你之前用点心也不至于现在才问出来。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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