矿石收音机论坛

 找回密码
 加入会员

QQ登录

只需一步,快速开始

搜索
楼主: 海阔天空9

我这样理解单片机不对吗?

  [复制链接]
     
 楼主| 发表于 2023-12-9 14:50:22 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

     
发表于 2023-12-10 14:22:52 | 显示全部楼层
本帖最后由 fshwen 于 2023-12-10 14:46 编辑

几天没看,都盖这么高了好宏伟的建筑
其实楼主的关注重点本身是有问题的,楼主想了解单片机的编程写入时序,这本身没什么问题,但不要一开始就关注此类问题,单片机的重点是应用,开始只把单片机当作一个黑箱子,不去管它里面情况如何,只需要按自己写的程序而得到自己需要的结果就行了,没有得到自己希望的结果再找原因。
了解事物需由浅入深,不要一开始就搞得很艰难,研究生不也是从幼儿园开始的吗?楼主一开始就关注硬件电路,个人感觉楼主走进了死胡同。
单片机最主要的还是软件,就如本坛里正在开展的DIY赛里的一些含单片机的作品,若不用单片机,会是什么样子?
所以楼主不需要拿个存储器还是什么的去和单片机作对比,这世界连石头都没有两个一样的,何况两个不是同一类型的芯片?
所以楼主,不要执著于一些无关紧要的细枝末节,费神费力还不讨好

B站的一个系列视频,这类视频很多
C01、用门电路构建4位全加器【自制8位计算机】
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2023-12-10 14:52:46 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2023-12-10 15:00:55 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

     
发表于 2023-12-10 16:27:35 | 显示全部楼层
本帖最后由 fshwen 于 2023-12-10 16:36 编辑
海阔天空9 发表于 2023-12-10 14:52
如果老师们要能拿一个具体问题举例说明问题(单片机写入一个简单程序的具体操作?),就好了。概念解释概 ...


刚贴了个视频好像被删了,不过删了也好,对楼主也没什么大的用处。
往单片机写入程序,之前需要编写程序,现在多用C语言写(以前多用汇编),写好后需要翻译成单片机能执行的机器码文件方便写入单片机执行,这两步51系列机用KEIL软件即可做到,你要问KEIL是什么,百度搜索即可;
然后就是把翻译好的程序写入单片机了,需要与单片机对应的写入软件(电脑端)和写入硬件(通过电脑接口比如USB接上,一般称为编程器或烧录器,大多都需要购买并会给配套的写入软件,当然也可以自制),在编程器上装上要写入程序的单片机,电脑端的写入软件选好要写入的翻译好的机器码文件,点击写入就自动完成了,这样就完成了一个单片机的编程。
当然你也可以直接用别人编译好的机器码文件直接写入单片机,就不需要写程序了。
不知道这样够不够直白
回复 支持 反对

使用道具 举报

     
发表于 2023-12-10 17:02:37 来自手机 | 显示全部楼层
海阔天空9 发表于 2023-12-10 15:00
那就请您说说“流水灯”好了:8个LED依次点亮其中一个,间隔2秒,需要写多少句(行)程序语言?各个引脚 ...

C语言正经写,这个流水灯不超过10行;

C语言紧凑写,一行就够了
回复 支持 反对

使用道具 举报

     
发表于 2023-12-10 17:14:36 | 显示全部楼层
t3486784401 发表于 2023-12-10 17:02
C语言正经写,这个流水灯不超过10行;

C语言紧凑写,一行就够了

我认为楼主是把源代码程序和最终写入单片机的机器码搞混淆了,楼主应该是以为原程序的行数或大小就是最终机器码的大小
回复 支持 反对

使用道具 举报

     
发表于 2023-12-10 17:35:11 | 显示全部楼层
fshwen 发表于 2023-12-10 17:14
我认为楼主是把源代码程序和最终写入单片机的机器码搞混淆了,楼主应该是以为原程序的行数或大小就是最终 ...

是的,LZ 不太明白编程的目的。

如果上 C++,流水灯的代码更可怕
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2023-12-10 18:18:12 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2023-12-10 18:26:05 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2023-12-10 18:27:37 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2023-12-10 18:35:44 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

     
发表于 2023-12-10 18:56:53 | 显示全部楼层
本帖最后由 xiaocake1 于 2023-12-10 18:58 编辑
海阔天空9 发表于 2023-12-10 15:00
那就请您说说“流水灯”好了:8个LED依次点亮其中一个,间隔2秒,需要写多少句(行)程序语言?各个引脚 ...


程序我就不去实际写了,反正写了您也看不懂,我也好久没碰单片机了。
我也没有用单片机做过实际项目,只是写过一个简易的电子钟。
所以我就只“简单说说”,如果是我的话会如何实现。

以下说的是51单片机,8个LED接在P1口,可以用89C2051,89C2051的引脚也就是P1口是全部引出的。
(P1.0~P1.7,各LED的正极通过合适大小的电阻接+5V,负极接到单片机引脚)。
晶振就用低点的6M频率。

总体思路:  用移位指令, 每2秒将P1口移位1次,就是想要的效果了。

这里的2秒时间,使用定时器来实现。
但是2秒时间,对定时器来说是很长的时间了,所以只有把2秒分割成定时器可以接受的小片段。
比如10ms(毫秒),那么要定时器要重复200次才能凑出来2秒时间。

定时器时间(计数)一到就会触发中断,就在中断的时候进行移位操作就行了。


整个程序就两部分:主程序和定时器中断服务程序。

1.主程序:
给P1口设置初值(二进制11111110,16进制就是FE)。就是将最低位P1.0设置为低电平,引脚被下拉到接近接地状态,这样就能点亮P1.0的那个LED。
选个位置(取个名字),用来存放定时器计时次数,计时次数最开始设置为0。
给定时器设置初值,设置为自动重载模式,开启定时器。
停在原地。(等待定时器中断)

(定时器的初值是按10ms时间和晶振频率计算出来的。具体怎么算的我就不啰嗦了。
   定时器自动重载,就可以自动重复定时。不然每次时间到了还得写代码再次给初值。。。太麻烦。


2.定时器中断服务子程序:
将计时次数+1
判断计时次数有没有到200。
到200了,就将P1口移位一次,并将次数改成0。
没到200,就退出子程序。

程序用汇编或C语言都可以,总共估计最多十来行的样子。


不知道我上面的回答,您是否满意,不知道您能看懂多少。
回复 支持 反对

使用道具 举报

     
发表于 2023-12-10 19:00:27 来自手机 | 显示全部楼层
海阔天空9 发表于 2023-12-10 18:26
用拨码开关输入流水灯的设置熟练了不超过1分钟。也不用不着写什么程序。 不是抬杠。我还不明白的是对单 ...

我没明白你用的何种控制器可以这样干?如果您是说上世纪90年代用6506+6116ram或z80+6116做的简易学习套件的玩法,是这样的。用汇编语言编程手工汇编成二进制代码写在纸上,然后手动拨码开关写到ram里,启动CPU运行。运行通过再用手动编程器烧到并行接口EEPROM或EPROM里,插到学习板的ROM插座上拨动开关运行地址切换到ROM区。那是当年没条件下凑合玩法,几行几十行的源代码编译成几百字节的二进制代码这样玩是可以的。现代单片机或嵌入式应用一个不太复杂的动辄数百行、数千行源代码编译出来几k--数百k的二进制代码。您这样玩法没效率人也受不了啊。
回复 支持 反对

使用道具 举报

     
发表于 2023-12-10 19:03:14 来自手机 | 显示全部楼层
而且现代单片机都是内置flashROM,根本没有可以让您手动烧写二进制代码的功能和外部I/O。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 加入会员

本版积分规则

小黑屋|手机版|矿石收音机 ( 蒙ICP备05000029号-1 )

蒙公网安备 15040402000005号

GMT+8, 2025-4-27 03:10

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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