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

📄 yaokong.lst

📁 实现无线控制功能
💻 LST
📖 第 1 页 / 共 3 页
字号:
__text_start:
__start:
    004C E5CF      LDI	R28,0x5F
    004D E0D8      LDI	R29,0x8
    004E BFCD      OUT	0x3D,R28
    004F BFDE      OUT	0x3E,R29
    0050 51C0      SUBI	R28,0x10
    0051 40D0      SBCI	R29,0
    0052 EA0A      LDI	R16,0xAA
    0053 8308      STD	Y+0,R16
    0054 2400      CLR	R0
    0055 EAE3      LDI	R30,0xA3
    0056 E0F0      LDI	R31,0
    0057 E010      LDI	R17,0
    0058 3BE1      CPI	R30,0xB1
    0059 07F1      CPC	R31,R17
    005A F011      BEQ	0x005D
    005B 9201      ST	R0,Z+
    005C CFFB      RJMP	0x0058
    005D 8300      STD	Z+0,R16
    005E E5E4      LDI	R30,0x54
    005F E0F0      LDI	R31,0
    0060 E6A0      LDI	R26,0x60
    0061 E0B0      LDI	R27,0
    0062 E010      LDI	R17,0
    0063 39E7      CPI	R30,0x97
    0064 07F1      CPC	R31,R17
    0065 F021      BEQ	0x006A
    0066 95C8      LPM
    0067 9631      ADIW	R30,1
    0068 920D      ST	R0,X+
    0069 CFF9      RJMP	0x0063
    006A 940E03E2  CALL	_main
_exit:
    006C CFFF      RJMP	_exit
FILE: C:\DOCUME~1\Administrator\桌面\无线视频车\程序\cw1.c
(0001) #include "iom32v.h"
(0002) #include "macros.h"
(0003) #define wuxian_js    PA3 //无线接收
(0004) #define power_led    PC6 //电源指示灯
(0005) #define study_key    PC1  //学习键
(0006) #define   UDRE  5	     //发送缓冲区为空
(0007) #define   DATA_REGISTER_EMPTY        (1<<UDRE)
(0008) #define  uchar  unsigned char
(0009) #define  ulong  unsigned long
(0010) ulong    count,count1;  //定时器2计数器
(0011) uchar    code[3],code1[3];
(0012) ulong data=0;
(0013) uchar forward[14]={0x00,0x7f,0x7f,0xff,0xff,0xfb,0x00,0x00,0x7f,
(0014)                     0xff,0xff,0xff,0xfd,0x00};
(0015) uchar back[14]={0x00,0x7f,0x7f,0xff,0xff,0xfd,0x00,0x00,0x7f,0xff,
(0016)                      0xff,0xff,0xfd,0x00};
(0017) uchar UP[7]={0xff,0x01,0x00,0x08,0x00,0x2f,0x38};
(0018) uchar DOWN[7]={0xff,0x01,0x00,0x10,0x00,0x2f,0x40};
(0019) uchar left[7]={0xff,0x01,0x00,0x04,0x3f,0x00,0x44}; 
(0020) uchar right[7]={0xff,0x01,0x00,0x02,0x3f,0x00,0x42};
(0021) uchar STOP[7]={0xff,0x01,0x00,0x00,0x00,0x00,0x01};
(0022) void delay_ms(void)                         //毫秒延时  
(0023) {     
(0024)      unsigned int i; 
(0025)      for (i=0;i<140;i++)  
_delay_ms:
  i                    --> R16
    006D 2700      CLR	R16
    006E 2711      CLR	R17
    006F C002      RJMP	0x0072
    0070 5F0F      SUBI	R16,0xFF
    0071 4F1F      SBCI	R17,0xFF
    0072 380C      CPI	R16,0x8C
    0073 E0E0      LDI	R30,0
    0074 071E      CPC	R17,R30
    0075 F3D0      BCS	0x0070
    0076 9508      RET
_delay_nms:
  i                    --> R20
  n                    --> R22
    0077 940E03F7  CALL	push_gset2
    0079 01B8      MOVW	R22,R16
(0026)           { 
(0027)           } 
(0028) } 
(0029) 
(0030) void delay_nms(unsigned int n)              //延时周期 
(0031) { 
(0032)      unsigned int i; 
(0033)      for (i=0;i<n;i++) 
    007A 2744      CLR	R20
    007B 2755      CLR	R21
    007C C003      RJMP	0x0080
(0034)           { 
(0035)            delay_ms(); 
    007D DFEF      RCALL	_delay_ms
    007E 5F4F      SUBI	R20,0xFF
    007F 4F5F      SBCI	R21,0xFF
    0080 1746      CP	R20,R22
    0081 0757      CPC	R21,R23
    0082 F3D0      BCS	0x007D
    0083 940E03EB  CALL	pop_gset2
    0085 9508      RET
(0036)           } 
(0037) } 
(0038) void  port_init(void)
(0039)       {
(0040) 	   PORTA = 0xff;
_port_init:
    0086 EF8F      LDI	R24,0xFF
    0087 BB8B      OUT	0x1B,R24
(0041)        DDRA  = 0x00;
    0088 2422      CLR	R2
    0089 BA2A      OUT	0x1A,R2
(0042)        PORTB = 0x00;
    008A BA28      OUT	0x18,R2
(0043)        DDRB  = 0x00;
    008B BA27      OUT	0x17,R2
(0044)        PORTC = 0x01; //m103 output only
    008C E081      LDI	R24,1
    008D BB85      OUT	0x15,R24
(0045)        DDRC  = 0x00;
    008E BA24      OUT	0x14,R2
(0046)        PORTD = 0x00;
    008F BA22      OUT	0x12,R2
(0047)        DDRD  = 0x00; 
    0090 BA21      OUT	0x11,R2
    0091 9508      RET
(0048) 	  }
(0049) void uart0_init(void)
(0050)       {
(0051)        UCSRB = 0x00; //disable while setting baud rate
_uart0_init:
    0092 2422      CLR	R2
    0093 B82A      OUT	0x0A,R2
(0052)        UCSRA = 0x00;
    0094 B82B      OUT	0x0B,R2
(0053)        UCSRC = BIT(URSEL) | 0x06;
    0095 E886      LDI	R24,0x86
    0096 BD80      OUT	0x20,R24
(0054)        UBRRL = 0x67; //set baud rate lo6719
    0097 E687      LDI	R24,0x67
    0098 B989      OUT	0x09,R24
(0055)        UBRRH = 0x00; //set baud rate hi
    0099 BC20      OUT	0x20,R2
(0056)        UCSRB = 0x08;
    009A E088      LDI	R24,0x8
    009B B98A      OUT	0x0A,R24
    009C 9508      RET
(0057)       }    
(0058) //发送单字节字符
(0059) void  uart_transmit_byte( unsigned char data)
(0060)      {
(0061)        while(!(UCSRA&DATA_REGISTER_EMPTY));
_uart_transmit_byte:
  data                 --> R16
    009D 9B5D      SBIS	0x0B,5
    009E CFFE      RJMP	_uart_transmit_byte
(0062)        UDR=data;
    009F B90C      OUT	0x0C,R16
    00A0 9508      RET
(0063)      }	
(0064) 	 
(0065) //TIMER2 initialize - prescale:8
(0066) // desired value: 100uSec
(0067) // actual value: 100.000uSec (0.0%)
(0068) void timer2_init(void)
(0069) {
(0070)  TCCR2 = 0x00; //stop
_timer2_init:
    00A1 2422      CLR	R2
    00A2 BC25      OUT	0x25,R2
(0071)  ASSR  = 0x00; //set async mode
    00A3 BC22      OUT	0x22,R2
(0072)  TCNT2 = 0xCE; //setup
    00A4 EC8E      LDI	R24,0xCE
    00A5 BD84      OUT	0x24,R24
(0073)  OCR2  = 0x32;
    00A6 E382      LDI	R24,0x32
    00A7 BD83      OUT	0x23,R24
(0074)  TCCR2 = 0x02; //start
    00A8 E082      LDI	R24,2
    00A9 BD85      OUT	0x25,R24
    00AA 9508      RET
_timer2_ovf_isr:
    00AB 920A      ST	R0,-Y
    00AC 921A      ST	R1,-Y
    00AD 922A      ST	R2,-Y
    00AE 923A      ST	R3,-Y
    00AF 924A      ST	R4,-Y
    00B0 925A      ST	R5,-Y
    00B1 938A      ST	R24,-Y
    00B2 93EA      ST	R30,-Y
    00B3 B60F      IN	R0,0x3F
    00B4 920A      ST	R0,-Y
    00B5 940E03F7  CALL	push_gset2
(0075) }
(0076) 
(0077) #pragma interrupt_handler timer2_ovf_isr:6
(0078) void timer2_ovf_isr(void)
(0079) {
(0080)  TCNT2 = 0xCE; //reload counter value
    00B7 EC8E      LDI	R24,0xCE
    00B8 BD84      OUT	0x24,R24
(0081)  if(count<65535){++count;}
    00B9 EF4F      LDI	R20,0xFF
    00BA EF5F      LDI	R21,0xFF
    00BB E060      LDI	R22,0
    00BC E070      LDI	R23,0
    00BD 904000AF  LDS	R4,count+2
    00BF 905000B0  LDS	R5,count+3
    00C1 902000AD  LDS	R2,count
    00C3 903000AE  LDS	R3,count+1
    00C5 1624      CP	R2,R20
    00C6 0635      CPC	R3,R21
    00C7 0646      CPC	R4,R22
    00C8 0657      CPC	R5,R23
    00C9 F480      BCC	0x00DA
    00CA E041      LDI	R20,1
    00CB E050      LDI	R21,0
    00CC E060      LDI	R22,0
    00CD E070      LDI	R23,0
    00CE 0E24      ADD	R2,R20
    00CF 1E35      ADC	R3,R21
    00D0 1E46      ADC	R4,R22
    00D1 1E57      ADC	R5,R23
    00D2 923000AE  STS	count+1,R3
    00D4 922000AD  STS	count,R2
    00D6 925000B0  STS	count+3,R5
    00D8 924000AF  STS	count+2,R4
(0082)  if(count1<65535){++count1;}
    00DA EF4F      LDI	R20,0xFF
    00DB EF5F      LDI	R21,0xFF
    00DC E060      LDI	R22,0
    00DD E070      LDI	R23,0
    00DE 904000AB  LDS	R4,count1+2
    00E0 905000AC  LDS	R5,count1+3
    00E2 902000A9  LDS	R2,count1
    00E4 903000AA  LDS	R3,count1+1
    00E6 1624      CP	R2,R20
    00E7 0635      CPC	R3,R21
    00E8 0646      CPC	R4,R22
    00E9 0657      CPC	R5,R23
    00EA F480      BCC	0x00FB
    00EB E041      LDI	R20,1
    00EC E050      LDI	R21,0
    00ED E060      LDI	R22,0
    00EE E070      LDI	R23,0
    00EF 0E24      ADD	R2,R20
    00F0 1E35      ADC	R3,R21
    00F1 1E46      ADC	R4,R22
    00F2 1E57      ADC	R5,R23
    00F3 923000AA  STS	count1+1,R3
    00F5 922000A9  STS	count1,R2
    00F7 925000AC  STS	count1+3,R5
    00F9 924000AB  STS	count1+2,R4
    00FB 940E03EB  CALL	pop_gset2
    00FD 9009      LD	R0,Y+
    00FE BE0F      OUT	0x3F,R0
    00FF 91E9      LD	R30,Y+
    0100 9189      LD	R24,Y+
    0101 9059      LD	R5,Y+
    0102 9049      LD	R4,Y+
    0103 9039      LD	R3,Y+
    0104 9029      LD	R2,Y+
    0105 9019      LD	R1,Y+
    0106 9009      LD	R0,Y+
    0107 9518      RETI
(0083) }  
(0084) //==============================================================================
(0085) void eeprom_writ(uchar dz,uchar sj) //写EEPROM  
(0086) {
(0087)      CLI(); //清总中断
_eeprom_writ:
  sj                   --> R18
  dz                   --> R16
    0108 94F8      BCLR	7
(0088) 	 while(EECR & (1<<EEWE)){;}
    0109 99E1      SBIC	0x1C,1
    010A CFFE      RJMP	0x0109
(0089) 	 EEARH=0x00;
    010B 2422      CLR	R2
    010C BA2F      OUT	0x1F,R2
(0090) 	 EEARL=dz;
    010D BB0E      OUT	0x1E,R16
(0091) 	 EEDR=sj;
    010E BB2D      OUT	0x1D,R18
(0092) 	 EECR |= (1<<EEMWE);
    010F 9AE2      SBI	0x1C,2
(0093) 	 EECR |= (1<<EEWE);
    0110 9AE1      SBI	0x1C,1
(0094)      SEI();
    0111 9478      BSET	7
    0112 9508      RET
(0095) }
(0096) //==============================================================================
(0097) uchar eeprom_read(uchar dz)     //读EEPROM
(0098) {
(0099)     CLI(); //清总中断
_eeprom_read:
  dz                   --> R16
    0113 94F8      BCLR	7
(0100) 	while(EECR & (1<<EEWE)){;}
    0114 99E1      SBIC	0x1C,1
    0115 CFFE      RJMP	0x0114
(0101) 	EEARH=0x00;
    0116 2422      CLR	R2
    0117 BA2F      OUT	0x1F,R2
(0102) 	EEARL=dz;
    0118 BB0E      OUT	0x1E,R16
(0103) 	EECR |= (1<<EERE);
    0119 9AE0      SBI	0x1C,0
(0104) 	SEI();
    011A 9478      BSET	7
(0105) 	return(EEDR); 
    011B B30D      IN	R16,0x1D
    011C 9508      RET
(0106) }  
(0107) void init_devices(void)
(0108) {
(0109)  //stop errant interrupts until set up
(0110)  CLI(); //disable all interrupts
_init_devices:
    011D 94F8      BCLR	7
(0111)  port_init();
    011E DF67      RCALL	_port_init
(0112)  timer2_init();
    011F DF81      RCALL	_timer2_init
(0113)  uart0_init();
    0120 DF71      RCALL	_uart0_init
(0114)  MCUCR = 0x00;
    0121 2422      CLR	R2
    0122 BE25      OUT	0x35,R2
(0115)  GICR  = 0x00;
    0123 BE2B      OUT	0x3B,R2
(0116)  TIMSK = 0x40; //timer interrupt sources
    0124 E480      LDI	R24,0x40
    0125 BF89      OUT	0x39,R24
(0117)  SEI(); //re-enable interrupts
    0126 9478      BSET	7
    0127 9508      RET
_decode:
  j                    --> R10
  i                    --> R12
  data                 --> Y+0
  flag                 --> R10
  pin_var              --> R14
    0128 940E03F1  CALL	push_gset5
    012A 9724      SBIW	R28,4
(0118)  //all peripherals are now initialized
(0119) }
(0120) uchar decode(void)
(0121)      {
(0122) 	   uchar pin_var,i;
(0123) 	   uchar flag=0;
    012B 24AA      CLR	R10
(0124) 	   signed char j;
(0125) 	   ulong data=0;
    012C E040      LDI	R20,0
    012D E050      LDI	R21,0
    012E E060      LDI	R22,0
    012F E070      LDI	R23,0
    0130 01FE      MOVW	R30,R28
    0131 8340      STD	Z+0,R20
    0132 8351      STD	Z+1,R21
    0133 8362      STD	Z+2,R22
    0134 8373      STD	Z+3,R23
(0126) 	   count1=0;
    0135 E040      LDI	R20,0
    0136 E050      LDI	R21,0
    0137 E060      LDI	R22,0
    0138 E070      LDI	R23,0
    0139 935000AA  STS	count1+1,R21
    013B 934000A9  STS	count1,R20
    013D 937000AC  STS	count1+3,R23
    013F 936000AB  STS	count1+2,R22
(0127) 	   DDRA&=~(1<<wuxian_js);PORTA|=(1<<wuxian_js);
    0141 98D3      CBI	0x1A,3
    0142 9ADB      SBI	0x1B,3
    0143 C07A      RJMP	0x01BE
(0128) 	   while(1)
(0129) 	       {
(0130) 		    if(count1>250){return(0xff);}
    0144 EF4A      LDI	R20,0xFA
    0145 E050      LDI	R21,0
    0146 E060      LDI	R22,0
    0147 E070      LDI	R23,0
    0148 904000AB  LDS	R4,count1+2
    014A 905000AC  LDS	R5,count1+3
    014C 902000A9  LDS	R2,count1
    014E 903000AA  LDS	R3,count1+1
    0150 1542      CP	R20,R2
    0151 0553      CPC	R21,R3
    0152 0564      CPC	R22,R4
    0153 0575      CPC	R23,R5
    0154 F410      BCC	0x0157
    0155 EF0F      LDI	R16,0xFF
    0156 C12C      RJMP	0x0283
(0131) 		    pin_var=PINA&(1<<wuxian_js);
    0157 B389      IN	R24,0x19
    0158 7088      ANDI	R24,0x8
    0159 2EE8      MOV	R14,R24
(0132) 			if(flag==1){break;}
    015A 2D8A      MOV	R24,R10
    015B 3081      CPI	R24,1
    015C F009      BEQ	0x015E
    015D C059      RJMP	0x01B7
    015E C060      RJMP	0x01BF
(0133) 			while(pin_var==0)
(0134) 			     {
(0135) 				   count=0;
    015F E040      LDI	R20,0
    0160 E050      LDI	R21,0
    0161 E060      LDI	R22,0
    0162 E070      LDI	R23,0
    0163 935000AE  STS	count+1,R21
    0165 934000AD  STS	count,R20
    0167 937000B0  STS	count+3,R23
    0169 936000AF  STS	count+2,R22
(0136) 				   if(count1>250){return(0xff);}
    016B EF4A      LDI	R20,0xFA
    016C E050      LDI	R21,0
    016D E060      LDI	R22,0
    016E E070      LDI	R23,0
    016F 904000AB  LDS	R4,count1+2
    0171 905000AC  LDS	R5,count1+3

⌨️ 快捷键说明

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