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

📄 main.s

📁 这一个用ATTINY26做的433M无线遥控解码程序
💻 S
📖 第 1 页 / 共 2 页
字号:
	.module main.c
	.area text(rom, con, rel)
	.dbfile I:\REDFOX~1\Remote\main.c
	.dbfunc e port_init _port_init fV
	.even
_port_init::
	.dbline -1
	.dbline 49
; 
; //ICC-AVR application builder : 2007-11-18 19:20:12
; // Target : T26
; // Crystal: 2.0000Mhz
; 
; 
; 
; #include <iot26v.h>
; #include <macros.h>
; 
; 
; 
; #define		uchar		unsigned char
; #define		uint		unsigned int
; 
; #define 	UP			0xC0
; #define 	STOP		0xA0
; #define 	DOWN		0x60
; 
; 
; #define		SET_LED1		PORTB |=  (1<<PB5)
; #define		CLR_LED1		PORTB &= ~(1<<PB5)
; 
; #define		SET_LED2		PORTB |=  (1<<PB4)
; #define		CLR_LED2		PORTB &= ~(1<<PB4)
; 
; #define 	SET_RLY1		PORTA |=  (1<<PA1)
; #define 	CLR_RLY1 		PORTA &= ~(1<<PA1)
; 
; #define 	SET_RLY2		PORTA |=  (1<<PA0)
; #define 	CLR_RLY2 		PORTA &= ~(1<<PA0)
; 
; 
; 
; uchar	flag_4ms;
; uchar	led_time;
; uint	key,key1,key2;
; 
; uchar	flag,rxd_flag;
; uchar	start,bits;
; uchar	timeH,timeL;
; uchar	datas;
; uchar	addrH,addrL;
; uint	addr;
; uchar	rxd_data;
; 
; 
; void port_init(void)
; {
	.dbline 50
; 	PORTB = 0x0F;
	ldi R24,15
	out 0x18,R24
	.dbline 51
; 	DDRB  = 0x30;
	ldi R24,48
	out 0x17,R24
	.dbline 53
; 	 
; 	PORTA = 0xE0;
	ldi R24,224
	out 0x1b,R24
	.dbline 54
; 	DDRA  = 0x03;
	ldi R24,3
	out 0x1a,R24
	.dbline -2
L1:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e timer0_init _timer0_init fV
	.even
_timer0_init::
	.dbline -1
	.dbline 59
; }
; 
; 
; void timer0_init(void)
; {
	.dbline 60
; 	 TCCR0 = 0x00; //stop
	clr R2
	out 0x33,R2
	.dbline 61
; 	 TCNT0 = 0x83; //set count
	ldi R24,131
	out 0x32,R24
	.dbline 62
; 	 TCCR0 = 0x03; //start timer
	ldi R24,3
	out 0x33,R24
	.dbline -2
L2:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e timer1_init _timer1_init fV
	.even
_timer1_init::
	.dbline -1
	.dbline 66
; }
; 
; void timer1_init(void)
; {
	.dbline 67
; 	 TCCR1B = 0x00; //stop
	clr R2
	out 0x2f,R2
	.dbline 68
; 	 TCNT1 = 0x06;
	ldi R24,6
	out 0x2e,R24
	.dbline 69
; 	 OCR1A = 0xFA;
	ldi R24,250
	out 0x2d,R24
	.dbline 70
; 	 OCR1B = 0xFA;
	out 0x2c,R24
	.dbline 71
; 	 OCR1C = 0x80;
	ldi R24,128
	out 0x2b,R24
	.dbline 72
; 	 TCCR1A = 0x00;
	out 0x30,R2
	.dbline -2
L3:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e init_eeprom _init_eeprom fV
	.even
_init_eeprom::
	.dbline -1
	.dbline 78
; 	 //TCCR1B = 0x05; //start Timer
; }
; 
; 
; void init_eeprom(void)
; {
	.dbline 79
;  	 EECR = 0x07;
	ldi R24,7
	out 0x1c,R24
	.dbline -2
L4:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e EEPROM_write _EEPROM_write fV
;          Datas -> R18
;        Address -> R16
	.even
_EEPROM_write::
	.dbline -1
	.dbline 85
; }
; 
; 
; 
; void EEPROM_write(unsigned char Address, unsigned char Datas)
; {
L6:
	.dbline 86
L7:
	.dbline 86
; 	while(EECR & (1<<EEWE));// 等待上一次写操作结束 
	sbic 0x1c,1
	rjmp L6
	.dbline 88
; 	
; 	EEARL= Address;			// 设置地址和数据寄存器 
	out 0x1e,R16
	.dbline 89
; 	EEDR = Datas;
	out 0x1d,R18
	.dbline 90
; 	EECR |= (1<<EEMWE);		// 置位EEMWE
	sbi 0x1c,2
	.dbline 91
; 	EECR |= (1<<EEWE);		// 置位EEWE 以启动写操作E
	sbi 0x1c,1
	.dbline -2
L5:
	.dbline 0 ; func end
	ret
	.dbsym r Datas 18 c
	.dbsym r Address 16 c
	.dbend
	.dbfunc e EEPROM_read _EEPROM_read fc
;      uiAddress -> R16
	.even
_EEPROM_read::
	.dbline -1
	.dbline 96
; }
; 
; 
; unsigned char EEPROM_read(unsigned char uiAddress)
; {
L10:
	.dbline 97
L11:
	.dbline 97
; 	while(EECR&(1<<EEWE));	//等待上一次写操作结束
	sbic 0x1c,1
	rjmp L10
	.dbline 98
; 	EEARL = uiAddress;		// 设置地址寄存器
	out 0x1e,R16
	.dbline 99
; 	EECR |= (1<<EERE);		// 设置EERE 以启动读操作
	sbi 0x1c,0
	.dbline 100
; 	return EEDR;			// 自数据寄存器返回数据
	in R16,0x1d
	.dbline -2
L9:
	.dbline 0 ; func end
	ret
	.dbsym r uiAddress 16 c
	.dbend
	.dbfunc e init_devices _init_devices fV
	.even
_init_devices::
	.dbline -1
	.dbline 111
; }
; 
; 
; 
; 
; 
; 
; 
; //call this routine to initialize all peripherals
; void init_devices(void)
; {
	.dbline 112
; 	 CLI(); 		//disable all interrupts
	cli
	.dbline 114
; 	 
; 	 port_init();
	rcall _port_init
	.dbline 115
; 	 timer0_init();
	rcall _timer0_init
	.dbline 116
; 	 timer1_init();
	rcall _timer1_init
	.dbline 117
; 	 init_eeprom();
	rcall _init_eeprom
	.dbline 119
; 	 
; 	 MCUCR = 0x02;
	ldi R24,2
	out 0x35,R24
	.dbline 120
; 	 TIMSK = 0x06; 	//timer interrupt sources
	ldi R24,6
	out 0x39,R24
	.dbline 121
; 	 GIMSK = 0x40; 	//interrupt sources
	ldi R24,64
	out 0x3b,R24
	.dbline 122
; 	 PLLCSR = 0x00; //PLL
	clr R2
	out 0x29,R2
	.dbline 123
; 	 WDR(); 		//this prevents a timout on enabling
	wdr
	.dbline 124
;  	 WDTCR = 0x08; 	//WATCHDOG ENABLED - dont forget to issue WD
	ldi R24,8
	out 0x21,R24
	.dbline 126
;  	 
; 	 SEI(); 		//re-enable interrupts
	sei
	.dbline -2
L13:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e key_scan _key_scan fV
;           temp -> R16
	.even
_key_scan::
	.dbline -1
	.dbline 135
; }
; 
; 
; /*---------------------------------------------------------------
;    		按键扫描
; ----------------------------------------------------------------*/
; 
; void key_scan(void)
; {
	.dbline 138
; 	uchar temp;
; 	
; 	temp = PINA & 0xE0;
	in R16,0x19
	andi R16,224
	.dbline 140
; 
; 	if(temp==UP) 	
	cpi R16,192
	brne L15
	.dbline 141
; 	{	
	.dbline 142
; 		SET_LED2;
	sbi 0x18,4
	.dbline 144
; 		//if(key<500) 	
; 		{
	.dbline 145
; 			key ++;
	lds R24,_key
	lds R25,_key+1
	adiw R24,1
	sts _key+1,R25
	sts _key,R24
	.dbline 146
; 			if(key>=5)
	cpi R24,5
	ldi R30,0
	cpc R25,R30
	brsh X0
	rjmp L16
X0:
	.dbline 147
; 			{
	.dbline 148
; 				CLR_RLY2;
	cbi 0x1b,0
	.dbline 149
; 				asm("nop"); 
	nop
	.dbline 150
; 				asm("nop");
	nop
	.dbline 151
; 				SET_RLY1;
	sbi 0x1b,1
	.dbline 152
; 			}
	.dbline 153
; 		}	
	.dbline 154
; 	}
	rjmp L16
L15:
	.dbline 156
; 
; 	else if(temp==STOP) 	// k1
	cpi R16,160
	brne L19
	.dbline 157
; 	{	
	.dbline 158
; 		SET_LED2;
	sbi 0x18,4
	.dbline 160
; 		//if(key1<500) 	
; 		{	
	.dbline 161
; 			key1 ++;
	lds R24,_key1
	lds R25,_key1+1
	adiw R24,1
	sts _key1+1,R25
	sts _key1,R24
	.dbline 162
; 			if(key1>=5)		// 短按
	cpi R24,5
	ldi R30,0
	cpc R25,R30
	brlo L20
	.dbline 163
; 			{
	.dbline 164
; 				CLR_RLY1;
	cbi 0x1b,1
	.dbline 165
; 				CLR_RLY2;
	cbi 0x1b,0
	.dbline 166
; 			}
	.dbline 167
; 		}
	.dbline 168
; 	}
	rjmp L20
L19:
	.dbline 170
; 
; 	else if(temp==DOWN) 	// k2
	cpi R16,96
	brne L23
	.dbline 171
; 	{	
	.dbline 172
; 		SET_LED2;
	sbi 0x18,4
	.dbline 174
; 		//if(key2<500) 	
; 		{	
	.dbline 175
; 			key2 ++;
	lds R24,_key2
	lds R25,_key2+1
	adiw R24,1
	sts _key2+1,R25
	sts _key2,R24
	.dbline 176
; 			if(key2>=5)		// 短按
	cpi R24,5
	ldi R30,0
	cpc R25,R30
	brlo L24
	.dbline 177
; 			{
	.dbline 178
; 				CLR_RLY1;
	cbi 0x1b,1
	.dbline 179
; 				asm("nop"); 
	nop
	.dbline 180
; 				asm("nop");
	nop
	.dbline 181
; 				SET_RLY2;
	sbi 0x1b,0
	.dbline 183
; 				
; 			}
	.dbline 184
; 		}
	.dbline 185
; 	}
	rjmp L24
L23:
	.dbline 187
; 	else 
; 	{
	.dbline 188
; 		key = key1 = key2 = 0;
	clr R2
	clr R3
	sts _key2+1,R3
	sts _key2,R2
	sts _key1+1,R3
	sts _key1,R2
	sts _key+1,R3
	sts _key,R2
	.dbline 190
; 		//CLR_LED2;
; 	}
L24:
L20:
L16:
	.dbline -2
L14:
	.dbline 0 ; func end
	ret
	.dbsym r temp 16 c
	.dbend
	.dbfunc e Remote_set _Remote_set fV
	.even
_Remote_set::
	.dbline -1
	.dbline 196
; }
; 
; 
; 
; void Remote_set(void)
; {
	.dbline 197
; 	if(led_time<50) led_time ++;
	lds R24,_led_time
	cpi R24,50
	brsh L28
	.dbline 197
	subi R24,255    ; addi 1
	sts _led_time,R24
	rjmp L29
L28:
	.dbline 198
;  	else CLR_LED2;
	cbi 0x18,4
L29:
	.dbline 200
; 	
; 	if(rxd_flag)
	lds R2,_rxd_flag
	tst R2
	breq L30
	.dbline 201
; 	{
	.dbline 202
; 		rxd_flag = 0;
	clr R2
	sts _rxd_flag,R2
	.dbline 203
; 		if(addr==0xaaaa)	// 地址正确
	lds R24,_addr
	lds R25,_addr+1
	cpi R24,170
	ldi R30,170
	cpc R25,R30
	brne L32
	.dbline 204
; 		{
	.dbline 205
; 			SET_LED2;
	sbi 0x18,4
	.dbline 206
; 			led_time = 0;
	sts _led_time,R2
	.dbline 207
; 			if(rxd_data==0x03) 
	lds R24,_rxd_data
	cpi R24,3
	brne L34
	.dbline 208
; 			{
	.dbline 209
; 				CLR_RLY2;
	cbi 0x1b,0
	.dbline 210
; 				asm("nop"); 
	nop
	.dbline 211
; 				asm("nop");
	nop
	.dbline 212
; 				SET_RLY1;
	sbi 0x1b,1
	.dbline 213
; 			}	
	rjmp L35
L34:
	.dbline 214
; 			else if(datas==0xc0) 
	lds R24,_datas
	cpi R24,192
	brne L36
	.dbline 215
; 			{
	.dbline 216
; 				CLR_RLY1;
	cbi 0x1b,1
	.dbline 217
; 				asm("nop"); 
	nop
	.dbline 218
; 				asm("nop");
	nop
	.dbline 219
; 				SET_RLY2;
	sbi 0x1b,0
	.dbline 220
; 			}
	rjmp L37
L36:
	.dbline 221
; 			else if(datas==0x0c || datas==0x30) 
	lds R24,_datas
	cpi R24,12
	breq L40
	cpi R24,48
	brne L38
L40:

⌨️ 快捷键说明

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