圣龙扬特-AVR电子

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 3953|回复: 12
打印 上一主题 下一主题

BASCOM-AVR初级入门教程—第一讲 认识BASCOM

[复制链接]

17

主题

2

好友

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

UID
1
帖子
54
精华
0
注册时间
2013-2-20
在线时间
72 小时
跳转到指定楼层
楼主
发表于 2013-3-17 11:36:02 |只看该作者 |倒序浏览
AVR单片机BASCOM语言
    —— 初级入门实例教程

  BASCOM-AVR
MCS Electronics公司开发的以BASIC高级程序设计语言为基础,集编辑(编写和修改源程序)、编译(把源程序翻译成可在单片机上运行的机器码目标程序)、仿真(脱离单片机硬件在PC机上模拟单片机运行程序)、程序下载(把目标程序下载到单片机中)于一体的的AVR单片机开发环境。BASCOM-AVR如同BASIC一样,具有程序设计简单易学、用简单的语句可实现复杂功能等特点。其开发环境简洁方便,具有可视化图形界面和实物图形化的仿真平台,可以直观地仿真程序的运行结果,为我们使用开发AVR单片机提供了简洁方便、功能强大的手段。
  BASCOM-AVR为结构化BASIC语言,与Visual Basic/Quick Basic高度兼容,简要清晰,易于理解掌握。提供了丰富的数据类型,大量面向通用I/O和专用外设的操作语句,结构化、模块化的程序设计语句,为了增强单片机系统的实时性,还支持硬件中断服务以及汇编语言混合编程。另外还扩充了许多通用的单片机外部设备的专用语句,字符LCD液晶显示器、I2C总线器件、单总线器件、PC键盘、矩阵键盘、SPI总线器件、图形LCD液晶显示器等,使我们调用各种硬件资源更加得心应手。
  本教程搜集、汇总、梳理、编辑了BASCOM-AVRAVR单片机的基本用法和笔者的一些经验,力求浅显易懂地引导单片机爱好者进入AVR的大门。玩AVR单片机是笔者的业余爱好,水平有限,错漏难免,见谅、见谅。


             编者  箫天/slyt
回复

使用道具 举报

17

主题

2

好友

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

UID
1
帖子
54
精华
0
注册时间
2013-2-20
在线时间
72 小时
沙发
发表于 2013-3-17 12:13:49 |只看该作者
第一讲 认识BASCOM-AVR

  1.1 BASCOM-AVR的主要特点
  BASCOM-AVR具有BASIC语言的数据类型和语法特点,提供支持多种AVR系列单片机硬件资源的语句,BASCOM-AVR平台下的BASIC语言主要有以下特点:
   *        结构及语句与VBQB高度兼容;
   *       结构化编程,支持SUB子程序和FUNCTION函数;
   *        支持结构语句IF-THEN-ELSE-END IFDO-LOOPWHILE-WENDSELECT- CASE
   *        变量和标号支持长达32字符;
   *        支持的变量类型有:BitByteIntegerWordLongSingleDouble and String
   *        支持Double类型(8字节浮点),得以处理巨大数字;
   *        提供特殊指令和语句支持:字符型LCDI2C总线器件、1wire单总线器件、PC键盘、矩阵键盘、SPI总线器件、图形LCD、红外遥控接收发送、模拟UART等;
   *        提供对TCP/IP硬件协议栈芯片W3100A的支持;
   *        支持局部变量、用户自定义函数、库函数等;
   *        DEMO版本可编译4K代码;
   *        自带大量基本语句和应用例程;
   *        帮助文件非常详细,使用方便。

  1.2 数据类型和变量声明
  1.2.1数据类型
   *        Bit二进制逻辑位,仅取01两个值;
   *        Byte字节,1字节,取值范围0255
   *        Integer整型,2字节,最高位是符号位,取值范围-32768+32767
   *        Word字,2字节,取值范围065535
   *        Long长整型,4字节,取值范围-2147483648+2147483647
   *        Single单精度浮点数,取值范围±1.5E-453.4E38
   *        Double双精度浮点数,取值范围±5.0E-324 to 1.7E308
   *        String字符串,最长254个字符(1字符占1字节)。
  编写程序时,要根据变量性质和可能的最大值,定义为合适的数据类型,尽量采用短字节类型,例如byte类型,可以降低MCU计算量并节省FLASH
  1.2.2变量声明
  凡是用到的变量,都必须事先定义变量及其数据类型。
  DIMLOCALCONST用来声明变量。
  DIM声明全局变量。LOCAL声明局部变量,用在子程序或函数中,子程序戒函数执行完毕后即被释放。CONST用来声明常量。
  一般格式:
  DIM 变量名 AS 数据类型
  LOCAL 变量名 AS 数据类型
  CONST变量名 = XXX
  关于变量定义的复杂用法,例如定义到EEPROM或者指定地址,请参看BASCOMHELP,这里不再赘述。

  1.2.3 关于数组
  数组是一组变量的集合,具有相同的名字,以其后括号内的数字(称下标)来相互区别,例如:A(1)A(2).……
  数组的定义与普通变量定义基本相同,例如:
  DIM  A(8)  AS  Byte
  数组A()的类型为byte,序号为18。注意,BASCOM-AVR的数组下标下界最小为1,这与VB/QB有所不同。

  1.3 算术运算和逻辑运算
  加减乘除不与或,大小等于不等于。这是基础中的基础,没必要再细讲了。
  注意的一点是,BASCOM-AVR只允许一个表达式当中只能有一个运算符。
  例如:
  A = B * C                 合法
  A = B * C – D           不合法

  1.4 字符串运算
  BASCOM具有强大的字符串处理能力,提供了大量的处理函数。字符串在用作单片机输入输出,例如LCD显示、与PC机串口通讯时,非常快捷方便。现只讲一下基本应用。
  DIM S1 As String*4, S1 As String*4, S As String*10  定义字符串变量和长度
  S1=”ABCD” : S2=”EF”
  S=S1+S2                    S返回的值为”ABCDEF”
  S=MID(S, 2, 3)            S返回的值为”BCD”
  S=LEFT(S1, 2, 3)         S返回的值为”ABC”
  MID(S, 2, 1)=”F”          S返回的值为”AFC”
  涉及字符串处理的函数还有很多,包括格式、空格、大小写处理,类型转换、进制形式、查找、替换等等。

  1.5 单片机端口操作
  AVR单片机具有可编程通用输入输出(I/O)端口,例如MEGA8共有3个端口,PORTBPORTCPORTD,每个端口一般有8个引脚,通常编号0~7。单片机编程的实质,就是控制和检测这些端口(引脚)的高低电平,来实现相应的功能。
  在I/O控制上,可以把一个端口当成一个字节,把一个引脚当成一个比特来想象。先认识一下3个想象的“变量”,PORTxPINxDDRx
    DDRx 端口方向寄存器。告诉单片机某个端口或者引脚是用作输入还是输出。比如要用某引脚控制LED亮灭,此引脚就要配置为输出。若要用这个引脚检测按键状态,就要配置为输入。
  DDRB=&FF/&H00                 PORTB全部配置为输出/输入
  DDRB=&B111000000            PORTB0~4引脚配置为输入,5~7引脚配置为输出
  DDRB.3=1                           PORTB引脚3PortB.3)配置为输出
      BASCOM还有专门的端口配置语句Config PORTx=Output/Input,功能与直接使用DDRx相同,请看帮助文件。
     PORTx 设置端口或引脚的高低电平。
     PORTB=&HFF/&H00            
设置PORTB全部为高电平/低电平
     PORTB.3=1                        
设置PORTB引脚3PortB.3)为高电平
  当端口配置为输出状态时,此时作为驱动引脚控制外围电路;当端口配置为输入状态时,此时用作内部上拉或下拉引脚。
     DDRC.2=0 : PORTC.2=1      
配置PORTC.2为输入,上拉电阻有效。
     PINx 读端口的高低电平状态。
     DIM X AS Byte, Y AS BIT
     X=PIND            
读取端口D所有引脚状态值赋给变量X
     Y=PIND.3         
读取引脚PIND.3状态赋给变量Y
     BASCOM
中,PINx可直接进行算术和逻辑运算,把它当成一个变量即可。

  有必要讲一下ALIAS语句,ALIAS用来指定端口别名,采用易懂易记的别名来替代端口名。ALIAS对于提高程序的可读性、可维护性、可移植性,作用特别明显。比如项目设计有3个引脚分别控制3LED,当需要用更换另外3个引脚控制时,只需要修改ALIAS语句部分,主程序不需要修改。
  语法: 新变量ALIAS 旧变量
  LED1 ALIAS PORTB.2
  LED2 ALIAS PORTB.3
  主程序中操作LED1LED2即可,与直接操作PORTB.2PORTB.3是等价的。

  1.6 BASCOM-AVR软件简要介绍
  启动BASCOM-AVR后,是下图主界面:
      

  编辑 程序编辑窗口内的源程序,BASCOM的保留字自动显示深蓝加粗,运算符显示红色,汇编保留字显示深红色。编辑一行后,自动调整格式,编程一目了然,便于排错修改。
  编译 点编译按钮,软件调用编译器将源程序编译成单片机可运行的机器码,一般编译成2种格式可供下载到单片机。一种是HEX文件,INTEL标准格式,用ASCII字符表示的16进制数字按一定格式排列。HEX文件的大小并不是实际代码的大小,初学者容易混淆。另一种是BIN二进制文件,这个文件的大小即为实际代码大小。一般编程器或下载器都支持HEX和BIN这两种格式。
编译输出文件类型设置,菜单<Options>→<Compiler>→<Output>

  仿真 点仿真按钮进入仿真界面。仿真时需要编译时生成OBJ目标文件。在编译输出文件选项中要钩选<AVR Studio Object file>。
  程序仿真界面中包含常用设备,字符型LCD、16X16矩降键盘、ADC输入、UART、中断、模拟比较器输入,查看寄存器、IO状态、变量等等,可以满足一般需要。
  练习一 编辑、编译、仿真
  我们用一个史止最简单程序,走一遍编辑、编译、仿真的步骤。
        $regfile = "m8def.dat"     ‘mega8单片机配置文件
        $crystal = 8000000         声明系统工作主频
        $sim                                  仿真专用,忽略wait语句,加快仿真速度。
                                                 '
实际应用时删除本句。
        Dim X As Byte
        Dim Y As Byte

        X
= 123
        Y
= 213
        Z
= X + Y

        Cls                          清字符型LCD
        Lcd Z                      在字符再教育LCD屏上显示变量Z

        End
  在BASCOM环境中新建文件,将上面程序复制到程序编辑窗口中,保存为m8.bas,点<编译>按钮(或者按F7)。
  什么结果?出错了吧。双击错误提示,编辑窗口里错误行显示红色。


  想想为什么出错?
  变量Z没有定义,需要提前定义变量Z。再想想,Z需要定义为什么类型?X+Y>255,超出字节型取值范围,我们把Z定义为Word吧。
  Dim Z As Word
  在源程序变量定义部分补上一行:Dim Z
As Word
  再点<编译>按钮(或者按F7),没有错误提示,编译通过。
  点<仿真>按钮(或者按F2
),出现以下仿真主窗口


  LCD图标的硬件仿真按钮,出现以下窗口:


  点仿真主窗口的<运行>按钮,看看有什么结果?


  仿真窗口的LCD上显示336,正是变量Z的值。
  后面的电路练习例程中,我们将结合Proteus进行仿真。
  Proteus仿真教程:http://www.avrbase.com/forum.php?mod=viewthread&tid=116  



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

回复

使用道具 举报

2

主题

0

好友

3175

积分

超级版主

Rank: 8Rank: 8

UID
6
帖子
32
精华
0
注册时间
2013-2-26
在线时间
18 小时
板凳
发表于 2013-3-17 12:41:12 |只看该作者
回复

使用道具 举报

5

主题

0

好友

393

积分

中级会员

Rank: 3Rank: 3

UID
250
帖子
17
精华
0
注册时间
2013-3-7
在线时间
30 小时
地板
发表于 2013-3-17 12:46:54 |只看该作者
顶一个!!
回复

使用道具 举报

6

主题

0

好友

508

积分

高级会员

Rank: 4

UID
61
帖子
33
精华
1
注册时间
2013-3-1
在线时间
33 小时
5#
发表于 2013-3-17 13:42:54 |只看该作者

再顶
回复

使用道具 举报

7

主题

0

好友

3176

积分

超级版主

Rank: 8Rank: 8

UID
48
帖子
30
精华
2
注册时间
2013-2-28
在线时间
27 小时
6#
发表于 2013-3-17 16:38:13 |只看该作者
l老大 必须顶啊
回复

使用道具 举报

0

主题

0

好友

519

积分

高级会员

Rank: 4

UID
37
帖子
3
精华
0
注册时间
2013-2-27
在线时间
1 小时
7#
发表于 2013-3-17 17:27:37 |只看该作者
强烈支持,BASIC简单易懂。
回复

使用道具 举报

11

主题

0

好友

3245

积分

版主

Rank: 7Rank: 7Rank: 7

UID
45
帖子
31
精华
0
注册时间
2013-2-27
在线时间
29 小时
8#
发表于 2013-3-17 21:06:42 |只看该作者
强烈支持,bascom容易上手,是初学者不错的选择,可是就是教材少,例程少。
回复

使用道具 举报

2

主题

0

好友

419

积分

中级会员

Rank: 3Rank: 3

UID
105
帖子
55
精华
0
注册时间
2013-3-2
在线时间
15 小时
9#
发表于 2013-3-19 12:58:21 |只看该作者
一定要顶。
回复

使用道具 举报

2

主题

0

好友

419

积分

中级会员

Rank: 3Rank: 3

UID
105
帖子
55
精华
0
注册时间
2013-3-2
在线时间
15 小时
10#
发表于 2013-3-19 12:58:31 |只看该作者
一定要顶。
回复

使用道具 举报

26

主题

1

好友

3446

积分

超级版主

Rank: 8Rank: 8

UID
7
帖子
140
精华
0
注册时间
2013-2-26
在线时间
20 小时

突出贡献

11#
发表于 2013-3-19 16:53:50 |只看该作者
这个要顶~~~~~~
回复

使用道具 举报

1

主题

0

好友

86

积分

初级会员

Rank: 2

UID
304
帖子
22
精华
0
注册时间
2013-3-18
在线时间
8 小时
12#
发表于 2013-4-4 16:48:50 |只看该作者
老大,顶
回复

使用道具 举报

0

主题

0

好友

65

积分

初级会员

Rank: 2

UID
452
帖子
17
精华
0
注册时间
2013-7-9
在线时间
9 小时
13#
发表于 2013-11-26 19:24:05 |只看该作者
我也好想学这个啊,可是找了好久都找不到这软件。。。老大能不能分享个2.0.7.3的下载地址啊
回复

使用道具 举报

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

Archiver|手机版|圣龙扬特-AVR电子 ( 鲁ICP备05022832号 )

GMT+8, 2024-4-24 03:34 , Processed in 0.292788 second(s), 31 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部