搜索
bottom↓
回复: 14

出汗呀,看看这几行程序!大家运行一下看看结果是什么?我看不懂 [bascom]

[复制链接]

出0入0汤圆

发表于 2005-3-19 12:01:54 | 显示全部楼层 |阅读模式
'test sub and function

Declare Sub Test1(vword As Word , Blen As Byte , Llen As Long)

Declare Function Test2(byval Vword As Word , Byval Blen As Byte , Byval Llen As Long) As Byte

Declare Sub Test3(vdata As String)



Dim Val1 As Word

Dim Val2 As Byte

Dim Val3 As Long

Dim Val4 As Bit



Dim T1(20) As Byte

Dim T2 As String * 20

Dim T3(10) As Integer

Dim T4(10) As Long



Dim B As Byte

Dim I As Integer



$baud = 9600

$crystal = 8000000

$regfile = "m8def.dat"



Val1 = 10

Val2 = 100

Val3 = &H3F00

Val4 = 1



For B = 1 To 20

   T1(b) = B

Next



T2 = "asdjfalskdj"



For I = 1001 To 1010

   T3(i -1000) = I

Next



Print "in main:"

For I = 1 To Val1

   Print I ; "->" ; T3(i)

Next I



Print

Print "in Test1:"



Test1 Val1 , Val2 , Val3

Print

Print "in Test2:"

Val2 = Test2(val1 , Val2 , Val3)



Print Val2

Print

Print "in Test3:"



Test3 T2



End



Sub Test1(vword As Word , Blen As Byte , Llen As Long)

   Local Ts As Byte



   Print Vword ; " " ; Blen ; " " ; Hex(llen)



   For Ts = 1 To Vword

      Print Ts ; "->" ; T3(ts)

   Next Ts

   Print



End Sub





Function Test2(byval Vword As Word , Byval Blen As Byte , Byval Llen As Long) As Byte

   Print Vword ; " " ; Blen ; " " ; Hex(llen)

   Test2 = 200

End Function



Sub Test3(vdata As String)

   Print Vdata

End Sub



===============================

大家运行一下看看结果是什么?我这运行结果可象天书一样看不懂



bascom-avr 1.11.7.4

出0入0汤圆

发表于 2005-3-24 12:19:58 | 显示全部楼层
用单步检查!

出0入0汤圆

发表于 2005-3-24 19:22:31 | 显示全部楼层
其实这种程序有什么实用价值呢?

出0入0汤圆

发表于 2005-3-25 14:50:53 | 显示全部楼层
'test sub and function

Declare Sub Test1(vword As Word , Blen As Byte , Llen As Long)       '定义一个子过程

Declare Function Test2(byval Vword As Word , Byval Blen As Byte , Byval Llen As Long) As Byte       '定义一个子函数

Declare Sub Test3(vdata As String)                          '



Dim Val1 As Word

Dim Val2 As Byte

Dim Val3 As Long

Dim Val4 As Bit



Dim T1(20) As Byte

Dim T2 As String * 20

Dim T3(10) As Integer

Dim T4(10) As Long



Dim B As Byte

Dim I As Integer



$baud = 9600

$crystal = 8000000

$regfile = "m8def.dat"



Val1 = 10

Val2 = 100

Val3 = &H3F00

Val4 = 1



For B = 1 To 20

   T1(b) = B                                                '给数组T1赋值

Next



T2 = "asdjfalskdj"                                          '给字符串赋值



For I = 1001 To 1010

   T3(i -1000) = I                                          '给数组T3赋值

Next



Print "in main:"                                            '串口输出"in main"

For I = 1 To Val1

   Print I ; "->" ; T3(i)                                   '输出I(1到val=10)-> T3(数组中的值)

Next I



Print

Print "in Test1:"



Test1 Val1 , Val2 , Val3                                    '调用过程test1 其中Val1 , Val2 , Val3为参数

Print

Print "in Test2:"

Val2 = Test2(val1 , Val2 , Val3)                            '调用函数test2,其返回值赋值给Val2



Print Val2

Print

Print "in Test3:"



Test3 T2                                                    '调用过程test3,其中T2为参数



End



Sub Test1(vword As Word , Blen As Byte , Llen As Long)

   Local Ts As Byte



   Print Vword ; " " ; Blen ; " " ; Hex(llen)



   For Ts = 1 To Vword

      Print Ts ; "->" ; T3(ts)

   Next Ts

   Print



End Sub





Function Test2(byval Vword As Word , Byval Blen As Byte , Byval Llen As Long) As Byte

   Print Vword ; " " ; Blen ; " " ; Hex(llen)

   Test2 = 200

End Function



Sub Test3(vdata As String)

   Print Vdata

End Sub

程序内容很简单,仔细看看,就明白了

出0入0汤圆

 楼主| 发表于 2005-3-30 16:54:06 | 显示全部楼层
哈哈!看来大家还是没明白我的意思,这是一个测试过程调用的小程序,当然,程序很简单,使用过basic的谁都能看明白,我在使用bascom确省设置时测试这些过程,发现结果根本就不是程序运行预期的结果,因为刚用bascom做项目,还不太熟悉,项目又比较紧张,所以没有好好地研读文档,写了好长一段程序后,发现过程调用有问题,找了两天也没有找到问题,还以为是bascom本身的问题,吓出一身汗来,后来仔细看过文档,发现是软堆栈和帧的大小没有设置对,设置好这两个参数后过程调用就OK了,新手要注意:缺省值太小,根本就无法为过程调用及局部变量提供足够空间,要仔细计算你过程使用的临时空间,按文档的算法重新设置这两个值。
-----此内容被favr于2005-03-30,16:55:55编辑过

出0入0汤圆

发表于 2005-3-30 17:41:13 | 显示全部楼层
出汗就開風扉啊!!

為什麼樓主用bascom , 雖然簡單易學, 但用的人好像不多, 有問題也不好找人回答!

出0入0汤圆

 楼主| 发表于 2005-3-31 16:52:49 | 显示全部楼层
给你讲段故事吧。



很多年以前,我开始学写程序的时候,使用QBasic(DOS5),以后好长一段时间没有真正写过什么程序,就当学着玩吧,后来要写程序了,那时大多写程序的人都使用FoxPro之类的,要不就用C,很少人使用VB,我使用VB5,很多人还理论一番:Basic是一种如何如何没落的语言,只有初学者才使用,真正写不出东西来的……。

说真的,在和VB5同年代的快速开发系统几乎她是最好的,不用说,后来是VB6。本世纪开始,大家开始使用VB6,没有人再说VB是玩具了,可惜当年的VF“高手”大多也使用起玩具来,VF走到了尽头,VB还在发展,甚至做一些不大不小的系统还在使用VB6。



BASIC没什么不好的,不少国人有个特点,简单的不用,因为身份太低,而复杂的虽然用不了,但是可以显显身份——感觉也很好。其实选择一种语言,也不太复杂,首先看看她实用不实用:学习难度,功能,扩展性,支持等。经过一些简单比较后,我认为Bascom是适合作为AVR应用系统的开发的——当然如果应用要很紧凑就不合适了,她能为你省很多事,不必是一个对单片机有很深理解的程序员就可以开始工作,例如使用软串口,时钟等都有现成的,不必自己花时间来处理。

当然,我的应用不太复杂,复杂的处理都通过网络上传到PC处理,单片机部分更象一个智能终端,这也应该是应用系统的一个发展方向,特别是工业现场应用系统。



是的,对于Basic,现在要找一个能讨论的环境不大容易,这是缺点,不过只要系统本身没什么大毛病,对于用户来说也不是什么问题,不管使用什么语言,总是要多做实验的。



我相信,用不了多长时间,单片机上的Basic就会有较大的发展。

出0入0汤圆

发表于 2005-3-31 17:27:35 | 显示全部楼层
沒想到樓主原來有這樣的歷史背景, 我沒有說basic不好, 我以前入門都是學qbasic的, 只不過由於周圍環境改變, 我漸漸離開basic語言了, 我想在avr中使用bascom的人不是很多吧(在國內,國外就不知了), 所以才這樣問你!

我很渴望一個百花齊放,百家爭鳴的社會, 但現在用bascom的人真的不多, 可能什麼問題都得靠自己解決了! 但我還是支持你的! 用自己的bascom, 由別人去說!

出0入0汤圆

发表于 2005-9-30 14:54:22 | 显示全部楼层
楼主的程序没有什么问题呀?

出0入0汤圆

发表于 2005-9-30 15:24:50 | 显示全部楼层
不同意楼主说:"BASIC没什么不好的,不少国人有个特点,简单的不用,因为身份太低,而复杂的虽然用不了,但是可以显显身份——感觉也很好。"



其实bascom一点也不简单,而是很烦很难的语言.还不如C简单. 你只是调用了它的库(把函数做好了),所以觉得省事. 但你要用C并调了C的库(例如GCC的avrlib) 做起项目来一样简单快捷. 而C可以让你简单建好自己的库,灵活多变. 而bascom呢? 要是你要学习如何建bascom的库,你才知道什么叫烦叫难. 我们并不是因为觉得bascom简单,不是因为觉得身份太低,而不用它,而是很多时他根本做不了事. 建议楼主学学C语言 , 了解也好. C 的库绝对比basic的库来得丰富.

出0入0汤圆

发表于 2005-9-30 17:42:09 | 显示全部楼层
个人建C库的很多,因为C是一个可移植的开放语言



个人建BASIC库的很少,甚至不可能。因为是高度方言化的编程语言,要么你就自己建立完整的一套封闭库,要想在和别人兼容的基础上建立库,可能性为零。



有人提到了Quick BASIC,当年和它一样出名的还有Turbo BASIC。这两种BASIC写出的程序根本不能互相移植。说BASIC简单的人不知道看没看过这两种BASCI的库手册(反正我是全看了,也全用了),这两个库要求的运行环境、库函数和过程调用的名字和语法都不一样,甚至数据类型也不一样。想移植或者建库?去微软或者宝兰公司的BASIC语言开发小组才有可能

出0入0汤圆

发表于 2006-3-18 03:01:04 | 显示全部楼层
呵呵,在讨论哪种语言的好坏呀。每种有每种的特点,不能以好坏分,我是深有体会。

我感觉编程序关键在于算法和结构,对语言的熟练和灵活运用程度。我搞过一个飞机发动机试车检测分析仪,是用QuickBasic写的(呵呵,硬件不是用AVR,是用的PC104),程序用的一些函数还是用汇编写的。一个油库检测设备程序是用VB6和TC2写的。另外的一个轴承凸度检测仪是纯用QuickBasic写的,DOS下完全仿WIN98界面。我个人还是喜欢用BASIC,可能是太笨吧。撞咱飞机的EP3,据说里面的计算机主机是386,不敢想象,处理那么多数据,386就可以完成。我感觉大家不要太在意用什么语言,要多考虑算法和结构优化,编出的程序满足设计要求即可,比如说西文DOS下显示汉字,可以画点显示,可以画线显示,还可以向显示缓冲区直接写屏,当然是画点最慢,我选用的是画线,编程及调用字库简单,速度完全满足要求。我的老师用QB写计算楼房振动频率及应力的程序,运行了一个晚上还没出结果(当时用的是486/66),后来换了FORTRAN,速度提高了好几倍。



最近突然喜欢上了单片机,对这方面来说我是文盲,从没搞过,对比了51和AVR,感觉AVR使用更灵活,功能更强些。希望大家以后多指教。

在网上搜了一晚上,也没找到BASCOM-AVR1.11.7.4FULL-CD版本(或没有4K限制的破解版)。如果谁有,能不能发一份给我(goto1480@163.com),我先在这里谢谢了。

出0入0汤圆

发表于 2006-3-18 04:46:02 | 显示全部楼层
呵呵11楼的要找11174版本啊?现在都11182了,你到www.basicavr.com上面去吧,那里才是basic的天堂,也请光顾www.avrdiy.com,那里有问必答。

出0入0汤圆

发表于 2006-3-18 14:52:40 | 显示全部楼层
谢谢 JAMESKING,我去看看。

出0入0汤圆

发表于 2010-3-2 16:04:50 | 显示全部楼层
挖古墓了
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-8 03:50

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

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