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

📄 uncode.s

📁 用Mega32改装的4VF遥控设备 我也是从网上下的
💻 S
字号:
	.module uncode.c
	.area text(rom, con, rel)
	.dbfile C:\DOCUME~1\Microsoft\桌面\解码器\uncode.c
	.dbfunc e HowLong _HowLong fi
;              a -> R16,R17
	.even
_HowLong::
	.dbline -1
	.dbline 30
; //ICC-AVR application builder : 2006-2-7 20:37:19
; // Target : 2313
; // Crystal: 8.0000Mhz
; 
; #include <io2313v.h>
; #include <macros.h>
; #include <stdio.h>
; #define Uchar unsigned char
; #define Uint unsigned int
; #define PB PORTB
; #define PD PORTD
; #define nop() asm("nop")
; #define _nop_() asm("nop")
; #define INPUT  (PIND&0x40)
; #define TimerStart();  TCCR1B = 0x82;
;                            //信号下降沿触发
; 						   
; 
; #define WaitHigh();  while(!INPUT){nop();};
;                                //只要高电平一出现就向下继续运行
; #define WaitLow();  while(INPUT){nop();};
;                                //只要高电平一出现就向下继续运行	
; #define RESET_TIME  2900
; #define MID_TIME  1200						   
; #define TOV1F TIFR&0x80
; #define TOV1L TIFR|=0x80
; 					   
; 
; Uint HowLong (void)
; {Uint a=0;
	.dbline 30
	clr R16
	clr R17
	.dbline 31
; TCCR1B = 0x00; //stop timer
	clr R2
	out 0x2e,R2
	.dbline 32
; TCNT1=0;
	clr R3
	out 0x2d,R3
	out 0x2c,R2
	.dbline 33
; return(ICR1);
	in R16,0x24
	in R17,0x25
	.dbline -2
L1:
	.dbline 0 ; func end
	ret
	.dbsym r a 16 i
	.dbend
	.dbfunc e WaitReset _WaitReset fV
	.even
_WaitReset::
	.dbline -1
	.dbline 37
; }
; 
; void WaitReset (void)
; {
	rjmp L4
X0:
	.dbline 39
; while(1)
;  {
	.dbline 40
L6:
	.dbline 40
	.dbline 40
	nop
	.dbline 40
L7:
	.dbline 40
;   WaitLow ();
	sbic 0x10,6
	rjmp L6
	.dbline 40
	.dbline 40
	.dbline 41
	rjmp L10
L9:
	.dbline 41
	.dbline 41
	nop
	.dbline 41
L10:
	.dbline 41
;   WaitHigh ();
	sbis 0x10,6
	rjmp L9
	.dbline 41
	.dbline 41
	.dbline 42
;   TimerStart();
	.dbline 42
	ldi R24,130
	out 0x2e,R24
	.dbline 42
	.dbline 43
	rjmp L13
L12:
	.dbline 43
	.dbline 43
	nop
	.dbline 43
L13:
	.dbline 43
;   WaitLow ();
	sbic 0x10,6
	rjmp L12
	.dbline 43
	.dbline 43
	.dbline 44
;   if(HowLong()>RESET_TIME)break;
	rcall _HowLong
	ldi R24,2900
	ldi R25,11
	cp R24,R16
	cpc R25,R17
	brsh L15
	.dbline 44
	rjmp L5
L15:
	.dbline 45
L4:
	.dbline 38
	rjmp L7
L5:
	.dbline 45
;  };
	.dbline -2
L2:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e watchdog_init _watchdog_init fV
	.even
_watchdog_init::
	.dbline -1
	.dbline 49
; }
; 
; void watchdog_init(void)
; {
	.dbline 50
;  WDR(); //this prevents a timout on enabling
	wdr
	.dbline 51
;  WDTCR = 0x0A; //WATCHDOG ENABLED - dont forget to issue WDRs
	ldi R24,10
	out 0x21,R24
	.dbline -2
L17:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e timer1_init _timer1_init fV
	.even
_timer1_init::
	.dbline -1
	.dbline 55
; }
; 
; void timer1_init(void)
; {
	.dbline 56
;  TCCR1B = 0x00; //stop timer
	clr R2
	out 0x2e,R2
	.dbline 57
;  TCNT1H = 0x00 /*INVALID SETTING*/; //set count value
	out 0x2d,R2
	.dbline 58
;  TCNT1L = 0x00 /*INVALID SETTING*/;
	out 0x2c,R2
	.dbline 59
;  OCR1H  = 0x00; //set compare value
	out 0x2b,R2
	.dbline 60
;  OCR1L  = 0x00;
	out 0x2a,R2
	.dbline 61
;  TCCR1A = 0x00;
	out 0x2f,R2
	.dbline -2
L18:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e port_init _port_init fV
	.even
_port_init::
	.dbline -1
	.dbline 66
; }
; 
; 
; void port_init(void)
; {
	.dbline 67
;  PORTB = 0x00;
	clr R2
	out 0x18,R2
	.dbline 68
;  DDRB  = 0xFF; 
	ldi R24,255
	out 0x17,R24
	.dbline 69
;  PORTD = 0x00;
	out 0x12,R2
	.dbline 70
;  DDRD  = 0x3F; 
	ldi R24,63
	out 0x11,R24
	.dbline -2
L19:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e init_devices _init_devices fV
	.even
_init_devices::
	.dbline -1
	.dbline 75
; }
; 
; //call this routine to initialize all peripherals
; void init_devices(void)
; {
	.dbline 77
;  //stop errant interrupts until set up
;  CLI(); //disable all interrupts
	cli
	.dbline 78
;  port_init();
	rcall _port_init
	.dbline 79
;  timer1_init();
	rcall _timer1_init
	.dbline 80
;  MCUCR = 0x00;
	clr R2
	out 0x35,R2
	.dbline 81
;  GIMSK = 0x00;
	out 0x3b,R2
	.dbline 82
;  TIMSK = 0x00;
	out 0x39,R2
	.dbline 83
;  SEI(); //re-enable interrupts
	sei
	.dbline -2
L20:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e main _main fI
;      sw_estate -> R12
;       sw_reset -> R20
;     sw_counter -> R22
;          error -> R10
;           temp -> R14,R15
	.even
_main::
	.dbline -1
	.dbline 88
;  //all peripherals are now initialized
; }
; 
; main()
; {
	.dbline 89
; Uchar sw_counter=10;//数据在开关通道的位号码//10的作用:刚开机开关信号不稳定,这时的数据是未知的,等待一个复位信号后方可使用
	ldi R22,10
	.dbline 91
; Uchar sw_estate;//开关通道数据的位状态
; Uchar error=0;//是否存在错误帧
	clr R10
	.dbline 94
;   //说明:如果是错误帧造成的break,那么接下来的开关数据也是未知的,必须等待一个复位信号
; Uint temp;//定时器缓寸
; Uchar sw_reset=0;
	clr R20
	.dbline 95
; watchdog_init();//打开狗
	rcall _watchdog_init
	.dbline 96
; WaitReset ();
	rcall _WaitReset
	.dbline 97
; WDR();//喂狗
	wdr
	rjmp L23
L22:
	.dbline 99
; while(1)//1
; {
	.dbline 100
; if(error)sw_counter=10;//错误处理,防止产生一连串错误开关信号输出
	tst R10
	brne X9
	rjmp L28
X9:
	.dbline 100
	ldi R22,10
	rjmp L28
X1:
	.dbline 102
; while(1)//2
; { //通道1
	.dbline 103
L30:
	.dbline 103
	.dbline 103
	nop
	.dbline 103
L31:
	.dbline 103
;   WaitHigh ();
	sbis 0x10,6
	rjmp L30
	.dbline 103
	.dbline 103
	.dbline 104
;   TimerStart();
	.dbline 104
	ldi R24,130
	out 0x2e,R24
	.dbline 104
	.dbline 105
;   PD|=0x01; 
	sbi 0x12,0
	.dbline 106
	rjmp L34
L33:
	.dbline 106
	.dbline 106
	nop
	.dbline 106
L34:
	.dbline 106
;   WaitLow ();
	sbic 0x10,6
	rjmp L33
	.dbline 106
	.dbline 106
	.dbline 107
;   PD&=(~0x01);
	cbi 0x12,0
	.dbline 108
;   if(HowLong()>RESET_TIME){error=1;break;}
	rcall _HowLong
	ldi R24,2900
	ldi R25,11
	cp R24,R16
	cpc R25,R17
	brsh L39
	.dbline 108
	.dbline 108
	clr R10
	inc R10
	.dbline 108
	rjmp L29
X2:
	.dbline 111
L38:
	.dbline 111
	.dbline 111
	nop
	.dbline 111
L39:
	.dbline 111
;   
;   //通道2
;   WaitHigh ();
	sbis 0x10,6
	rjmp L38
	.dbline 111
	.dbline 111
	.dbline 112
;   TimerStart();
	.dbline 112
	ldi R24,130
	out 0x2e,R24
	.dbline 112
	.dbline 113
;   PD|=0x02;
	sbi 0x12,1
	.dbline 114
	rjmp L42
L41:
	.dbline 114
	.dbline 114
	nop
	.dbline 114
L42:
	.dbline 114
;   WaitLow ();
	sbic 0x10,6
	rjmp L41
	.dbline 114
	.dbline 114
	.dbline 115
;   PD&=(~0x02);
	cbi 0x12,1
	.dbline 116
;   if(HowLong()>RESET_TIME){error=1;break;}
	rcall _HowLong
	ldi R24,2900
	ldi R25,11
	cp R24,R16
	cpc R25,R17
	brsh L47
	.dbline 116
	.dbline 116
	clr R10
	inc R10
	.dbline 116
	rjmp L29
X3:
	.dbline 119
L46:
	.dbline 119
	.dbline 119
	nop
	.dbline 119
L47:
	.dbline 119
; 
;   //通道3
;   WaitHigh ();
	sbis 0x10,6
	rjmp L46
	.dbline 119
	.dbline 119
	.dbline 120
;   TimerStart();
	.dbline 120
	ldi R24,130
	out 0x2e,R24
	.dbline 120
	.dbline 121
;   PD|=0x04;
	sbi 0x12,2
	.dbline 122
	rjmp L50
L49:
	.dbline 122
	.dbline 122
	nop
	.dbline 122
L50:
	.dbline 122
;   WaitLow ();
	sbic 0x10,6
	rjmp L49
	.dbline 122
	.dbline 122
	.dbline 123
;   PD&=(~0x04);
	cbi 0x12,2
	.dbline 124
;   if(HowLong()>RESET_TIME){error=1;break;}
	rcall _HowLong
	ldi R24,2900
	ldi R25,11
	cp R24,R16
	cpc R25,R17
	brsh L55
	.dbline 124
	.dbline 124
	clr R10
	inc R10
	.dbline 124
	rjmp L29
X4:
	.dbline 127
L54:
	.dbline 127
	.dbline 127
	nop
	.dbline 127
L55:
	.dbline 127
;  
;   //通道4
;   WaitHigh ();
	sbis 0x10,6
	rjmp L54
	.dbline 127
	.dbline 127
	.dbline 128
;   TimerStart();
	.dbline 128
	ldi R24,130
	out 0x2e,R24
	.dbline 128
	.dbline 129
;   PD|=0x08;
	sbi 0x12,3
	.dbline 130
	rjmp L58
L57:
	.dbline 130
	.dbline 130
	nop
	.dbline 130
L58:
	.dbline 130
;   WaitLow ();
	sbic 0x10,6
	rjmp L57
	.dbline 130
	.dbline 130
	.dbline 131
;   PD&=(~0x08);
	cbi 0x12,3
	.dbline 132
;   if(HowLong()>RESET_TIME){error=1;break;}
	rcall _HowLong
	ldi R24,2900
	ldi R25,11
	cp R24,R16
	cpc R25,R17
	brsh L63
	.dbline 132
	.dbline 132
	clr R10
	inc R10
	.dbline 132
	rjmp L29
X5:
	.dbline 135
L62:
	.dbline 135
	.dbline 135
	nop
	.dbline 135
L63:
	.dbline 135
; 
;   //通道5
;   WaitHigh ();
	sbis 0x10,6
	rjmp L62
	.dbline 135
	.dbline 135
	.dbline 136
;   TimerStart();
	.dbline 136
	ldi R24,130
	out 0x2e,R24
	.dbline 136
	.dbline 137
;   PD|=0x10;
	sbi 0x12,4
	.dbline 138
	rjmp L66
L65:
	.dbline 138
	.dbline 138
	nop
	.dbline 138
L66:
	.dbline 138
;   WaitLow ();
	sbic 0x10,6
	rjmp L65
	.dbline 138
	.dbline 138
	.dbline 139
;   PD&=(~0x10);
	cbi 0x12,4
	.dbline 140
;   if(HowLong()>RESET_TIME){error=1;break;}
	rcall _HowLong
	ldi R24,2900
	ldi R25,11
	cp R24,R16
	cpc R25,R17
	brsh L71
	.dbline 140
	.dbline 140
	clr R10
	inc R10
	.dbline 140
	rjmp L29
X6:
	.dbline 143
L70:
	.dbline 143
	.dbline 143
	nop
	.dbline 143
L71:
	.dbline 143
; 
;   //通道6
;   WaitHigh ();
	sbis 0x10,6
	rjmp L70
	.dbline 143
	.dbline 143
	.dbline 144
;   TimerStart();
	.dbline 144
	ldi R24,130
	out 0x2e,R24
	.dbline 144
	.dbline 145
;   PD|=0x10;
	sbi 0x12,4
	.dbline 146
	rjmp L74
L73:
	.dbline 146
	.dbline 146
	nop
	.dbline 146
L74:
	.dbline 146
;   WaitLow ();
	sbic 0x10,6
	rjmp L73
	.dbline 146
	.dbline 146
	.dbline 147
;   PD&=(~0x10);
	cbi 0x12,4
	.dbline 148
;   if(HowLong()>RESET_TIME){error=1;break;}
	rcall _HowLong
	ldi R24,2900
	ldi R25,11
	cp R24,R16
	cpc R25,R17
	brsh L79
	.dbline 148
	.dbline 148
	clr R10
	inc R10
	.dbline 148
	rjmp L29
X7:
	.dbline 151
L78:
	.dbline 151
	.dbline 151
	nop
	.dbline 151
L79:
	.dbline 151
;   
;   //开关数据通道
;   WaitHigh ();
	sbis 0x10,6
	rjmp L78
	.dbline 151
	.dbline 151
	.dbline 152
;   TimerStart();
	.dbline 152
	ldi R24,130
	out 0x2e,R24
	.dbline 152
	.dbline 153
	rjmp L82
L81:
	.dbline 153
	.dbline 153
	nop
	.dbline 153
L82:
	.dbline 153
;   WaitLow ();
	sbic 0x10,6
	rjmp L81
	.dbline 153
	.dbline 153
	.dbline 154
;   temp=HowLong();
	rcall _HowLong
	mov R14,R16
	mov R15,R17
	.dbline 155
;   if(temp>RESET_TIME){error=1;break;}
	ldi R24,2900
	ldi R25,11
	cp R24,R16
	cpc R25,R17
	brsh L84
	.dbline 155
	.dbline 155
	clr R10
	inc R10
	.dbline 155
	rjmp L29
L84:
	.dbline 156
	ldi R24,1200
	ldi R25,4
	cp R24,R14
	cpc R25,R15
	brsh L86
	.dbline 156
	clr R12
	inc R12
	rjmp L89
L86:
	.dbline 156
;   if(temp>MID_TIME)sw_estate=1;else sw_estate=0;
	clr R12
	.dbline 159
	rjmp L89
L88:
	.dbline 159
	.dbline 159
	nop
	.dbline 159
L89:
	.dbline 159
;   
;   //开关复位信号通道
;   WaitHigh ();
	sbis 0x10,6
	rjmp L88
	.dbline 159
	.dbline 159
	.dbline 160
;   TimerStart();
	.dbline 160
	ldi R24,130
	out 0x2e,R24
	.dbline 160
	.dbline 161
	rjmp L92
L91:
	.dbline 161
	.dbline 161
	nop
	.dbline 161
L92:
	.dbline 161
;   WaitLow ();
	sbic 0x10,6
	rjmp L91
	.dbline 161
	.dbline 161
	.dbline 162
;   temp=HowLong();
	rcall _HowLong
	mov R14,R16
	mov R15,R17
	.dbline 163
;   if(temp>RESET_TIME){error=1;break;}
	ldi R24,2900
	ldi R25,11
	cp R24,R16
	cpc R25,R17
	brsh L94
	.dbline 163
	.dbline 163
	clr R10
	inc R10
	.dbline 163
	rjmp L29
L94:
	.dbline 164
	ldi R24,1200
	ldi R25,4
	cp R24,R14
	cpc R25,R15
	brsh L96
	.dbline 164
	ldi R20,1
	rjmp L97
L96:
	.dbline 164
;   if(temp>MID_TIME)sw_reset=1;else sw_reset=0;
	clr R20
L97:
	.dbline 165
;   sw_counter++;
	inc R22
	.dbline 168
	rjmp L99
L98:
	.dbline 168
	.dbline 168
	nop
	.dbline 168
L99:
	.dbline 168
;   
;   
;   WaitHigh ();
	sbis 0x10,6
	rjmp L98
	.dbline 168
	.dbline 168
	.dbline 169
;   TimerStart();//利用复位时间长,输出开关信号
	.dbline 169
	ldi R24,130
	out 0x2e,R24
	.dbline 169
	.dbline 170
;   if(sw_counter<8)
	cpi R22,8
	brsh L101
	.dbline 171
	tst R12
	breq L103
	.dbline 171
	ldi R16,1
	mov R17,R22
	rcall lsl8
	in R2,0x18
	or R2,R16
	out 0x18,R2
	rjmp L104
L103:
	.dbline 171
;   if(sw_estate)PB|=(1<<sw_counter);else PB&=(~(1<<sw_counter));
	ldi R16,1
	mov R17,R22
	rcall lsl8
	mov R2,R16
	com R2
	in R3,0x18
	and R3,R2
	out 0x18,R3
L104:
L101:
	.dbline 172
;   if(sw_reset)
	tst R20
	breq L105
	.dbline 173
;   sw_counter=255;
	ldi R22,255
L105:
	.dbline 174
;   WDR();
	wdr
	.dbline 175
	rjmp L108
L107:
	.dbline 175
	.dbline 175
	nop
	.dbline 175
L108:
	.dbline 175
;   WaitLow ();
	sbic 0x10,6
	rjmp L107
	.dbline 175
	.dbline 175
	.dbline 176
;   if(HowLong()>RESET_TIME)break;
	rcall _HowLong
	ldi R24,2900
	ldi R25,11
	cp R24,R16
	cpc R25,R17
	brsh L110
	.dbline 176
	rjmp L29
L110:
	.dbline 178
L28:
	.dbline 101
	rjmp L31
L29:
	.dbline 179
L23:
	.dbline 98
	rjmp L22
X8:
	.dbline -2
L21:
	.dbline 0 ; func end
	ret
	.dbsym r sw_estate 12 c
	.dbsym r sw_reset 20 c
	.dbsym r sw_counter 22 c
	.dbsym r error 10 c
	.dbsym r temp 14 i
	.dbend

⌨️ 快捷键说明

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