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

📄 time0.lst

📁 步进电机的控制程序
💻 LST
字号:
__start:
__text_start:
    0015 E5CF      LDI	R28,0x5F
    0016 E0D4      LDI	R29,4
    0017 BFCD      OUT	0x3D,R28
    0018 BFDE      OUT	0x3E,R29
    0019 51C0      SUBI	R28,0x10
    001A 40D0      SBCI	R29,0
    001B EA0A      LDI	R16,0xAA
    001C 8308      STD	Y+0,R16
    001D 2400      CLR	R0
    001E E6E3      LDI	R30,0x63
    001F E0F0      LDI	R31,0
    0020 E010      LDI	R17,0
    0021 36E3      CPI	R30,0x63
    0022 07F1      CPC	R31,R17
    0023 F011      BEQ	0x0026
    0024 9201      ST	R0,Z+
    0025 CFFB      RJMP	0x0021
    0026 8300      STD	Z+0,R16
    0027 E2E6      LDI	R30,0x26
    0028 E0F0      LDI	R31,0
    0029 E6A0      LDI	R26,0x60
    002A E0B0      LDI	R27,0
    002B E010      LDI	R17,0
    002C 32E9      CPI	R30,0x29
    002D 07F1      CPC	R31,R17
    002E F021      BEQ	0x0033
    002F 95C8      LPM
    0030 9631      ADIW	R30,1
    0031 920D      ST	R0,X+
    0032 CFF9      RJMP	0x002C
    0033 D046      RCALL	_main
_exit:
    0034 CFFF      RJMP	_exit
FILE: E:\ICCAVR编程学习\定时计数器学习\time0.c
(0001) //ICC-AVR application builder : 2007-3-8 22:08:41
(0002) // Target : M8
(0003) // Crystal: 1.0000Mhz
(0004) 
(0005) #include <iom8v.h>
(0006) #include <macros.h>
(0007) #include <stdio.h>
(0008) 
(0009) char i=0;
(0010) unsigned int timecount=0;
(0011) void port_init(void)
(0012) {
(0013)  PORTB = 0xFF;
_port_init:
    0035 EF8F      LDI	R24,0xFF
    0036 BB88      OUT	0x18,R24
(0014)  DDRB  = 0xFF;
    0037 BB87      OUT	0x17,R24
(0015)  PORTC = 0x7F; //m103 output only
    0038 E78F      LDI	R24,0x7F
    0039 BB85      OUT	0x15,R24
(0016)  DDRC  = 0x00;
    003A 2422      CLR	R2
    003B BA24      OUT	0x14,R2
(0017)  PORTD = 0xFF;
    003C EF8F      LDI	R24,0xFF
    003D BB82      OUT	0x12,R24
(0018)  DDRD  = 0xFF;
    003E BB81      OUT	0x11,R24
    003F 9508      RET
(0019) }
(0020) 
(0021) //TIMER0 initialize - prescale:8
(0022) // desired value: 1Hz
(0023) // actual value: Out of range
(0024) void timer0_init(void)
(0025) {
(0026)  TCCR0 = 0x00; //stop
_timer0_init:
    0040 2422      CLR	R2
    0041 BE23      OUT	0x33,R2
(0027)  TCNT0 = 6 /*INVALID SETTING*/; //set count
    0042 E086      LDI	R24,6
    0043 BF82      OUT	0x32,R24
(0028)  TCCR0 = 0x02; //start timer
    0044 E082      LDI	R24,2
    0045 BF83      OUT	0x33,R24
    0046 9508      RET
_timer0_ovf_isr:
    0047 922A      ST	R2,-Y
    0048 923A      ST	R3,-Y
    0049 938A      ST	R24,-Y
    004A 939A      ST	R25,-Y
    004B 93EA      ST	R30,-Y
    004C B62F      IN	R2,0x3F
    004D 922A      ST	R2,-Y
(0029)  
(0030) }
(0031) 
(0032) #pragma interrupt_handler timer0_ovf_isr:10
(0033) void timer0_ovf_isr(void)
(0034) {
(0035) //TCNT0 = 6 /*INVALID SETTING*/; //reload counter value
(0036) /* if(i<10)                    //i决定循环基准时间的次数 
(0037)   {TCNT0=0X3A;             //重设初始值  100ms 
(0038)    i++;                    //累加基准时间 
(0039)   } 
(0040)  else 
(0041)   {PORTD^=BIT(0);          //翻转PD口电平  
(0042)    i=0;                    //定时全局变量恢复初始值 
(0043)   }  */
(0044) if(++timecount==1000)
    004E 91800061  LDS	R24,timecount
    0050 91900062  LDS	R25,timecount+1
    0052 9601      ADIW	R24,1
    0053 93900062  STS	timecount+1,R25
    0055 93800061  STS	timecount,R24
    0057 3E88      CPI	R24,0xE8
    0058 E0E3      LDI	R30,3
    0059 079E      CPC	R25,R30
    005A F469      BNE	0x0068
(0045)  {
(0046)  PORTD=PORTD^0x80;
    005B E880      LDI	R24,0x80
    005C E090      LDI	R25,0
    005D B222      IN	R2,0x12
    005E 2433      CLR	R3
    005F 2628      EOR	R2,R24
    0060 2639      EOR	R3,R25
    0061 BA22      OUT	0x12,R2
(0047)  timecount=0;
    0062 2422      CLR	R2
    0063 2433      CLR	R3
    0064 92300062  STS	timecount+1,R3
    0066 92200061  STS	timecount,R2
(0048)   }
    0068 9029      LD	R2,Y+
    0069 BE2F      OUT	0x3F,R2
    006A 91E9      LD	R30,Y+
    006B 9199      LD	R25,Y+
    006C 9189      LD	R24,Y+
    006D 9039      LD	R3,Y+
    006E 9029      LD	R2,Y+
    006F 9518      RETI
(0049) }
(0050) 
(0051) 
(0052) //call this routine to initialize all peripherals
(0053) void init_devices(void)
(0054) {
(0055)  //stop errant interrupts until set up
(0056)  CLI(); //disable all interrupts
_init_devices:
    0070 94F8      BCLR	7
(0057)  timer0_init();
    0071 DFCE      RCALL	_timer0_init
(0058)  port_init();
    0072 DFC2      RCALL	_port_init
(0059) 
(0060)  MCUCR = 0x00;
    0073 2422      CLR	R2
    0074 BE25      OUT	0x35,R2
(0061)  GICR  = 0x00;
    0075 BE2B      OUT	0x3B,R2
(0062)  TIMSK = 0x01; //timer interrupt sources
    0076 E081      LDI	R24,1
    0077 BF89      OUT	0x39,R24
(0063)  SEI(); //re-enable interrupts
    0078 9478      BSET	7
    0079 9508      RET
(0064)  //all peripherals are now initialized
(0065) }
(0066) 
(0067) //
(0068) void main(void)
(0069) {
(0070)  /*TCCR0=0X05;                 //时钟1024分频 
(0071)  TCNT0=0X3A;                 //定时器计数初始值 100ms 
(0072)  TIMSK=0X01;            //允许定时器0中断 
(0073)  SEI();                    //开全局中断 
(0074)  DDRB=0XFF; 
(0075)  DDRD=0XFF; 
(0076)  PORTB=0Xff; 
(0077)  PORTD=0XFF; */
(0078) 
(0079) init_devices();
_main:
    007A DFF5      RCALL	_init_devices
(0080) while(1);
FILE: <library>
    007B CFFF      RJMP	0x007B
    007C 9508      RET

⌨️ 快捷键说明

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