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

📄 server.lst

📁 这是关于AVR单片机学习的初步开发
💻 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 D058      RCALL	_main
_exit:
    0033 CFFF      RJMP	_exit
FILE: F:\单片机教学\调试程序\实验二舵机串口\server.c
(0001) //ICC-AVR application builder : 2005-3-29 下午 10:34:28
(0002) // Target : M8
(0003) // Crystal: 11.059Mhz
(0004) 
(0005) #include <iom8v.h>
(0006) #include <macros.h>
(0007) char flag = 0;
(0008) 
(0009) void port_init(void)
(0010) {
(0011)  PORTB = 0xFF;
_port_init:
    0034 EF8F      LDI	R24,0xFF
    0035 BB88      OUT	0x18,R24
(0012)  DDRB  = 0x02;//设置PB1为输出;
    0036 E082      LDI	R24,2
    0037 BB87      OUT	0x17,R24
(0013)  PORTC = 0x7F; //m103 output only
    0038 E78F      LDI	R24,0x7F
    0039 BB85      OUT	0x15,R24
(0014)  DDRC  = 0x00;
    003A 2422      CLR	R2
    003B BA24      OUT	0x14,R2
(0015)  PORTD = 0xFF;
    003C EF8F      LDI	R24,0xFF
    003D BB82      OUT	0x12,R24
(0016)  DDRD  = 0x00;
    003E BA21      OUT	0x11,R2
(0017) }
    003F 9508      RET
(0018) 
(0019) //设置PWM输出方式;
(0020) //TIMER1 initialisation - prescale:8
(0021) // WGM: 14) PWM fast, TOP=ICRn
(0022) // desired value: 50Hz
(0023) // actual value: 50.001Hz (0.0%)
(0024) void timer1_init(void)
(0025) {
(0026)  TCCR1B = 0x00; //stop
_timer1_init:
    0040 2422      CLR	R2
    0041 BC2E      OUT	0x2E,R2
(0027)  
(0028)  TCNT1H = 0x00; //setup
    0042 BC2D      OUT	0x2D,R2
(0029)  TCNT1L = 0x00;
    0043 BC2C      OUT	0x2C,R2
(0030)   
(0031)  OCR1AH = 0x08;
    0044 E088      LDI	R24,0x8
    0045 BD8B      OUT	0x2B,R24
(0032)  OCR1AL = 0x19;
    0046 E189      LDI	R24,0x19
    0047 BD8A      OUT	0x2A,R24
(0033)  OCR1BH = 0x08;
    0048 E088      LDI	R24,0x8
    0049 BD89      OUT	0x29,R24
(0034)  OCR1BL = 0x19;
    004A E189      LDI	R24,0x19
    004B BD88      OUT	0x28,R24
(0035)    
(0036)  ICR1H  = 0x6B;
    004C E68B      LDI	R24,0x6B
    004D BD87      OUT	0x27,R24
(0037)  ICR1L  = 0xFE;
    004E EF8E      LDI	R24,0xFE
    004F BD86      OUT	0x26,R24
(0038)  
(0039)  TCCR1A = 0xA2;
    0050 EA82      LDI	R24,0xA2
    0051 BD8F      OUT	0x2F,R24
(0040)  TCCR1B = 0x1A; //start Timer
    0052 E18A      LDI	R24,0x1A
    0053 BD8E      OUT	0x2E,R24
(0041) }
    0054 9508      RET
(0042) 
(0043) //串口初始化
(0044) //UART0 initialisation
(0045) // desired baud rate: 9600
(0046) // actual: baud rate:9600 (0.0%)
(0047) // char size: 8 bit
(0048) // parity: Disabled
(0049) void uart0_init(void)
(0050) {
(0051)  UCSRB = 0x00; //disable while setting baud rate
_uart0_init:
    0055 2422      CLR	R2
    0056 B82A      OUT	0x0A,R2
(0052)  UCSRA = 0x00;
    0057 B82B      OUT	0x0B,R2
(0053)  UCSRC = 0x86;
    0058 E886      LDI	R24,0x86
    0059 BD80      OUT	0x20,R24
(0054)  UBRRL = 0x47; //set baud rate lo
    005A E487      LDI	R24,0x47
    005B B989      OUT	0x09,R24
(0055)  UBRRH = 0x00; //set baud rate hi
    005C BC20      OUT	0x20,R2
(0056)  UCSRB = 0x98;
    005D E988      LDI	R24,0x98
    005E B98A      OUT	0x0A,R24
(0057) }
    005F 9508      RET
_uart0_rx_isr:
  data                 --> R16
  time                 --> R16
    0060 920A      ST	R0,-Y
    0061 921A      ST	R1,-Y
    0062 922A      ST	R2,-Y
    0063 923A      ST	R3,-Y
    0064 930A      ST	R16,-Y
    0065 931A      ST	R17,-Y
    0066 938A      ST	R24,-Y
    0067 B60F      IN	R0,0x3F
    0068 920A      ST	R0,-Y
(0058) 
(0059) #pragma interrupt_handler uart0_rx_isr:12
(0060) void uart0_rx_isr(void)
(0061) {
(0062)  //uart has received a character in UDR
(0063)  char data;
(0064)  unsigned int time;
(0065)  
(0066)  data = UDR;//取出数据;
    0069 B10C      IN	R16,0x0C
(0067)  UDR =  data;//返回接收的数据;
    006A B90C      OUT	0x0C,R16
(0068)  time = data*31;//注意需要先乘,后移位防止溢出;
    006B E18F      LDI	R24,0x1F
    006C 9F80      MUL	R24,R16
    006D 0180      MOVW	R16,R0
(0069)  time = ( time>>1)+691;//注意运算符的优先级顺序;
    006E 9516      LSR	R17
    006F 9507      ROR	R16
    0070 540D      SUBI	R16,0x4D
    0071 4F1D      SBCI	R17,0xFD
(0070)  OCR1AH = time >>8;//16位寄存器先写高位,后写低位;
    0072 0118      MOVW	R2,R16
    0073 2C23      MOV	R2,R3
    0074 2433      CLR	R3
    0075 BC2B      OUT	0x2B,R2
(0071)  OCR1AL = time; 
    0076 BD0A      OUT	0x2A,R16
(0072) }
    0077 9009      LD	R0,Y+
    0078 BE0F      OUT	0x3F,R0
    0079 9189      LD	R24,Y+
    007A 9119      LD	R17,Y+
    007B 9109      LD	R16,Y+
    007C 9039      LD	R3,Y+
    007D 9029      LD	R2,Y+
    007E 9019      LD	R1,Y+
    007F 9009      LD	R0,Y+
    0080 9518      RETI
(0073) 
(0074) //call this routine to initialise all peripherals
(0075) void init_devices(void)
(0076) {
(0077)  //stop errant interrupts until set up
(0078)  CLI(); //disable all interrupts
_init_devices:
    0081 94F8      BCLR	7
(0079)  port_init();
    0082 DFB1      RCALL	_port_init
(0080)  timer1_init();
    0083 DFBC      RCALL	_timer1_init
(0081)  uart0_init();
    0084 DFD0      RCALL	_uart0_init
(0082) 
(0083)  MCUCR = 0x00;
    0085 2422      CLR	R2
    0086 BE25      OUT	0x35,R2
(0084)  GICR  = 0x00;
    0087 BE2B      OUT	0x3B,R2
(0085)  TIMSK = 0x00; //timer interrupt sources
    0088 BE29      OUT	0x39,R2
(0086)  SEI(); //re-enable interrupts
    0089 9478      BSET	7
(0087)  //all peripherals are now initialised
(0088) }
    008A 9508      RET
(0089) 
(0090) //
(0091) void main(void)
(0092) {
(0093)  init_devices();
_main:
    008B DFF5      RCALL	_init_devices
(0094)  //insert your functional code here...
(0095)  while(1);
    008C CFFF      RJMP	0x008C
(0096) }
FILE: <library>
    008D 9508      RET

⌨️ 快捷键说明

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