📄 uart.s
字号:
; #pragma interrupt_handler uart0_tx_isr:iv_USART0_TXC
; void uart0_tx_isr(void)
; {
.dbline 102
; if (tx_counter0)
lds R2,_tx_counter0
tst R2
breq L26
X10:
.dbline 103
; {
.dbline 104
; --tx_counter0;
lds R24,_tx_counter0
subi R24,1
sts _tx_counter0,R24
.dbline 105
; UDR0=tx_buffer0[tx_rd_index0];
ldi R24,<_tx_buffer0
ldi R25,>_tx_buffer0
lds R30,_tx_rd_index0
clr R31
add R30,R24
adc R31,R25
ldd R2,z+0
sts 198,R2
.dbline 106
; if (++tx_rd_index0 == TX_BUFFER_SIZE0) tx_rd_index0=0;
lds R24,_tx_rd_index0
subi R24,255 ; addi 1
mov R2,R24
sts _tx_rd_index0,R2
cpi R24,8
brne L28
X11:
.dbline 106
clr R2
sts _tx_rd_index0,R2
L28:
.dbline 107
; };
L26:
.dbline 107
.dbline -2
L25:
.dbline 0 ; func end
ld R2,y+
out 0x3f,R2
ld R31,y+
ld R30,y+
ld R25,y+
ld R24,y+
ld R2,y+
reti
.dbend
.dbfunc e putchar _putchar fV
; IisOn -> R20
; c -> R16
.even
_putchar::
st -y,R20
.dbline -1
.dbline 114
; }
;
;
;
; // Write a character to the USART0 Transmitter buffer
; void putchar(char c)
; {
.dbline 115
; char IisOn = 1;
ldi R20,1
.dbline 116
; if((SREG & 0x80) == 0x00) //I之前是否置位
in R2,0x3f
sbrc R2,7
rjmp L34
X12:
.dbline 117
; IisOn = 0;
clr R20
L33:
.dbline 118
; while (tx_counter0 == TX_BUFFER_SIZE0);
L34:
.dbline 118
lds R24,_tx_counter0
cpi R24,8
breq L33
X13:
.dbline 119
; CLI();
cli
.dbline 120
; if (tx_counter0 || ((UCSR0A & DATA_REGISTER_EMPTY)==0))
lds R2,_tx_counter0
tst R2
brne L38
X14:
lds R2,192
sbrc R2,5
rjmp L36
X15:
L38:
.dbline 121
; {
.dbline 122
; tx_buffer0[tx_wr_index0]=c;
ldi R24,<_tx_buffer0
ldi R25,>_tx_buffer0
lds R30,_tx_wr_index0
clr R31
add R30,R24
adc R31,R25
std z+0,R16
.dbline 123
; if (++tx_wr_index0 == TX_BUFFER_SIZE0) tx_wr_index0=0;
lds R24,_tx_wr_index0
subi R24,255 ; addi 1
mov R2,R24
sts _tx_wr_index0,R2
cpi R24,8
brne L39
X16:
.dbline 123
clr R2
sts _tx_wr_index0,R2
L39:
.dbline 124
; ++tx_counter0;
lds R24,_tx_counter0
subi R24,255 ; addi 1
sts _tx_counter0,R24
.dbline 125
; }
rjmp L37
L36:
.dbline 127
; else
; UDR0=c;
sts 198,R16
L37:
.dbline 128
; if(IisOn)
tst R20
breq L41
X17:
.dbline 129
; SEI();
sei
L41:
.dbline -2
L30:
.dbline 0 ; func end
ld R20,y+
ret
.dbsym r IisOn 20 c
.dbsym r c 16 c
.dbend
.dbfunc e DisposeBufDatas _DisposeBufDatas fV
; sprayNumH -> y+3
; sprayNumL -> y+2
; tPivDelay -> R12
; tSprayCyc -> R14,R15
; tSprayOn -> R10
; tPumpCyc -> y+1
; IisOn -> y+0
.even
_DisposeBufDatas::
rcall push_xgsetF0FC
sbiw R28,4
.dbline -1
.dbline 133
; }
;
; void DisposeBufDatas(void)
; {
.dbline 142
; //定义变量
; unsigned char tPumpCyc; //换能器周期,单位s
; unsigned char tSprayOn; //喷射脉宽,单位0.1ms
; unsigned int tSprayCyc; //喷射周期,单位ms
; unsigned char tPivDelay; //piv脉宽延时,单位0.1ms
; char sprayNumL; //SprayNum低字节
; char sprayNumH; //SprayNum高字节
;
; char IisOn = 1;
clr R0
inc R0
std y+0,R0
.dbline 143
; if((SREG & 0x80) == 0x00) //I之前是否置位
in R2,0x3f
sbrc R2,7
rjmp L44
X18:
.dbline 144
; IisOn = 0;
clr R0
std y+0,R0
L44:
.dbline 146
;
; if(rx_error0) //接收错误
lds R2,_rx_error0
tst R2
breq L46
X19:
.dbline 147
; {
.dbline 148
; CLI();
cli
.dbline 149
; putchar(SENDAGAIN);
ldi R16,254
rcall _putchar
.dbline 150
; putchar(SENDAGAIN);
ldi R16,254
rcall _putchar
.dbline 151
; if(IisOn)
ldd R0,y+0
tst R0
brne X23
rjmp L47
X23:
X20:
.dbline 152
; SEI();
sei
.dbline 153
; }
rjmp L47
L46:
.dbline 155
; else
; {
.dbline 156
; sprayNumL = getchar();
rcall _getchar
std y+2,R16
.dbline 157
; sprayNumH = getchar();
rcall _getchar
std y+3,R16
.dbline 158
; tPumpCyc = (unsigned int )getchar();
rcall _getchar
mov R10,R16
mov R2,R10
clr R3
std y+1,R2
.dbline 159
; tSprayOn = getchar();
rcall _getchar
mov R10,R16
.dbline 160
; tSprayCyc = getchar();
rcall _getchar
mov R12,R16
mov R14,R12
clr R15
.dbline 161
; tPivDelay = getchar();
rcall _getchar
mov R12,R16
.dbline 174
;
; /************debug*****************
; putchar(sprayNumL); //debug
; putchar(sprayNumH); //debug
; putchar(tPumpCyc); //debug
; putchar(tSprayOn); //debug
; putchar(tSprayCyc); //debug
; putchar(tPivDelay); //debug
;
; //**********************************/
;
; //转换数据
; SprayNum = (int)sprayNumL + ((int)sprayNumH << 8);
ldd R2,y+3
clr R3
mov R3,R2
clr R2
ldd R4,y+2
clr R5
add R4,R2
adc R5,R3
sts _SprayNum+1,R5
sts _SprayNum,R4
.dbline 175
; T1OveForPump = (unsigned char)(tPumpCyc * 1000 / (2 * 65.536));
ldd R18,y+1
clr R19
ldi R16,1000
ldi R17,3
rcall empy16s
rcall int2fp
movw R2,R16
movw R4,R18
ldi R16,<L50
ldi R17,>L50
rcall lpm32
st -y,R19
st -y,R18
st -y,R17
st -y,R16
movw R16,R2
movw R18,R4
rcall fpdiv2
rcall fpint
mov R2,R16
clr R3
sts _T1OveForPump+1,R3
sts _T1OveForPump,R2
.dbline 176
; CSprayOn = (unsigned int)(tSprayOn * 10 );
ldi R24,10
mul R24,R10
sts _CSprayOn+1,R1
sts _CSprayOn,R0
.dbline 177
; CSprayCyc = (unsigned long )tSprayCyc * 1000 ;
movw R2,R14
clr R4
clr R5
ldi R20,232
ldi R21,3
ldi R22,0
ldi R23,0
st -y,R5
st -y,R4
st -y,R3
st -y,R2
movw R16,R20
movw R18,R22
rcall empy32u
sts _CSprayCyc+1,R17
sts _CSprayCyc,R16
sts _CSprayCyc+2+1,R19
sts _CSprayCyc+2,R18
.dbline 178
; CPivDelay = (unsigned int)(tPivDelay * 100 );
ldi R24,100
mul R24,R12
sts _CPivDelay+1,R1
sts _CPivDelay,R0
.dbline 180
;
; if(CSprayCyc > 0xffff)
ldi R20,255
ldi R21,255
ldi R22,0
ldi R23,0
movw R2,R16
movw R4,R18
cp R20,R16
cpc R21,R17
cpc R22,R18
cpc R23,R19
brsh L51
X21:
.dbline 181
; {
.dbline 182
; IsLongCyc = 1;
ldi R24,1
sts _IsLongCyc,R24
.dbline 183
; HighByte = (unsigned char )(CSprayCyc >> 16);
movw R2,R4
clr R4
clr R5
sts _HighByte,R2
.dbline 184
; }
L51:
.dbline 186
;
; CLI(); //禁止中断,保证以下发送的两字节连续
cli
.dbline 187
; putchar(REVSUCCEED); //回传接收成功标志
ldi R16,252
rcall _putchar
.dbline 188
; putchar(REVSUCCEED); //回传接收成功标志
ldi R16,252
rcall _putchar
.dbline 190
;
; if(IisOn)
ldd R0,y+0
tst R0
breq L53
X22:
.dbline 191
; SEI();
sei
L53:
.dbline 192
; }
L47:
.dbline 193
; FlashRxBuf();
rcall _FlashRxBuf
.dbline -2
L43:
.dbline 0 ; func end
adiw R28,4
rjmp pop_xgsetF0FC
.dbsym l sprayNumH 3 c
.dbsym l sprayNumL 2 c
.dbsym r tPivDelay 12 c
.dbsym r tSprayCyc 14 i
.dbsym r tSprayOn 10 c
.dbsym l tPumpCyc 1 c
.dbsym l IisOn 0 c
.dbend
.area bss(ram, con, rel)
.dbfile C:\DOCUME~1\Administrator\桌面\avr1\uart.c
_tx_counter0::
.blkb 1
.dbfile C:\DOCUME~1\Administrator\桌面\avr1\uart.h
.dbsym e tx_counter0 _tx_counter0 c
_tx_rd_index0::
.blkb 1
.dbsym e tx_rd_index0 _tx_rd_index0 c
_tx_wr_index0::
.blkb 1
.dbsym e tx_wr_index0 _tx_wr_index0 c
_tx_buffer0::
.blkb 8
.dbsym e tx_buffer0 _tx_buffer0 A[8:8]c
_FrameHead0::
.blkb 1
.dbsym e FrameHead0 _FrameHead0 c
_rx_error0::
.blkb 1
.dbsym e rx_error0 _rx_error0 c
_rx_counter0::
.blkb 1
.dbsym e rx_counter0 _rx_counter0 c
_rx_rd_index0::
.blkb 1
.dbsym e rx_rd_index0 _rx_rd_index0 c
_rx_buffer0::
.blkb 8
.dbsym e rx_buffer0 _rx_buffer0 A[8:8]c
.area lit(rom, con, rel)
L50:
.word 0x126f,0x4303
;
; }//DisposeBufDatas(void)结束
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -