📄 uart.lis.bak
字号:
.module Uart.c
.area text(rom, con, rel)
0000 .dbfile F:\AVR_Modem\Boot_TEST\BOOTLoadICC\Uart.c
0000 .dbfunc e Init_Com _Init_Com fV
.even
0000 _Init_Com::
0000 .dbline -1
0000 .dbline 24
0000 ; #include <iom128v.h>
0000 ; #include "Uart.h"
0000 ; #include "Crc.h"
0000 ;
0000 ; //============================================================
0000 ; //计算和设置128的波特率参数 chenzuan 2006-03-16
0000 ; #define BAUD 19200
0000 ; #define CRYSTAL 7372800
0000 ; #define BAUD_SETTING (unsigned char)((unsigned long)CRYSTAL/(16*(unsigned long)BAUD)-1)
0000 ; #define BAUD_H (unsigned char)(BAUD_SETTING>>8)
0000 ; #define BAUD_L (unsigned char)BAUD_SETTING
0000 ;
0000 ; //============================================================
0000 ; //函 数:void Init_Com(void)
0000 ; //功 能:初始化串口设置
0000 ; //入口参数:无
0000 ; //返 回 值:无
0000 ; //设 计 者:覃道堂
0000 ; //创作时间:2006-03-16
0000 ; //修改时间:
0000 ; //修改目的:
0000 ; //============================================================
0000 ; void Init_Com(void)
0000 ; {
0000 .dbline 25
0000 ; UBRR0H = BAUD_H;
0000 2224 clr R2
0002 20929000 sts 144,R2
0006 .dbline 26
0006 ; UBRR0L = BAUD_L;
0006 87E1 ldi R24,23
0008 89B9 out 0x9,R24
000A .dbline 27
000A ; UCSR0B = 0x18;
000A 88E1 ldi R24,24
000C 8AB9 out 0xa,R24
000E .dbline 28
000E ; UCSR0C = 0x0E;
000E 8EE0 ldi R24,14
0010 80939500 sts 149,R24
0014 .dbline 29
0014 ; OCR0 = 0xEA;
0014 8AEE ldi R24,234
0016 81BF out 0x31,R24
0018 .dbline 30
0018 ; TCCR0 = 0x0F;
0018 8FE0 ldi R24,15
001A 83BF out 0x33,R24
001C .dbline -2
001C L1:
001C .dbline 0 ; func end
001C 0895 ret
001E .dbend
001E .dbfunc e Uart_PutChar _Uart_PutChar fV
001E ; Data -> R16
.even
001E _Uart_PutChar::
001E .dbline -1
001E .dbline 44
001E ; }
001E ;
001E ; //============================================================
001E ; //函 数:void Uart_PutChar(unsigned char Data)
001E ; //功 能:发送一个字符
001E ; //入口参数:发送的字符数据
001E ; //返 回 值:无
001E ; //设 计 者:覃道堂
001E ; //创作时间:2006-03-16
001E ; //修改时间:
001E ; //修改目的:
001E ; //============================================================
001E ; void Uart_PutChar(unsigned char Data)
001E ; {
001E L3:
001E .dbline 45
001E L4:
001E .dbline 45
001E ; while(!(UCSR0A & 0x20));
001E 5D9B sbis 0xb,5
0020 FECF rjmp L3
0022 .dbline 46
0022 ; UDR0 = Data;
0022 0CB9 out 0xc,R16
0024 .dbline -2
0024 L2:
0024 .dbline 0 ; func end
0024 0895 ret
0026 .dbsym r Data 16 c
0026 .dbend
0026 .dbfunc e Uart_GetChar _Uart_GetChar fI
0026 ; res -> R16
0026 ; status -> R18
.even
0026 _Uart_GetChar::
0026 .dbline -1
0026 .dbline 60
0026 ; }
0026 ;
0026 ; //============================================================
0026 ; //函 数:int Uart_GetChar(void)
0026 ; //功 能:接收一个字符
0026 ; //入口参数:无
0026 ; //返 回 值:返回-1接受数据错误,否则为接收到的一个字符数据
0026 ; //设 计 者:覃道堂
0026 ; //创作时间:2006-03-16
0026 ; //修改时间:
0026 ; //修改目的:
0026 ; //============================================================
0026 ; int Uart_GetChar(void)
0026 ; {
0026 .dbline 63
0026 ; unsigned char status,res;
0026 ;
0026 ; if(!(UCSR0A&0x80))
0026 5F99 sbic 0xb,7
0028 03C0 rjmp L7
002A .dbline 64
002A ; return -1;
002A 0FEF ldi R16,-1
002C 1FEF ldi R17,-1
002E 09C0 xjmp L6
0030 L7:
0030 .dbline 65
0030 ; status = UCSR0A;
0030 2BB1 in R18,0xb
0032 .dbline 66
0032 ; res = UDR0;
0032 0CB1 in R16,0xc
0034 .dbline 67
0034 ; if(status & 0x1c)
0034 822F mov R24,R18
0036 8C71 andi R24,28
0038 19F0 breq L9
003A .dbline 68
003A ; return -1;
003A 0FEF ldi R16,-1
003C 1FEF ldi R17,-1
003E 01C0 xjmp L6
0040 L9:
0040 .dbline 70
0040 ; else
0040 ; return res;
0040 1127 clr R17
0042 .dbline -2
0042 L6:
0042 .dbline 0 ; func end
0042 0895 ret
0044 .dbsym r res 16 c
0044 .dbsym r status 18 c
0044 .dbend
0044 .dbfunc e Uart_Send_Frame _Uart_Send_Frame fV
0044 ; Len -> R20,R21
0044 ; Frame -> R22,R23
.even
0044 _Uart_Send_Frame::
0044 0E940000 xcall push_gset2
0048 A901 movw R20,R18
004A B801 movw R22,R16
004C .dbline -1
004C .dbline 84
004C ; }
004C ;
004C ; //============================================================
004C ; //函 数:void Uart_Send_Frame(unsigned char *Frame, int Len)
004C ; //功 能:发送一个字符串
004C ; //入口参数:*Frame发送一个字符串数据,Len发送的长度
004C ; //返 回 值:无
004C ; //设 计 者:覃道堂
004C ; //创作时间:2006-03-16
004C ; //修改时间:
004C ; //修改目的:
004C ; //============================================================
004C ; void Uart_Send_Frame(unsigned char *Frame, int Len)
004C ; {
004C 07C0 xjmp L13
004E L12:
004E .dbline 86
004E .dbline 87
004E FB01 movw R30,R22
0050 0081 ldd R16,z+0
0052 E5DF xcall _Uart_PutChar
0054 .dbline 88
0054 6F5F subi R22,255 ; offset = 1
0056 7F4F sbci R23,255
0058 .dbline 89
0058 4150 subi R20,1
005A 5040 sbci R21,0
005C .dbline 90
005C L13:
005C .dbline 85
005C ; while(Len > 0)
005C 2224 clr R2
005E 3324 clr R3
0060 2416 cp R2,R20
0062 3506 cpc R3,R21
0064 A4F3 brlt L12
0066 .dbline -2
0066 L11:
0066 0E940000 xcall pop_gset2
006A .dbline 0 ; func end
006A 0895 ret
006C .dbsym r Len 20 I
006C .dbsym r Frame 22 pc
006C .dbend
006C .dbfunc e Uart_Receive_Frame _Uart_Receive_Frame fc
006C ; Len -> R20,R21
006C ; ReceiveLen -> R22,R23
006C ; TimerCount -> R10,R11
006C ; ByteData -> R14,R15
006C ; OverTime -> R12,R13
006C ; Frame -> y+10
.even
006C _Uart_Receive_Frame::
006C 0E940000 xcall push_arg4
0070 0E940000 xcall push_gset5
0074 6901 movw R12,R18
0076 .dbline -1
0076 .dbline 105
0076 ; {
0076 ; Uart_PutChar(*Frame);
0076 ; Frame ++;
0076 ; Len --;
0076 ; }
0076 ; }
0076 ;
0076 ; //============================================================
0076 ; //函 数:unsigned char Uart_Receive_Frame(unsigned char *Frame,
0076 ; // int OverTime)
0076 ; //功 能:接收一个字符串
0076 ; //入口参数:*Frame接收一个字符串数据存放地址,OverTime超时时间
0076 ; //返 回 值:无
0076 ; //设 计 者:覃道堂
0076 ; //创作时间:2006-03-16
0076 ; //修改时间:
0076 ; //修改目的:
0076 ; //============================================================
0076 ; unsigned char Uart_Receive_Frame(unsigned char *Frame,int OverTime)
0076 ; {
0076 .dbline 107
0076 ; int ByteData;
0076 ; int TimerCount = 0;
0076 AA24 clr R10
0078 BB24 clr R11
007A .dbline 108
007A ; int ReceiveLen = 0;
007A 6627 clr R22
007C 7727 clr R23
007E .dbline 109
007E ; int Len = 255;
007E 4FEF ldi R20,255
0080 50E0 ldi R21,0
0082 29C0 xjmp L17
0084 X0:
0084 .dbline 112
0084 ;
0084 ; while(ReceiveLen < Len)
0084 ; {
0084 L19:
0084 .dbline 114
0084 ; while((ByteData = Uart_GetChar()) == -1)
0084 ; {
0084 .dbline 115
0084 ; if(TIFR& 0x02)
0084 26B6 in R2,0x36
0086 21FE sbrs R2,1
0088 0BC0 rjmp L22
008A .dbline 116
008A ; {
008A .dbline 117
008A ; if(++TimerCount > OverTime)
008A C501 movw R24,R10
008C 0196 adiw R24,1
008E 5C01 movw R10,R24
0090 CA14 cp R12,R10
0092 DB04 cpc R13,R11
0094 14F4 brge L24
0096 .dbline 118
0096 ; return 0;//等待超时如果还没接收到数据,则返回数据长度0
0096 0027 clr R16
0098 22C0 xjmp L15
009A L24:
009A .dbline 119
009A ; TIFR=TIFR|0x02;
009A 86B7 in R24,0x36
009C 8260 ori R24,2
009E 86BF out 0x36,R24
00A0 .dbline 120
00A0 ; }
00A0 L22:
00A0 .dbline 121
00A0 L20:
00A0 .dbline 113
00A0 C2DF xcall _Uart_GetChar
00A2 7801 movw R14,R16
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -