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

📄 uncode.lst

📁 用Mega32改装的4VF遥控设备 我也是从网上下的
💻 LST
📖 第 1 页 / 共 2 页
字号:
__text_start:
__start:
    000B EDCF      LDI	R28,0xDF
    000C E0D0      LDI	R29,0
    000D BFCD      OUT	0x3D,R28
    000E BFDE      OUT	0x3E,R29
    000F 51C4      SUBI	R28,0x14
    0010 40D0      SBCI	R29,0
    0011 EA0A      LDI	R16,0xAA
    0012 8308      STD	Y+0,R16
    0013 2400      CLR	R0
    0014 E6E0      LDI	R30,0x60
    0015 E0F0      LDI	R31,0
    0016 E010      LDI	R17,0
    0017 36E0      CPI	R30,0x60
    0018 07F1      CPC	R31,R17
    0019 F011      BEQ	0x001C
    001A 9201      ST	R0,Z+
    001B CFFB      RJMP	0x0017
    001C 8300      STD	Z+0,R16
    001D E1E6      LDI	R30,0x16
    001E E0F0      LDI	R31,0
    001F E6A0      LDI	R26,0x60
    0020 E0B0      LDI	R27,0
    0021 E010      LDI	R17,0
    0022 31E6      CPI	R30,0x16
    0023 07F1      CPC	R31,R17
    0024 F021      BEQ	0x0029
    0025 95C8      LPM
    0026 9631      ADIW	R30,1
    0027 920D      ST	R0,X+
    0028 CFF9      RJMP	0x0022
    0029 D03F      RCALL	_main
_exit:
    002A CFFF      RJMP	_exit
FILE: C:\DOCUME~1\Microsoft\桌面\解码器\uncode.c
(0001) //ICC-AVR application builder : 2006-2-7 20:37:19
(0002) // Target : 2313
(0003) // Crystal: 8.0000Mhz
(0004) 
(0005) #include <io2313v.h>
(0006) #include <macros.h>
(0007) #include <stdio.h>
(0008) #define Uchar unsigned char
(0009) #define Uint unsigned int
(0010) #define PB PORTB
(0011) #define PD PORTD
(0012) #define nop() asm("nop")
(0013) #define _nop_() asm("nop")
(0014) #define INPUT  (PIND&0x40)
(0015) #define TimerStart();  TCCR1B = 0x82;
(0016)                            //信号下降沿触发
(0017) 						   
(0018) 
(0019) #define WaitHigh();  while(!INPUT){nop();};
(0020)                                //只要高电平一出现就向下继续运行
(0021) #define WaitLow();  while(INPUT){nop();};
(0022)                                //只要高电平一出现就向下继续运行	
(0023) #define RESET_TIME  2900
(0024) #define MID_TIME  1200						   
(0025) #define TOV1F TIFR&0x80
(0026) #define TOV1L TIFR|=0x80
(0027) 					   
(0028) 
(0029) Uint HowLong (void)
(0030) {Uint a=0;
_HowLong:
  a                    --> R16
    002B 2700      CLR	R16
    002C 2711      CLR	R17
(0031) TCCR1B = 0x00; //stop timer
    002D 2422      CLR	R2
    002E BC2E      OUT	0x2E,R2
(0032) TCNT1=0;
    002F 2433      CLR	R3
    0030 BC3D      OUT	0x2D,R3
    0031 BC2C      OUT	0x2C,R2
(0033) return(ICR1);
    0032 B504      IN	R16,0x24
    0033 B515      IN	R17,0x25
    0034 9508      RET
(0034) }
(0035) 
(0036) void WaitReset (void)
(0037) {
_WaitReset:
    0035 C014      RJMP	0x004A
(0038) while(1)
(0039)  {
(0040)   WaitLow ();
    0036 0000      NOP
    0037 9986      SBIC	0x10,6
    0038 CFFD      RJMP	0x0036
(0041)   WaitHigh ();
    0039 C001      RJMP	0x003B
    003A 0000      NOP
    003B 9B86      SBIS	0x10,6
    003C CFFD      RJMP	0x003A
(0042)   TimerStart();
    003D E882      LDI	R24,0x82
    003E BD8E      OUT	0x2E,R24
(0043)   WaitLow ();
    003F C001      RJMP	0x0041
    0040 0000      NOP
    0041 9986      SBIC	0x10,6
    0042 CFFD      RJMP	0x0040
(0044)   if(HowLong()>RESET_TIME)break;
    0043 DFE7      RCALL	_HowLong
    0044 E584      LDI	R24,0x54
    0045 E09B      LDI	R25,0xB
    0046 1780      CP	R24,R16
    0047 0791      CPC	R25,R17
    0048 F408      BCC	0x004A
    0049 C001      RJMP	0x004B
    004A CFEC      RJMP	0x0037
(0045)  };
    004B 9508      RET
(0046) }
(0047) 
(0048) void watchdog_init(void)
(0049) {
(0050)  WDR(); //this prevents a timout on enabling
_watchdog_init:
    004C 95A8      WDR
(0051)  WDTCR = 0x0A; //WATCHDOG ENABLED - dont forget to issue WDRs
    004D E08A      LDI	R24,0xA
    004E BD81      OUT	0x21,R24
    004F 9508      RET
(0052) }
(0053) 
(0054) void timer1_init(void)
(0055) {
(0056)  TCCR1B = 0x00; //stop timer
_timer1_init:
    0050 2422      CLR	R2
    0051 BC2E      OUT	0x2E,R2
(0057)  TCNT1H = 0x00 /*INVALID SETTING*/; //set count value
    0052 BC2D      OUT	0x2D,R2
(0058)  TCNT1L = 0x00 /*INVALID SETTING*/;
    0053 BC2C      OUT	0x2C,R2
(0059)  OCR1H  = 0x00; //set compare value
    0054 BC2B      OUT	0x2B,R2
(0060)  OCR1L  = 0x00;
    0055 BC2A      OUT	0x2A,R2
(0061)  TCCR1A = 0x00;
    0056 BC2F      OUT	0x2F,R2
    0057 9508      RET
(0062) }
(0063) 
(0064) 
(0065) void port_init(void)
(0066) {
(0067)  PORTB = 0x00;
_port_init:
    0058 2422      CLR	R2
    0059 BA28      OUT	0x18,R2
(0068)  DDRB  = 0xFF; 
    005A EF8F      LDI	R24,0xFF
    005B BB87      OUT	0x17,R24
(0069)  PORTD = 0x00;
    005C BA22      OUT	0x12,R2
(0070)  DDRD  = 0x3F; 
    005D E38F      LDI	R24,0x3F
    005E BB81      OUT	0x11,R24
    005F 9508      RET
(0071) }
(0072) 
(0073) //call this routine to initialize all peripherals
(0074) void init_devices(void)
(0075) {
(0076)  //stop errant interrupts until set up
(0077)  CLI(); //disable all interrupts
_init_devices:
    0060 94F8      BCLR	7
(0078)  port_init();
    0061 DFF6      RCALL	_port_init
(0079)  timer1_init();
    0062 DFED      RCALL	_timer1_init
(0080)  MCUCR = 0x00;
    0063 2422      CLR	R2
    0064 BE25      OUT	0x35,R2
(0081)  GIMSK = 0x00;
    0065 BE2B      OUT	0x3B,R2
(0082)  TIMSK = 0x00;
    0066 BE29      OUT	0x39,R2
(0083)  SEI(); //re-enable interrupts
    0067 9478      BSET	7
    0068 9508      RET
(0084)  //all peripherals are now initialized
(0085) }
(0086) 
(0087) main()
(0088) {
(0089) Uchar sw_counter=10;//数据在开关通道的位号码//10的作用:刚开机开关信号不稳定,这时的数据是未知的,等待一个复位信号后方可使用
_main:
  sw_estate            --> R12
  sw_reset             --> R20
  sw_counter           --> R22
  error                --> R10
  temp                 --> R14
    0069 E06A      LDI	R22,0xA
(0090) Uchar sw_estate;//开关通道数据的位状态
(0091) Uchar error=0;//是否存在错误帧
    006A 24AA      CLR	R10
(0092)   //说明:如果是错误帧造成的break,那么接下来的开关数据也是未知的,必须等待一个复位信号
(0093) Uint temp;//定时器缓寸
(0094) Uchar sw_reset=0;
    006B 2744      CLR	R20
(0095) watchdog_init();//打开狗
    006C DFDF      RCALL	_watchdog_init
(0096) WaitReset ();
    006D DFC7      RCALL	_WaitReset
(0097) WDR();//喂狗
    006E 95A8      WDR
    006F C0E1      RJMP	0x0151
(0098) while(1)//1
(0099) {
(0100) if(error)sw_counter=10;//错误处理,防止产生一连串错误开关信号输出
    0070 20AA      TST	R10
    0071 F409      BNE	0x0073
    0072 C0DD      RJMP	0x0150
    0073 E06A      LDI	R22,0xA
    0074 C0DB      RJMP	0x0150
(0101) while(1)//2
(0102) { //通道1
(0103)   WaitHigh ();
    0075 0000      NOP
    0076 9B86      SBIS	0x10,6
    0077 CFFD      RJMP	0x0075
(0104)   TimerStart();
    0078 E882      LDI	R24,0x82
    0079 BD8E      OUT	0x2E,R24
(0105)   PD|=0x01; 
    007A 9A90      SBI	0x12,0
(0106)   WaitLow ();
    007B C001      RJMP	0x007D
    007C 0000      NOP
    007D 9986      SBIC	0x10,6
    007E CFFD      RJMP	0x007C
(0107)   PD&=(~0x01);
    007F 9890      CBI	0x12,0
(0108)   if(HowLong()>RESET_TIME){error=1;break;}
    0080 DFAA      RCALL	_HowLong
    0081 E584      LDI	R24,0x54
    0082 E09B      LDI	R25,0xB
    0083 1780      CP	R24,R16
    0084 0791      CPC	R25,R17
    0085 F420      BCC	0x008A
    0086 24AA      CLR	R10
    0087 94A3      INC	R10
    0088 C0C8      RJMP	0x0151
(0109)   
(0110)   //通道2
(0111)   WaitHigh ();
    0089 0000      NOP
    008A 9B86      SBIS	0x10,6
    008B CFFD      RJMP	0x0089
(0112)   TimerStart();
    008C E882      LDI	R24,0x82
    008D BD8E      OUT	0x2E,R24
(0113)   PD|=0x02;
    008E 9A91      SBI	0x12,1
(0114)   WaitLow ();
    008F C001      RJMP	0x0091
    0090 0000      NOP

⌨️ 快捷键说明

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