⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 usart.lis

📁 实现机于通讯芯片的电话接听 拨出 以及来电振领提示
💻 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 + -