📄 uart.lis
字号:
.module uart.c
.area text(rom, con, rel)
0000 .dbfile E:\mysoft\DH980\uart.c
0000 .dbfunc e uart0_init _uart0_init fV
.even
0000 _uart0_init::
0000 .dbline -1
0000 .dbline 13
0000 ; #include <iom169v.h>
0000 ; #include <macros.h>
0000 ; #include <stdio.h>
0000 ; #include "main.h"
0000 ; #include "uart.h"
0000 ;
0000 ; unsigned char relay_temp[7];
0000 ; unsigned char *load;
0000 ; //UART0 initialize
0000 ; // desired baud rate: 19200
0000 ; // actual: baud rate:19200 (0.0%)
0000 ; void uart0_init(void)
0000 ; {
0000 .dbline 14
0000 ; UCSR0B = 0x00; //disable while setting baud rate
0000 2224 clr R2
0002 2092C100 sts 193,R2
0006 .dbline 15
0006 ; UCSR0A = 0x00;
0006 2092C000 sts 192,R2
000A .dbline 16
000A ; UCSR0C = 0x07;
000A 87E0 ldi R24,7
000C 8093C200 sts 194,R24
0010 .dbline 17
0010 ; UBRR0L = 0x23; //set baud rate lo
0010 83E2 ldi R24,35
0012 8093C400 sts 196,R24
0016 .dbline 18
0016 ; UBRR0H = 0x00; //set baud rate hi
0016 2092C500 sts 197,R2
001A .dbline 19
001A ; UCSR0B = 0x98;
001A 88E9 ldi R24,152
001C 8093C100 sts 193,R24
0020 .dbline -2
0020 L1:
0020 .dbline 0 ; func end
0020 0895 ret
0022 .dbend
0022 .dbfunc e put_c _put_c fV
0022 ; c -> R16
.even
0022 _put_c::
0022 .dbline -1
0022 .dbline 23
0022 ; }
0022 ;
0022 ; void put_c(unsigned char c) //发送采用查询方式
0022 ; {
0022 L3:
0022 .dbline 24
0022 L4:
0022 .dbline 24
0022 ; while( (UCSRA & 0b00100000)==0);
0022 2090C000 lds R2,192
0026 25FE sbrs R2,5
0028 FCCF rjmp L3
002A .dbline 26
002A ; //delay_loop(5);
002A ; UDR=c;
002A 0093C600 sts 198,R16
002E .dbline -2
002E L2:
002E .dbline 0 ; func end
002E 0895 ret
0030 .dbsym r c 16 c
0030 .dbend
0030 .dbfunc e put_s _put_s fV
0030 ; ptr -> R20,R21
.even
0030 _put_s::
0030 0E940000 xcall push_gset1
0034 A801 movw R20,R16
0036 .dbline -1
0036 .dbline 30
0036 ; }
0036 ;
0036 ; void put_s(unsigned char *ptr)
0036 ; {
0036 04C0 xjmp L8
0038 L7:
0038 .dbline 32
0038 .dbline 33
0038 FA01 movw R30,R20
003A 0191 ld R16,Z+
003C AF01 movw R20,R30
003E F1DF xcall _put_c
0040 .dbline 34
0040 L8:
0040 .dbline 31
0040 ; while (*ptr)
0040 FA01 movw R30,R20
0042 2080 ldd R2,z+0
0044 2220 tst R2
0046 C1F7 brne L7
0048 .dbline -2
0048 L6:
0048 0E940000 xcall pop_gset1
004C .dbline 0 ; func end
004C 0895 ret
004E .dbsym r ptr 20 pc
004E .dbend
.area vector(rom, abs)
.org 52
0034 0C942700 jmp _uart0_rx_isr
.area text(rom, con, rel)
004E .dbfile E:\mysoft\DH980\uart.c
004E .dbfunc e uart0_rx_isr _uart0_rx_isr fV
.even
004E _uart0_rx_isr::
004E 2A92 st -y,R2
0050 3A92 st -y,R3
0052 8A93 st -y,R24
0054 9A93 st -y,R25
0056 EA93 st -y,R30
0058 FA93 st -y,R31
005A 2FB6 in R2,0x3f
005C 2A92 st -y,R2
005E .dbline -1
005E .dbline 40
005E ; {
005E ; put_c(*ptr++);
005E ; }
005E ; }
005E ;
005E ;
005E ; #pragma interrupt_handler uart0_rx_isr:14
005E ; void uart0_rx_isr(void)
005E ; {
005E .dbline 41
005E ; if (load_time > 3)
005E 83E0 ldi R24,3
0060 90E0 ldi R25,0
0062 20900000 lds R2,_load_time
0066 30900100 lds R3,_load_time+1
006A 8215 cp R24,R2
006C 9305 cpc R25,R3
006E 48F4 brsh L11
0070 .dbline 42
0070 ; {
0070 .dbline 43
0070 ; load_no = 0;
0070 2224 clr R2
0072 20920000 sts _load_no,R2
0076 .dbline 44
0076 ; load = &relay_temp[0];
0076 80E0 ldi R24,<_relay_temp
0078 90E0 ldi R25,>_relay_temp
007A 90930100 sts _load+1,R25
007E 80930000 sts _load,R24
0082 .dbline 45
0082 ; }
0082 L11:
0082 .dbline 46
0082 2224 clr R2
0084 3324 clr R3
0086 30920100 sts _load_time+1,R3
008A 20920000 sts _load_time,R2
008E .dbline 47
008E 80910000 lds R24,_load_no
0092 8530 cpi R24,5
0094 80F4 brsh L13
0096 .dbline 48
0096 .dbline 49
0096 20900000 lds R2,_load
009A 30900100 lds R3,_load+1
009E E82F mov R30,R24
00A0 FF27 clr R31
00A2 E20D add R30,R2
00A4 F31D adc R31,R3
00A6 2090C600 lds R2,198
00AA 2082 std z+0,R2
00AC .dbline 50
00AC 80910000 lds R24,_load_no
00B0 8F5F subi R24,255 ; addi 1
00B2 80930000 sts _load_no,R24
00B6 .dbline 51
00B6 L13:
00B6 .dbline -2
00B6 L10:
00B6 2990 ld R2,y+
00B8 2FBE out 0x3f,R2
00BA F991 ld R31,y+
00BC E991 ld R30,y+
00BE 9991 ld R25,y+
00C0 8991 ld R24,y+
00C2 3990 ld R3,y+
00C4 2990 ld R2,y+
00C6 .dbline 0 ; func end
00C6 1895 reti
00C8 .dbend
00C8 .dbfunc e load_init _load_init fV
.even
00C8 _load_init::
00C8 .dbline -1
00C8 .dbline 54
00C8 ; load_time=0;
00C8 ; if(load_no<5)
00C8 ; {
00C8 ; *(load+load_no) = UDR;
00C8 ; load_no++;
00C8 ; }
00C8 ; }
00C8 ; void load_init()
00C8 ; {
00C8 .dbline 55
00C8 ; load_time=0;
00C8 2224 clr R2
00CA 3324 clr R3
00CC 30920100 sts _load_time+1,R3
00D0 20920000 sts _load_time,R2
00D4 .dbline 56
00D4 ; load_no=0;
00D4 20920000 sts _load_no,R2
00D8 .dbline 57
00D8 ; load = &relay_temp[0];
00D8 80E0 ldi R24,<_relay_temp
00DA 90E0 ldi R25,>_relay_temp
00DC 90930100 sts _load+1,R25
00E0 80930000 sts _load,R24
00E4 .dbline -2
00E4 L15:
00E4 .dbline 0 ; func end
00E4 0895 ret
00E6 .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -