📄 uart.lis
字号:
.module uart.c
.area text(rom, con, rel)
0000 .dbfile D:\开发板\source\ds18b20\uart.c
0000 .dbfunc e delay_us _delay_us fV
0000 ; i -> R20,R21
0000 ; n -> R16,R17
.even
0000 _delay_us::
0000 00D0 rcall push_gset1
0002 .dbline -1
0002 .dbline 15
0002 ; /******************************************/
0002 ; /* 北京MCU学习之家 */
0002 ; /* ADC通信演示程序 */
0002 ; /* 作者:白如冰 */
0002 ; /* 2005年10月1日 */
0002 ; /* 目标MCU:MEGA8 晶振:外部(EXT) 8MHZ */
0002 ; /******************************************/
0002 ;
0002 ; #include <iom8v.h>
0002 ; #define fosc 8000000 //晶振8MHZ
0002 ; #define baud 9600 //波特率
0002 ;
0002 ;
0002 ; void delay_us(unsigned int n)
0002 ; {
0002 .dbline 17
0002 A801 movw R20,R16
0004 02C0 rjmp L5
0006 L2:
0006 .dbline 17
0006 L3:
0006 .dbline 17
0006 4150 subi R20,1
0008 5040 sbci R21,0
000A L5:
000A .dbline 17
000A ; unsigned int i;
000A ; for(i=n;i>0;i--);
000A 4030 cpi R20,0
000C 4507 cpc R20,R21
000E D9F7 brne L2
0010 X0:
0010 .dbline -2
0010 L1:
0010 00D0 rcall pop_gset1
0012 .dbline 0 ; func end
0012 0895 ret
0014 .dbsym r i 20 i
0014 .dbsym r n 16 i
0014 .dbend
0014 .dbfunc e delay_1ms _delay_1ms fV
0014 ; i -> R16,R17
.even
0014 _delay_1ms::
0014 .dbline -1
0014 .dbline 21
0014 ; }
0014 ;
0014 ; void delay_1ms(void)
0014 ; { unsigned int i;
0014 .dbline 22
0014 ; for(i=1;i<(unsigned int)(1144-2);i++)
0014 01E0 ldi R16,1
0016 10E0 ldi R17,0
0018 02C0 rjmp L10
001A L7:
001A .dbline 23
001A L8:
001A .dbline 22
001A 0F5F subi R16,255 ; offset = 1
001C 1F4F sbci R17,255
001E L10:
001E .dbline 22
001E 0637 cpi R16,118
0020 E4E0 ldi R30,4
0022 1E07 cpc R17,R30
0024 D0F3 brlo L7
0026 .dbline -2
0026 L6:
0026 .dbline 0 ; func end
0026 0895 ret
0028 .dbsym r i 16 i
0028 .dbend
0028 .dbfunc e delay_ms _delay_ms fV
0028 ; i -> R20,R21
0028 ; n -> R22,R23
.even
0028 _delay_ms::
0028 00D0 rcall push_gset2
002A B801 movw R22,R16
002C .dbline -1
002C .dbline 26
002C ; ;
002C ; }
002C ; void delay_ms(unsigned int n)
002C ; {
002C .dbline 27
002C ; unsigned int i=0;
002C 4427 clr R20
002E 5527 clr R21
0030 03C0 rjmp L13
0032 L12:
0032 .dbline 29
0032 .dbline 29
0032 F0DF rcall _delay_1ms
0034 .dbline 30
0034 4F5F subi R20,255 ; offset = 1
0036 5F4F sbci R21,255
0038 .dbline 31
0038 L13:
0038 .dbline 28
0038 ; while(i<n)
0038 4617 cp R20,R22
003A 5707 cpc R21,R23
003C D0F3 brlo L12
003E .dbline -2
003E L11:
003E 00D0 rcall pop_gset2
0040 .dbline 0 ; func end
0040 0895 ret
0042 .dbsym r i 20 i
0042 .dbsym r n 22 i
0042 .dbend
0042 .dbfunc e putchar _putchar fV
0042 ; c -> R16
.even
0042 _putchar::
0042 .dbline -1
0042 .dbline 35
0042 ; {delay_1ms();
0042 ; i++;
0042 ; }
0042 ; }
0042 ; /* 字符输出函数 */
0042 ; void putchar(unsigned char c)
0042 ; {
0042 L16:
0042 .dbline 36
0042 L17:
0042 .dbline 36
0042 ; while (!(UCSRA&(1<<UDRE)));
0042 5D9B sbis 0xb,5
0044 FECF rjmp L16
0046 .dbline 37
0046 ; UDR=c;
0046 0CB9 out 0xc,R16
0048 .dbline -2
0048 L15:
0048 .dbline 0 ; func end
0048 0895 ret
004A .dbsym r c 16 c
004A .dbend
004A .dbfunc e getchar _getchar fc
.even
004A _getchar::
004A .dbline -1
004A .dbline 41
004A ; }
004A ; /* 字符输入函数 */
004A ; unsigned char getchar(void)
004A ; {
004A L20:
004A .dbline 42
004A L21:
004A .dbline 42
004A ; while(!(UCSRA& (1<<RXC)));
004A 5F9B sbis 0xb,7
004C FECF rjmp L20
004E .dbline 43
004E ; return UDR;
004E 0CB1 in R16,0xc
0050 .dbline -2
0050 L19:
0050 .dbline 0 ; func end
0050 0895 ret
0052 .dbend
0052 .dbfunc e puts _puts fV
0052 ; s -> R20,R21
.even
0052 _puts::
0052 00D0 rcall push_gset1
0054 A801 movw R20,R16
0056 .dbline -1
0056 .dbline 47
0056 ; }
0056 ; /* 字符串输出函数 */
0056 ; void puts(char *s)
0056 ; {
0056 05C0 rjmp L25
0058 L24:
0058 .dbline 49
0058 .dbline 50
0058 FA01 movw R30,R20
005A 0081 ldd R16,z+0
005C F2DF rcall _putchar
005E .dbline 51
005E 4F5F subi R20,255 ; offset = 1
0060 5F4F sbci R21,255
0062 .dbline 52
0062 L25:
0062 .dbline 48
0062 ; while (*s)
0062 FA01 movw R30,R20
0064 2080 ldd R2,z+0
0066 2220 tst R2
0068 B9F7 brne L24
006A .dbline -2
006A L23:
006A 00D0 rcall pop_gset1
006C .dbline 0 ; func end
006C 0895 ret
006E .dbsym r s 20 pc
006E .dbend
006E .dbfunc e puts_hh _puts_hh fV
006E ; s -> R20,R21
.even
006E _puts_hh::
006E 00D0 rcall push_gset1
0070 A801 movw R20,R16
0072 .dbline -1
0072 .dbline 57
0072 ; {
0072 ; putchar(*s);
0072 ; s++;
0072 ; }
0072 ;
0072 ; }
0072 ; /* 字符串输出函数 */
0072 ; void puts_hh(char *s)
0072 ; {
0072 05C0 rjmp L29
0074 L28:
0074 .dbline 59
0074 .dbline 60
0074 FA01 movw R30,R20
0076 0081 ldd R16,z+0
0078 E4DF rcall _putchar
007A .dbline 61
007A 4F5F subi R20,255 ; offset = 1
007C 5F4F sbci R21,255
007E .dbline 62
007E L29:
007E .dbline 58
007E ; while (*s)
007E FA01 movw R30,R20
0080 2080 ldd R2,z+0
0082 2220 tst R2
0084 B9F7 brne L28
0086 .dbline 63
0086 ; {
0086 ; putchar(*s);
0086 ; s++;
0086 ; }
0086 ; putchar(0x0a);//回车换行
0086 0AE0 ldi R16,10
0088 DCDF rcall _putchar
008A .dbline 64
008A ; putchar(0x0d);
008A 0DE0 ldi R16,13
008C DADF rcall _putchar
008E .dbline -2
008E L27:
008E 00D0 rcall pop_gset1
0090 .dbline 0 ; func end
0090 0895 ret
0092 .dbsym r s 20 pc
0092 .dbend
0092 .dbfunc e uart_init _uart_init fV
.even
0092 _uart_init::
0092 .dbline -1
0092 .dbline 69
0092 ; }
0092 ;
0092 ; /* UART初始化 */
0092 ; void uart_init(void)
0092 ; {
0092 .dbline 70
0092 ; UCSRB=(1<<RXEN)|(1<<TXEN);//允许发送和接收
0092 88E1 ldi R24,24
0094 8AB9 out 0xa,R24
0096 .dbline 71
0096 ; UBRRL=(fosc/16/(baud+1))%256;
0096 84E3 ldi R24,52
0098 89B9 out 0x9,R24
009A .dbline 72
009A ; UBRRH=(fosc/16/(baud+1))/256;
009A 2224 clr R2
009C 20BC out 0x20,R2
009E .dbline 73
009E ; UCSRC=(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);//8位数据+1位STOP位
009E 86E8 ldi R24,134
00A0 80BD out 0x20,R24
00A2 .dbline -2
00A2 L31:
00A2 .dbline 0 ; func end
00A2 0895 ret
00A4 .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -