📄 uncode.lis
字号:
.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 + -