搜索
bottom↓
回复: 14

发起单片机上编程总动员

[复制链接]

出0入0汤圆

发表于 2009-5-7 14:29:55 | 显示全部楼层 |阅读模式
发起单片机上编程总动员
自发表《脱离电脑,直接在单片机上编程》后,大家发表了不同的看法。不管你是支持,还是反对,你们都是对的。我不是在拍大家的马屁,

因为今天我就把sib51解释器的原理发给大家。
     如果你看完后,有什么好的想法与建议,请与大家分享,共同进步!
     

      注意:再看原理之前,请先深吸一口气,我原理简单的会让你晕过去!但简单的东西不一定没用,简单之中孕育着伟大。爱因斯坦的质

能方程是简单的E=MCC,但它却造出了原子弹和核电站。当然咱的解释器没那么伟大。
   
      sib51原理详解:
         它的基本运作过程就像一个真整的cpu,取指令---指令分析---发生相应的动作---移动pc指针---指向下一个指令,就这样一直循环

直到结束。
   

   rom区:|0|1|2|3|4|-------------------|99| 假如只有100字节
           |
           |     
           pc指针(取玩一条指令自动加一)


   ram区:|0|1|2|3|4|------|9|               假如只有10个字节
   
   rom区是在51中定义的一个数组就叫:rom[]。我们的代码就存在里面,由于51 单片机的data区只有128字节,除去解释器本身占去10多个字

节,只剩下100多个字节,这一百字节要合理分配给rom和ram。

   下面讲一个例子:
       mov r0,1
       首先将指令的数字代码输入rom[]中(比如0代表mov,下一个0代表内存r0,1代表立即数),这并不难。
       当pc指向rom[0]时,就调用一个函数

               get_token();              
               uchar token;
               uchar get_token(){
                         token=*pc;
                         pc++;
                         return token;}



                       mov(){
                          uchar x;
                           x=get_token();
                           ram[x]=get_token();}

       大家能看懂吗?其实很简单,get_token()是取指令的,并将指令存入全局变量token中,再调整pc指针指向下一个单元。现在mov()

函数很好理解了吧,先调用token();取出mov指令,经分析知道是mov,所以调用mov()函数,再调用get_token();得到内存地址,再次调

用get_token();得到立即数,再赋给相应的内存单元。
     
       原理讲完了,晕倒了吧!请大家尽情发挥,设计出自己的单片机解释器,
                      祝大家好运!
                                                 email:kekemuyu@126.com

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2009-5-7 20:38:19 | 显示全部楼层
这叫虚拟机...
不是LZ你发明的,更不是今天才出现的
虚拟机技术及实际应用已经很多年了...

出0入0汤圆

发表于 2009-5-8 01:16:40 | 显示全部楼层
不管它是什么,我先收藏了


谢谢

出0入0汤圆

发表于 2009-5-8 09:32:35 | 显示全部楼层
补充一楼:用"汇编"指令的叫虚拟机,用"高级"(比如BASIC)语言的叫解释器.

出0入0汤圆

 楼主| 发表于 2009-5-8 10:10:13 | 显示全部楼层
其实在51上实现basic解释器并不难,道理和sib51解释器一样,比如要实现if---then语句,只要把if用一个数字表示,假如是21,当指针指向21时,就调用if()函数

出0入0汤圆

发表于 2009-5-8 10:41:35 | 显示全部楼层
文曲星早期机型用的6502 单片机,有GVBASIC,LAVA
前者是BASIC解释器,后者是C语言虚拟机
GVBASIC本机编写的程序就是类似你说的,IF是一个数THEN是一个数这种,写完一行后自动转化。这叫字节码解释器
yan用LAVA做了个LAVA编译器,可以在文曲星本地编译LAVA程序
LAVA用的是虚拟汇编指令集


51做的话只要RAM和ROM足够也当然没有什么问题,不过没有必要罢了...
首先你没键盘输入,你那种输入方式很累的
至少有个lcd和全建盘才有意义


你这不如做个手机上的编译器,然后直接用手机下载来的有意义...

出0入0汤圆

发表于 2009-5-8 11:13:14 | 显示全部楼层
关注~~~ 其实模拟器(虚拟机)是很有意思的东东,可以考虑在PC上面虚拟一个单片机出来玩玩的啊

出0入0汤圆

 楼主| 发表于 2009-5-8 11:53:42 | 显示全部楼层
在手机就能建立虚拟机,还是JAVA的,在百度搜RBASIC

出0入0汤圆

发表于 2009-5-8 12:59:13 | 显示全部楼层
RBASIC我用过,看了源码是解释器,并非虚拟机,效率低下...
当然,主要是因为java是虚拟机,虚拟机下做解释器,可想而知

我说的手机主要指指WindowsMobile等智能机....
=================================
另外,我有朋友在MTK手机平台上做了个iava虚拟机
目前支持C语言写程序...联想有个i50用了iava...

出0入0汤圆

发表于 2009-5-8 14:13:31 | 显示全部楼层
我个人认为做个解释型C出来可能意义更大.

出0入0汤圆

发表于 2009-5-10 21:24:37 | 显示全部楼层

(原文件名:截图1241961632.jpg)

看看我正在做的,是否更有意义。
目标:在PC上绘制流程图,表述各数据的逻辑,然后将该文件直接下载到硬件就可以按照定义的业务逻辑执行。
      所有业务逻辑以数据流的流向为基本思路,在整个模型中定义四个基本要素:IO,Filter,Loigc,Trans。
      所有硬件系统中的输入输出都属于IO。
      Filter的功能将一个数据按照定义的规则进行分流,支持表达式,如D[0]=0X55,说明第一个字节为0X55的数据包……
      Trans指数据的转换,包括查表,重定义长度等
      Logic是指特定的逻辑功能模块。

     上图是一个医院的婴儿防盗系统的数据流程图,该设备的主要作用是对UDP读卡器接收的数据信息处理,对不同类型的数据进行不同的处理最后输出。

     目前进展:整个系统架构已经基本实现,现已经实现在嵌入式linux系统下的软件设计,纯C代码编写,支持数据库。
     后期:在PC机实现不同硬件系统的模拟,并开发在ucosII,无操作系统平台的软件。

    ^_^,等完成了再详细介绍……

出0入0汤圆

发表于 2009-5-26 21:15:38 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-4-13 14:11:14 | 显示全部楼层
mark1

出0入0汤圆

发表于 2010-4-13 15:22:46 | 显示全部楼层
我记得我初中用的第一个单片机就是这样的 只有6条指令给用户编程 但是做简单的管口控制跟延时足够了 复杂的都不行~
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-6-14 01:38

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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