📄 调试程序.s
字号:
xjmp L50
L49:
.dbline 439
; else{
.dbline 440
; PORTB=DATA_LOW;
out 0x18,R10
.dbline 441
; PORTB=DATA_LOW|CLOK_HIG;
mov R2,R10
or R2,R22
out 0x18,R2
.dbline 442
; }
L50:
.dbline 444
;
; if(Bridge1DAC&0x01)
sbrs R4,0
rjmp L51
.dbline 445
; {
.dbline 446
; PORTB=DATA_HIG;
out 0x18,R12
.dbline 447
; PORTB=DATA_HIG|CLOK_HIG;
mov R2,R12
or R2,R22
out 0x18,R2
.dbline 448
; }
xjmp L52
L51:
.dbline 449
; else{
.dbline 450
; PORTB=DATA_LOW;
out 0x18,R10
.dbline 451
; PORTB=DATA_LOW|CLOK_HIG;
mov R2,R10
or R2,R22
out 0x18,R2
.dbline 452
; }
L52:
.dbline 454
;
; PORTB=DATA_LOW; //D0 数据模式
out 0x18,R10
.dbline 455
; PORTB=DATA_LOW|CLOK_HIG;
mov R2,R10
or R2,R22
out 0x18,R2
.dbline 457
;
; PORTE=STRB_HIG;
out 0x3,R20
.dbline 458
; PORTE=STRB_HIG;
out 0x3,R20
.dbline 460
;
; return 0x01;
ldi R16,1
xjmp L13
L14:
.dbline 462
; }
; else{
.dbline 463
; return 0x00;
clr R16
.dbline -2
L13:
adiw R28,1
xcall pop_gset5
.dbline 0 ; func end
ret
.dbsym l CLOK_LOW 0 c
.dbsym r STRB_LOW 8 c
.dbsym r STRB_HIG 20 c
.dbsym r DATA_HIG 12 c
.dbsym r CLOK_HIG 22 c
.dbsym r DATA_LOW 10 c
.dbsym r Bridge2DAC 14 c
.dbsym r Bridge1DAC 4 c
.dbsym r Port 6 c
.dbend
.dbfunc e outportb _outportb fV
; Data -> R18
; Addr -> R16,R17
.even
_outportb::
.dbline -1
.dbline 470
; }
;
; }
;
; //输出数据
; void outportb(uint Addr, uchar Data)
; {
.dbline 471
; if(Addr==D12_DATA)
cpi R16,0
cpc R16,R17
brne L54
X6:
.dbline 472
; {
.dbline 473
; USB_DATA = Data;
sts 61440,R18
.dbline 474
; }
xjmp L55
L54:
.dbline 475
; else if(Addr==D12_COMMAND)
cpi R16,1
ldi R30,0
cpc R17,R30
brne L56
.dbline 476
; {
.dbline 477
; USB_COMMAND = Data;
sts 61441,R18
.dbline 478
; }
L56:
L55:
.dbline -2
.dbline 479
; }
L53:
.dbline 0 ; func end
ret
.dbsym r Data 18 c
.dbsym r Addr 16 i
.dbend
.dbfunc e inportb _inportb fc
; Data -> R20
; Addr -> R16,R17
.even
_inportb::
xcall push_gset1
.dbline -1
.dbline 483
;
; //输入数据
; uchar inportb(uint Addr)
; {
.dbline 486
; unsigned char Data;
;
; if(Addr==D12_DATA)
cpi R16,0
cpc R16,R17
brne L59
X7:
.dbline 487
; {
.dbline 488
; Data = USB_DATA;
lds R20,61440
.dbline 489
; }
xjmp L60
L59:
.dbline 490
; else if(Addr==D12_COMMAND)
cpi R16,1
ldi R30,0
cpc R17,R30
brne L61
.dbline 491
; {
.dbline 492
; Data = USB_COMMAND;
lds R20,61441
.dbline 493
; }
L61:
L60:
.dbline 495
;
; return Data;
mov R16,R20
.dbline -2
L58:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r Data 20 c
.dbsym r Addr 16 i
.dbend
.dbfunc e D12_SetAddressEnable _D12_SetAddressEnable fV
; bEnable -> R22
; bAddress -> R20
.even
_D12_SetAddressEnable::
xcall push_gset2
mov R22,R18
mov R20,R16
.dbline -1
.dbline 500
; }
;
; //设置地址使能
; void D12_SetAddressEnable(uchar bAddress, uchar bEnable)
; {
.dbline 501
; EIMSK=0x00;
clr R2
out 0x39,R2
.dbline 502
; outportb(D12_COMMAND, 0xD0);//输出指令
ldi R18,208
ldi R16,1
ldi R17,0
xcall _outportb
.dbline 503
; if(bEnable)
tst R22
breq L64
.dbline 504
; bAddress |= 0x80;
ori R20,128
L64:
.dbline 505
; outportb(D12_DATA, bAddress);//设置地址
mov R18,R20
clr R16
clr R17
xcall _outportb
.dbline 506
; EIMSK=0x01;
ldi R24,1
out 0x39,R24
.dbline -2
.dbline 507
; }
L63:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r bEnable 22 c
.dbsym r bAddress 20 c
.dbend
.dbfunc e D12_SetEndpointEnable _D12_SetEndpointEnable fV
; bEnable -> R20
.even
_D12_SetEndpointEnable::
xcall push_gset1
mov R20,R16
.dbline -1
.dbline 511
;
; //设置端点使能
; void D12_SetEndpointEnable(uchar bEnable)
; {
.dbline 512
; EIMSK=0x00;
clr R2
out 0x39,R2
.dbline 513
; outportb(D12_COMMAND, 0xD8);//输出指令
ldi R18,216
ldi R16,1
ldi R17,0
xcall _outportb
.dbline 514
; if(bEnable)
tst R20
breq L67
.dbline 515
; outportb(D12_DATA, 1);//设置端点允许
ldi R18,1
clr R16
clr R17
xcall _outportb
xjmp L68
L67:
.dbline 517
; else
; outportb(D12_DATA, 0);//设置端点禁止
clr R18
clr R16
clr R17
xcall _outportb
L68:
.dbline 518
; EIMSK=0x01;
ldi R24,1
out 0x39,R24
.dbline -2
.dbline 519
; }
L66:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r bEnable 20 c
.dbend
.dbfunc e D12_SetMode _D12_SetMode fV
; bClkDiv -> R20
; bConfig -> R22
.even
_D12_SetMode::
xcall push_gset2
mov R20,R18
mov R22,R16
.dbline -1
.dbline 523
;
; //模式设置
; void D12_SetMode(uchar bConfig, uchar bClkDiv)
; {
.dbline 524
; outportb(D12_COMMAND, 0xF3);//设置模式
ldi R18,243
ldi R16,1
ldi R17,0
xcall _outportb
.dbline 525
; outportb(D12_DATA, bConfig);
mov R18,R22
clr R16
clr R17
xcall _outportb
.dbline 526
; outportb(D12_DATA, bClkDiv);
mov R18,R20
clr R16
clr R17
xcall _outportb
.dbline -2
.dbline 527
; }
L69:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r bClkDiv 20 c
.dbsym r bConfig 22 c
.dbend
.dbfunc e D12_SetDMA _D12_SetDMA fV
; bMode -> R20
.even
_D12_SetDMA::
xcall push_gset1
mov R20,R16
.dbline -1
.dbline 531
;
; //DMA工作方式设置
; void D12_SetDMA(uchar bMode)
; {
.dbline 532
; outportb(D12_COMMAND, 0xFB);//设置DMA工作方式
ldi R18,251
ldi R16,1
ldi R17,0
xcall _outportb
.dbline 533
; outportb(D12_DATA, bMode);
mov R18,R20
clr R16
clr R17
xcall _outportb
.dbline -2
.dbline 534
; }
L70:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r bMode 20 c
.dbend
.dbfunc e D12_ReadInterruptRegister _D12_ReadInterruptRegister fs
; b1 -> R22
; j -> R20,R21
.even
_D12_ReadInterruptRegister::
xcall push_gset2
.dbline -1
.dbline 538
;
; //读取中断寄存器
; ushort D12_ReadInterruptRegister(void)
; {
.dbline 542
; uchar b1;
; uint j;
;
; outportb(D12_COMMAND, 0xF4);//读取中断寄存器
ldi R18,244
ldi R16,1
ldi R17,0
xcall _outportb
.dbline 543
; b1 = inportb(D12_DATA);
clr R16
clr R17
xcall _inportb
mov R22,R16
.dbline 544
; j = inportb(D12_DATA);
clr R16
clr R17
xcall _inportb
mov R20,R16
clr R21
.dbline 545
; j <<= 8;
mov R21,R20
clr R20
.dbline 546
; j += b1;
mov R2,R22
clr R3
add R20,R2
adc R21,R3
.dbline 547
; return j;
movw R16,R20
.dbline -2
L71:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r b1 22 c
.dbsym r j 20 i
.dbend
.dbfunc e D12_SelectEndpoint _D12_SelectEndpoint fc
; c -> R20
; bEndp -> R20
.even
_D12_SelectEndpoint::
xcall push_gset1
mov R20,R16
.dbline -1
.dbline 552
; }
;
; //端点选择
; uchar D12_SelectEndpoint(uchar bEndp)
; {
.dbline 555
; uchar c;
;
; EIMSK=0x00;
clr R2
out 0x39,R2
.dbline 556
; outportb(D12_COMMAND, bEndp);//端点选择
mov R18,R20
ldi R16,1
ldi R17,0
xcall _outportb
.dbline 557
; c = inportb(D12_DATA);
clr R16
clr R17
xcall _inportb
mov R20,R16
.dbline 558
; EIMSK=0x01;
ldi R24,1
out 0x39,R24
.dbline 559
; return c;
.dbline -2
L72:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r c 20 c
.dbsym r bEndp 20 c
.dbend
.dbfunc e D12_ReadLastTransactionStatus _D12_ReadLastTransactionStatus fc
; bEndp -> R20
.even
_D12_ReadLastTransactionStatus::
xcall push_gset1
mov R20,R16
.dbline -1
.dbline 564
; }
;
; //读取最后传输状态
; uchar D12_ReadLastTransactionStatus(uchar bEndp)
; {
.dbline 565
; outportb(D12_COMMAND, 0x40 + bEndp);//返回最后传输状态
mov R18,R20
subi R18,192 ; addi 64
ldi R16,1
ldi R17,0
xcall _outportb
.dbline 566
; return inportb(D12_DATA);
clr R16
clr R17
xcall _inportb
.dbline -2
L73:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r bEndp 20 c
.dbend
.dbfunc e D12_SetEndpointStatus _D12_SetEndpointStatus fV
; bStalled -> R20
; bEndp -> R22
.even
_D12_SetEndpointStatus::
xcall push_gset2
mov R20,R18
mov R22,R16
.dbline -1
.dbline 571
; }
;
; //设置端点状态
; void D12_SetEndpointStatus(uchar bEndp, uchar bStalled)
; {
.dbline 572
; EIMSK=0x00;
clr R2
out 0x39,R2
.dbline 573
; outportb(D12_COMMAND, 0x40 + bEndp);//设置端点状态
mov R18,R22
subi R18,192 ; addi 64
ldi R16,1
ldi R17,0
xcall _outportb
.dbline 574
; outportb(D12_DATA, bStalled);
mov R18,R20
clr R16
clr R17
xcall _outportb
.dbline 575
; EIMSK=0x01;
ldi R24,1
out 0x39,R24
.dbline -2
.dbline 576
; }
L74:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r bStalled 20 c
.dbsym r bEndp 22 c
.dbend
.dbfunc e D12_ReadEndpoint _D12_ReadEndpoint fc
; j -> R20
; i -> R22
; buf -> R10,R11
; len -> R22
; endp -> R20
.even
_D12_ReadEndpoint::
xcall push_gset3
mov R22,R18
mov R20,R16
ldd R10,y+6
ldd R11,y+7
.dbline -1
.dbline 580
;
; //读取端点数据
; uchar D12_ReadEndpoint(uchar endp, uchar len, uchar * buf)
; { //端点号 长度 缓冲区
.dbline 582
; unsigned char i, j;
; EIMSK=0x00;
clr R2
out 0x39,R2
.dbline 583
; outportb(D12_COMMAND, endp);
mov R18,R20
ldi R16,1
ldi R17,0
xcall _outportb
.dbline 584
; if((inportb(D12_DATA) & 0x01) == 0) //读缓冲区是否为空
clr R16
clr R17
xcall _inportb
sbrc R16,0
rjmp L76
.dbline 585
; {
.dbline 586
; EIMSK=0x01;
ldi R24,1
out 0x39,R24
.dbline 587
; return 0;
clr R16
xjmp L75
L76:
.dbline 589
; }
; outportb(D12_COMMAND, 0xF0); //读缓冲区指针自动加1
ldi R18,240
ldi R16,1
ldi R17,0
xcall _outportb
.dbline 590
; j = inportb(D12_DATA);
clr R16
clr R17
xcall _inportb
.dbline 591
; j = inportb(D12_DATA);
clr R16
clr R17
xcall _inportb
mov R20,R16
.dbline 592
; if(j > len) //最大长度
cp R22,R16
brsh L78
.dbline 593
; j = len;
mov R20,R22
L78:
.dbline 594
; for(i=0; i<j; i++)
clr R22
xjmp L83
L80:
.dbline 595
clr R16
clr R17
xcall _inportb
mov R30,R22
clr R31
add R30,R10
adc R31,R11
std z+0,R16
L81:
.dbline 594
inc R22
L83:
.dbline 594
cp R22,R20
brlo L80
.dbline 596
; *(buf+i) = inportb(D12_DATA); //数据送入缓冲区
; outportb(D12_COMMAND, 0xF2); //清缓冲区
ldi R18,242
ldi R16,1
ldi R17,0
xcall _outportb
.dbline 597
; return j;
mov R16,R20
.dbline -2
L75:
xcall pop_gset3
.dbline 0 ; func end
ret
.dbsym r j 20 c
.dbsym r i 22 c
.dbsym r buf 10 pc
.dbsym r len 22 c
.dbsym r endp 20 c
.dbend
.dbfunc e Isr_D12_ReadEndpoint _Isr_D12_ReadEndpoint fc
; j -> R20
; i -> R22
; buf -> R10,R11
; len -> R22
; endp -> R20
.even
_Isr_D12_ReadEndpoint::
xcall push_gset3
mov R22,R18
mov R20,R16
ldd R10,y+6
ldd R11,y+7
.dbline -1
.dbline 601
; }
; //----------------------------------------------------------------------------
; uchar Isr_D12_ReadEndpoint(uchar endp, uchar len, uchar * buf) //读取双缓冲区数据
; {
.dbline 604
; unsigned char i, j;
;
; EIMSK=0x00;
clr R2
out 0x39,R2
.dbline 605
; outportb(D12_COMMAND, endp);
mov R18,R20
ldi R16,1
ldi R17,0
xcall _outportb
.dbline 606
; if((inportb(D12_DATA) & 0x01) == 0)
clr R16
clr R17
xcall _inportb
sbrc R16,0
rjmp L85
.dbline 607
; {
.dbline 608
; EIMSK=0x01;
ldi R24,1
out 0x39,R24
.dbline 609
; return 0;
clr R16
xjmp L84
L85:
.dbline 611
; }
; outportb(D12_COMMAND, 0xF0);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -