📄 feedis_uart.s
字号:
L64:
.dbline 178
L65:
.dbline 178
; }
; }
;
;
; void uart0_txd(uchar x)
; { while((UCSR0A&0X20)==0);
sbis 0xb,5
rjmp L64
.dbline 179
; UDR0=x;
out 0xc,R16
.dbline -2
L63:
.dbline 0 ; func end
ret
.dbsym r x 16 c
.dbend
.dbfunc e init_USART _init_USART fV
.even
_init_USART::
.dbline -1
.dbline 183
;
; }
; void init_USART(void)//USART 初始化
; {
.dbline 185
; //USART 9600 8, n,1 PC上位机软件(超级终端等)也要设成同样的设置才能通讯
; UCSR0B = 0x00; //disable while setting baud rate
clr R2
out 0xa,R2
.dbline 186
; UCSR0A = 0x00;
out 0xb,R2
.dbline 187
; UCSR0C = 0x06;
ldi R24,6
sts 149,R24
.dbline 189
; //异步,8位数据,无奇偶校验,一个停止位,无倍速
; UBRR0L= (F_CPU/BAUDRATE/16-1)%256;
ldi R24,95
out 0x9,R24
.dbline 190
; UBRR0H= (F_CPU/BAUDRATE/16-1)/256;
sts 144,R2
.dbline 191
; UCSR0B = (1<<RXCIE0)|(1<<RXEN0)|(1<<TXEN0);
ldi R24,152
out 0xa,R24
.dbline -2
L67:
.dbline 0 ; func end
ret
.dbend
.dbfunc e port_init _port_init fV
.even
_port_init::
.dbline -1
.dbline 196
; //使能接收中断,使能接收,使能发送
; }
;
; void port_init(void)
; {
.dbline 197
; PORTA = 0x00;
clr R2
out 0x1b,R2
.dbline 198
; DDRA = 0xff;
ldi R24,255
out 0x1a,R24
.dbline 199
; PORTB = 0xAD;
ldi R24,173
out 0x18,R24
.dbline 200
; DDRB = 0xF7;
ldi R24,247
out 0x17,R24
.dbline 201
; PORTC = 0xFF; //m103 output only
ldi R24,255
out 0x15,R24
.dbline 202
; DDRC = 0xFF;
out 0x14,R24
.dbline 203
; PORTD = 0x05;
ldi R24,5
out 0x12,R24
.dbline 204
; DDRD = 0xFA;
ldi R24,250
out 0x11,R24
.dbline 205
; PORTE = 0xFE;
ldi R24,254
out 0x3,R24
.dbline 206
; DDRE = 0xFE;
out 0x2,R24
.dbline 207
; PORTF = 0x0F;
ldi R24,15
sts 98,R24
.dbline 208
; DDRF = 0x0F;
sts 97,R24
.dbline 209
; PORTG = 0x1F;
ldi R24,31
sts 101,R24
.dbline 210
; DDRG = 0x0F;
ldi R24,15
sts 100,R24
.dbline -2
L68:
.dbline 0 ; func end
ret
.dbend
.dbfunc e timer1_init _timer1_init fV
.even
_timer1_init::
.dbline -1
.dbline 215
; }
;
;
; void timer1_init(void)
; {
.dbline 216
; TCCR1B = 0x00; //stop
clr R2
out 0x2e,R2
.dbline 217
; TCNT1H = 0xFF; //setup
ldi R24,255
out 0x2d,R24
.dbline 218
; TCNT1L = 0x0C;
ldi R24,12
out 0x2c,R24
.dbline 219
; OCR1AH = 0x00;
out 0x2b,R2
.dbline 220
; OCR1AL = 0xF4;
ldi R24,244
out 0x2a,R24
.dbline 221
; OCR1BH = 0x00;
out 0x29,R2
.dbline 222
; OCR1BL = 0xF4;
out 0x28,R24
.dbline 223
; OCR1CH = 0x00;
sts 121,R2
.dbline 224
; OCR1CL = 0xF4;
sts 120,R24
.dbline 225
; ICR1H = 0x00;
out 0x27,R2
.dbline 226
; ICR1L = 0xF4;
out 0x26,R24
.dbline 227
; TCCR1A = 0x00;
out 0x2f,R2
.dbline 228
; TCCR1B = 0x05; //start Timer
ldi R24,5
out 0x2e,R24
.dbline -2
L69:
.dbline 0 ; func end
ret
.dbend
.dbfunc e spi_inith _spi_inith fV
.even
_spi_inith::
.dbline -1
.dbline 232
; }
;
; void spi_inith(void)
; {// DDRB|=(1<<0)|(1<<1)|(1<<2);//ss sck mosi
.dbline 235
; // PORTB|=(1<<0)|(1<<1)|(1<<2);
;
; DDRB|=(1<<0)|(1<<1)|(1<<2);
in R24,0x17
ori R24,7
out 0x17,R24
.dbline 236
; PORTB|=(1<<0)|(1<<1)|(1<<2);
in R24,0x18
ori R24,7
out 0x18,R24
.dbline 238
;
; SPCR=0X70; //低先发
ldi R24,112
out 0xd,R24
.dbline 240
; // SPCR=0X50; //164高先发
; SPSR|=(1<<SPI2X);//倍速度
sbi 0xe,0
.dbline -2
L70:
.dbline 0 ; func end
ret
.dbend
.dbfunc e main _main fI
; ptr -> <dead>
; temp1 -> <dead>
; temp -> <dead>
; discounthh -> R12,R13
; flag_control -> R10
.even
_main::
.dbline -1
.dbline 243
; }
; int main(void)
; {
.dbline 246
; uchar temp;
; uint temp1;
; uint discounthh=0;
clr R12
clr R13
.dbline 248
; uchar *ptr;
; uchar flag_control=0;
clr R10
.dbline 249
; CLI(); //disable all interrupts
cli
.dbline 250
; port_init();
xcall _port_init
.dbline 251
; spi_inith();
xcall _spi_inith
.dbline 252
; FLAG=0;
clr R2
sts _FLAG,R2
.dbline 253
; ISDstatus = 0;
sts _ISDstatus,R2
.dbline 254
; SPEAK = 1;
ldi R24,1
sts _SPEAK,R24
.dbline 256
; // countwait = 0;
; init_USART();
xcall _init_USART
.dbline 257
; EICRA = 0x02; //extended ext ints falling edge
ldi R24,2
sts 106,R24
.dbline 258
; EICRB = 0x00; //extended ext ints
clr R2
out 0x3a,R2
.dbline 259
; EIMSK = 0x01;
ldi R24,1
out 0x39,R24
.dbline 260
; SEI(); //使能全局中断
sei
.dbline 261
; waitms(10);
ldi R16,10
ldi R17,0
ldi R18,0
ldi R19,0
xcall _waitms
.dbline 262
; light = RTEEPROMread(12);
ldi R16,12
ldi R17,0
xcall _RTEEPROMread
sts _light,R16
.dbline 263
; if(light>56)light=56;
ldi R24,56
cp R24,R16
brsh L72
.dbline 263
sts _light,R24
L72:
.dbline 266
; //spi_init();
; ///////////////////////////////////////
; FLAG=1;
ldi R24,1
sts _FLAG,R24
.dbline 267
; receivebox[0]='A';
ldi R24,65
sts _receivebox,R24
.dbline 269
;
; receivebox[1]=0XF0;
ldi R24,240
sts _receivebox+1,R24
.dbline 270
; ISDstatus=0;
clr R2
sts _ISDstatus,R2
.dbline 271
; SPEAK = 1;
ldi R24,1
sts _SPEAK,R24
.dbline 276
; //for(temp1=0;temp1<3072;temp1++)
; //dis[temp1]=0xff;
; ///////////////////////////////////////
; // uart0_txd(0xaa);
; dip=0;
sts _dip,R2
xjmp L76
L75:
.dbline 279
;
; while (1)
; {
.dbline 280
; if(FLAG)//串口中断收到有效数据FLAG为1
lds R2,_FLAG
tst R2
breq L78
.dbline 281
; {
.dbline 282
; hanzi(); //为显示准备好点阵数据
xcall _hanzi
.dbline 283
; FLAG = 0;
clr R2
sts _FLAG,R2
.dbline 284
; }
L78:
.dbline 285
; ledscreendis(light);//显示屏扫描程序
lds R16,_light
xcall _ledscreendis
.dbline 287
; // ledscreendis(light);//显示屏扫描程序
; if(flag_control==0)
tst R10
brne L80
.dbline 288
; {dip++;
.dbline 288
lds R24,_dip
subi R24,255 ; addi 1
sts _dip,R24
.dbline 289
; if(dip==129)
cpi R24,129
brne L81
.dbline 290
; dip=128;
ldi R24,128
sts _dip,R24
.dbline 291
; }
xjmp L81
L80:
.dbline 292
; else if(flag_control==1)
mov R24,R10
cpi R24,1
brne L84
.dbline 293
; {dip--;
.dbline 293
lds R24,_dip
subi R24,1
sts _dip,R24
.dbline 294
; if(dip==127)
cpi R24,127
brne L86
.dbline 295
; dip=128;
ldi R24,128
sts _dip,R24
L86:
.dbline 296
; }
L84:
L81:
.dbline 300
;
;
;
; discounthh++;
movw R24,R12
adiw R24,1
movw R12,R24
.dbline 301
; if(discounthh==700)
cpi R24,188
ldi R30,2
cpc R25,R30
brne L88
.dbline 302
; {uart0_txd(light);
.dbline 302
lds R16,_light
xcall _uart0_txd
.dbline 304
; //u
; dip=0;
clr R2
sts _dip,R2
.dbline 305
; discounthh=0;
clr R12
clr R13
.dbline 306
; if(flag_control==0)flag_control=1;
tst R10
brne L90
.dbline 306
clr R10
inc R10
xjmp L91
L90:
.dbline 307
; else if(flag_control==1)flag_control=0;
mov R24,R10
cpi R24,1
brne L92
.dbline 307
clr R10
L92:
L91:
.dbline 308
; }
L88:
.dbline 310
;
; if(ISDstatus>0)
clr R2
lds R3,_ISDstatus
cp R2,R3
brlo X11
xjmp L94
X11:
.dbline 311
; {
.dbline 312
; if(SPEAK==1)
lds R24,_SPEAK
cpi R24,1
breq X12
xjmp L96
X12:
.dbline 313
; { switch (ISDstatus)
.dbline 313
lds R14,_ISDstatus
clr R15
movw R24,R14
cpi R24,1
ldi R30,0
cpc R25,R30
brne X13
xjmp L133
X13:
cpi R24,2
ldi R30,0
cpc R25,R30
brne X14
xjmp L121
X14:
cpi R24,3
ldi R30,0
cpc R25,R30
breq L108
cpi R24,4
ldi R30,0
cpc R25,R30
breq L103
cpi R24,5
ldi R30,0
cpc R25,R30
breq L102
cpi R24,6
ldi R30,0
cpc R25,R30
breq L101
xjmp L99
X9:
.dbline 314
; { case 0x06:
L101:
.dbline 315
; ISDplay(34+ISDmoney[0]-0x30);
lds R16,_ISDmoney
subi R16,222 ; addi 34
subi R16,48
xcall _ISDplay
.dbline 316
; SPEAK=0;
clr R2
sts _SPEAK,R2
.dbline 317
; break;
xjmp L99
L102:
.dbline 319
; case 0x05:
; ISDplay(20);
ldi R16,20
xcall _ISDplay
.dbline 320
; SPEAK=0;
clr R2
sts _SPEAK,R2
.dbline 321
; break;
xjmp L99
L103:
.dbline 323
; case 0x04:
; if(ISDmoney[1]!=0x20)
lds R24,_ISDmoney+1
cpi R24,32
brne X15
xjmp L99
X15:
.dbline 324
; {ISDplay(82+ISDmoney[1]-0x30);
.dbline 324
mov R16,R24
subi R16,174 ; addi 82
subi R16,48
xcall _ISDplay
.dbline 325
; SPEAK=0;
clr R2
sts _SPEAK,R2
.dbline 326
; }
.dbline 327
; break;
xjmp L99
L108:
.dbline 329
; case 0x03:
; if(ISDmoney[2]!=0x20)
lds R24,_ISDmoney+2
cpi R24,32
brne X16
xjmp L99
X16:
.dbline 330
; {if(ISDmoney[2]!=0x30)
.dbline 330
cpi R24,48
breq L112
.dbline 331
; {ISDplay(73+ISDmoney[2]-0x30);SPEAK=0;}
.dbline 331
mov R16,R24
subi R16,183 ; addi 73
subi R16,48
xcall _ISDplay
.dbline 331
clr R2
sts _SPEAK,R2
.dbline 331
xjmp L99
L112:
.dbline 333
; else
; {if((ISDmoney[3]!=0x30)||(ISDmoney[4]!=0x30))
.dbline 333
lds R24,_ISDmoney+3
cpi R24,48
brne L120
lds R24,_ISDmoney+4
cpi R24,48
breq L99
L120:
.dbline 334
; {ISDplay(54);SPEAK=0;}
.dbline 334
ldi R16,54
xcall _ISDplay
.dbline 334
clr R2
sts _SPEAK,R2
.dbline 334
.dbline 335
; }
.dbline 337
;
; }break;
.dbline 337
xjmp L99
L121:
.dbline 339
; case 0x02:
; if(ISDmoney[3]!=0x20)
lds R24,_ISDmoney+3
cpi R24,32
breq L99
.dbline 340
; {if(ISDmoney[3]!=0x30)
.dbline 340
cpi R24,48
breq L125
.dbline 341
; {ISDplay(64+ISDmoney[3]-0x30); SPEAK=0;}
.dbline 341
mov R16,R24
subi R16,192 ; addi 64
subi R16,48
xcall _ISDplay
.dbline 341
clr R2
sts _SPEAK,R2
.dbline 341
xjmp L99
L125:
.dbline 343
; else
; {
.dbline 344
; if((ISDmoney[4]!=0x30)&&(ISDmoney[2]!=0x30))//hou mian bu wei 0
lds R24,_ISDmoney+4
cpi R24,48
breq L99
lds R24,_ISDmoney+2
cpi R24,48
breq L99
.dbline 345
; {ISDplay(54); SPEAK=0;} // bo fang 0
.dbline 345
ldi R16,54
xcall _ISDplay
.dbline 345
clr R2
sts _SPEAK,R2
.dbline 345
.dbline 346
; }
.dbline 348
;
; }
.dbline 349
; break;
xjmp L99
L133:
.dbline 351
; case 0x01:
; ISDplay(44+ISDmoney[4]-0x30);
lds R16,_ISDmoney+4
subi R16,212 ; addi 44
subi R16,48
xcall _ISDplay
.dbline 352
; SPEAK=0; break;
clr R2
sts _SPEAK,R2
.dbline 352
.dbline 353
; default : break;
L99:
.dbline 355
; }
; ISDstatus--;
lds R24,_ISDstatus
subi R24,1
sts _ISDstatus,R24
.dbline 360
;
;
;
;
; }
L96:
.dbline 362
;
; }
L94:
.dbline 363
L76:
.dbline 278
xjmp L75
X10:
.dbline -2
L71:
.dbline 0 ; func end
ret
.dbsym l ptr 1 pc
.dbsym l temp1 1 i
.dbsym l temp 1 c
.dbsym r discounthh 12 i
.dbsym r flag_control 10 c
.dbend
.area bss(ram, con, rel)
.dbfile C:\DOCUME~1\11111\桌面\13个费显MEGA64\重显MEGA64\feedis_uart.c
_flg::
.blkb 1
.dbsym e flg _flg c
_SPEAK::
.blkb 1
.dbsym e SPEAK _SPEAK c
_light::
.blkb 1
.dbsym e light _light c
_receivebox::
.blkb 70
.dbsym e receivebox _receivebox A[70:70]c
_RX_index::
.blkb 1
.dbsym e RX_index _RX_index c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -