test_usart.lis
来自「ad7135的avr16的源程序」· LIS 代码 · 共 529 行 · 第 1/2 页
LIS
529 行
.module test_usart.c
.area text(rom, con, rel)
0000 .dbfile test_usart.c
0000 .dbfunc e DELAY_1MS _DELAY_1MS fV
0000 ; i -> R16,R17
.even
0000 _DELAY_1MS::
0000 .dbline -1
0000 .dbline 25
0000 ; //*************************************************
0000 ; //测试功能:下位机往上位机发送数据
0000 ; //测试方法:串口调试助手
0000 ; //测试结果:OK
0000 ; //时钟频率:外部8m
0000 ; //管脚分配:
0000 ; //注意事项:
0000 ; //完成时间:2009.03.15
0000 ; //**************************************************
0000 ;
0000 ; //**************************************************
0000 ; //头文件
0000 ; //**************************************************
0000 ; #include <iom16v.h>
0000 ; #include <macros.h>
0000 ; //**************************************************
0000 ;
0000 ;
0000 ; //**********************************************************
0000 ; //函数名称:void DELAY_1MS(void)
0000 ; //函数功能:延时1ms
0000 ; //注意事项:i=143*n-2
0000 ; //**********************************************************
0000 ; void DELAY_1MS(void)
0000 ; {
0000 .dbline 27
0000 ; unsigned int i;
0000 ; for(i=1142;i>0;i--)
0000 06E7 ldi R16,1142
0002 14E0 ldi R17,4
0004 02C0 xjmp L5
0006 L2:
0006 .dbline 28
0006 L3:
0006 .dbline 27
0006 0150 subi R16,1
0008 1040 sbci R17,0
000A L5:
000A .dbline 27
000A 0030 cpi R16,0
000C 0107 cpc R16,R17
000E D9F7 brne L2
0010 X0:
0010 .dbline -2
0010 L1:
0010 .dbline 0 ; func end
0010 0895 ret
0012 .dbsym r i 16 i
0012 .dbend
0012 .dbfunc e DELAY_NMS _DELAY_NMS fV
0012 ; n -> R20,R21
.even
0012 _DELAY_NMS::
0012 0E940000 xcall push_gset1
0016 A801 movw R20,R16
0018 .dbline -1
0018 .dbline 36
0018 ; ;
0018 ; }
0018 ; //**********************************************************
0018 ; //函数名称:void DELAY_1MS(void)
0018 ; //函数功能:延时1ms
0018 ; //注意事项:i=143*n-2
0018 ; //**********************************************************
0018 ; void DELAY_NMS(unsigned int n)
0018 ; {
0018 .dbline 37
0018 ; for(;n>0;n--)
0018 03C0 xjmp L10
001A L7:
001A .dbline 38
001A F2DF xcall _DELAY_1MS
001C L8:
001C .dbline 37
001C 4150 subi R20,1
001E 5040 sbci R21,0
0020 L10:
0020 .dbline 37
0020 4030 cpi R20,0
0022 4507 cpc R20,R21
0024 D1F7 brne L7
0026 X1:
0026 .dbline -2
0026 L6:
0026 0E940000 xcall pop_gset1
002A .dbline 0 ; func end
002A 0895 ret
002C .dbsym r n 20 i
002C .dbend
002C .dbfunc e USART_INIT _USART_INIT fV
.even
002C _USART_INIT::
002C .dbline -1
002C .dbline 46
002C ; DELAY_1MS();
002C ; }
002C ; //*****************************************************
002C ; //函数名称:void USART_INIT(void)
002C ; //函数功能:8M,波特率9600
002C ; //注意事项:
002C ; //*****************************************************
002C ; void USART_INIT(void)
002C ; {
002C .dbline 47
002C ; UBRR=0X33;//fosc=8mhz,波特率9600
002C 83E3 ldi R24,51
002E 89B9 out 0x9,R24
0030 .dbline 48
0030 ; UCSRA=0X20;
0030 80E2 ldi R24,32
0032 8BB9 out 0xb,R24
0034 .dbline 49
0034 ; UCSRC=0X86;
0034 86E8 ldi R24,134
0036 80BD out 0x20,R24
0038 .dbline 50
0038 ; UCSRB=0X98;
0038 88E9 ldi R24,152
003A 8AB9 out 0xa,R24
003C .dbline -2
003C L11:
003C .dbline 0 ; func end
003C 0895 ret
003E .dbend
003E .dbfunc e USART_TX _USART_TX fV
003E ; data -> R20
.even
003E _USART_TX::
003E 0E940000 xcall push_gset1
0042 402F mov R20,R16
0044 .dbline -1
0044 .dbline 58
0044 ; }
0044 ; //*****************************************************
0044 ; //函数名称:void USART_INIT(void)
0044 ; //函数功能:8M,波特率9600
0044 ; //注意事项:
0044 ; //*****************************************************
0044 ; void USART_TX(unsigned char data)
0044 ; {
0044 .dbline 59
0044 ; UDR=data;
0044 4CB9 out 0xc,R20
0046 L13:
0046 .dbline 61
0046 L14:
0046 .dbline 60
0046 ; while(!(UCSRA&(1<<TXC)))
0046 5E9B sbis 0xb,6
0048 FECF rjmp L13
004A .dbline 62
004A ; ;
004A ; DELAY_NMS(1);
004A 01E0 ldi R16,1
004C 10E0 ldi R17,0
004E E1DF xcall _DELAY_NMS
0050 .dbline -2
0050 L12:
0050 0E940000 xcall pop_gset1
0054 .dbline 0 ; func end
0054 0895 ret
0056 .dbsym r data 20 c
0056 .dbend
0056 .dbfunc e DATA_DISPLAY _DATA_DISPLAY fV
0056 ; temp -> y+0
0056 ; i -> R10
0056 ; data -> y+16
.even
0056 _DATA_DISPLAY::
0056 0E940000 xcall push_arg4
005A 0E940000 xcall push_gset3
005E 2A97 sbiw R28,10
0060 .dbline -1
0060 .dbline 70
0060 ; }
0060 ; //*****************************************************
0060 ; //函数名称:void USART_INIT(void)
0060 ; //函数功能:8M,波特率9600
0060 ; //注意事项:
0060 ; //*****************************************************
0060 ; void DATA_DISPLAY(unsigned long int data)
0060 ; {
0060 .dbline 72
0060 ; unsigned char temp[10],i;
0060 ; temp[0]=(data/1000000000);
0060 40E0 ldi R20,0
0062 5AEC ldi R21,202
0064 6AE9 ldi R22,154
0066 7BE3 ldi R23,59
0068 FE01 movw R30,R28
006A 2088 ldd R2,z+16
006C 3188 ldd R3,z+17
006E 4288 ldd R4,z+18
0070 5388 ldd R5,z+19
0072 7A93 st -y,R23
0074 6A93 st -y,R22
0076 5A93 st -y,R21
0078 4A93 st -y,R20
007A 8101 movw R16,R2
007C 9201 movw R18,R4
007E 0E940000 xcall div32u
0082 0883 std y+0,R16
0084 .dbline 73
0084 ; temp[1]=(data/100000000)%10;
0084 40E0 ldi R20,0
0086 51EE ldi R21,225
0088 65EF ldi R22,245
008A 75E0 ldi R23,5
008C FE01 movw R30,R28
008E 2088 ldd R2,z+16
0090 3188 ldd R3,z+17
0092 4288 ldd R4,z+18
0094 5388 ldd R5,z+19
0096 7A93 st -y,R23
0098 6A93 st -y,R22
009A 5A93 st -y,R21
009C 4A93 st -y,R20
009E 8101 movw R16,R2
00A0 9201 movw R18,R4
00A2 0E940000 xcall div32u
00A6 4AE0 ldi R20,10
00A8 50E0 ldi R21,0
00AA 60E0 ldi R22,0
00AC 70E0 ldi R23,0
00AE 7A93 st -y,R23
00B0 6A93 st -y,R22
00B2 5A93 st -y,R21
00B4 4A93 st -y,R20
00B6 0E940000 xcall mod32u
00BA 0983 std y+1,R16
00BC .dbline 74
00BC ; temp[2]=(data/10000000)%10;
00BC 40E8 ldi R20,128
00BE 56E9 ldi R21,150
00C0 68E9 ldi R22,152
00C2 70E0 ldi R23,0
00C4 FE01 movw R30,R28
00C6 2088 ldd R2,z+16
00C8 3188 ldd R3,z+17
00CA 4288 ldd R4,z+18
00CC 5388 ldd R5,z+19
00CE 7A93 st -y,R23
00D0 6A93 st -y,R22
00D2 5A93 st -y,R21
00D4 4A93 st -y,R20
00D6 8101 movw R16,R2
00D8 9201 movw R18,R4
00DA 0E940000 xcall div32u
00DE 4AE0 ldi R20,10
00E0 50E0 ldi R21,0
00E2 60E0 ldi R22,0
00E4 70E0 ldi R23,0
00E6 7A93 st -y,R23
00E8 6A93 st -y,R22
00EA 5A93 st -y,R21
00EC 4A93 st -y,R20
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?