📄 main.s
字号:
.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 + -