⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 time01.lst

📁 步进电机的控制程序
💻 LST
字号:
__start:
__text_start:
    0014 E5CF      LDI	R28,0x5F
    0015 E0D4      LDI	R29,4
    0016 BFCD      OUT	0x3D,R28
    0017 BFDE      OUT	0x3E,R29
    0018 51C0      SUBI	R28,0x10
    0019 40D0      SBCI	R29,0
    001A EA0A      LDI	R16,0xAA
    001B 8308      STD	Y+0,R16
    001C 2400      CLR	R0
    001D E6E1      LDI	R30,0x61
    001E E0F0      LDI	R31,0
    001F E010      LDI	R17,0
    0020 36E1      CPI	R30,0x61
    0021 07F1      CPC	R31,R17
    0022 F011      BEQ	0x0025
    0023 9201      ST	R0,Z+
    0024 CFFB      RJMP	0x0020
    0025 8300      STD	Z+0,R16
    0026 E2E6      LDI	R30,0x26
    0027 E0F0      LDI	R31,0
    0028 E6A0      LDI	R26,0x60
    0029 E0B0      LDI	R27,0
    002A E010      LDI	R17,0
    002B 32E7      CPI	R30,0x27
    002C 07F1      CPC	R31,R17
    002D F021      BEQ	0x0032
    002E 95C8      LPM
    002F 9631      ADIW	R30,1
    0030 920D      ST	R0,X+
    0031 CFF9      RJMP	0x002B
    0032 D001      RCALL	_main
_exit:
    0033 CFFF      RJMP	_exit
FILE: E:\ICCAVR编程学习\步进电机驱动\time01.c
(0001) /*AD转换需要隔段时间采样一次,用这个方法可以粗略实现1秒定时,
(0002) 我也时刚刚学习AVR 吧刚做的拿出来和新入门的朋友分享  或许有
(0003) 帮助。存在问题的地方还请朋友门多斧正。*/ 
(0004) 
(0005) //*********************************** 
(0006) //函数功能:基准时间100MS 总计定时1S 
(0007) //编译器类型及版本:ICCAVR  6.31 
(0008) 
(0009) /************************************************************************/
(0010)        
(0011) #include<iom8v.h>               //包含定义ATmega8寄存器的头文件 
(0012) #include<macros.h>           //包含一些常用的宏定义 
(0013) #pragma interrupt_handler TIME0:10        //中断向量号码 
(0014) char i=0;                   //调整累加基准定时次数的全局变量 
(0015) //***********************************************************************/ 
(0016) //主函数 
(0017) void main() 
(0018) {TCCR0=0X05;                 //时钟1024分频 
_main:
    0034 E085      LDI	R24,5
    0035 BF83      OUT	0x33,R24
(0019)  TCNT0=0X3A;                 //定时器计数初始值 100ms 
    0036 E38A      LDI	R24,0x3A
    0037 BF82      OUT	0x32,R24
(0020)  TIMSK=0X01;            //允许定时器0中断 
    0038 E081      LDI	R24,1
    0039 BF89      OUT	0x39,R24
(0021)  SEI();                    //开全局中断 
    003A 9478      BSET	7
(0022)  DDRB=0XFF; 
    003B EF8F      LDI	R24,0xFF
    003C BB87      OUT	0x17,R24
(0023)  DDRD=0XFF; 
    003D BB81      OUT	0x11,R24
(0024)  PORTB=0Xff; 
    003E BB88      OUT	0x18,R24
(0025)  PORTD=0XFF; 
    003F BB82      OUT	0x12,R24
    0040 9508      RET
_TIME0:
    0041 922A      ST	R2,-Y
    0042 938A      ST	R24,-Y
    0043 939A      ST	R25,-Y
    0044 B62F      IN	R2,0x3F
    0045 922A      ST	R2,-Y
(0026) } 
(0027) //***********************************************************************/
(0028) //定时器中断函数 
(0029) void TIME0() 
(0030) {if(i<20)                    //i决定循环基准时间的次数 
    0046 91800060  LDS	R24,i
    0048 3184      CPI	R24,0x14
    0049 F440      BCC	0x0052
(0031)   {TCNT0=0X3A;                 //重设初始值  100ms 
    004A E38A      LDI	R24,0x3A
    004B BF82      OUT	0x32,R24
(0032)    i++;                    //累加基准时间 
    004C 91800060  LDS	R24,i
    004E 5F8F      SUBI	R24,0xFF
    004F 93800060  STS	i,R24
(0033)   } 
    0051 C007      RJMP	0x0059
(0034)  else 
(0035)   {PORTD^=BIT(0);                 //翻转PD口电平  
    0052 E081      LDI	R24,1
    0053 B222      IN	R2,0x12
    0054 2628      EOR	R2,R24
    0055 BA22      OUT	0x12,R2
(0036)    i=0;                    //定时全局变量恢复初始值 
    0056 2422      CLR	R2
    0057 92200060  STS	i,R2
(0037)   }    
FILE: <library>
    0059 9029      LD	R2,Y+
    005A BE2F      OUT	0x3F,R2
    005B 9199      LD	R25,Y+
    005C 9189      LD	R24,Y+
    005D 9029      LD	R2,Y+
    005E 9518      RETI

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -