📄 usart.lis
字号:
.module usart.c
.area text(rom, con, rel)
0000 .dbfile C:\DOCUME~1\Rooger\桌面\GSM_PHONE\usart.c
0000 .dbfunc e USART_Init _USART_Init fV
.even
0000 _USART_Init::
0000 .dbline -1
0000 .dbline 19
0000 ; //***************************************************************************
0000 ;
0000 ; #include <iom8v.h>
0000 ; #include <macros.h>
0000 ; #include "usart.h"
0000 ;
0000 ; /*****************************************************************************
0000 ; *
0000 ; * Function name : USART_Init
0000 ; *
0000 ; * Returns : None
0000 ; *
0000 ; * Parameters : unsigned int baudrate
0000 ; *
0000 ; * Purpose : Initialize the USART
0000 ; *
0000 ; *****************************************************************************/
0000 ; void USART_Init()
0000 ; {
0000 .dbline 21
0000 ; // Set baud rate (38.4k)EXT OSC = 3.6864M
0000 ; UBRRH = 0x00;
0000 2224 clr R2
0002 20BC out 0x20,R2
0004 .dbline 22
0004 ; UBRRL = 0x01;
0004 81E0 ldi R24,1
0006 89B9 out 0x9,R24
0008 .dbline 24
0008 ;
0008 ; UCSRB = (1 << RXEN)|(1<<TXEN); //RXEN->enable usrt recieving;
0008 88E1 ldi R24,24
000A 8AB9 out 0xa,R24
000C .dbline 26
000C ; // Set frame format : 8data, 1stop bits
000C ; UCSRC = (1<<URSEL) | (0 << USBS) | (3 << UCSZ0);
000C 86E8 ldi R24,134
000E 80BD out 0x20,R24
0010 .dbline -2
0010 L1:
0010 .dbline 0 ; func end
0010 0895 ret
0012 .dbend
0012 .dbfunc e Usart_Tx _Usart_Tx fV
0012 ; data -> R16
.even
0012 _Usart_Tx::
0012 .dbline -1
0012 .dbline 42
0012 ; }
0012 ;
0012 ;
0012 ; /*****************************************************************************
0012 ; *
0012 ; * Function name : Usart_Tx
0012 ; *
0012 ; * Returns : None
0012 ; *
0012 ; * Parameters : char data: byte to send
0012 ; *
0012 ; * Purpose : Send one byte through the USART
0012 ; *
0012 ; *****************************************************************************/
0012 ; void Usart_Tx(char data)
0012 ; {
0012 L3:
0012 .dbline 43
0012 L4:
0012 .dbline 43
0012 ; while (!(UCSRA & (1<<UDRE)));
0012 5D9B sbis 0xb,5
0014 FECF rjmp L3
0016 .dbline 44
0016 ; UDR = data;
0016 0CB9 out 0xc,R16
0018 .dbline -2
0018 L2:
0018 .dbline 0 ; func end
0018 0895 ret
001A .dbsym r data 16 c
001A .dbend
001A .dbfunc e Usart_TxData _Usart_TxData fV
001A ; iTemp -> R20,R21
001A ; data -> R20
001A ; iValue -> R22,R23
.even
001A _Usart_TxData::
001A 00D0 rcall push_gset2
001C B801 movw R22,R16
001E .dbline -1
001E .dbline 47
001E ; }
001E ; void Usart_TxData(unsigned int iValue)
001E ; {
001E .dbline 50
001E ; char data;
001E ; unsigned int iTemp;
001E ; iTemp = iValue;
001E AB01 movw R20,R22
0020 .dbline 51
0020 ; data = (iTemp >> 8) & 0xff;
0020 452F mov R20,R21
0022 5527 clr R21
0024 5070 andi R21,0
0026 .dbline 52
0026 ; Usart_Tx(data);
0026 042F mov R16,R20
0028 F4DF rcall _Usart_Tx
002A .dbline 53
002A ; data = iValue & 0xff;
002A 462F mov R20,R22
002C 5070 andi R21,0
002E .dbline 54
002E ; Usart_Tx(data);
002E 042F mov R16,R20
0030 F0DF rcall _Usart_Tx
0032 .dbline -2
0032 L6:
0032 00D0 rcall pop_gset2
0034 .dbline 0 ; func end
0034 0895 ret
0036 .dbsym r iTemp 20 i
0036 .dbsym r data 20 c
0036 .dbsym r iValue 22 i
0036 .dbend
0036 .dbfunc e Usart_Command _Usart_Command fV
0036 ; ComCounter -> <dead>
0036 ; J -> R22
0036 ; num_bytes -> R10
0036 ; command -> R20,R21
.even
0036 _Usart_Command::
0036 00D0 rcall push_gset3
0038 A22E mov R10,R18
003A A801 movw R20,R16
003C .dbline -1
003C .dbline 57
003C ; }
003C ; void Usart_Command(char *command, char num_bytes)
003C ; {
003C .dbline 60
003C ; unsigned char J;
003C ; char ComCounter;
003C ; for (J = 0; J < num_bytes; J++)
003C 6627 clr R22
003E 07C0 rjmp L11
0040 L8:
0040 .dbline 61
0040 .dbline 62
0040 E62F mov R30,R22
0042 FF27 clr R31
0044 E40F add R30,R20
0046 F51F adc R31,R21
0048 0081 ldd R16,z+0
004A E3DF rcall _Usart_Tx
004C .dbline 63
004C L9:
004C .dbline 60
004C 6395 inc R22
004E L11:
004E .dbline 60
004E 6A15 cp R22,R10
0050 B8F3 brlo L8
0052 .dbline -2
0052 L7:
0052 00D0 rcall pop_gset3
0054 .dbline 0 ; func end
0054 0895 ret
0056 .dbsym l ComCounter 1 c
0056 .dbsym r J 22 c
0056 .dbsym r num_bytes 10 c
0056 .dbsym r command 20 pc
0056 .dbend
0056 .dbfunc e Usart_Rx _Usart_Rx fc
0056 ; data -> <dead>
0056 ; iCounter -> R20,R21
.even
0056 _Usart_Rx::
0056 00D0 rcall push_gset1
0058 .dbline -1
0058 .dbline 77
0058 ; {
0058 ; Usart_Tx(command[J]);
0058 ; }
0058 ; }
0058 ; /*****************************************************************************
0058 ; *
0058 ; * Function name : Usart_Rx
0058 ; *
0058 ; * Returns : char: byte received
0058 ; *
0058 ; * Parameters : None
0058 ; *
0058 ; * Purpose : Receives one byte from the USART
0058 ; *
0058 ; *****************************************************************************/
0058 ; char Usart_Rx(void)
0058 ; {
0058 .dbline 80
0058 ; int iCounter;
0058 ; char data;
0058 ; iCounter = 0;
0058 4427 clr R20
005A 5527 clr R21
005C 0BC0 rjmp L14
005E L13:
005E .dbline 82
005E ; while (!(UCSRA & (1<<RXC)))
005E ; {
005E .dbline 83
005E ; Delay(5);
005E 05E0 ldi R16,5
0060 10E0 ldi R17,0
0062 00D0 rcall _Delay
0064 .dbline 84
0064 ; iCounter++;
0064 4F5F subi R20,255 ; offset = 1
0066 5F4F sbci R21,255
0068 .dbline 85
0068 ; if (iCounter > 60000) break;
0068 80E6 ldi R24,60000
006A 9AEE ldi R25,234
006C 8417 cp R24,R20
006E 9507 cpc R25,R21
0070 08F4 brsh L16
0072 .dbline 85
0072 02C0 rjmp L15
0074 L16:
0074 .dbline 86
0074 L14:
0074 .dbline 81
0074 5F9B sbis 0xb,7
0076 F3CF rjmp L13
0078 L15:
0078 .dbline 87
0078 ; }
0078 ; return UDR;
0078 0CB1 in R16,0xc
007A .dbline -2
007A L12:
007A 00D0 rcall pop_gset1
007C .dbline 0 ; func end
007C 0895 ret
007E .dbsym l data 1 c
007E .dbsym r iCounter 20 I
007E .dbend
.area vector(rom, abs)
.org 22
0016 3FC0 rjmp _Usart_Rx_isr
.area text(rom, con, rel)
007E .dbfile C:\DOCUME~1\Rooger\桌面\GSM_PHONE\usart.c
007E .dbfunc e Usart_Rx_isr _Usart_Rx_isr fV
007E ; data -> R0
.even
007E _Usart_Rx_isr::
007E .dbline -1
007E .dbline 92
007E ; }
007E ; //*****************************************************************************/
007E ; #pragma interrupt_handler Usart_Rx_isr:12
007E ; void Usart_Rx_isr(void)
007E ; {
007E .dbline -2
007E L18:
007E .dbline 0 ; func end
007E 1895 reti
0080 .dbsym l data 1 c
0080 .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -