?? validatebaudrate.lis
字號:
009A ; void delay(int count)
009A ; {
009A .dbline 94
009A ; int i, j;
009A ; for(i=count; i>0; i--)
009A A801 movw R20,R16
009C 0BC0 xjmp L10
009E L7:
009E .dbline 95
009E ; for(j=10; j>0; j--)
009E 6AE0 ldi R22,10
00A0 70E0 ldi R23,0
00A2 L11:
00A2 .dbline 96
00A2 ; ;
00A2 L12:
00A2 .dbline 95
00A2 6150 subi R22,1
00A4 7040 sbci R23,0
00A6 .dbline 95
00A6 2224 clr R2
00A8 3324 clr R3
00AA 2616 cp R2,R22
00AC 3706 cpc R3,R23
00AE CCF3 brlt L11
00B0 X1:
00B0 L8:
00B0 .dbline 94
00B0 4150 subi R20,1
00B2 5040 sbci R21,0
00B4 L10:
00B4 .dbline 94
00B4 2224 clr R2
00B6 3324 clr R3
00B8 2416 cp R2,R20
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 100
00C2 ; }
00C2 ;
00C2 ; void transmit(unsigned char abyte)
00C2 ; {
00C2 .dbline 101
00C2 ; UDR=abyte;
00C2 0CB9 out 0xc,R16
00C4 L16:
00C4 .dbline 103
00C4 ; while(!(UCSRA&0b01000000)) //b6=1 TXE ,it quit when transmission finish.
00C4 ; ;
00C4 L17:
00C4 .dbline 102
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 108
00CA ; }
00CA ;
00CA ; //*****************************************************************
00CA ; void main(void)
00CA ; {
00CA .dbline 111
00CA ; // unsigned char outa=0b01010101, outb=0b10101010, outc=0x00, outd=0x00;
00CA ; int dswin;
00CA ; unsigned char SendData=0xFF;
00CA 4FEF ldi R20,255
00CC .dbline 112
00CC ; port_init();
00CC C7DF xcall _port_init
00CE .dbline 113
00CE ; USART_init();
00CE CFDF xcall _USART_init
00D0 .dbline 114
00D0 ; SEI();
00D0 7894 sei
00D2 .dbline 116
00D2 ; do
00D2 ; {
00D2 L23:
00D2 .dbline 117
00D2 ; while(!(UCSRA&(1<<UDRE)));
00D2 L24:
00D2 .dbline 117
00D2 5D9B sbis 0xb,5
00D4 FECF rjmp L23
00D6 X4:
00D6 .dbline 118
00D6 ; UDR=SendData;
00D6 4CB9 out 0xc,R20
00D8 .dbline 119
00D8 ; SendData--;
00D8 4A95 dec R20
00DA .dbline 120
00DA ; }
00DA L21:
00DA .dbline 121
00DA ; while(SendData!=0xFF);
00DA 4F3F cpi R20,255
00DC D1F7 brne L24
00DE X5:
00DE 3BC0 xjmp L27
00E0 L26:
00E0 .dbline 123
00E0 ; while(1)
00E0 ; {
00E0 .dbline 124
00E0 ; WDR(); //Watchdog reset
00E0 A895 wdr
00E2 .dbline 125
00E2 ; if(rec_head!=rec_tail)
00E2 20900200 lds R2,_rec_tail
00E6 30900300 lds R3,_rec_tail+1
00EA 40900000 lds R4,_rec_head
00EE 50900100 lds R5,_rec_head+1
00F2 4214 cp R4,R2
00F4 5304 cpc R5,R3
00F6 79F1 breq L29
00F8 X6:
00F8 .dbline 126
00F8 ; {
00F8 .dbline 127
00F8 ; rec_data=RecBuf[rec_tail]; //read data from head and write data at tail
00F8 80E0 ldi R24,<_RecBuf
00FA 90E0 ldi R25,>_RecBuf
00FC F101 movw R30,R2
00FE E80F add R30,R24
0100 F91F adc R31,R25
0102 2080 ldd R2,z+0
0104 20920000 sts _rec_data,R2
0108 .dbline 128
0108 ; rec_tail++;
0108 80910200 lds R24,_rec_tail
010C 90910300 lds R25,_rec_tail+1
0110 0196 adiw R24,1
0112 90930300 sts _rec_tail+1,R25
0116 80930200 sts _rec_tail,R24
011A .dbline 131
011A ; //rec_data=RecBuf[rec_tail++]; //you can amend the sentences above two like that
011A ; //i++; show that first use it,then add it.
011A ; if(rec_tail>=40) //make up circular queue
011A 8832 cpi R24,40
011C E0E0 ldi R30,0
011E 9E07 cpc R25,R30
0120 34F0 brlt L31
0122 X7:
0122 .dbline 132
0122 ; rec_tail=0;
0122 2224 clr R2
0124 3324 clr R3
0126 30920300 sts _rec_tail+1,R3
012A 20920200 sts _rec_tail,R2
012E L31:
012E .dbline 134
012E ;
012E ; dswin=rec_head<<2; //the lowest 2 bit of PORTD are RXD and TXD.
012E A0900000 lds R10,_rec_head
0132 B0900100 lds R11,_rec_head+1
0136 AA0C lsl R10
0138 BB1C rol R11
013A AA0C lsl R10
013C BB1C rol R11
013E .dbline 135
013E ; PORTD=dswin; //The two ports are occupied,so it need "<<2".
013E A2BA out 0x12,R10
0140 .dbline 136
0140 ; PORTA=rec_data; //rec_head++,so it can stand for the number of received data.
0140 20900000 lds R2,_rec_data
0144 2BBA out 0x1b,R2
0146 .dbline 137
0146 ; transmit(rec_data);
0146 022D mov R16,R2
0148 BCDF xcall _transmit
014A .dbline 138
014A 80910000 lds R24,_rec_data
014E 8D30 cpi R24,13
0150 11F4 brne L33
0152 X8:
0152 .dbline 139
0152 ; transmit(10);
0152 0AE0 ldi R16,10
0154 B6DF xcall _transmit
0156 L33:
0156 .dbline 140
0156 ; }
0156 L29:
0156 .dbline 141
0156 ; }
0156 L27:
0156 .dbline 122
0156 C4CF xjmp L26
0158 X9:
0158 .dbline -2
0158 L19:
0158 .dbline 0 ; func end
0158 0895 ret
015A .dbsym r dswin 10 I
015A .dbsym r SendData 20 c
015A .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 ; }
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -