📄 server.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 + -