📄 com.lis
字号:
.module Com.c
.area text(rom, con, rel)
0000 .dbfile E:\software\MP3程序\Usart\Com.c
0000 .dbfunc e Usart_init _Usart_init fV
.even
0000 _Usart_init::
0000 .dbline -1
0000 .dbline 8
0000 ; #include <iom64v.h>
0000 ; #include <macros.h>
0000 ; /*-----------------------------------------------------------------------
0000 ; 延时函数
0000 ; 系统时钟:8M
0000 ; -----------------------------------------------------------------------*/
0000 ; void Usart_init(void)
0000 ; {
0000 .dbline 10
0000 ; //set com0 for debug
0000 ; UBRR0H = 0X00;
0000 2224 clr R2
0002 20929000 sts 144,R2
0006 .dbline 11
0006 ; UBRR0L = 0X33;
0006 83E3 ldi R24,51
0008 89B9 out 0x9,R24
000A .dbline 12
000A ; UCSR0B = (1<<3)|(1<<4); //调试信息不允许中断
000A 88E1 ldi R24,24
000C 8AB9 out 0xa,R24
000E .dbline -2
000E L1:
000E .dbline 0 ; func end
000E 0895 ret
0010 .dbend
0010 .dbfunc e USART_Transmit _USART_Transmit fV
0010 ; data -> R16
.even
0010 _USART_Transmit::
0010 .dbline -1
0010 .dbline 16
0010 ; }
0010 ;
0010 ; void USART_Transmit( unsigned char data )
0010 ; {
0010 L3:
0010 .dbline 18
0010 L4:
0010 .dbline 18
0010 ; /* 等待发送缓冲器为空*/
0010 ; while ( !( UCSR0A & (1<<5)) );
0010 5D9B sbis 0xb,5
0012 FECF rjmp L3
0014 .dbline 20
0014 ; /* 将数据放入缓冲器,发送数据*/
0014 ; UDR0 = data;
0014 0CB9 out 0xc,R16
0016 .dbline -2
0016 L2:
0016 .dbline 0 ; func end
0016 0895 ret
0018 .dbsym r data 16 c
0018 .dbend
0018 .dbfunc e USART_Receive _USART_Receive fc
.even
0018 _USART_Receive::
0018 .dbline -1
0018 .dbline 23
0018 ; }
0018 ; unsigned char USART_Receive( void )
0018 ; {
0018 L7:
0018 .dbline 25
0018 L8:
0018 .dbline 25
0018 ; /* 等待接收数据*/
0018 ; while ( !(UCSR0A & (1<<7)) );
0018 5F9B sbis 0xb,7
001A FECF rjmp L7
001C .dbline 27
001C ; /* 从缓冲器中获取并返回数据*/
001C ; return UDR0;
001C 0CB1 in R16,0xc
001E .dbline -2
001E L6:
001E .dbline 0 ; func end
001E 0895 ret
0020 .dbend
0020 .dbfunc e Print_str _Print_str fV
0020 ; pt -> R20,R21
.even
0020 _Print_str::
0020 0E940000 xcall push_gset1
0024 A801 movw R20,R16
0026 .dbline -1
0026 .dbline 30
0026 ; }
0026 ; void Print_str(unsigned char *pt) //子
0026 ; {
0026 04C0 xjmp L12
0028 L11:
0028 .dbline 31
0028 FA01 movw R30,R20
002A 0191 ld R16,Z+
002C AF01 movw R20,R30
002E F0DF xcall _USART_Transmit
0030 L12:
0030 .dbline 31
0030 ; while(*pt != '\0') USART_Transmit(*pt++);
0030 FA01 movw R30,R20
0032 2080 ldd R2,z+0
0034 2220 tst R2
0036 C1F7 brne L11
0038 .dbline -2
0038 L10:
0038 0E940000 xcall pop_gset1
003C .dbline 0 ; func end
003C 0895 ret
003E .dbsym r pt 20 pc
003E .dbend
003E .dbfunc e Print_val _Print_val fV
003E ; temp -> R20
003E ; data -> R22
.even
003E _Print_val::
003E 0E940000 xcall push_gset2
0042 602F mov R22,R16
0044 .dbline -1
0044 .dbline 34
0044 ; }
0044 ; void Print_val(unsigned char data)
0044 ; {
0044 .dbline 36
0044 ; unsigned char temp;
0044 ; temp = data;
0044 462F mov R20,R22
0046 .dbline 37
0046 ; temp >>= 4;
0046 842F mov R24,R20
0048 8295 swap R24
004A 8F70 andi R24,#0x0F
004C 482F mov R20,R24
004E .dbline 38
004E ; temp &= 0x0f;
004E 4F70 andi R20,15
0050 .dbline 39
0050 ; if(temp > 0x09) USART_Transmit(temp+0x37);
0050 89E0 ldi R24,9
0052 8417 cp R24,R20
0054 20F4 brsh L15
0056 .dbline 39
0056 042F mov R16,R20
0058 095C subi R16,201 ; addi 55
005A DADF xcall _USART_Transmit
005C 03C0 xjmp L16
005E L15:
005E .dbline 40
005E ; else USART_Transmit(temp+'0');
005E 042F mov R16,R20
0060 005D subi R16,208 ; addi 48
0062 D6DF xcall _USART_Transmit
0064 L16:
0064 .dbline 41
0064 ; temp = data & 0x0f;
0064 462F mov R20,R22
0066 4F70 andi R20,15
0068 .dbline 42
0068 ; if(temp > 0x09) USART_Transmit(temp+0x37);
0068 89E0 ldi R24,9
006A 8417 cp R24,R20
006C 20F4 brsh L17
006E .dbline 42
006E 042F mov R16,R20
0070 095C subi R16,201 ; addi 55
0072 CEDF xcall _USART_Transmit
0074 03C0 xjmp L18
0076 L17:
0076 .dbline 43
0076 042F mov R16,R20
0078 005D subi R16,208 ; addi 48
007A CADF xcall _USART_Transmit
007C L18:
007C .dbline -2
007C L14:
007C 0E940000 xcall pop_gset2
0080 .dbline 0 ; func end
0080 0895 ret
0082 .dbsym r temp 20 c
0082 .dbsym r data 22 c
0082 .dbend
0082 .dbfunc e Print_int _Print_int fV
0082 ; temp -> R20
0082 ; data -> R22,R23
.even
0082 _Print_int::
0082 0E940000 xcall push_gset2
0086 B801 movw R22,R16
0088 .dbline -1
0088 .dbline 46
0088 ; else USART_Transmit(temp+'0');
0088 ; }
0088 ; void Print_int(unsigned int data)
0088 ; {
0088 .dbline 48
0088 ; unsigned char temp;
0088 ; temp = data >> 8;
0088 AB01 movw R20,R22
008A 452F mov R20,R21
008C 5527 clr R21
008E .dbline 49
008E ; Print_val(temp);
008E 042F mov R16,R20
0090 D6DF xcall _Print_val
0092 .dbline 50
0092 ; temp = data;
0092 462F mov R20,R22
0094 .dbline 51
0094 ; Print_val(temp);
0094 042F mov R16,R20
0096 D3DF xcall _Print_val
0098 .dbline -2
0098 L19:
0098 0E940000 xcall pop_gset2
009C .dbline 0 ; func end
009C 0895 ret
009E .dbsym r temp 20 c
009E .dbsym r data 22 i
009E .dbend
009E .dbfunc e Print_size _Print_size fV
009E ; data -> R22,R23
009E ; temp -> R20
009E ; ii -> R20,R21
.even
009E _Print_size::
009E 0E940000 xcall push_gset2
00A2 A801 movw R20,R16
00A4 .dbline -1
00A4 .dbline 55
00A4 ; }
00A4 ;
00A4 ; void Print_size(unsigned int ii)
00A4 ; {
00A4 .dbline 58
00A4 ; unsigned char temp;
00A4 ; unsigned int data;
00A4 ; data = ii;
00A4 BA01 movw R22,R20
00A6 .dbline 59
00A6 ; temp = data/10000;
00A6 20E1 ldi R18,10000
00A8 37E2 ldi R19,39
00AA 8B01 movw R16,R22
00AC 0E940000 xcall div16u
00B0 .dbline 60
00B0 ; USART_Transmit(temp+'0');
00B0 005D subi R16,208 ; addi 48
00B2 AEDF xcall _USART_Transmit
00B4 .dbline 62
00B4 ;
00B4 ; data %= 10000;
00B4 20E1 ldi R18,10000
00B6 37E2 ldi R19,39
00B8 8B01 movw R16,R22
00BA 0E940000 xcall mod16u
00BE B801 movw R22,R16
00C0 .dbline 63
00C0 ; temp = data/1000;
00C0 28EE ldi R18,1000
00C2 33E0 ldi R19,3
00C4 0E940000 xcall div16u
00C8 .dbline 64
00C8 ; USART_Transmit(temp+'0');
00C8 005D subi R16,208 ; addi 48
00CA A2DF xcall _USART_Transmit
00CC .dbline 66
00CC ;
00CC ; data %= 1000;
00CC 28EE ldi R18,1000
00CE 33E0 ldi R19,3
00D0 8B01 movw R16,R22
00D2 0E940000 xcall mod16u
00D6 B801 movw R22,R16
00D8 .dbline 67
00D8 ; temp = data/100;
00D8 24E6 ldi R18,100
00DA 30E0 ldi R19,0
00DC 0E940000 xcall div16u
00E0 .dbline 68
00E0 ; USART_Transmit(temp+'0');
00E0 005D subi R16,208 ; addi 48
00E2 96DF xcall _USART_Transmit
00E4 .dbline 70
00E4 ;
00E4 ; data %= 100;
00E4 24E6 ldi R18,100
00E6 30E0 ldi R19,0
00E8 8B01 movw R16,R22
00EA 0E940000 xcall mod16u
00EE B801 movw R22,R16
00F0 .dbline 71
00F0 ; temp = data/10;
00F0 2AE0 ldi R18,10
00F2 30E0 ldi R19,0
00F4 0E940000 xcall div16u
00F8 .dbline 72
00F8 ; USART_Transmit(temp+'0');
00F8 005D subi R16,208 ; addi 48
00FA 8ADF xcall _USART_Transmit
00FC .dbline 74
00FC ;
00FC ; temp = data%10;
00FC 2AE0 ldi R18,10
00FE 30E0 ldi R19,0
0100 8B01 movw R16,R22
0102 0E940000 xcall mod16u
0106 402F mov R20,R16
0108 .dbline 75
0108 ; USART_Transmit(temp+'0');
0108 005D subi R16,208 ; addi 48
010A 82DF xcall _USART_Transmit
010C .dbline -2
010C L20:
010C 0E940000 xcall pop_gset2
0110 .dbline 0 ; func end
0110 0895 ret
0112 .dbsym r data 22 i
0112 .dbsym r temp 20 c
0112 .dbsym r ii 20 i
0112 .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -