📄 edu.lst
字号:
__text_start:
__start:
0029 E5CF LDI R28,0x5F
002A E0D4 LDI R29,4
002B BFCD OUT 0x3D,R28
002C BFDE OUT 0x3E,R29
002D 51C0 SUBI R28,0x10
002E 40D0 SBCI R29,0
002F EA0A LDI R16,0xAA
0030 8308 STD Y+0,R16
0031 2400 CLR R0
0032 E6EA LDI R30,0x6A
0033 E0F0 LDI R31,0
0034 E011 LDI R17,1
0035 35E2 CPI R30,0x52
0036 07F1 CPC R31,R17
0037 F011 BEQ 0x003A
0038 9201 ST R0,Z+
0039 CFFB RJMP 0x0035
003A 8300 STD Z+0,R16
003B E4E8 LDI R30,0x48
003C E0F0 LDI R31,0
003D E6A0 LDI R26,0x60
003E E0B0 LDI R27,0
003F E010 LDI R17,0
0040 35E2 CPI R30,0x52
0041 07F1 CPC R31,R17
0042 F021 BEQ 0x0047
0043 95C8 LPM
0044 9631 ADIW R30,1
0045 920D ST R0,X+
0046 CFF9 RJMP 0x0040
0047 940E017D CALL _main
_exit:
0049 CFFF RJMP _exit
FILE: F:\赵一\edu6000_1202\main.c
(0001) //ICC-AVR application builder : 2004-11-19 9:42:35
(0002) // Target : M8
(0003) // Crystal: 7.3728Mhz
(0004) #include <eeprom.h>
(0005) #include "head.h"
(0006)
(0007) unsigned char getchar(void); //申明函数:串口接收函数;
(0008) void sendchar(unsigned char data); //申明函数:串口发送函数;
(0009) unsigned char table[10]={0xeb,0x60,0xc7,0x8f,0x2e,0xbd,0xed,0x0b,0xef,0xaf};
(0010) unsigned char lcd_buffer[16];
(0011) unsigned char host_id,guest_id,t,ques[100],data[110],ques_num;
(0012) unsigned int t1;
(0013)
(0014) void port_init(void)
(0015) {
(0016) PORTB = 0xDF;
_port_init:
004A ED8F LDI R24,0xDF
004B BB88 OUT 0x18,R24
(0017) DDRB = 0xFF;
004C EF8F LDI R24,0xFF
004D BB87 OUT 0x17,R24
(0018) PORTC = 0x75; //m103 output only
004E E785 LDI R24,0x75
004F BB85 OUT 0x15,R24
(0019) DDRC = 0x77;
0050 E787 LDI R24,0x77
0051 BB84 OUT 0x14,R24
(0020) PORTD = 0xFF;
0052 EF8F LDI R24,0xFF
0053 BB82 OUT 0x12,R24
(0021) DDRD = 0x97;
0054 E987 LDI R24,0x97
0055 BB81 OUT 0x11,R24
(0022) }
0056 9508 RET
(0023)
(0024) //UART0 initialisation
(0025) // desired baud rate: 9600
(0026) // actual: baud rate:9600 (0.0%)
(0027) // char size: 8 bit
(0028) // parity: Disabled
(0029) void uart0_init(void)
(0030) {
(0031) UCSRB = 0x00; //disable while setting baud rate
_uart0_init:
0057 2422 CLR R2
0058 B82A OUT 0x0A,R2
(0032) UCSRA = 0x00;
0059 B82B OUT 0x0B,R2
(0033) UCSRC = 0x86;
005A E886 LDI R24,0x86
005B BD80 OUT 0x20,R24
(0034) UBRRL = 0x2F; //set baud rate lo
005C E28F LDI R24,0x2F
005D B989 OUT 0x09,R24
(0035) UBRRH = 0x00; //set baud rate hi
005E BC20 OUT 0x20,R2
(0036) UCSRB = 0x18;
005F E188 LDI R24,0x18
0060 B98A OUT 0x0A,R24
(0037) }
0061 9508 RET
(0038)
(0039) void timer0_init(void)
(0040) {
(0041) TCCR0 = 0x00; //stop
_timer0_init:
0062 2422 CLR R2
0063 BE23 OUT 0x33,R2
(0042) TCNT0 = 0x00 /*INVALID SETTING*/; //set count
0064 BE22 OUT 0x32,R2
(0043) TCCR0 = 0x05; //start timer
0065 E085 LDI R24,5
0066 BF83 OUT 0x33,R24
(0044) }
0067 9508 RET
_timer0_ovf_isr:
0068 922A ST R2,-Y
0069 938A ST R24,-Y
006A 939A ST R25,-Y
006B B62F IN R2,0x3F
006C 922A ST R2,-Y
(0045)
(0046) #pragma interrupt_handler timer0_ovf_isr:10
(0047) void timer0_ovf_isr(void)
(0048) {
(0049) TCNT0 = 0x00 /*INVALID SETTING*/; //reload counter value
006D 2422 CLR R2
006E BE22 OUT 0x32,R2
(0050) t++;
006F 9180013F LDS R24,_t
0071 5F8F SUBI R24,0xFF
0072 9380013F STS _t,R24
(0051) if(t>100)
0074 E684 LDI R24,0x64
0075 9020013F LDS R2,_t
0077 1582 CP R24,R2
0078 F460 BCC 0x0085
(0052) {
(0053) t1++;
0079 9180006A LDS R24,_t1
007B 9190006B LDS R25,_t1+1
007D 9601 ADIW R24,1
007E 9390006B STS _t1+1,R25
0080 9380006A STS _t1,R24
(0054) t=0;
0082 2422 CLR R2
0083 9220013F STS _t,R2
(0055) }
(0056) }
0085 9029 LD R2,Y+
0086 BE2F OUT 0x3F,R2
0087 9199 LD R25,Y+
0088 9189 LD R24,Y+
0089 9029 LD R2,Y+
008A 9518 RETI
(0057)
(0058) void adc_init(void)
(0059) {
(0060) DDRC=0x77;
_adc_init:
008B E787 LDI R24,0x77
008C BB84 OUT 0x14,R24
(0061) PORTC=0x75;
008D E785 LDI R24,0x75
008E BB85 OUT 0x15,R24
(0062) ADCSRA = 0x00; //disable adc
008F 2422 CLR R2
0090 B826 OUT 0x06,R2
(0063) ADMUX = 0xC3; //select adc input 0
0091 EC83 LDI R24,0xC3
0092 B987 OUT 0x07,R24
(0064) ACSR = 0x80;
0093 E880 LDI R24,0x80
0094 B988 OUT 0x08,R24
(0065) ADCSRA = 0xC6;
0095 EC86 LDI R24,0xC6
0096 B986 OUT 0x06,R24
(0066) }
0097 9508 RET
(0067)
(0068) //call this routine to initialise all peripherals
(0069) void init_devices(void)
(0070) {
(0071) //stop errant interrupts until set up
(0072) CLI(); //disable all interrupts
_init_devices:
0098 94F8 BCLR 7
(0073) port_init();
0099 DFB0 RCALL _port_init
(0074) uart0_init();
009A DFBC RCALL _uart0_init
(0075) timer0_init();
009B DFC6 RCALL _timer0_init
(0076) adc_init();
009C DFEE RCALL _adc_init
(0077)
(0078) MCUCR = 0x00;
009D 2422 CLR R2
009E BE25 OUT 0x35,R2
(0079) GICR = 0x00;
009F BE2B OUT 0x3B,R2
(0080) TIMSK = 0x01; //timer interrupt sources
00A0 E081 LDI R24,1
00A1 BF89 OUT 0x39,R24
(0081) SEI(); //re-enable interrupts
00A2 9478 BSET 7
(0082) //all peripherals are now initialised
(0083) }
00A3 9508 RET
(0084)
(0085) //send data from the UART.
(0086) void sendchar(unsigned char data)
(0087) {
(0088) while(!(UCSRA&(1<<UDRE)));
_sendchar:
data --> R16
00A4 9B5D SBIS 0x0B,5
00A5 CFFE RJMP _sendchar
(0089) UDR=data;
00A6 B90C OUT 0x0C,R16
(0090) }
00A7 9508 RET
(0091) //receive data from the UART.
(0092) unsigned char getchar(void)
(0093) {
(0094) while(!(UCSRA&(1<<RXC)));
_getchar:
00A8 9B5F SBIS 0x0B,7
00A9 CFFE RJMP _getchar
(0095) return UDR;
00AA B10C IN R16,0x0C
00AB 9508 RET
_send_ans:
chk --> R20
i --> R22
ans_num --> R10
star_num --> R12
star_flag --> R22
00AC 940E0BC0 CALL push_gset4
00AE 2EC2 MOV R12,R18
00AF 2F60 MOV R22,R16
00B0 84A8 LDD R10,Y+8
(0096) }
(0097)
(0098) void send_ans(unsigned char star_flag,unsigned char star_num,unsigned char ans_num)
(0099) {
(0100) unsigned char i,chk;
(0101) chk=0xFF;
00B1 EF4F LDI R20,0xFF
(0102) chk=0xFF^star_flag;
00B2 EF8F LDI R24,0xFF
00B3 E090 LDI R25,0
00B4 2F46 MOV R20,R22
00B5 2755 CLR R21
00B6 2748 EOR R20,R24
00B7 2759 EOR R21,R25
(0103) sendchar(star_flag);
00B8 2F06 MOV R16,R22
00B9 DFEA RCALL _sendchar
(0104) chk^=0x78;
00BA E788 LDI R24,0x78
00BB 2748 EOR R20,R24
(0105) sendchar(0x78);
00BC E708 LDI R16,0x78
00BD DFE6 RCALL _sendchar
(0106) chk^=0xAB;
00BE EA8B LDI R24,0xAB
00BF E090 LDI R25,0
00C0 2E24 MOV R2,R20
00C1 2433 CLR R3
00C2 2628 EOR R2,R24
00C3 2639 EOR R3,R25
00C4 2D42 MOV R20,R2
(0107) sendchar(0xAB);
00C5 EA0B LDI R16,0xAB
00C6 DFDD RCALL _sendchar
(0108) chk^=0xEF;
00C7 EE8F LDI R24,0xEF
00C8 E090 LDI R25,0
00C9 2E24 MOV R2,R20
00CA 2433 CLR R3
00CB 2628 EOR R2,R24
00CC 2639 EOR R3,R25
00CD 2D42 MOV R20,R2
(0109) sendchar(0xEF);
00CE EE0F LDI R16,0xEF
00CF DFD4 RCALL _sendchar
(0110) chk^=host_id;
00D0 90200141 LDS R2,_host_id
00D2 2542 EOR R20,R2
(0111) sendchar(host_id);
00D3 2D02 MOV R16,R2
00D4 DFCF RCALL _sendchar
(0112) chk^=guest_id;
00D5 90200140 LDS R2,_guest_id
00D7 2542 EOR R20,R2
(0113) sendchar(guest_id);
00D8 2D02 MOV R16,R2
00D9 DFCA RCALL _sendchar
(0114) chk^=0x01;
00DA E081 LDI R24,1
00DB 2748 EOR R20,R24
(0115) sendchar(0x01);
00DC E001 LDI R16,1
00DD DFC6 RCALL _sendchar
(0116) chk^=ques_num;
00DE 9020006C LDS R2,_ques_num
00E0 2542 EOR R20,R2
(0117) sendchar(ques_num);
00E1 2D02 MOV R16,R2
00E2 DFC1 RCALL _sendchar
(0118) for(i=star_num;i<ans_num;i++)
00E3 2D6C MOV R22,R12
00E4 C011 RJMP 0x00F6
(0119) {
(0120) sendchar(ques[i]);
00E5 ED8B LDI R24,0xDB
00E6 E090 LDI R25,0
00E7 2FE6 MOV R30,R22
00E8 27FF CLR R31
00E9 0FE8 ADD R30,R24
00EA 1FF9 ADC R31,R25
00EB 8100 LDD R16,Z+0
00EC DFB7 RCALL _sendchar
(0121) chk^=ques[i];
00ED ED8B LDI R24,0xDB
00EE E090 LDI R25,0
00EF 2FE6 MOV R30,R22
00F0 27FF CLR R31
00F1 0FE8 ADD R30,R24
00F2 1FF9 ADC R31,R25
00F3 8020 LDD R2,Z+0
00F4 2542 EOR R20,R2
00F5 9563 INC R22
00F6 156A CP R22,R10
00F7 F368 BCS 0x00E5
(0122) }
(0123) chk^=0xF0;
00F8 EF80 LDI R24,0xF0
00F9 E090 LDI R25,0
00FA 2E24 MOV R2,R20
00FB 2433 CLR R3
00FC 2628 EOR R2,R24
00FD 2639 EOR R3,R25
00FE 2D42 MOV R20,R2
(0124) sendchar(0xF0);
00FF EF00 LDI R16,0xF0
0100 DFA3 RCALL _sendchar
(0125) chk^=0x0F;
0101 E08F LDI R24,0xF
0102 2748 EOR R20,R24
(0126) sendchar(0x0F);
0103 E00F LDI R16,0xF
0104 DF9F RCALL _sendchar
(0127) sendchar(chk);
0105 2F04 MOV R16,R20
0106 DF9D RCALL _sendchar
(0128) }
0107 940E0B9E CALL pop_gset4
0109 9508 RET
_send_answer:
010A 9721 SBIW R28,1
(0129)
(0130) void send_answer()
(0131) {
(0132)
(0133) if(ques_num<38)
010B 9180006C LDS R24,_ques_num
010D 3286 CPI R24,0x26
010E F430 BCC 0x0115
(0134) send_ans(0x12,0,ques_num);
010F 2E28 MOV R2,R24
0110 8228 STD Y+0,R2
0111 2722 CLR R18
0112 E102 LDI R16,0x12
0113 DF98 RCALL _send_ans
0114 C024 RJMP 0x0139
(0135) else if(ques_num>37&&ques_num<75)
0115 E285 LDI R24,0x25
0116 9020006C LDS R2,_ques_num
0118 1582 CP R24,R2
0119 F478 BCC 0x0129
011A 2D82 MOV R24,R2
011B 348B CPI R24,0x4B
011C F460 BCC 0x0129
(0136) {
(0137) send_ans(0x12,0,37);
011D E285 LDI R24,0x25
011E 8388 STD Y+0,R24
011F 2722 CLR R18
0120 E102 LDI R16,0x12
0121 DF8A RCALL _send_ans
(0138) send_ans(0x13,37,ques_num);
0122 9020006C LDS R2,_ques_num
0124 8228 STD Y+0,R2
0125 E225 LDI R18,0x25
0126 E103 LDI R16,0x13
0127 DF84 RCALL _send_ans
(0139) }
0128 C010 RJMP 0x0139
(0140) else
(0141) {
(0142) send_ans(0x12,0,37);
0129 E285 LDI R24,0x25
012A 8388 STD Y+0,R24
012B 2722 CLR R18
012C E102 LDI R16,0x12
012D DF7E RCALL _send_ans
(0143) send_ans(0x13,37,74);
012E E48A LDI R24,0x4A
012F 8388 STD Y+0,R24
0130 E225 LDI R18,0x25
0131 E103 LDI R16,0x13
0132 DF79 RCALL _send_ans
(0144) send_ans(0x14,74,ques_num);
0133 9020006C LDS R2,_ques_num
0135 8228 STD Y+0,R2
0136 E42A LDI R18,0x4A
0137 E104 LDI R16,0x14
0138 DF73 RCALL _send_ans
(0145) }
(0146) }
0139 9621 ADIW R28,1
013A 9508 RET
_receive:
j --> R20
i --> R20
013B 940E0BA1 CALL push_gset1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -