RB-101机器人主板蜂鸣器测试

这是从MCS51转到AVR后的第二个单片机程序,该程序是控制RB-101 机器人主板上的蜂鸣器连续发声。

 1  // RB-101 机器人蜂鸣器测试程序
 2  // 2005年6月25日  彭斌
 3 
 4  #include  < mega8515.h >   // 头文件
 5  #include  < delay.h >      // 延时头程序调用,该文件已经存在于CodeVisionAVR里 ,安装后就有。
 6  #include  < stdio.h >      // 一些常用函数的头文件调用
 7 
 8  // 自定义蜂鸣器蜂鸣函数 (自定义函数必须放在入口函数前面,否则编译时会出错,这个可能是该软件识别造成的,不是一种程序设计规范)
 9  void  buzzer( void )                 
10  {                  
11       // 定义一个变量
12      unsigned  char  i = 0xff ;  
13       // 循环
14       for (;i -- ;) 
15      { 
16           // 蜂鸣器占用PORTB.3引脚
17          PORTB. 3 =! PORTB. 3 ;    // 取反
18          delay_us( 500 );      // 延时500微秒,调节该延时值将改变蜂鸣器的音调高低
19      }
20 
21 
22  // 主函数入口
23  void  main( void )
24  {            
25       // DDRxn 定义引脚方向,“1” 为输出,“0”为输入。  
26         
27      DDRB. 3   =   1 ;     // 蜂鸣器引脚方向设置      
28      
29       // 执行一个死循环,使数码管连续的全亮
30       while ( 1 )
31      {         
32          buzzer();    // 调用自定义蜂鸣函数
33          delay_ms( 1000 );   // 延时1000毫秒,也就是1S   ,调节该延时长短可以使蜂鸣节奏变化
34          buzzer();    // 调用自定义蜂鸣函数
35          delay_ms( 1000 );   // 延时1000毫秒,也就是1S     
36      }
37 
38  }     
39 
40           


编译软件使用:CodeVisionAVR C Compiler
编译后产生如下汇编代码:

None.gif ;Chip type           : ATmega8515L
None.gif;Program type        : Application
None.gif;Clock frequency     : 4.096000 MHz
None.gif;Memory model        : Small
None.gif;Optimize for        : Size
None.gif;(s)printf features  : int
None.gif;(s)scanf features   : int, width
None.gif;External SRAM size  : 0
None.gif;Data Stack size     : 128
None.gif;Promote char to int : No
None.gif;char is unsigned    : Yes
None.gif;8 bit enums         : No
None.gif;Enhanced core instructions    : On
None.gif;Automatic register allocation : On
None.gif
None.gif    .LISTMAC
None.gif    .EQU UDRE=0x5
None.gif    .EQU RXC=0x7
None.gif    .EQU USR=0xB
None.gif    .EQU UDR=0xC
None.gif    .EQU EERE=0x0
None.gif    .EQU EEWE=0x1
None.gif    .EQU EEMWE=0x2
None.gif    .EQU SPSR=0xE
None.gif    .EQU SPDR=0xF
None.gif    .EQU EECR=0x1C
None.gif    .EQU EEDR=0x1D
None.gif    .EQU EEARL=0x1E
None.gif    .EQU EEARH=0x1F
None.gif    .EQU WDTCR=0x21
None.gif    .EQU MCUCSR=0x34
None.gif    .EQU MCUCR=0x35
None.gif    .EQU EMCUCR=0x36
None.gif    .EQU GICR=0x3B
None.gif    .EQU SPL=0x3D
None.gif    .EQU SPH=0x3E
None.gif    .EQU SREG=0x3F
None.gif
None.gif    .DEF R0X0=R0
None.gif    .DEF R0X1=R1
None.gif    .DEF R0X2=R2
None.gif    .DEF R0X3=R3
None.gif    .DEF R0X4=R4
None.gif    .DEF R0X5=R5
None.gif    .DEF R0X6=R6
None.gif    .DEF R0X7=R7
None.gif    .DEF R0X8=R8
None.gif    .DEF R0X9=R9
None.gif    .DEF R0XA=R10
None.gif    .DEF R0XB=R11
None.gif    .DEF R0XC=R12
None.gif    .DEF R0XD=R13
None.gif    .DEF R0XE=R14
None.gif    .DEF R0XF=R15
None.gif    .DEF R0X10=R16
None.gif    .DEF R0X11=R17
None.gif    .DEF R0X12=R18
None.gif    .DEF R0X13=R19
None.gif    .DEF R0X14=R20
None.gif    .DEF R0X15=R21
None.gif    .DEF R0X16=R22
None.gif    .DEF R0X17=R23
None.gif    .DEF R0X18=R24
None.gif    .DEF R0X19=R25
None.gif    .DEF R0X1A=R26
None.gif    .DEF R0X1B=R27
None.gif    .DEF R0X1C=R28
None.gif    .DEF R0X1D=R29
None.gif    .DEF R0X1E=R30
None.gif    .DEF R0X1F=R31
None.gif
None.gif    .EQU __se_bit=0x20
None.gif
None.gif    .MACRO __CPD1N
None.gif    CPI  R30,LOW(@0)
None.gif    LDI  R26,HIGH(@0)
None.gif    CPC  R31,R26
None.gif    LDI  R26,BYTE3(@0)
None.gif    CPC  R22,R26
None.gif    LDI  R26,BYTE4(@0)
None.gif    CPC  R23,R26
None.gif    .ENDM
None.gif
None.gif    .MACRO __CPD2N
None.gif    CPI  R26,LOW(@0)
None.gif    LDI  R30,HIGH(@0)
None.gif    CPC  R27,R30
None.gif    LDI  R30,BYTE3(@0)
None.gif    CPC  R24,R30
None.gif    LDI  R30,BYTE4(@0)
None.gif    CPC  R25,R30
None.gif    .ENDM
None.gif
None.gif    .MACRO __CPWRR
None.gif    CP   R@0,R@2
None.gif    CPC  R@1,R@3
None.gif    .ENDM
None.gif
None.gif    .MACRO __CPWRN
None.gif    CPI  R@0,LOW(@2)
None.gif    LDI  R30,HIGH(@2)
None.gif    CPC  R@1,R30
None.gif    .ENDM
None.gif
None.gif    .MACRO __ADDD1N
None.gif    SUBI R30,LOW(-@0)
None.gif    SBCI R31,HIGH(-@0)
None.gif    SBCI R22,BYTE3(-@0)
None.gif    SBCI R23,BYTE4(-@0)
None.gif    .ENDM
None.gif
None.gif    .MACRO __ADDD2N
None.gif    SUBI R26,LOW(-@0)
None.gif    SBCI R27,HIGH(-@0)
None.gif    SBCI R24,BYTE3(-@0)
None.gif    SBCI R25,BYTE4(-@0)
None.gif    .ENDM
None.gif
None.gif    .MACRO __SUBD1N
None.gif    SUBI R30,LOW(@0)
None.gif    SBCI R31,HIGH(@0)
None.gif    SBCI R22,BYTE3(@0)
None.gif    SBCI R23,BYTE4(@0)
None.gif    .ENDM
None.gif
None.gif    .MACRO __SUBD2N
None.gif    SUBI R26,LOW(@0)
None.gif    SBCI R27,HIGH(@0)
None.gif    SBCI R24,BYTE3(@0)
None.gif    SBCI R25,BYTE4(@0)
None.gif    .ENDM
None.gif
None.gif    .MACRO __ANDD1N
None.gif    ANDI R30,LOW(@0)
None.gif    ANDI R31,HIGH(@0)
None.gif    ANDI R22,BYTE3(@0)
None.gif    ANDI R23,BYTE4(@0)
None.gif    .ENDM
None.gif
None.gif    .MACRO __ORD1N
None.gif    ORI  R30,LOW(@0)
None.gif    ORI  R31,HIGH(@0)
None.gif    ORI  R22,BYTE3(@0)
None.gif    ORI  R23,BYTE4(@0)
None.gif    .ENDM
None.gif
None.gif    .MACRO __DELAY_USB
None.gif    LDI  R24,LOW(@0)
None.gif__DELAY_USB_LOOP:
None.gif    DEC  R24
None.gif    BRNE __DELAY_USB_LOOP
None.gif    .ENDM
None.gif
None.gif    .MACRO __DELAY_USW
None.gif    LDI  R24,LOW(@0)
None.gif    LDI  R25,HIGH(@0)
None.gif__DELAY_USW_LOOP:
None.gif    SBIW R24,1
None.gif    BRNE __DELAY_USW_LOOP
None.gif    .ENDM
None.gif
None.gif    .MACRO __CLRD1S
None.gif    CLR  R30
None.gif    STD  Y+@0,R30
None.gif    STD  Y+@0+1,R30
None.gif    STD  Y+@0+2,R30
None.gif    STD  Y+@0+3,R30
None.gif    .ENDM
None.gif
None.gif    .MACRO __GETD1S
None.gif    LDD  R30,Y+@0
None.gif    LDD  R31,Y+@0+1
None.gif    LDD  R22,Y+@0+2
None.gif    LDD  R23,Y+@0+3
None.gif    .ENDM
None.gif
None.gif    .MACRO __PUTD1S
None.gif    STD  Y+@0,R30
None.gif    STD  Y+@0+1,R31
None.gif    STD  Y+@0+2,R22
None.gif    STD  Y+@0+3,R23
None.gif    .ENDM
None.gif
None.gif    .MACRO __POINTB1MN
None.gif    LDI  R30,LOW(@0+@1)
None.gif    .ENDM
None.gif
None.gif    .MACRO __POINTW1MN
None.gif    LDI  R30,LOW(@0+@1)
None.gif    LDI  R31,HIGH(@0+@1)
None.gif    .ENDM
None.gif
None.gif    .MACRO __POINTW1FN
None.gif    LDI  R30,LOW(2*@0+@1)
None.gif    LDI  R31,HIGH(2*@0+@1)
None.gif    .ENDM
None.gif
None.gif    .MACRO __POINTB2MN
None.gif    LDI  R26,LOW(@0+@1)
None.gif    .ENDM
None.gif
None.gif    .MACRO __POINTW2MN
None.gif    LDI  R26,LOW(@0+@1)
None.gif    LDI  R27,HIGH(@0+@1)
None.gif    .ENDM
None.gif
None.gif    .MACRO __GETD1N
None.gif    LDI  R30,LOW(@0)
None.gif    LDI  R31,HIGH(@0)
None.gif    LDI  R22,BYTE3(@0)
None.gif    LDI  R23,BYTE4(@0)
None.gif    .ENDM
None.gif
None.gif    .MACRO __GETD2N
None.gif    LDI  R26,LOW(@0)
None.gif    LDI  R27,HIGH(@0)
None.gif    LDI  R24,BYTE3(@0)
None.gif    LDI  R25,BYTE4(@0)
None.gif    .ENDM
None.gif
None.gif    .MACRO __GETD2S
None.gif    LDD  R26,Y+@0
None.gif    LDD  R27,Y+@0+1
None.gif    LDD  R24,Y+@0+2
None.gif    LDD  R25,Y+@0+3
None.gif    .ENDM
None.gif
None.gif    .MACRO __GETB1MN
None.gif    LDS  R30,@0+@1
None.gif    .ENDM
None.gif
None.gif    .MACRO __GETW1MN
None.gif    LDS  R30,@0+@1
None.gif    LDS  R31,@0+@1+1
None.gif    .ENDM
None.gif
None.gif    .MACRO __GETD1MN
None.gif    LDS  R30,@0+@1
None.gif    LDS  R31,@0+@1+1
None.gif    LDS  R22,@0+@1+2
None.gif    LDS  R23,@0+@1+3
None.gif    .ENDM
None.gif
None.gif    .MACRO __GETBRMN
None.gif    LDS  R@2,@0+@1
None.gif    .ENDM
None.gif
None.gif    .MACRO __GETWRMN
None.gif    LDS  R@2,@0+@1
None.gif    LDS  R@3,@0+@1+1
None.gif    .ENDM
None.gif
None.gif    .MACRO __GETB2MN
None.gif    LDS  R26,@0+@1
None.gif    .ENDM
None.gif
None.gif    .MACRO __GETW2MN
None.gif    LDS  R26,@0+@1
None.gif    LDS  R27,@0+@1+1
None.gif    .ENDM
None.gif
None.gif    .MACRO __GETD2MN
None.gif    LDS  R26,@0+@1
None.gif    LDS  R27,@0+@1+1
None.gif    LDS  R24,@0+@1+2
None.gif    LDS  R25,@0+@1+3
None.gif    .ENDM
None.gif
None.gif    .MACRO __PUTB1MN
None.gif    STS  @0+@1,R30
None.gif    .ENDM
None.gif
None.gif    .MACRO __PUTW1MN
None.gif    STS  @0+@1,R30
None.gif    STS  @0+@1+1,R31
None.gif    .ENDM
None.gif
None.gif    .MACRO __PUTD1MN
None.gif    STS  @0+@1,R30
None.gif    STS  @0+@1+1,R31
None.gif    STS  @0+@1+2,R22
None.gif    STS  @0+@1+3,R23
None.gif    .ENDM
None.gif
None.gif    .MACRO __PUTBMRN
None.gif    STS  @0+@1,R@2
None.gif    .ENDM
None.gif
None.gif    .MACRO __PUTWMRN
None.gif    STS  @0+@1,R@2
None.gif    STS  @0+@1+1,R@3
None.gif    .ENDM
None.gif
None.gif    .MACRO __GETW1R
None.gif    MOV  R30,R@0
None.gif    MOV  R31,R@1
None.gif    .ENDM
None.gif
None.gif    .MACRO __GETW2R
None.gif    MOV  R26,R@0
None.gif    MOV  R27,R@1
None.gif    .ENDM
None.gif
None.gif    .MACRO __GETWRN
None.gif    LDI  R@0,LOW(@2)
None.gif    LDI  R@1,HIGH(@2)
None.gif    .ENDM
None.gif
None.gif    .MACRO __PUTW1R
None.gif    MOV  R@0,R30
None.gif    MOV  R@1,R31
None.gif    .ENDM
None.gif
None.gif    .MACRO __PUTW2R
None.gif    MOV  R@0,R26
None.gif    MOV  R@1,R27
None.gif    .ENDM
None.gif
None.gif    .MACRO __ADDWRN
None.gif    SUBI R@0,LOW(-@2)
None.gif    SBCI R@1,HIGH(-@2)
None.gif    .ENDM
None.gif
None.gif    .MACRO __ADDWRR
None.gif    ADD  R@0,R@2
None.gif    ADC  R@1,R@3
None.gif    .ENDM
None.gif
None.gif    .MACRO __SUBWRN
None.gif    SUBI R@0,LOW(@2)
None.gif    SBCI R@1,HIGH(@2)
None.gif    .ENDM
None.gif
None.gif    .MACRO __SUBWRR
None.gif    SUB  R@0,R@2
None.gif    SBC  R@1,R@3
None.gif    .ENDM
None.gif
None.gif    .MACRO __ANDWRN
None.gif    ANDI R@0,LOW(@2)
None.gif    ANDI R@1,HIGH(@2)
None.gif    .ENDM
None.gif
None.gif    .MACRO __ANDWRR
None.gif    AND  R@0,R@2
None.gif    AND  R@1,R@3
None.gif    .ENDM
None.gif
None.gif    .MACRO __ORWRN
None.gif    ORI  R@0,LOW(@2)
None.gif    ORI  R@1,HIGH(@2)
None.gif    .ENDM
None.gif
None.gif    .MACRO __ORWRR
None.gif    OR   R@0,R@2
None.gif    OR   R@1,R@3
None.gif    .ENDM
None.gif
None.gif    .MACRO __EORWRR
None.gif    EOR  R@0,R@2
None.gif    EOR  R@1,R@3
None.gif    .ENDM
None.gif
None.gif    .MACRO __GETWRS
None.gif    LDD  R@0,Y+@2
None.gif    LDD  R@1,Y+@2+1
None.gif    .ENDM
None.gif
None.gif    .MACRO __PUTWSR
None.gif    STD  Y+@2,R@0
None.gif    STD  Y+@2+1,R@1
None.gif    .ENDM
None.gif
None.gif    .MACRO __MOVEWRR
None.gif    MOV  R@0,R@2
None.gif    MOV  R@1,R@3
None.gif    .ENDM
None.gif
None.gif    .MACRO __INWR
None.gif    IN   R@0,@2
None.gif    IN   R@1,@2+1
None.gif    .ENDM
None.gif
None.gif    .MACRO __OUTWR
None.gif    OUT  @2+1,R@1
None.gif    OUT  @2,R@0
None.gif    .ENDM
None.gif
None.gif    .MACRO __CALL1MN
None.gif    LDS  R30,@0+@1
None.gif    LDS  R31,@0+@1+1
None.gif    ICALL
None.gif    .ENDM
None.gif
None.gif    .MACRO __NBST
None.gif    BST  R@0,@1
None.gif    IN   R30,SREG
None.gif    LDI  R31,0x40
None.gif    EOR  R30,R31
None.gif    OUT  SREG,R30
None.gif    .ENDM
None.gif
None.gif
None.gif    .MACRO __PUTB1SN
None.gif    LDD  R26,Y+@0
None.gif    LDD  R27,Y+@0+1
None.gif    SUBI R26,LOW(-@1)
None.gif    SBCI R27,HIGH(-@1)
None.gif    ST   X,R30
None.gif    .ENDM
None.gif
None.gif    .MACRO __PUTW1SN
None.gif    LDD  R26,Y+@0
None.gif    LDD  R27,Y+@0+1
None.gif    SUBI R26,LOW(-@1)
None.gif    SBCI R27,HIGH(-@1)
None.gif    ST   X+,R30
None.gif    ST   X,R31
None.gif    .ENDM
None.gif
None.gif    .MACRO __PUTD1SN
None.gif    LDD  R26,Y+@0
None.gif    LDD  R27,Y+@0+1
None.gif    SUBI R26,LOW(-@1)
None.gif    SBCI R27,HIGH(-@1)
None.gif    RCALL __PUTDP1
None.gif    .ENDM
None.gif
None.gif    .MACRO __PUTB1SNS
None.gif    LDD  R26,Y+@0
None.gif    LDD  R27,Y+@0+1
None.gif    ADIW R26,@1
None.gif    ST   X,R30
None.gif    .ENDM
None.gif
None.gif    .MACRO __PUTW1SNS
None.gif    LDD  R26,Y+@0
None.gif    LDD  R27,Y+@0+1
None.gif    ADIW R26,@1
None.gif    ST   X+,R30
None.gif    ST   X,R31
None.gif    .ENDM
None.gif
None.gif    .MACRO __PUTD1SNS
None.gif    LDD  R26,Y+@0
None.gif    LDD  R27,Y+@0+1
None.gif    ADIW R26,@1
None.gif    RCALL __PUTDP1
None.gif    .ENDM
None.gif
None.gif    .MACRO __PUTB1PMN
None.gif    LDS  R26,@0
None.gif    LDS  R27,@0+1
None.gif    SUBI R26,LOW(-@1)
None.gif    SBCI R27,HIGH(-@1)
None.gif    ST   X,R30
None.gif    .ENDM
None.gif
None.gif    .MACRO __PUTW1PMN
None.gif    LDS  R26,@0
None.gif    LDS  R27,@0+1
None.gif    SUBI R26,LOW(-@1)
None.gif    SBCI R27,HIGH(-@1)
None.gif    ST   X+,R30
None.gif    ST   X,R31
None.gif    .ENDM
None.gif
None.gif    .MACRO __PUTD1PMN
None.gif    LDS  R26,@0
None.gif    LDS  R27,@0+1
None.gif    SUBI R26,LOW(-@1)
None.gif    SBCI R27,HIGH(-@1)
None.gif    RCALL __PUTDP1
None.gif    .ENDM
None.gif
None.gif    .MACRO __PUTB1PMNS
None.gif    LDS  R26,@0
None.gif    LDS  R27,@0+1
None.gif    ADIW R26,@1
None.gif    ST   X,R30
None.gif    .ENDM
None.gif
None.gif    .MACRO __PUTW1PMNS
None.gif    LDS  R26,@0
None.gif    LDS  R27,@0+1
None.gif    ADIW R26,@1
None.gif    ST   X+,R30
None.gif    ST   X,R31
None.gif    .ENDM
None.gif
None.gif    .MACRO __PUTD1PMNS
None.gif    LDS  R26,@0
None.gif    LDS  R27,@0+1
None.gif    ADIW R26,@1
None.gif    RCALL __PUTDP1
None.gif    .ENDM
None.gif
None.gif    .MACRO __GETB1SX
None.gif    MOVW R30,R28
None.gif    SUBI R30,LOW(-@0)
None.gif    SBCI R31,HIGH(-@0)
None.gif    LD   R30,Z
None.gif    .ENDM
None.gif
None.gif    .MACRO __GETW1SX
None.gif    MOVW R30,R28
None.gif    SUBI R30,LOW(-@0)
None.gif    SBCI R31,HIGH(-@0)
None.gif    LD   R0,Z+
None.gif    LD   R31,Z
None.gif    MOV  R30,R0
None.gif    .ENDM
None.gif
None.gif    .MACRO __GETD1SX
None.gif    MOVW R30,R28
None.gif    SUBI R30,LOW(-@0)
None.gif    SBCI R31,HIGH(-@0)
None.gif    LD   R0,Z+
None.gif    LD   R1,Z+
None.gif    LD   R22,Z+
None.gif    LD   R23,Z
None.gif    MOVW R30,R0
None.gif    .ENDM
None.gif
None.gif    .MACRO __GETB2SX
None.gif    MOVW R26,R28
None.gif    SUBI R26,LOW(-@0)
None.gif    SBCI R27,HIGH(-@0)
None.gif    LD   R26,X
None.gif    .ENDM
None.gif
None.gif    .MACRO __GETW2SX
None.gif    MOVW R26,R28
None.gif    SUBI R26,LOW(-@0)
None.gif    SBCI R27,HIGH(-@0)
None.gif    LD   R0,X+
None.gif    LD   R27,X
None.gif    MOV  R26,R0
None.gif    .ENDM
None.gif
None.gif    .MACRO __GETD2SX
None.gif    MOVW R26,R28
None.gif    SUBI R26,LOW(-@0)
None.gif    SBCI R27,HIGH(-@0)
None.gif    LD   R0,X+
None.gif    LD   R1,X+
None.gif    LD   R24,X+
None.gif    LD   R25,X
None.gif    MOVW R26,R0
None.gif    .ENDM
None.gif
None.gif    .MACRO __GETBRSX
None.gif    MOVW R30,R28
None.gif    SUBI R30,LOW(-@1)
None.gif    SBCI R31,HIGH(-@1)
None.gif    LD   R@0,Z
None.gif    .ENDM
None.gif
None.gif    .MACRO __GETWRSX
None.gif    MOVW R30,R28
None.gif    SUBI R30,LOW(-@2)
None.gif    SBCI R31,HIGH(-@2)
None.gif    LD   R@0,Z+
None.gif    LD   R@1,Z
None.gif    .ENDM
None.gif
None.gif    .MACRO __LSLW8SX
None.gif    MOVW R30,R28
None.gif    SUBI R30,LOW(-@0)
None.gif    SBCI R31,HIGH(-@0)
None.gif    LD   R31,Z
None.gif    CLR  R30
None.gif    .ENDM
None.gif
None.gif    .MACRO __PUTB1SX
None.gif    MOVW R26,R28
None.gif    SUBI R26,LOW(-@0)
None.gif    SBCI R27,HIGH(-@0)
None.gif    ST   X,R30
None.gif    .ENDM
None.gif
None.gif    .MACRO __PUTW1SX
None.gif    MOVW R26,R28
None.gif    SUBI R26,LOW(-@0)
None.gif    SBCI R27,HIGH(-@0)
None.gif    ST   X+,R30
None.gif    ST   X,R31
None.gif    .ENDM
None.gif
None.gif    .MACRO __PUTD1SX
None.gif    MOVW R26,R28
None.gif    SUBI R26,LOW(-@0)
None.gif    SBCI R27,HIGH(-@0)
None.gif    ST   X+,R30
None.gif    ST   X+,R31
None.gif    ST   X+,R22
None.gif    ST   X,R23
None.gif    .ENDM
None.gif
None.gif    .MACRO __CLRW1SX
None.gif    MOVW R30,R28
None.gif    SUBI R30,LOW(-@0)
None.gif    SBCI R31,HIGH(-@0)
None.gif    CLR  R0
None.gif    ST   Z+,R0
None.gif    ST   Z,R0
None.gif    .ENDM
None.gif
None.gif    .MACRO __CLRD1SX
None.gif    MOVW R30,R28
None.gif    SUBI R30,LOW(-@0)
None.gif    SBCI R31,HIGH(-@0)
None.gif    CLR  R0
None.gif    ST   Z+,R0
None.gif    ST   Z+,R0
None.gif    ST   Z+,R0
None.gif    ST   Z,R0
None.gif    .ENDM
None.gif
None.gif    .MACRO __PUTB2SX
None.gif    MOVW R30,R28
None.gif    SUBI R30,LOW(-@0)
None.gif    SBCI R31,HIGH(-@0)
None.gif    ST   Z,R26
None.gif    .ENDM
None.gif
None.gif    .MACRO __PUTW2SX
None.gif    MOVW R30,R28
None.gif    SUBI R30,LOW(-@0)
None.gif    SBCI R31,HIGH(-@0)
None.gif    ST   Z+,R26
None.gif    ST   Z,R27
None.gif    .ENDM
None.gif
None.gif    .MACRO __PUTBSRX
None.gif    MOVW R30,R28
None.gif    SUBI R30,LOW(-@0)
None.gif    SBCI R31,HIGH(-@0)
None.gif    ST   Z,R@1
None.gif    .ENDM
None.gif
None.gif    .MACRO __PUTWSRX
None.gif    MOVW R30,R28
None.gif    SUBI R30,LOW(-@2)
None.gif    SBCI R31,HIGH(-@2)
None.gif    ST   Z+,R@0
None.gif    ST   Z,R@1
None.gif    .ENDM
None.gif
None.gif    .MACRO __PUTB1SNX
None.gif    MOVW R26,R28
None.gif    SUBI R26,LOW(-@0)
None.gif    SBCI R27,HIGH(-@0)
None.gif    LD   R0,X+
None.gif    LD   R27,X
None.gif    MOV  R26,R0
None.gif    SUBI R26,LOW(-@1)
None.gif    SBCI R27,HIGH(-@1)
None.gif    ST   X,R30
None.gif    .ENDM
None.gif
None.gif    .MACRO __PUTW1SNX
None.gif    MOVW R26,R28
None.gif    SUBI R26,LOW(-@0)
None.gif    SBCI R27,HIGH(-@0)
None.gif    LD   R0,X+
None.gif    LD   R27,X
None.gif    MOV  R26,R0
None.gif    SUBI R26,LOW(-@1)
None.gif    SBCI R27,HIGH(-@1)
None.gif    ST   X+,R30
None.gif    ST   X,R31
None.gif    .ENDM
None.gif
None.gif    .MACRO __PUTD1SNX
None.gif    MOVW R26,R28
None.gif    SUBI R26,LOW(-@0)
None.gif    SBCI R27,HIGH(-@0)
None.gif    LD   R0,X+
None.gif    LD   R27,X
None.gif    MOV  R26,R0
None.gif    SUBI R26,LOW(-@1)
None.gif    SBCI R27,HIGH(-@1)
None.gif    ST   X+,R30
None.gif    ST   X+,R31
None.gif    ST   X+,R22
None.gif    ST   X,R23
None.gif    .ENDM
None.gif
None.gif    .MACRO __MULBRR
None.gif    MULS R@0,R@1
None.gif    MOV  R30,R0
None.gif    .ENDM
None.gif
None.gif    .MACRO __MULBRRU
None.gif    MUL  R@0,R@1
None.gif    MOV  R30,R0
None.gif    .ENDM
None.gif
None.gif    .CSEG
None.gif    .ORG 0
None.gif
None.gif    .INCLUDE "main.vec"
None.gif    .INCLUDE "main.inc"
None.gif
None.gif__RESET:
None.gif    CLI
None.gif    CLR  R30
None.gif    OUT  EECR,R30
None.gif
None.gif;INTERRUPT VECTORS ARE PLACED
None.gif;AT THE START OF FLASH
None.gif    LDI  R31,1
None.gif    OUT  GICR,R31
None.gif    OUT  GICR,R30
None.gif    OUT  MCUCR,R30
None.gif    OUT  EMCUCR,R30
None.gif
None.gif;DISABLE WATCHDOG
None.gif    LDI  R31,0x18
None.gif    OUT  WDTCR,R31
None.gif    LDI  R31,0x10
None.gif    OUT  WDTCR,R31
None.gif
None.gif;CLEAR R2-R14
None.gif    LDI  R24,13
None.gif    LDI  R26,2
None.gif    CLR  R27
None.gif__CLEAR_REG:
None.gif    ST   X+,R30
None.gif    DEC  R24
None.gif    BRNE __CLEAR_REG
None.gif
None.gif;CLEAR SRAM
None.gif    LDI  R24,LOW(0x200)
None.gif    LDI  R25,HIGH(0x200)
None.gif    LDI  R26,0x60
None.gif__CLEAR_SRAM:
None.gif    ST   X+,R30
None.gif    SBIW R24,1
None.gif    BRNE __CLEAR_SRAM
None.gif
None.gif;GLOBAL VARIABLES INITIALIZATION
None.gif    LDI  R30,LOW(__GLOBAL_INI_TBL*2)
None.gif    LDI  R31,HIGH(__GLOBAL_INI_TBL*2)
None.gif__GLOBAL_INI_NEXT:
None.gif    LPM  R0,Z+
None.gif    LPM  R1,Z+
None.gif    MOVW R22,R30
None.gif    MOVW R30,R0
None.gif    SBIW R30,0
None.gif    BREQ __GLOBAL_INI_END
None.gif    LPM  R26,Z+
None.gif    LPM  R27,Z+
None.gif    LPM  R24,Z+
None.gif    LPM  R25,Z+
None.gif__GLOBAL_INI_LOOP:
None.gif    LPM  R0,Z+
None.gif    ST   X+,R0
None.gif    SBIW R24,1
None.gif    BRNE __GLOBAL_INI_LOOP
None.gif    MOVW R30,R22
None.gif    RJMP __GLOBAL_INI_NEXT
None.gif__GLOBAL_INI_END:
None.gif
None.gif;STACK POINTER INITIALIZATION
None.gif    LDI  R30,LOW(0x25F)
None.gif    OUT  SPL,R30
None.gif    LDI  R30,HIGH(0x25F)
None.gif    OUT  SPH,R30
None.gif
None.gif;DATA STACK POINTER INITIALIZATION
None.gif    LDI  R28,LOW(0xE0)
None.gif    LDI  R29,HIGH(0xE0)
None.gif
None.gif    RJMP _main
None.gif
None.gif    .ESEG
None.gif    .ORG 0
None.gif    .DB  0 ; FIRST EEPROM LOCATION NOT USED, SEE ATMEL ERRATA SHEETS
None.gif
None.gif    .DSEG
None.gif    .ORG 0xE0
None.gif;       1 
None.gif;       2 //RB-101 机器人蜂鸣器测试程序
None.gif;       3 //2005年6月25日  彭斌
None.gif;       4 
None.gif;       5 #include 
< mega8515 .h >  //头文件
None.gif;       6 #include 
< delay .h >     //延时头程序调用,该文件已经存在于CodeVisionAVR里 ,安装后就有。
None.gif;       7 #include 
< stdio .h >     //一些常用函数的头文件调用
None.gif;       8 
None.gif;       9 //自定义蜂鸣器蜂鸣函数 (自定义函数必须放在入口函数前面,否则编译时会出错,这个可能是该软件识别造成的,不是一种程序设计规范)
None.gif;      10 void buzzer(void)                 
None.gif;      11 {                  
None.gif
None.gif    .CSEG
None.gif_buzzer:
None.gif;      12     //定义一个变量
None.gif;      13     unsigned char i=0xff;  
None.gif;      14     //循环
None.gif;      15     for(;i--;) 
None.gif    ST   -Y,R16
None.gif;    i -> R16
None.gif    LDI  R16,255
None.gif_0x10:
None.gif    MOV  R30,R16
None.gif    SUBI R16,1
None.gif    CPI  R30,0
None.gif    BREQ _0x11
None.gif;      16     { 
None.gif;      17         //蜂鸣器占用PORTB.3引脚
None.gif;      18         PORTB.3=!PORTB.3;   //取反
None.gif    CLT
None.gif    SBIS 0x18,3
None.gif    SET
None.gif    IN   R30,0x18
None.gif    BLD  R30,3
None.gif    OUT  0x18,R30
None.gif;      19         delay_us(500);     //延时500微秒,改名该延时值将改变蜂鸣器的音调高低
None.gif    __DELAY_USW 512
None.gif;      20     }
None.gif    RJMP _0x10
None.gif_0x11:
None.gif;      21 } 
None.gif    LD   R16,Y+
None.gif    RET
None.gif;      22 
None.gif;      23 //主函数入口
None.gif;      24 void main(void)
None.gif;      25 {            
None.gif_main:
None.gif;      26     //DDRxn 定义引脚方向,“1” 为输出,“0”为输入。  
None.gif;      27        
None.gif;      28     DDRB.3 = 1;    //蜂鸣器引脚方向设置      
None.gif    SBI  0x17,3
None.gif;      29     
None.gif;      30     //执行一个死循环,使数码管连续的全亮
None.gif;      31     while(1)
None.gif_0x13:
None.gif;      32     {         
None.gif;      33         buzzer();   //调用自定义蜂鸣函数
None.gif    RCALL SUBOPT_0x0
None.gif;      34         delay_ms(1000);  //延时1000毫秒,也就是1S   ,调节该延时长短可以使蜂鸣节奏变化
None.gif;      35         buzzer();   //调用自定义蜂鸣函数
None.gif    RCALL SUBOPT_0x0
None.gif;      36         delay_ms(1000);  //延时1000毫秒,也就是1S     
None.gif;      37     }
None.gif    RJMP _0x13
None.gif;      38 
None.gif;      39 }     
None.gif_0x16:
None.gif    NOP
None.gif    RJMP _0x16
None.gif;      40 
None.gif;      41          
None.gif_getchar:
None.gif     sbis usr,rxc
None.gif     rjmp _getchar
None.gif     in   r30,udr
None.gif    RET
None.gif_putchar:
None.gif     sbis usr,udre
None.gif     rjmp _putchar
None.gif     ld   r30,y
None.gif     out  udr,r30
None.gif    ADIW R28,1
None.gif    RET
None.gif
None.gif;OPTIMIZER ADDED SUBROUTINE, CALLED 2 TIMES
None.gifSUBOPT_0x0:
None.gif    RCALL _buzzer
None.gif    LDI  R30,LOW(1000)
None.gif    LDI  R31,HIGH(1000)
None.gif    ST   -Y,R31
None.gif    ST   -Y,R30
None.gif    RJMP _delay_ms
None.gif
None.gif_delay_ms:
None.gif    ld   r30,y+
None.gif    ld   r31,y+
None.gif    adiw r30,0
None.gif    breq __delay_ms1
None.gif__delay_ms0:
None.gif    __DELAY_USW 0x400
None.gif    wdr
None.gif    sbiw r30,1
None.gif    brne __delay_ms0
None.gif__delay_ms1:
None.gif    ret
None.gif
None.gif
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值