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

📄 step.lst

📁 这是关于AVR单片机学习的初步开发
💻 LST
字号:
__start:
__text_start:
    0015 E5CF      LDI	R28,0x5F
    0016 E0D2      LDI	R29,2
    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 E6E7      LDI	R30,0x67
    001F E0F0      LDI	R31,0
    0020 E010      LDI	R17,0
    0021 36E7      CPI	R30,0x67
    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 E2E2      LDI	R30,0x22
    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 D0E0      RCALL	_main
_exit:
    0034 CFFF      RJMP	_exit
FILE: F:\单片机教学\调试程序\stepmotor\step.c
(0001) //Designed by Buaa Alf
(0002) //通过定时器实现了步进电机的运转,仅仅是一演示程序;
(0003) //烧写程序后,断开电源开关,闭合SW9的1、2、3、4和7、8管角,然后闭合电源开关即可看到电机的运转一周。
(0004) //按复位可以重起单片机,使电机再旋转一周;
(0005) //可参考设计自己的电机控制程序。
(0006) 
(0007) //ICC-AVR application builder : 2005-3-31 上午 11:35:43
(0008) // Target : M8
(0009) // Crystal: 11.059Mhz
(0010) 
(0011) #include <iom8v.h>
(0012) #include <macros.h>
(0013) 
(0014) #define aon PORTB =0x01
(0015) #define bon PORTB =0x02
(0016) #define con PORTB =0x04
(0017) #define don PORTB =0x08
(0018) 
(0019) #define abon PORTB =0x03
(0020) #define bcon PORTB =0x06
(0021) #define cdon PORTB =0x0C
(0022) #define daon PORTB =0x09
(0023) 
(0024) unsigned int Pnum=4160;//总脉冲个数,包含减速比
(0025) char Freq=50;//脉冲频率
(0026) 
(0027) unsigned int pcont=0;
(0028) char step =0;
(0029) char dirc=0;
(0030) 
(0031) void port_init(void)
(0032) {
(0033)  PORTB = 0xFF;
_port_init:
    0035 EF8F      LDI	R24,0xFF
    0036 BB88      OUT	0x18,R24
(0034)  DDRB  = 0x0F;
    0037 E08F      LDI	R24,0xF
    0038 BB87      OUT	0x17,R24
(0035)  PORTC = 0x7F; //m103 output only
    0039 E78F      LDI	R24,0x7F
    003A BB85      OUT	0x15,R24
(0036)  DDRC  = 0x00;
    003B 2422      CLR	R2
    003C BA24      OUT	0x14,R2
(0037)  PORTD = 0xFF;
    003D EF8F      LDI	R24,0xFF
    003E BB82      OUT	0x12,R24
(0038)  DDRD  = 0x00;
    003F BA21      OUT	0x11,R2
(0039) }
    0040 9508      RET
(0040) 
(0041) //TIMER1 initialisation - prescale:8
(0042) // WGM: 0) Normal, TOP=0xFFFF
(0043) // desired value: 50Hz
(0044) // actual value: 50.001Hz (0.0%)
(0045) void timer1_init(void)
(0046) {
(0047)  TCCR1B = 0x00; //stop
_timer1_init:
    0041 2422      CLR	R2
    0042 BC2E      OUT	0x2E,R2
(0048)  TCNT1H = 0x90; //setup
    0043 E980      LDI	R24,0x90
    0044 BD8D      OUT	0x2D,R24
(0049)  TCNT1L = 0xF0;
    0045 EF80      LDI	R24,0xF0
    0046 BD8C      OUT	0x2C,R24
(0050)  OCR1AH = 0x6B;
    0047 E68B      LDI	R24,0x6B
    0048 BD8B      OUT	0x2B,R24
(0051)  OCR1AL = 0xFF;
    0049 EF8F      LDI	R24,0xFF
    004A BD8A      OUT	0x2A,R24
(0052)  OCR1BH = 0x6B;
    004B E68B      LDI	R24,0x6B
    004C BD89      OUT	0x29,R24
(0053)  OCR1BL = 0xFF;
    004D EF8F      LDI	R24,0xFF
    004E BD88      OUT	0x28,R24
(0054)  ICR1H  = 0x6B;
    004F E68B      LDI	R24,0x6B
    0050 BD87      OUT	0x27,R24
(0055)  ICR1L  = 0xFF;
    0051 EF8F      LDI	R24,0xFF
    0052 BD86      OUT	0x26,R24
(0056)  TCCR1A = 0x00;
    0053 BC2F      OUT	0x2F,R2
(0057)  TCCR1B = 0x02; //start Timer
    0054 E082      LDI	R24,2
    0055 BD8E      OUT	0x2E,R24
(0058) }
    0056 9508      RET
_timer1_ovf_isr:
    0057 922A      ST	R2,-Y
    0058 923A      ST	R3,-Y
    0059 924A      ST	R4,-Y
    005A 925A      ST	R5,-Y
    005B 938A      ST	R24,-Y
    005C 939A      ST	R25,-Y
    005D B62F      IN	R2,0x3F
    005E 922A      ST	R2,-Y
(0059) 
(0060) #pragma interrupt_handler timer1_ovf_isr:9
(0061) void timer1_ovf_isr(void)
(0062) {
(0063)  //TIMER1 has overflowed
(0064)  if(pcont <=Pnum)
    005F 90200060  LDS	R2,0x60
    0061 90300061  LDS	R3,0x61
    0063 90400063  LDS	R4,0x63
    0065 90500064  LDS	R5,0x64
    0067 1424      CP	R2,R4
    0068 0435      CPC	R3,R5
    0069 F408      BCC	0x006B
    006A C087      RJMP	0x00F2
(0065)  { 
(0066)    if(dirc == 0)
    006B 90200066  LDS	R2,0x66
    006D 2022      TST	R2
    006E F5A1      BNE	0x00A3
(0067)    { if(step == 0)
    006F 90200065  LDS	R2,0x65
    0071 2022      TST	R2
    0072 F419      BNE	0x0076
(0068)    	 	aon;
    0073 E081      LDI	R24,1
    0074 BB88      OUT	0x18,R24
    0075 C060      RJMP	0x00D6
(0069) 	 else if(step == 1)
    0076 91800065  LDS	R24,0x65
    0078 3081      CPI	R24,1
    0079 F419      BNE	0x007D
(0070) 	 	abon;
    007A E083      LDI	R24,3
    007B BB88      OUT	0x18,R24
    007C C059      RJMP	0x00D6
(0071) 	 else if(step == 2)
    007D 91800065  LDS	R24,0x65
    007F 3082      CPI	R24,2
    0080 F419      BNE	0x0084
(0072) 	 	bon;
    0081 E082      LDI	R24,2
    0082 BB88      OUT	0x18,R24
    0083 C052      RJMP	0x00D6
(0073)      else if(step == 3)
    0084 91800065  LDS	R24,0x65
    0086 3083      CPI	R24,3
    0087 F419      BNE	0x008B
(0074) 	 	bcon;
    0088 E086      LDI	R24,6
    0089 BB88      OUT	0x18,R24
    008A C04B      RJMP	0x00D6
(0075)      else if(step == 4)
    008B 91800065  LDS	R24,0x65
    008D 3084      CPI	R24,4
    008E F419      BNE	0x0092
(0076) 	 	con;
    008F E084      LDI	R24,4
    0090 BB88      OUT	0x18,R24
    0091 C044      RJMP	0x00D6
(0077)      else if(step == 5)
    0092 91800065  LDS	R24,0x65
    0094 3085      CPI	R24,5
    0095 F419      BNE	0x0099
(0078) 	 	cdon;
    0096 E08C      LDI	R24,0xC
    0097 BB88      OUT	0x18,R24
    0098 C03D      RJMP	0x00D6
(0079) 	 else if(step == 6)
    0099 91800065  LDS	R24,0x65
    009B 3086      CPI	R24,6
    009C F419      BNE	0x00A0
(0080) 	 	don;
    009D E088      LDI	R24,0x8
    009E BB88      OUT	0x18,R24
    009F C036      RJMP	0x00D6
(0081)      else 
(0082) 	 	daon;
    00A0 E089      LDI	R24,0x9
    00A1 BB88      OUT	0x18,R24
(0083)    }
    00A2 C033      RJMP	0x00D6
(0084)    else
(0085)    {
(0086)    	 if(step == 0)
    00A3 90200065  LDS	R2,0x65
    00A5 2022      TST	R2
    00A6 F419      BNE	0x00AA
(0087)    	 	aon;
    00A7 E081      LDI	R24,1
    00A8 BB88      OUT	0x18,R24
    00A9 C02C      RJMP	0x00D6
(0088) 	 else if(step == 1)
    00AA 91800065  LDS	R24,0x65
    00AC 3081      CPI	R24,1
    00AD F419      BNE	0x00B1
(0089) 	 	daon;
    00AE E089      LDI	R24,0x9
    00AF BB88      OUT	0x18,R24
    00B0 C025      RJMP	0x00D6
(0090) 	 else if(step == 2)
    00B1 91800065  LDS	R24,0x65
    00B3 3082      CPI	R24,2
    00B4 F419      BNE	0x00B8
(0091) 	 	don;
    00B5 E088      LDI	R24,0x8
    00B6 BB88      OUT	0x18,R24
    00B7 C01E      RJMP	0x00D6
(0092)      else if(step == 3)
    00B8 91800065  LDS	R24,0x65
    00BA 3083      CPI	R24,3
    00BB F419      BNE	0x00BF
(0093) 	 	cdon;
    00BC E08C      LDI	R24,0xC
    00BD BB88      OUT	0x18,R24
    00BE C017      RJMP	0x00D6
(0094)      else if(step == 4)
    00BF 91800065  LDS	R24,0x65
    00C1 3084      CPI	R24,4
    00C2 F419      BNE	0x00C6
(0095) 	 	con;
    00C3 E084      LDI	R24,4
    00C4 BB88      OUT	0x18,R24
    00C5 C010      RJMP	0x00D6
(0096)      else if(step == 5)
    00C6 91800065  LDS	R24,0x65
    00C8 3085      CPI	R24,5
    00C9 F419      BNE	0x00CD
(0097) 	 	bcon;
    00CA E086      LDI	R24,6
    00CB BB88      OUT	0x18,R24
    00CC C009      RJMP	0x00D6
(0098) 	 else if(step == 6)
    00CD 91800065  LDS	R24,0x65
    00CF 3086      CPI	R24,6
    00D0 F419      BNE	0x00D4
(0099) 	 	bon;
    00D1 E082      LDI	R24,2
    00D2 BB88      OUT	0x18,R24
    00D3 C002      RJMP	0x00D6
(0100)      else
(0101) 	 	abon;
    00D4 E083      LDI	R24,3
    00D5 BB88      OUT	0x18,R24
(0102)    }
(0103)    step ++;
    00D6 91800065  LDS	R24,0x65
    00D8 5F8F      SUBI	R24,0xFF
    00D9 93800065  STS	0x65,R24
(0104)    if(step>=8) step =0;
    00DB 3088      CPI	R24,0x8
    00DC F018      BCS	0x00E0
    00DD 2422      CLR	R2
    00DE 92200065  STS	0x65,R2
(0105)    
(0106)    TCNT1H = 0xE0; //reload counter high value更改速度
    00E0 EE80      LDI	R24,0xE0
    00E1 BD8D      OUT	0x2D,R24
(0107)    TCNT1L = 0x01; //reload counter low value   
    00E2 E081      LDI	R24,1
    00E3 BD8C      OUT	0x2C,R24
(0108)    TCCR1A = 0x00;
    00E4 2422      CLR	R2
    00E5 BC2F      OUT	0x2F,R2
(0109)    TCCR1B = 0x02; //start Timer
    00E6 E082      LDI	R24,2
    00E7 BD8E      OUT	0x2E,R24
(0110)    
(0111)    pcont++;
    00E8 91800063  LDS	R24,0x63
    00EA 91900064  LDS	R25,0x64
    00EC 9601      ADIW	R24,1
    00ED 93900064  STS	0x64,R25
    00EF 93800063  STS	0x63,R24
(0112)  }
    00F1 C002      RJMP	0x00F4
(0113)  else
(0114)  	TCCR1B = 0x00;
    00F2 2422      CLR	R2
    00F3 BC2E      OUT	0x2E,R2
(0115) }
    00F4 9029      LD	R2,Y+
    00F5 BE2F      OUT	0x3F,R2
    00F6 9199      LD	R25,Y+
    00F7 9189      LD	R24,Y+
    00F8 9059      LD	R5,Y+
    00F9 9049      LD	R4,Y+
    00FA 9039      LD	R3,Y+
    00FB 9029      LD	R2,Y+
    00FC 9518      RETI
(0116) 
(0117) //UART0 initialisation
(0118) // desired baud rate: 9600
(0119) // actual: baud rate:9600 (0.0%)
(0120) // char size: 8 bit
(0121) // parity: Disabled
(0122) void uart0_init(void)
(0123) {
(0124)  UCSRB = 0x00; //disable while setting baud rate
_uart0_init:
    00FD 2422      CLR	R2
    00FE B82A      OUT	0x0A,R2
(0125)  UCSRA = 0x00;
    00FF B82B      OUT	0x0B,R2
(0126)  UCSRC = 0x86;
    0100 E886      LDI	R24,0x86
    0101 BD80      OUT	0x20,R24
(0127)  UBRRL = 0x47; //set baud rate lo
    0102 E487      LDI	R24,0x47
    0103 B989      OUT	0x09,R24
(0128)  UBRRH = 0x00; //set baud rate hi
    0104 BC20      OUT	0x20,R2
(0129)  UCSRB = 0x98;
    0105 E988      LDI	R24,0x98
    0106 B98A      OUT	0x0A,R24
(0130) }
    0107 9508      RET
(0131) 
(0132) #pragma interrupt_handler uart0_rx_isr:12
(0133) void uart0_rx_isr(void)
(0134) {
(0135)  //uart has received a character in UDR
(0136) }
_uart0_rx_isr:
    0108 9518      RETI
(0137) 
(0138) //call this routine to initialise all peripherals
(0139) void init_devices(void)
(0140) {
(0141)  //stop errant interrupts until set up
(0142)  CLI(); //disable all interrupts
_init_devices:
    0109 94F8      BCLR	7
(0143)  port_init();
    010A DF2A      RCALL	_port_init
(0144)  timer1_init();
    010B DF35      RCALL	_timer1_init
(0145)  uart0_init();
    010C DFF0      RCALL	_uart0_init
(0146) 
(0147)  MCUCR = 0x00;
    010D 2422      CLR	R2
    010E BE25      OUT	0x35,R2
(0148)  GICR  = 0x00;
    010F BE2B      OUT	0x3B,R2
(0149)  TIMSK = 0x04; //timer interrupt sources
    0110 E084      LDI	R24,4
    0111 BF89      OUT	0x39,R24
(0150)  SEI(); //re-enable interrupts
    0112 9478      BSET	7
(0151)  //all peripherals are now initialised
(0152) }
    0113 9508      RET
(0153) 
(0154) //
(0155) void main(void)
(0156) {
(0157)  init_devices();
_main:
    0114 DFF4      RCALL	_init_devices
(0158)  //insert your functional code here...
(0159)  while(1);
    0115 CFFF      RJMP	0x0115
(0160) }
FILE: <library>
    0116 9508      RET

⌨️ 快捷键说明

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