📄 uart.lis
字号:
0048 _UART_TX_DATA::
0048 .dbline -1
0048 .dbline 141
0048 ;
0048 ; //********************************************************************
0048 ; // Function : UART_TX_DATA
0048 ; // Input : bData-data to be send
0048 ; // Output : none
0048 ; // Description : Write Data to UART TX Reigster
0048 ; //********************************************************************
0048 ; void UART_TX_DATA(INT8U bData)
0048 ; {
0048 .dbline 142
0048 ; UDR = bData;
0048 0CB9 out 0xc,R16
004A .dbline -2
004A .dbline 143
004A ; }
004A L11:
004A .dbline 0 ; func end
004A 0895 ret
004C .dbsym r bData 16 c
004C .dbend
004C .dbfunc e UART_RX_DATA _UART_RX_DATA fc
.even
004C _UART_RX_DATA::
004C .dbline -1
004C .dbline 152
004C ;
004C ; //********************************************************************
004C ; // Function : UART_RX_DATA
004C ; // Input : none
004C ; // Output : data received
004C ; // Description : Get Received Data from Register
004C ; //********************************************************************
004C ; INT8U UART_RX_DATA(void)
004C ; {
004C .dbline 153
004C ; return(UDR);
004C 0CB1 in R16,0xc
004E .dbline -2
004E L12:
004E .dbline 0 ; func end
004E 0895 ret
0050 .dbend
.area vector(rom, abs)
.org 44
002C 0C942800 jmp _sUART_RX_ISR
.area text(rom, con, rel)
0050 .dbfile E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\RS232通信协议应用设计\UART.c
0050 .dbfunc e sUART_RX_ISR _sUART_RX_ISR fV
0050 ; data -> R20
.even
0050 _sUART_RX_ISR::
0050 0E940000 xcall push_lset
0054 0E940000 xcall push_gset1
0058 .dbline -1
0058 .dbline 164
0058 ; }
0058 ;
0058 ; //********************************************************************
0058 ; // Function : sUART_RX_ISR
0058 ; // Input : none
0058 ; // Output : none
0058 ; // Description : UART RX Interrupt Service Routine
0058 ; //********************************************************************
0058 ; #pragma interrupt_handler sUART_RX_ISR:12
0058 ; void sUART_RX_ISR(void)
0058 ; {
0058 .dbline 167
0058 ; INT8U data;
0058 ; //step1:read receive register to clear interrupt flag
0058 ; data = UART_RX_DATA();
0058 F9DF xcall _UART_RX_DATA
005A 402F mov R20,R16
005C .dbline 169
005C ; //step2:report event or store received char to buffer
005C ; if((data == 0x0A) || (data == 0x0D))
005C 0A30 cpi R16,10
005E 11F0 breq L16
0060 0D30 cpi R16,13
0062 59F4 brne L14
0064 L16:
0064 .dbline 170
0064 ; {
0064 .dbline 171
0064 ; if(sbGetRxBufferEmptyStatus(&stSciBuffer) == false)
0064 00E0 ldi R16,<_stSciBuffer
0066 10E0 ldi R17,>_stSciBuffer
0068 7FD0 xcall _sbGetRxBufferEmptyStatus
006A 0023 tst R16
006C 51F4 brne L15
006E .dbline 172
006E ; {
006E .dbline 173
006E ; SciBuffer_Rx_Reset(&stSciBuffer);
006E 00E0 ldi R16,<_stSciBuffer
0070 10E0 ldi R17,>_stSciBuffer
0072 82D0 xcall _SciBuffer_Rx_Reset
0074 .dbline 174
0074 ; sSet_SCI_Event(1);
0074 01E0 ldi R16,1
0076 C4DF xcall _sSet_SCI_Event
0078 .dbline 175
0078 ; }
0078 .dbline 176
0078 ; }
0078 04C0 xjmp L15
007A L14:
007A .dbline 178
007A .dbline 179
007A 242F mov R18,R20
007C 00E0 ldi R16,<_stSciBuffer
007E 10E0 ldi R17,>_stSciBuffer
0080 24D0 xcall _SciBuffer_Rx_In
0082 .dbline 180
0082 L15:
0082 .dbline -2
0082 .dbline 181
0082 ; else
0082 ; {
0082 ; SciBuffer_Rx_In(&stSciBuffer,data);
0082 ; }
0082 ; }
0082 L13:
0082 0E940000 xcall pop_gset1
0086 0E940000 xcall pop_lset
008A .dbline 0 ; func end
008A 1895 reti
008C .dbsym r data 20 c
008C .dbend
.area vector(rom, abs)
.org 52
0034 0C944600 jmp _sUART_TX_ISR
.area text(rom, con, rel)
008C .dbfile E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\RS232通信协议应用设计\UART.c
008C .dbfunc e sUART_TX_ISR _sUART_TX_ISR fV
008C ; bData -> R20
.even
008C _sUART_TX_ISR::
008C 0E940000 xcall push_lset
0090 0E940000 xcall push_gset1
0094 .dbline -1
0094 .dbline 191
0094 ;
0094 ; //********************************************************************
0094 ; // Function : sUART_TX_ISR
0094 ; // Input : none
0094 ; // Output : none
0094 ; // Description : UART TX Interrupt Service Routine
0094 ; //********************************************************************
0094 ; #pragma interrupt_handler sUART_TX_ISR:14
0094 ; void sUART_TX_ISR(void)
0094 ; {
0094 .dbline 193
0094 ; INT8U bData;
0094 ; if(sbGetTxBufferNoEmptyStatus(&stSciBuffer) == true)
0094 00E0 ldi R16,<_stSciBuffer
0096 10E0 ldi R17,>_stSciBuffer
0098 55D0 xcall _sbGetTxBufferNoEmptyStatus
009A 0130 cpi R16,1
009C 31F4 brne L20
009E .dbline 194
009E ; {
009E .dbline 195
009E ; bData = SciBuffer_Tx_Out(&stSciBuffer);
009E 00E0 ldi R16,<_stSciBuffer
00A0 10E0 ldi R17,>_stSciBuffer
00A2 29D0 xcall _SciBuffer_Tx_Out
00A4 402F mov R20,R16
00A6 .dbline 196
00A6 ; UART_TX_DATA(bData);
00A6 D0DF xcall _UART_TX_DATA
00A8 .dbline 197
00A8 ; }
00A8 04C0 xjmp L21
00AA L20:
00AA .dbline 199
00AA .dbline 200
00AA CCDF xcall _Disable_UART_TX_INT
00AC .dbline 201
00AC 00E0 ldi R16,<_stSciBuffer
00AE 10E0 ldi R17,>_stSciBuffer
00B0 67D0 xcall _SciBuffer_Tx_Reset
00B2 .dbline 202
00B2 L21:
00B2 .dbline -2
00B2 .dbline 203
00B2 ; else
00B2 ; {
00B2 ; Disable_UART_TX_INT();
00B2 ; SciBuffer_Tx_Reset(&stSciBuffer);
00B2 ; }
00B2 ; }
00B2 L19:
00B2 0E940000 xcall pop_gset1
00B6 0E940000 xcall pop_lset
00BA .dbline 0 ; func end
00BA 1895 reti
00BC .dbsym r bData 20 c
00BC .dbend
00BC .dbfunc e SciBuffer_Init _SciBuffer_Init fV
00BC ; ptr -> R16,R17
.even
00BC _SciBuffer_Init::
00BC .dbline -1
00BC .dbline 212
00BC ;
00BC ; //********************************************************************
00BC ; // Function : SciBuffer_Init
00BC ; // Input : ptr-pointer to SCI Buffer
00BC ; // Output : none
00BC ; // Description : Initialization of SCI Buffer
00BC ; //********************************************************************
00BC ; void SciBuffer_Init(struct SCI_Buffer *ptr)
00BC ; {
00BC .dbline 213
00BC ; ptr->bRxLength = 0;
00BC 2224 clr R2
00BE F801 movw R30,R16
00C0 2082 std z+0,R2
00C2 .dbline 214
00C2 ; ptr->bTxLength = 0;
00C2 2182 std z+1,R2
00C4 .dbline 215
00C4 ; ptr->bTxBufferLength = 0;
00C4 F801 movw R30,R16
00C6 2282 std z+2,R2
00C8 .dbline -2
00C8 .dbline 216
00C8 ; }
00C8 L22:
00C8 .dbline 0 ; func end
00C8 0895 ret
00CA .dbsym r ptr 16 pX
00CA .dbend
00CA .dbfunc e SciBuffer_Rx_In _SciBuffer_Rx_In fV
00CA ; bData -> R18
00CA ; ptr -> R16,R17
.even
00CA _SciBuffer_Rx_In::
00CA .dbline -1
00CA .dbline 225
00CA ;
00CA ; //********************************************************************
00CA ; // Function : SciBuffer_Rx_In
00CA ; // Input : ptr-pointer to SCI Buffer
00CA ; // Output : none
00CA ; // Description : Add data into the SCI RX Buffer
00CA ; //********************************************************************
00CA ; void SciBuffer_Rx_In(struct SCI_Buffer *ptr,INT8U bData)
00CA ; {
00CA .dbline 226
00CA ; if(ptr->bRxLength < cMaxRxLength)
00CA F801 movw R30,R16
00CC 8081 ldd R24,z+0
00CE 8233 cpi R24,50
00D0 60F4 brsh L24
00D2 .dbline 227
00D2 ; {
00D2 .dbline 228
00D2 ; ptr->bRxBuffer[ptr->bRxLength] = bData;
00D2 CF01 movw R24,R30
00D4 0396 adiw R24,3
00D6 E081 ldd R30,z+0
00D8 FF27 clr R31
00DA E80F add R30,R24
00DC F91F adc R31,R25
00DE 2083 std z+0,R18
00E0 .dbline 229
00E0 ; ptr->bRxLength++;
00E0 F801 movw R30,R16
00E2 8081 ldd R24,z+0
00E4 8F5F subi R24,255 ; addi 1
00E6 8083 std z+0,R24
00E8 .dbline 230
00E8 ; }
00E8 05C0 xjmp L25
00EA L24:
00EA .dbline 232
00EA .dbline 233
00EA F801 movw R30,R16
00EC 2383 std z+3,R18
00EE .dbline 234
00EE 81E0 ldi R24,1
00F0 F801 movw R30,R16
00F2 8083 std z+0,R24
00F4 .dbline 235
00F4 L25:
00F4 .dbline -2
00F4 .dbline 236
00F4 ; else
00F4 ; {
00F4 ; ptr->bRxBuffer[0] = bData;
00F4 ; ptr->bRxLength = 1;
00F4 ; }
00F4 ; }
00F4 L23:
00F4 .dbline 0 ; func end
00F4 0895 ret
00F6 .dbsym r bData 18 c
00F6 .dbsym r ptr 16 pX
00F6 .dbend
00F6 .dbfunc e SciBuffer_Tx_Out _SciBuffer_Tx_Out fc
00F6 ; bData -> R20
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -