📄 feedis_uart.lis
字号:
02E8 .dbline 178
02E8 L65:
02E8 .dbline 178
02E8 ; }
02E8 ; }
02E8 ;
02E8 ;
02E8 ; void uart0_txd(uchar x)
02E8 ; { while((UCSR0A&0X20)==0);
02E8 5D9B sbis 0xb,5
02EA FECF rjmp L64
02EC .dbline 179
02EC ; UDR0=x;
02EC 0CB9 out 0xc,R16
02EE .dbline -2
02EE L63:
02EE .dbline 0 ; func end
02EE 0895 ret
02F0 .dbsym r x 16 c
02F0 .dbend
02F0 .dbfunc e init_USART _init_USART fV
.even
02F0 _init_USART::
02F0 .dbline -1
02F0 .dbline 183
02F0 ;
02F0 ; }
02F0 ; void init_USART(void)//USART 初始化
02F0 ; {
02F0 .dbline 185
02F0 ; //USART 9600 8, n,1 PC上位机软件(超级终端等)也要设成同样的设置才能通讯
02F0 ; UCSR0B = 0x00; //disable while setting baud rate
02F0 2224 clr R2
02F2 2AB8 out 0xa,R2
02F4 .dbline 186
02F4 ; UCSR0A = 0x00;
02F4 2BB8 out 0xb,R2
02F6 .dbline 187
02F6 ; UCSR0C = 0x06;
02F6 86E0 ldi R24,6
02F8 80939500 sts 149,R24
02FC .dbline 189
02FC ; //异步,8位数据,无奇偶校验,一个停止位,无倍速
02FC ; UBRR0L= (F_CPU/BAUDRATE/16-1)%256;
02FC 8FE5 ldi R24,95
02FE 89B9 out 0x9,R24
0300 .dbline 190
0300 ; UBRR0H= (F_CPU/BAUDRATE/16-1)/256;
0300 20929000 sts 144,R2
0304 .dbline 191
0304 ; UCSR0B = (1<<RXCIE0)|(1<<RXEN0)|(1<<TXEN0);
0304 88E9 ldi R24,152
0306 8AB9 out 0xa,R24
0308 .dbline -2
0308 L67:
0308 .dbline 0 ; func end
0308 0895 ret
030A .dbend
030A .dbfunc e port_init _port_init fV
.even
030A _port_init::
030A .dbline -1
030A .dbline 196
030A ; //使能接收中断,使能接收,使能发送
030A ; }
030A ;
030A ; void port_init(void)
030A ; {
030A .dbline 197
030A ; PORTA = 0x00;
030A 2224 clr R2
030C 2BBA out 0x1b,R2
030E .dbline 198
030E ; DDRA = 0xff;
030E 8FEF ldi R24,255
0310 8ABB out 0x1a,R24
0312 .dbline 199
0312 ; PORTB = 0xAD;
0312 8DEA ldi R24,173
0314 88BB out 0x18,R24
0316 .dbline 200
0316 ; DDRB = 0xF7;
0316 87EF ldi R24,247
0318 87BB out 0x17,R24
031A .dbline 201
031A ; PORTC = 0xFF; //m103 output only
031A 8FEF ldi R24,255
031C 85BB out 0x15,R24
031E .dbline 202
031E ; DDRC = 0xFF;
031E 84BB out 0x14,R24
0320 .dbline 203
0320 ; PORTD = 0x05;
0320 85E0 ldi R24,5
0322 82BB out 0x12,R24
0324 .dbline 204
0324 ; DDRD = 0xFA;
0324 8AEF ldi R24,250
0326 81BB out 0x11,R24
0328 .dbline 205
0328 ; PORTE = 0xFE;
0328 8EEF ldi R24,254
032A 83B9 out 0x3,R24
032C .dbline 206
032C ; DDRE = 0xFE;
032C 82B9 out 0x2,R24
032E .dbline 207
032E ; PORTF = 0x0F;
032E 8FE0 ldi R24,15
0330 80936200 sts 98,R24
0334 .dbline 208
0334 ; DDRF = 0x0F;
0334 80936100 sts 97,R24
0338 .dbline 209
0338 ; PORTG = 0x1F;
0338 8FE1 ldi R24,31
033A 80936500 sts 101,R24
033E .dbline 210
033E ; DDRG = 0x0F;
033E 8FE0 ldi R24,15
0340 80936400 sts 100,R24
0344 .dbline -2
0344 L68:
0344 .dbline 0 ; func end
0344 0895 ret
0346 .dbend
0346 .dbfunc e timer1_init _timer1_init fV
.even
0346 _timer1_init::
0346 .dbline -1
0346 .dbline 215
0346 ; }
0346 ;
0346 ;
0346 ; void timer1_init(void)
0346 ; {
0346 .dbline 216
0346 ; TCCR1B = 0x00; //stop
0346 2224 clr R2
0348 2EBC out 0x2e,R2
034A .dbline 217
034A ; TCNT1H = 0xFF; //setup
034A 8FEF ldi R24,255
034C 8DBD out 0x2d,R24
034E .dbline 218
034E ; TCNT1L = 0x0C;
034E 8CE0 ldi R24,12
0350 8CBD out 0x2c,R24
0352 .dbline 219
0352 ; OCR1AH = 0x00;
0352 2BBC out 0x2b,R2
0354 .dbline 220
0354 ; OCR1AL = 0xF4;
0354 84EF ldi R24,244
0356 8ABD out 0x2a,R24
0358 .dbline 221
0358 ; OCR1BH = 0x00;
0358 29BC out 0x29,R2
035A .dbline 222
035A ; OCR1BL = 0xF4;
035A 88BD out 0x28,R24
035C .dbline 223
035C ; OCR1CH = 0x00;
035C 20927900 sts 121,R2
0360 .dbline 224
0360 ; OCR1CL = 0xF4;
0360 80937800 sts 120,R24
0364 .dbline 225
0364 ; ICR1H = 0x00;
0364 27BC out 0x27,R2
0366 .dbline 226
0366 ; ICR1L = 0xF4;
0366 86BD out 0x26,R24
0368 .dbline 227
0368 ; TCCR1A = 0x00;
0368 2FBC out 0x2f,R2
036A .dbline 228
036A ; TCCR1B = 0x05; //start Timer
036A 85E0 ldi R24,5
036C 8EBD out 0x2e,R24
036E .dbline -2
036E L69:
036E .dbline 0 ; func end
036E 0895 ret
0370 .dbend
0370 .dbfunc e spi_inith _spi_inith fV
.even
0370 _spi_inith::
0370 .dbline -1
0370 .dbline 232
0370 ; }
0370 ;
0370 ; void spi_inith(void)
0370 ; {// DDRB|=(1<<0)|(1<<1)|(1<<2);//ss sck mosi
0370 .dbline 235
0370 ; // PORTB|=(1<<0)|(1<<1)|(1<<2);
0370 ;
0370 ; DDRB|=(1<<0)|(1<<1)|(1<<2);
0370 87B3 in R24,0x17
0372 8760 ori R24,7
0374 87BB out 0x17,R24
0376 .dbline 236
0376 ; PORTB|=(1<<0)|(1<<1)|(1<<2);
0376 88B3 in R24,0x18
0378 8760 ori R24,7
037A 88BB out 0x18,R24
037C .dbline 238
037C ;
037C ; SPCR=0X70; //低先发
037C 80E7 ldi R24,112
037E 8DB9 out 0xd,R24
0380 .dbline 240
0380 ; // SPCR=0X50; //164高先发
0380 ; SPSR|=(1<<SPI2X);//倍速度
0380 709A sbi 0xe,0
0382 .dbline -2
0382 L70:
0382 .dbline 0 ; func end
0382 0895 ret
0384 .dbend
0384 .dbfunc e main _main fI
0384 ; ptr -> <dead>
0384 ; temp1 -> <dead>
0384 ; temp -> <dead>
0384 ; discounthh -> R12,R13
0384 ; flag_control -> R10
.even
0384 _main::
0384 .dbline -1
0384 .dbline 243
0384 ; }
0384 ; int main(void)
0384 ; {
0384 .dbline 246
0384 ; uchar temp;
0384 ; uint temp1;
0384 ; uint discounthh=0;
0384 CC24 clr R12
0386 DD24 clr R13
0388 .dbline 248
0388 ; uchar *ptr;
0388 ; uchar flag_control=0;
0388 AA24 clr R10
038A .dbline 249
038A ; CLI(); //disable all interrupts
038A F894 cli
038C .dbline 250
038C ; port_init();
038C BEDF xcall _port_init
038E .dbline 251
038E ; spi_inith();
038E F0DF xcall _spi_inith
0390 .dbline 252
0390 ; FLAG=0;
0390 2224 clr R2
0392 20920000 sts _FLAG,R2
0396 .dbline 253
0396 ; ISDstatus = 0;
0396 20920000 sts _ISDstatus,R2
039A .dbline 254
039A ; SPEAK = 1;
039A 81E0 ldi R24,1
039C 80930100 sts _SPEAK,R24
03A0 .dbline 256
03A0 ; // countwait = 0;
03A0 ; init_USART();
03A0 A7DF xcall _init_USART
03A2 .dbline 257
03A2 ; EICRA = 0x02; //extended ext ints falling edge
03A2 82E0 ldi R24,2
03A4 80936A00 sts 106,R24
03A8 .dbline 258
03A8 ; EICRB = 0x00; //extended ext ints
03A8 2224 clr R2
03AA 2ABE out 0x3a,R2
03AC .dbline 259
03AC ; EIMSK = 0x01;
03AC 81E0 ldi R24,1
03AE 89BF out 0x39,R24
03B0 .dbline 260
03B0 ; SEI(); //使能全局中断
03B0 7894 sei
03B2 .dbline 261
03B2 ; waitms(10);
03B2 0AE0 ldi R16,10
03B4 10E0 ldi R17,0
03B6 20E0 ldi R18,0
03B8 30E0 ldi R19,0
03BA 0E940000 xcall _waitms
03BE .dbline 262
03BE ; light = RTEEPROMread(12);
03BE 0CE0 ldi R16,12
03C0 10E0 ldi R17,0
03C2 0E940000 xcall _RTEEPROMread
03C6 00930200 sts _light,R16
03CA .dbline 263
03CA ; if(light>56)light=56;
03CA 88E3 ldi R24,56
03CC 8017 cp R24,R16
03CE 10F4 brsh L72
03D0 .dbline 263
03D0 80930200 sts _light,R24
03D4 L72:
03D4 .dbline 266
03D4 ; //spi_init();
03D4 ; ///////////////////////////////////////
03D4 ; FLAG=1;
03D4 81E0 ldi R24,1
03D6 80930000 sts _FLAG,R24
03DA .dbline 267
03DA ; receivebox[0]='A';
03DA 81E4 ldi R24,65
03DC 80930300 sts _receivebox,R24
03E0 .dbline 269
03E0 ;
03E0 ; receivebox[1]=0XF0;
03E0 80EF ldi R24,240
03E2 80930400 sts _receivebox+1,R24
03E6 .dbline 270
03E6 ; ISDstatus=0;
03E6 2224 clr R2
03E8 20920000 sts _ISDstatus,R2
03EC .dbline 271
03EC ; SPEAK = 1;
03EC 81E0 ldi R24,1
03EE 80930100 sts _SPEAK,R24
03F2 .dbline 276
03F2 ; //for(temp1=0;temp1<3072;temp1++)
03F2 ; //dis[temp1]=0xff;
03F2 ; ///////////////////////////////////////
03F2 ; // uart0_txd(0xaa);
03F2 ; dip=0;
03F2 20920F00 sts _dip,R2
03F6 D3C0 xjmp L76
03F8 L75:
03F8 .dbline 279
03F8 ;
03F8 ; while (1)
03F8 ; {
03F8 .dbline 280
03F8 ; if(FLAG)//串口中断收到有效数据FLAG为1
03F8 20900000 lds R2,_FLAG
03FC 2220 tst R2
03FE 29F0 breq L78
0400 .dbline 281
0400 ; {
0400 .dbline 282
0400 ; hanzi(); //为显示准备好点阵数据
0400 0E940000 xcall _hanzi
0404 .dbline 283
0404 ; FLAG = 0;
0404 2224 clr R2
0406 20920000 sts _FLAG,R2
040A .dbline 284
040A ; }
040A L78:
040A .dbline 285
040A ; ledscreendis(light);//显示屏扫描程序
040A 00910200 lds R16,_light
040E 0E940000 xcall _ledscreendis
0412 .dbline 287
0412 ; // ledscreendis(light);//显示屏扫描程序
0412 ; if(flag_control==0)
0412 AA20 tst R10
0414 59F4 brne L80
0416 .dbline 288
0416 ; {dip++;
0416 .dbline 288
0416 80910F00 lds R24,_dip
041A 8F5F subi R24,255 ; addi 1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -