📄 validatebaudrate.lis
字号:
00A8 3324 clr R3
00AA 2616 cp R2,R22
00AC 3706 cpc R3,R23
00AE CCF3 brlt L11
00B0 X1:
00B0 L8:
00B0 .dbline 105
00B0 4150 subi R20,1
00B2 5040 sbci R21,0
00B4 L10:
00B4 .dbline 105
00B4 2224 clr R2
00B6 3324 clr R3
00B8 2416 cp R2,R20
00BA 3506 cpc R3,R21
00BC 84F3 brlt L7
00BE X2:
00BE .dbline -2
00BE L6:
00BE .dbline 0 ; func end
00BE 0C940000 xjmp pop_xgsetF000
00C2 .dbsym r i 20 I
00C2 .dbsym r j 22 I
00C2 .dbsym r count 16 I
00C2 .dbend
00C2 .dbfunc e transmit _transmit fV
00C2 ; abyte -> R16
.even
00C2 _transmit::
00C2 .dbline -1
00C2 .dbline 111
00C2 ; }
00C2 ;
00C2 ; void transmit(unsigned char abyte)
00C2 ; {
00C2 .dbline 112
00C2 ; UDR=abyte;
00C2 0CB9 out 0xc,R16
00C4 L16:
00C4 .dbline 114
00C4 ; while(!(UCSRA&0b01000000)) //b6=1 TXE ,it quit when transmission finish.
00C4 ; ;
00C4 L17:
00C4 .dbline 113
00C4 5E9B sbis 0xb,6
00C6 FECF rjmp L16
00C8 X3:
00C8 .dbline -2
00C8 L15:
00C8 .dbline 0 ; func end
00C8 0895 ret
00CA .dbsym r abyte 16 c
00CA .dbend
00CA .dbfunc e main _main fV
00CA ; dswin -> R10,R11
00CA ; SendData -> R20
.even
00CA _main::
00CA .dbline -1
00CA .dbline 119
00CA ; }
00CA ;
00CA ; //*****************************************************************
00CA ; void main(void)
00CA ; {
00CA .dbline 122
00CA ; // unsigned char outa=0b01010101, outb=0b10101010, outc=0x00, outd=0x00;
00CA ; int dswin;
00CA ; unsigned char SendData=0;
00CA 4427 clr R20
00CC .dbline 123
00CC ; port_init();
00CC C7DF xcall _port_init
00CE .dbline 124
00CE ; USART_init();
00CE CFDF xcall _USART_init
00D0 .dbline 125
00D0 ; SEI();
00D0 7894 sei
00D2 5EC0 xjmp L21
00D4 L20:
00D4 .dbline 128
00D4 ;
00D4 ; while(1)
00D4 ; {
00D4 .dbline 129
00D4 ; WDR(); //Watchdog reset
00D4 A895 wdr
00D6 .dbline 130
00D6 ; if(rec_head!=rec_tail)
00D6 20900300 lds R2,_rec_tail
00DA 30900400 lds R3,_rec_tail+1
00DE 40900100 lds R4,_rec_head
00E2 50900200 lds R5,_rec_head+1
00E6 4214 cp R4,R2
00E8 5304 cpc R5,R3
00EA 79F1 breq L23
00EC X4:
00EC .dbline 131
00EC ; {
00EC .dbline 132
00EC ; rec_data=RecBuf[rec_tail]; //read data from head and write data at tail
00EC 80E0 ldi R24,<_RecBuf
00EE 90E0 ldi R25,>_RecBuf
00F0 F101 movw R30,R2
00F2 E80F add R30,R24
00F4 F91F adc R31,R25
00F6 2080 ldd R2,z+0
00F8 20920000 sts _rec_data,R2
00FC .dbline 133
00FC ; rec_tail++;
00FC 80910300 lds R24,_rec_tail
0100 90910400 lds R25,_rec_tail+1
0104 0196 adiw R24,1
0106 90930400 sts _rec_tail+1,R25
010A 80930300 sts _rec_tail,R24
010E .dbline 136
010E ; //rec_data=RecBuf[rec_tail++]; //you can amend the sentences above two like that
010E ; //i++; show that first use it,then add it.
010E ; if(rec_tail>=40) //make up circular queue
010E 8832 cpi R24,40
0110 E0E0 ldi R30,0
0112 9E07 cpc R25,R30
0114 34F0 brlt L25
0116 X5:
0116 .dbline 137
0116 ; rec_tail=0;
0116 2224 clr R2
0118 3324 clr R3
011A 30920400 sts _rec_tail+1,R3
011E 20920300 sts _rec_tail,R2
0122 L25:
0122 .dbline 139
0122 ;
0122 ; dswin=rec_head<<2; //the lowest 2 bit of PORTD are RXD and TXD.
0122 A0900100 lds R10,_rec_head
0126 B0900200 lds R11,_rec_head+1
012A AA0C lsl R10
012C BB1C rol R11
012E AA0C lsl R10
0130 BB1C rol R11
0132 .dbline 140
0132 ; PORTD=dswin; //The two ports are occupied,so it need "<<2".
0132 A2BA out 0x12,R10
0134 .dbline 141
0134 ; PORTA=rec_data; //rec_head++,so it can stand for the number of received data.
0134 20900000 lds R2,_rec_data
0138 2BBA out 0x1b,R2
013A .dbline 142
013A ; transmit(rec_data);
013A 022D mov R16,R2
013C C2DF xcall _transmit
013E .dbline 143
013E ; if(rec_data==13) //★??
013E 80910000 lds R24,_rec_data
0142 8D30 cpi R24,13
0144 11F4 brne L27
0146 X6:
0146 .dbline 144
0146 ; transmit(10);
0146 0AE0 ldi R16,10
0148 BCDF xcall _transmit
014A L27:
014A .dbline 145
014A ; }
014A L23:
014A .dbline 146
014A ; if(PressKey&&!KeyMark) //clamping using state bit
014A 9F99 sbic 0x13,7
014C 0EC0 rjmp L29
014E X7:
014E 20900000 lds R2,_KeyMark
0152 2220 tst R2
0154 51F4 brne L29
0156 X8:
0156 .dbline 147
0156 ; {
0156 .dbline 148
0156 ; delay_ms(20);
0156 04E1 ldi R16,20
0158 10E0 ldi R17,0
015A 9DDF xcall _delay_ms
015C .dbline 149
015C ; if(PressKey)
015C 9F99 sbic 0x13,7
015E 12C0 rjmp L30
0160 X9:
0160 .dbline 150
0160 ; {
0160 .dbline 151
0160 ; KeyMark=1;
0160 81E0 ldi R24,1
0162 80930000 sts _KeyMark,R24
0166 .dbline 152
0166 ; SendData=0xFF;
0166 4FEF ldi R20,255
0168 .dbline 153
0168 ; }
0168 .dbline 154
0168 ; }
0168 0DC0 xjmp L30
016A L29:
016A .dbline 155
016A ; else if(!PressKey)
016A 9F99 sbic 0x13,7
016C 03C0 rjmp L35
016E X10:
016E 61E0 ldi R22,1
0170 70E0 ldi R23,0
0172 02C0 xjmp L36
0174 L35:
0174 6627 clr R22
0176 7727 clr R23
0178 L36:
0178 6030 cpi R22,0
017A 6707 cpc R22,R23
017C 19F4 brne L33
017E X11:
017E .dbline 156
017E ; KeyMark=0;
017E 2224 clr R2
0180 20920000 sts _KeyMark,R2
0184 L33:
0184 L30:
0184 .dbline 158
0184 ; // while(PressKey); //clamping using endless loop on conditionZ
0184 ; if(SendData)
0184 4423 tst R20
0186 21F0 breq L37
0188 X12:
0188 .dbline 159
0188 ; {
0188 L39:
0188 .dbline 160
0188 ; while(!(UCSRA&(1<<UDRE)));
0188 L40:
0188 .dbline 160
0188 5D9B sbis 0xb,5
018A FECF rjmp L39
018C X13:
018C .dbline 161
018C ; UDR=SendData;
018C 4CB9 out 0xc,R20
018E .dbline 162
018E ; SendData--;
018E 4A95 dec R20
0190 .dbline 163
0190 ; }
0190 L37:
0190 .dbline 165
0190 ;
0190 ; }
0190 L21:
0190 .dbline 127
0190 A1CF xjmp L20
0192 X14:
0192 .dbline -2
0192 L19:
0192 .dbline 0 ; func end
0192 0895 ret
0194 .dbsym r dswin 10 I
0194 .dbsym r SendData 20 c
0194 .dbend
.area bss(ram, con, rel)
0000 .dbfile D:\MYDOCU~1\EXPRIMENT\ICC\UART\ValidateBaudRate\ValidateBaudRate.c
0000 _rec_data::
0000 .blkb 1
0001 .dbsym e rec_data _rec_data c
0001 _RecBuf::
0001 .blkb 40
0029 .dbsym e RecBuf _RecBuf A[40:40]c
0029 ; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -