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

📄 edu.lst

📁 一个单片机的完整开发程序AVR的
💻 LST
📖 第 1 页 / 共 5 页
字号:
__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 + -