📄 test.lis
字号:
.module TEST.C
.area text(rom, con, rel)
0000 .dbfile D:\iccavr\mega16\11\UART\TEST.C
0000 .dbfile D:\iccavr\mega16\11\UART\uart.h
0000 .dbfunc e uart_init _uart_init fV
.even
0000 _uart_init::
0000 .dbline -1
0000 .dbline 9
0000 ; /**********串口端口定义**********/
0000 ; #define RxD PD0
0000 ; #define TxD PD1
0000 ;
0000 ; #define baudrate 9600 //波特率
0000 ; #define F_CPU 8000000UL //定义晶振频率
0000 ;
0000 ; void uart_init(void)
0000 ; {
0000 .dbline 11
0000 ; /*****RS232口线设置*****/
0000 ; PORTD|=BIT(RxD)|BIT(TxD);
0000 82B3 in R24,0x12
0002 8360 ori R24,3
0004 82BB out 0x12,R24
0006 .dbline 12
0006 ; DDRD&=~BIT(RxD);
0006 8898 cbi 0x11,0
0008 .dbline 13
0008 ; DDRD|=BIT(TxD);
0008 899A sbi 0x11,1
000A .dbline 16
000A ;
000A ; /* 设置波特率*/
000A ; UBRRL=(F_CPU/baudrate/16-1)%256; //本设置波特率不加倍及U2X=0
000A 83E3 ldi R24,51
000C 89B9 out 0x9,R24
000E .dbline 17
000E ; UBRRH=(F_CPU/baudrate/16-1)/256;
000E 2224 clr R2
0010 20BC out 0x20,R2
0012 .dbline 24
0012 ; /*U2X=1的设置波特率*/
0012 ; //UBRRL= (F_CPU/BAUDRATE/8-1)%256;
0012 ; //UBRRH= (F_CPU/BAUDRATE/8-1)/256;
0012 ;
0012 ; /* 接收器与发送器使能*/
0012 ; //UCSRB=(1<<RXEN)|(1<<TXEN);
0012 ; UCSRB|=BIT(4)|BIT(3);
0012 8AB1 in R24,0xa
0014 8861 ori R24,24
0016 8AB9 out 0xa,R24
0018 .dbline 29
0018 ;
0018 ; /*设置传输格式*/
0018 ; //异步,8位数据,无奇偶校验,一个停止位,无倍速
0018 ; //UCSRC=(1<<URSEL)|(1<<UCSZ0)|(1<<UCSZ1);
0018 ; UCSRC|=BIT(7)|BIT(2)|BIT(1);
0018 80B5 in R24,0x20
001A 8668 ori R24,134
001C 80BD out 0x20,R24
001E .dbline -2
001E L1:
001E .dbline 0 ; func end
001E 0895 ret
0020 .dbend
0020 .dbfunc e putc _putc fV
0020 ; c -> R16
.even
0020 _putc::
0020 .dbline -1
0020 .dbline 34
0020 ; }
0020 ;
0020 ; //串口数据发送,查询方式
0020 ; void putc(unsigned char c)
0020 ; {
0020 L3:
0020 .dbline 36
0020 ; /* 等待发送缓冲器为空 */
0020 ; while (!(UCSRA&(1<<UDRE)));
0020 L4:
0020 .dbline 36
0020 5D9B sbis 0xb,5
0022 FECF rjmp L3
0024 X0:
0024 .dbline 38
0024 ; /* 将数据放入缓冲器,发送数据 */
0024 ; UDR = c;
0024 0CB9 out 0xc,R16
0026 .dbline -2
0026 L2:
0026 .dbline 0 ; func end
0026 0895 ret
0028 .dbsym r c 16 c
0028 .dbend
0028 .dbfunc e puts _puts fV
0028 ; s -> R20,R21
.even
0028 _puts::
0028 4A93 st -y,R20
002A 5A93 st -y,R21
002C A801 movw R20,R16
002E .dbline -1
002E .dbline 43
002E ; }
002E ;
002E ; //串口字符串发送,查询方式
002E ; void puts(unsigned char *s)
002E ; {
002E 05C0 xjmp L8
0030 L7:
0030 .dbline 45
0030 ; while(*s)
0030 ; {
0030 .dbline 46
0030 ; putc(*s);
0030 FA01 movw R30,R20
0032 0081 ldd R16,z+0
0034 F5DF xcall _putc
0036 .dbline 47
0036 ; s++;
0036 4F5F subi R20,255 ; offset = 1
0038 5F4F sbci R21,255
003A .dbline 48
003A ; }
003A L8:
003A .dbline 44
003A FA01 movw R30,R20
003C 2080 ldd R2,z+0
003E 2220 tst R2
0040 B9F7 brne L7
0042 X1:
0042 .dbline 49
0042 ; putc('\n');
0042 0AE0 ldi R16,10
0044 EDDF xcall _putc
0046 .dbline -2
0046 L6:
0046 .dbline 0 ; func end
0046 5991 ld R21,y+
0048 4991 ld R20,y+
004A 0895 ret
004C .dbsym r s 20 pc
004C .dbend
004C .dbfunc e getc _getc fc
.even
004C _getc::
004C .dbline -1
004C .dbline 55
004C ; //return 1;
004C ; }
004C ;
004C ; //串口数据接收,查询方式
004C ; unsigned char getc(void)
004C ; {
004C L11:
004C .dbline 57
004C ; /* 等待接收数据*/
004C ; while (!(UCSRA&(1<<RXC)));
004C L12:
004C .dbline 57
004C 5F9B sbis 0xb,7
004E FECF rjmp L11
0050 X2:
0050 .dbline 59
0050 ; /* 从缓冲器中获取并返回数据*/
0050 ; return UDR;
0050 0CB1 in R16,0xc
0052 .dbline -2
0052 L10:
0052 .dbline 0 ; func end
0052 0895 ret
0054 .dbend
0054 .dbfunc e get_s _get_s fV
0054 ; i -> R20,R21
0054 ; num -> R10,R11
0054 ; js -> R12,R13
.even
0054 _get_s::
0054 0E940000 xcall push_xgset303C
0058 5901 movw R10,R18
005A 6801 movw R12,R16
005C .dbline -1
005C .dbline 64
005C ; }
005C ;
005C ; //串口接收数据存储,存储到数组中
005C ; void get_s(unsigned char *js,unsigned int num)
005C ; {
005C .dbline 66
005C ; unsigned int i;
005C ; for(i=0;i<num;i++)
005C 4427 clr R20
005E 5527 clr R21
0060 07C0 xjmp L18
0062 L15:
0062 .dbline 67
0062 ; {
0062 .dbline 68
0062 ; js[i]=getc(); //保存数据到数组里面
0062 F4DF xcall _getc
0064 FA01 movw R30,R20
0066 EC0D add R30,R12
0068 FD1D adc R31,R13
006A 0083 std z+0,R16
006C .dbline 69
006C ; }
006C L16:
006C .dbline 66
006C 4F5F subi R20,255 ; offset = 1
006E 5F4F sbci R21,255
0070 L18:
0070 .dbline 66
0070 4A15 cp R20,R10
0072 5B05 cpc R21,R11
0074 B0F3 brlo L15
0076 X3:
0076 .dbline -2
0076 L14:
0076 .dbline 0 ; func end
0076 0C940000 xjmp pop_xgset303C
007A .dbsym r i 20 i
007A .dbsym r num 10 i
007A .dbsym r js 12 pc
007A .dbend
007A .dbfile D:\iccavr\mega16\11\UART\TEST.C
007A .dbfunc e main _main fV
.even
007A _main::
007A .dbline -1
007A .dbline 11
007A ; //ICC-AVR application builder : 2008-11-4 12:34:31
007A ; // Target : M16
007A ; // Crystal: 8.0000Mhz
007A ;
007A ; #include <iom16v.h>
007A ; #include <macros.h>
007A ;
007A ; #include "uart.h"
007A ;
007A ; void main(void)
007A ; {
007A .dbline 12
007A ; uart_init();
007A C2DF xcall _uart_init
007C 02C0 xjmp L21
007E L20:
007E .dbline 14
007E ; while(1)
007E ; {
007E .dbline 15
007E ; putc(getc());
007E E6DF xcall _getc
0080 CFDF xcall _putc
0082 .dbline 16
0082 ; }
0082 L21:
0082 .dbline 13
0082 FDCF xjmp L20
0084 X4:
0084 .dbline -2
0084 L19:
0084 .dbline 0 ; func end
0084 0895 ret
0086 .dbend
0086 ; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -