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

📄 uncode.lis

📁 用Mega32改装的4VF遥控设备 我也是从网上下的
💻 LIS
📖 第 1 页 / 共 3 页
字号:
                        .module uncode.c
                        .area text(rom, con, rel)
 0000                   .dbfile C:\DOCUME~1\Microsoft\桌面\解码器\uncode.c
 0000                   .dbfunc e HowLong _HowLong fi
 0000           ;              a -> R16,R17
                        .even
 0000           _HowLong::
 0000                   .dbline -1
 0000                   .dbline 30
 0000           ; //ICC-AVR application builder : 2006-2-7 20:37:19
 0000           ; // Target : 2313
 0000           ; // Crystal: 8.0000Mhz
 0000           ; 
 0000           ; #include <io2313v.h>
 0000           ; #include <macros.h>
 0000           ; #include <stdio.h>
 0000           ; #define Uchar unsigned char
 0000           ; #define Uint unsigned int
 0000           ; #define PB PORTB
 0000           ; #define PD PORTD
 0000           ; #define nop() asm("nop")
 0000           ; #define _nop_() asm("nop")
 0000           ; #define INPUT  (PIND&0x40)
 0000           ; #define TimerStart();  TCCR1B = 0x82;
 0000           ;                            //信号下降沿触发
 0000           ;                                                  
 0000           ; 
 0000           ; #define WaitHigh();  while(!INPUT){nop();};
 0000           ;                                //只要高电平一出现就向下继续运行
 0000           ; #define WaitLow();  while(INPUT){nop();};
 0000           ;                                //只要高电平一出现就向下继续运行       
 0000           ; #define RESET_TIME  2900
 0000           ; #define MID_TIME  1200                                                   
 0000           ; #define TOV1F TIFR&0x80
 0000           ; #define TOV1L TIFR|=0x80
 0000           ;                                          
 0000           ; 
 0000           ; Uint HowLong (void)
 0000           ; {Uint a=0;
 0000                   .dbline 30
 0000 0027              clr R16
 0002 1127              clr R17
 0004                   .dbline 31
 0004           ; TCCR1B = 0x00; //stop timer
 0004 2224              clr R2
 0006 2EBC              out 0x2e,R2
 0008                   .dbline 32
 0008           ; TCNT1=0;
 0008 3324              clr R3
 000A 3DBC              out 0x2d,R3
 000C 2CBC              out 0x2c,R2
 000E                   .dbline 33
 000E           ; return(ICR1);
 000E 04B5              in R16,0x24
 0010 15B5              in R17,0x25
 0012                   .dbline -2
 0012           L1:
 0012                   .dbline 0 ; func end
 0012 0895              ret
 0014                   .dbsym r a 16 i
 0014                   .dbend
 0014                   .dbfunc e WaitReset _WaitReset fV
                        .even
 0014           _WaitReset::
 0014                   .dbline -1
 0014                   .dbline 37
 0014           ; }
 0014           ; 
 0014           ; void WaitReset (void)
 0014           ; {
 0014 14C0              rjmp L4
 0016           X0:
 0016                   .dbline 39
 0016           ; while(1)
 0016           ;  {
 0016                   .dbline 40
 0016           L6:
 0016                   .dbline 40
 0016                   .dbline 40
 0016 0000              nop
 0018                   .dbline 40
 0018           L7:
 0018                   .dbline 40
 0018           ;   WaitLow ();
 0018 8699              sbic 0x10,6
 001A FDCF              rjmp L6
 001C                   .dbline 40
 001C                   .dbline 40
 001C                   .dbline 41
 001C 01C0              rjmp L10
 001E           L9:
 001E                   .dbline 41
 001E                   .dbline 41
 001E 0000              nop
 0020                   .dbline 41
 0020           L10:
 0020                   .dbline 41
 0020           ;   WaitHigh ();
 0020 869B              sbis 0x10,6
 0022 FDCF              rjmp L9
 0024                   .dbline 41
 0024                   .dbline 41
 0024                   .dbline 42
 0024           ;   TimerStart();
 0024                   .dbline 42
 0024 82E8              ldi R24,130
 0026 8EBD              out 0x2e,R24
 0028                   .dbline 42
 0028                   .dbline 43
 0028 01C0              rjmp L13
 002A           L12:
 002A                   .dbline 43
 002A                   .dbline 43
 002A 0000              nop
 002C                   .dbline 43
 002C           L13:
 002C                   .dbline 43
 002C           ;   WaitLow ();
 002C 8699              sbic 0x10,6
 002E FDCF              rjmp L12
 0030                   .dbline 43
 0030                   .dbline 43
 0030                   .dbline 44
 0030           ;   if(HowLong()>RESET_TIME)break;
 0030 E7DF              rcall _HowLong
 0032 84E5              ldi R24,2900
 0034 9BE0              ldi R25,11
 0036 8017              cp R24,R16
 0038 9107              cpc R25,R17
 003A 08F4              brsh L15
 003C                   .dbline 44
 003C 01C0              rjmp L5
 003E           L15:
 003E                   .dbline 45
 003E           L4:
 003E                   .dbline 38
 003E ECCF              rjmp L7
 0040           L5:
 0040                   .dbline 45
 0040           ;  };
 0040                   .dbline -2
 0040           L2:
 0040                   .dbline 0 ; func end
 0040 0895              ret
 0042                   .dbend
 0042                   .dbfunc e watchdog_init _watchdog_init fV
                        .even
 0042           _watchdog_init::
 0042                   .dbline -1
 0042                   .dbline 49
 0042           ; }
 0042           ; 
 0042           ; void watchdog_init(void)
 0042           ; {
 0042                   .dbline 50
 0042           ;  WDR(); //this prevents a timout on enabling
 0042 A895              wdr
 0044                   .dbline 51
 0044           ;  WDTCR = 0x0A; //WATCHDOG ENABLED - dont forget to issue WDRs
 0044 8AE0              ldi R24,10
 0046 81BD              out 0x21,R24
 0048                   .dbline -2
 0048           L17:
 0048                   .dbline 0 ; func end
 0048 0895              ret
 004A                   .dbend
 004A                   .dbfunc e timer1_init _timer1_init fV
                        .even
 004A           _timer1_init::
 004A                   .dbline -1
 004A                   .dbline 55
 004A           ; }
 004A           ; 
 004A           ; void timer1_init(void)
 004A           ; {
 004A                   .dbline 56
 004A           ;  TCCR1B = 0x00; //stop timer
 004A 2224              clr R2
 004C 2EBC              out 0x2e,R2
 004E                   .dbline 57
 004E           ;  TCNT1H = 0x00 /*INVALID SETTING*/; //set count value
 004E 2DBC              out 0x2d,R2
 0050                   .dbline 58
 0050           ;  TCNT1L = 0x00 /*INVALID SETTING*/;
 0050 2CBC              out 0x2c,R2
 0052                   .dbline 59
 0052           ;  OCR1H  = 0x00; //set compare value
 0052 2BBC              out 0x2b,R2
 0054                   .dbline 60
 0054           ;  OCR1L  = 0x00;
 0054 2ABC              out 0x2a,R2
 0056                   .dbline 61
 0056           ;  TCCR1A = 0x00;
 0056 2FBC              out 0x2f,R2
 0058                   .dbline -2
 0058           L18:
 0058                   .dbline 0 ; func end
 0058 0895              ret
 005A                   .dbend
 005A                   .dbfunc e port_init _port_init fV
                        .even
 005A           _port_init::
 005A                   .dbline -1
 005A                   .dbline 66
 005A           ; }
 005A           ; 
 005A           ; 
 005A           ; void port_init(void)
 005A           ; {
 005A                   .dbline 67
 005A           ;  PORTB = 0x00;
 005A 2224              clr R2
 005C 28BA              out 0x18,R2
 005E                   .dbline 68
 005E           ;  DDRB  = 0xFF; 
 005E 8FEF              ldi R24,255
 0060 87BB              out 0x17,R24
 0062                   .dbline 69
 0062           ;  PORTD = 0x00;
 0062 22BA              out 0x12,R2
 0064                   .dbline 70
 0064           ;  DDRD  = 0x3F; 
 0064 8FE3              ldi R24,63
 0066 81BB              out 0x11,R24
 0068                   .dbline -2
 0068           L19:
 0068                   .dbline 0 ; func end
 0068 0895              ret
 006A                   .dbend
 006A                   .dbfunc e init_devices _init_devices fV
                        .even
 006A           _init_devices::
 006A                   .dbline -1
 006A                   .dbline 75
 006A           ; }
 006A           ; 
 006A           ; //call this routine to initialize all peripherals
 006A           ; void init_devices(void)
 006A           ; {
 006A                   .dbline 77
 006A           ;  //stop errant interrupts until set up
 006A           ;  CLI(); //disable all interrupts
 006A F894              cli
 006C                   .dbline 78
 006C           ;  port_init();
 006C F6DF              rcall _port_init
 006E                   .dbline 79
 006E           ;  timer1_init();
 006E EDDF              rcall _timer1_init
 0070                   .dbline 80
 0070           ;  MCUCR = 0x00;
 0070 2224              clr R2
 0072 25BE              out 0x35,R2
 0074                   .dbline 81
 0074           ;  GIMSK = 0x00;
 0074 2BBE              out 0x3b,R2
 0076                   .dbline 82
 0076           ;  TIMSK = 0x00;
 0076 29BE              out 0x39,R2
 0078                   .dbline 83
 0078           ;  SEI(); //re-enable interrupts
 0078 7894              sei
 007A                   .dbline -2
 007A           L20:
 007A                   .dbline 0 ; func end
 007A 0895              ret
 007C                   .dbend
 007C                   .dbfunc e main _main fI
 007C           ;      sw_estate -> R12
 007C           ;       sw_reset -> R20
 007C           ;     sw_counter -> R22
 007C           ;          error -> R10
 007C           ;           temp -> R14,R15
                        .even
 007C           _main::
 007C                   .dbline -1
 007C                   .dbline 88
 007C           ;  //all peripherals are now initialized
 007C           ; }
 007C           ; 
 007C           ; main()
 007C           ; {
 007C                   .dbline 89
 007C           ; Uchar sw_counter=10;//数据在开关通道的位号码//10的作用:刚开机开关信号不稳定,这时的数据是未知的,等待一个复位信号后方可使用
 007C 6AE0              ldi R22,10
 007E                   .dbline 91
 007E           ; Uchar sw_estate;//开关通道数据的位状态
 007E           ; Uchar error=0;//是否存在错误帧
 007E AA24              clr R10
 0080                   .dbline 94
 0080           ;   //说明:如果是错误帧造成的break,那么接下来的开关数据也是未知的,必须等待一个复位信号
 0080           ; Uint temp;//定时器缓寸
 0080           ; Uchar sw_reset=0;
 0080 4427              clr R20
 0082                   .dbline 95
 0082           ; watchdog_init();//打开狗
 0082 DFDF              rcall _watchdog_init
 0084                   .dbline 96
 0084           ; WaitReset ();
 0084 C7DF              rcall _WaitReset
 0086                   .dbline 97

⌨️ 快捷键说明

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