当前位置: 首页 > 原理解释

普中科技单片机原理图-普中单片机原理图

单片机的肚子到底有多大? 打开一个一般/平平的 8051 单片机,你看到的不是哈达玛公司那种全是金属焊点的阵列,而是个由“大肚子”撑开的神奇器官。
这个肚子叫内部大存,它肚子里塞满了代码。你不需求把它当成硬盘,出于它根本不存有物理硬盘的概念,这里只有“地址空间”。当你把代码写到里面,程序就能像人一样,从内存深处一步步抓取指令,一步步执行,直到走到这个肚子彻底打不开的时候,程序就彻底终止了。
这个肚子的大小,彻底取决于芯片的型号。
比如 8051 系列,它的肚子一般只有几千字长,够你塞下几行能喊人帮忙的代码;而 8052 系列略微大一点,能塞下几十就连上百行代码,就连还能塞下个好办的汇编程序,像个小型的微型电脑。 程序如何跑起来的,实际上就跟人进食一样好办,只是你平时进食是“吃进肚子里”,而程序是“喂进肚子里”的。程序启动的瞬间,就是肚子被喂饱的那一刻。单片机启动时会从内部的程序存器里,找出第一条指令,就像人吃饱了胃里最先跳动的肌肉一样,把这条指令扔进执行器,然后执行完这条,下一条接着扔,直到这条指令的地址跑到程序存器的尽头,要么肚子彻底没空了,程序才算干完活,乖乖关机。在这个过程中,单片机负责执行,而程序存器(ROM/Flash)负责供给食物,它们配合默契,把指令一步步跑完。 说到这个“肚子”,大家最好办犯的一个毛病就是搞混了代码、配置和程序存器。大量人当作把代码拷进程序存器,程序存器一生效,代码就直接跑起来了。
这就像你把一本菜谱扔进冰箱,冰箱里有了菜谱,但你还要去灶台间点火,菜谱还不够。代码是食谱,程序存器是冰箱,而单片机是那个拿着刀叉的手。代码是死的,它务必被“喂”给单片机才能激活。配置寄存器里的数据,就像是帮单片机选了个厨师,告诉它该用哪种炒菜技术。程序存器里的代码,就像是给厨师预备的一盘盘菜,但只有单片机拿着刀叉去把这些菜(代码)串联起来,动作才是活的。 要是配置错了,哪怕你喂进了一整盘菜,单片机也会当自己是瞎子,把菜当成“没菜”处理,根本不会去执行任何一条指令,程序就原地打转,像个被锁住的老鼠,一辈子动不了;要是喂进去了,但找错了厨师,要么厨师动作跟不上菜的速度,那程序运行就会像走钢丝,快一点就倒,慢一点就停不下来,害得整个系统死机。代码是菜谱,配置是厨师,单片机就是灶台间,三者缺一不可。 举个例子,假设你要做一个好办的闹钟。你需求把设置闹钟工夫的代码输入到程序存器里,把设定闹钟的数值存入定时器初始值寄存器里。
这时候代码是好的,配置也是对的,可是单片机还没摸到代码,故此它还没启动造闹钟。
这时候,要是代码里有断言,断言的数量越多,单片机“饿肚子”的可能性就越大,出错概率也就越高。断言就是那个定时器的初始值寄存器,也是程序存器的一个入口点。
要是断言设置得不对,要么断言数量忒多,单片机能与此同时访问并列于断言附近的程序存器单元,就会形成冲突,害得程序乱跑。
这时候,哪怕你喂了最好的菜,也可能出于厨师(单片机)手忙脚乱,把菜撒拿到处都是,系统就彻底瘫痪了。 还有一个难题,就是代码和程序存器到底是混在一起,还是分开了?在 8051 系列里,代码和程序存器就是一条龙,混在一起。
这种设计让单片机配置贼灵活,你能够随意转变代码的长度,就连能够在程序存器里写一堆垃圾,只要单片机不把它当成有用的食物,系统就能正常运行。但要是你把代码和程序存器分开了,那得多费事,每个代码段都要单独配置存地址,单片机再复杂也跑不动。
故此,8051 系列之故此能成为经典,就是它把代码和程序存器捆在一起,一锅端,用起来才顺手。 到了真机调试阶段,大家最头疼的不是代码不对,而是“读不到”。
这就像你给了厨师菜谱,也给他选了个厨师,结局你在灶台间看到一点动静都没有,连呼吸声都没有。
这一般不是菜的难题,而是“厨师”要么“灶台间”的难题。
可能是厨师的手忒抖,手里的刀叉(寄存器)抓不住菜(代码);也可能是厨师忒累,看不清楚菜(程序存器);要么是你给厨师吃的菜(代码)被其他东西碰掉了,藏到了别人吃不到的地方。
这时候,别急着换菜谱,先检查一下是不是那个“厨师”的手稳不稳。 在实际接线时,电源和地线的处理也不容漠视。大量人习惯把电源和地线接在同一个端子上,要么通过一个电阻接在一起,这是绝对毛病的。电源和地线务必物理隔离,各自独立,就像两条高速公路,绝对不能混在一起,否则后果不堪设想。
要是电源和地线混在一起,单片机就会出于电压不稳而抽搐,就连直接烧毁,就像给发动机加了汽油和柴油,结局就是车子爆炸。 最终,数据的选择性读写是调试的核心。单片机每次只能读一个字节,要么说读一个“地址”内的数据。
要是你想要读一个字节,你不能把地址当成一个整体,务必把它拆成一个个字节,一个一个地读,一个一个地写。
这就好比你去图书馆借书,你得一本一本地去拿,不能一股脑地连起来。
要是数据单元不是由地址组成的,程序就无法运行。
故此,在写代码时,要是发现程序跑不动,先别急着改代码,想想是不是数据单元的难题,是不是地址没拆成字节,是不是写错了字节。 总而言之,单片机原理不是把说明书背下来,而是去理解这个“肚子”是如何被喂饱的,如何消化代码的,如何通过配置让它动起来。遇到不会了,就去查数据手册,去看寄存器表,看代码 placement,别光盯着代码看,更要看它是如何被“喂”进去的。
这才是真正读懂单片机的好方式。
相关标签:

猜你喜欢

热门阅读

  • 赖柴尔定理-赖柴尔定理
  • 迪拜哪个国家的城市?-迪拜在哪国城市
  • 李毅吧番号及出处-李毅吧番号及出处
  • 贴春联的由来简介50字-春联由来简述
  • 思乡的名言和出处-思乡名言及出处

其他分站