⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 uart-16sm.lis

📁 大量ATMEGA16实例, 都可以运行,包括驱动LCD1602, 上位机显示等多功能
💻 LIS
📖 第 1 页 / 共 2 页
字号:
 00B0           ;              i -> R20,R21
 00B0           ;              j -> R22,R23
 00B0           ;          count -> R16,R17
                        .even
 00B0           _delay::
 00B0 0E940000          xcall push_xgsetF000
 00B4                   .dbline -1
 00B4                   .dbline 86
 00B4           ; } 
 00B4           ; 
 00B4           ; void delay(int count)
 00B4           ; {
 00B4                   .dbline 88
 00B4           ;  int i, j;
 00B4           ;  for(i=count; i>0; i--)
 00B4 A801              movw R20,R16
 00B6 0BC0              xjmp L10
 00B8           L7:
 00B8                   .dbline 89
 00B8           ;     for(j=10; j>0; j--)
 00B8 6AE0              ldi R22,10
 00BA 70E0              ldi R23,0
 00BC           L11:
 00BC                   .dbline 90
 00BC           ;          ;
 00BC           L12:
 00BC                   .dbline 89
 00BC 6150              subi R22,1
 00BE 7040              sbci R23,0
 00C0                   .dbline 89
 00C0 2224              clr R2
 00C2 3324              clr R3
 00C4 2616              cp R2,R22
 00C6 3706              cpc R3,R23
 00C8 CCF3              brlt L11
 00CA           X1:
 00CA           L8:
 00CA                   .dbline 88
 00CA 4150              subi R20,1
 00CC 5040              sbci R21,0
 00CE           L10:
 00CE                   .dbline 88
 00CE 2224              clr R2
 00D0 3324              clr R3
 00D2 2416              cp R2,R20
 00D4 3506              cpc R3,R21
 00D6 84F3              brlt L7
 00D8           X2:
 00D8                   .dbline -2
 00D8           L6:
 00D8                   .dbline 0 ; func end
 00D8 0C940000          xjmp pop_xgsetF000
 00DC                   .dbsym r i 20 I
 00DC                   .dbsym r j 22 I
 00DC                   .dbsym r count 16 I
 00DC                   .dbend
 00DC                   .dbfunc e transmit _transmit fV
 00DC           ;          abyte -> R16
                        .even
 00DC           _transmit::
 00DC                   .dbline -1
 00DC                   .dbline 94
 00DC           ; }
 00DC           ; 
 00DC           ; void transmit(unsigned char abyte)
 00DC           ; {
 00DC                   .dbline 95
 00DC           ;  UDR=abyte;
 00DC 0CB9              out 0xc,R16
 00DE           L16:
 00DE                   .dbline 97
 00DE           ;  while(!(UCSRA&0b01000000))   //b6=1 TXE
 00DE           ;         ;
 00DE           L17:
 00DE                   .dbline 96
 00DE 5E9B              sbis 0xb,6
 00E0 FECF              rjmp L16
 00E2           X3:
 00E2                   .dbline -2
 00E2           L15:
 00E2                   .dbline 0 ; func end
 00E2 0895              ret
 00E4                   .dbsym r abyte 16 c
 00E4                   .dbend
 00E4                   .dbfunc e main _main fV
 00E4           ;           outd -> R10
 00E4           ;           outc -> R10
 00E4           ;           outb -> R20
 00E4           ;           outa -> R20
 00E4           ;          dswin -> R10,R11
                        .even
 00E4           _main::
 00E4                   .dbline -1
 00E4                   .dbline 101
 00E4           ; }
 00E4           ; //*****************************************************************
 00E4           ; void main(void)
 00E4           ; {
 00E4                   .dbline 102
 00E4           ;  unsigned char outa=0b01010101, outb=0b10101010, outc=0x00, outd=0x00;
 00E4                   .dbline 102
 00E4 4AEA              ldi R20,170
 00E6                   .dbline 102
 00E6 AA24              clr R10
 00E8                   .dbline 102
 00E8                   .dbline 104
 00E8           ;  int dswin;
 00E8           ;  port_init();
 00E8 B9DF              xcall _port_init
 00EA                   .dbline 105
 00EA           ;  USART_init();
 00EA C1DF              xcall _USART_init
 00EC                   .dbline 106
 00EC           ;  SEI();
 00EC 7894              sei
 00EE 43C0              xjmp L21
 00F0           L20:
 00F0                   .dbline 108
 00F0           ;  while(1)
 00F0           ;    {
 00F0                   .dbline 109
 00F0           ;     WDR();                                    //Watchdog reset
 00F0 A895              wdr
 00F2                   .dbline 110
 00F2           ;       if(rec_head!=rec_tail)
 00F2 20900200          lds R2,_rec_tail
 00F6 30900300          lds R3,_rec_tail+1
 00FA 40900000          lds R4,_rec_head
 00FE 50900100          lds R5,_rec_head+1
 0102 4214              cp R4,R2
 0104 5304              cpc R5,R3
 0106 B9F1              breq L23
 0108           X4:
 0108                   .dbline 111
 0108           ;          {
 0108                   .dbline 112
 0108           ;           rec_data=RecBuf[rec_tail];
 0108 80E0              ldi R24,<_RecBuf
 010A 90E0              ldi R25,>_RecBuf
 010C F101              movw R30,R2
 010E E80F              add R30,R24
 0110 F91F              adc R31,R25
 0112 2080              ldd R2,z+0
 0114 3324              clr R3
 0116 30920100          sts _rec_data+1,R3
 011A 20920000          sts _rec_data,R2
 011E                   .dbline 113
 011E           ;               rec_tail++;
 011E 80910200          lds R24,_rec_tail
 0122 90910300          lds R25,_rec_tail+1
 0126 0196              adiw R24,1
 0128 90930300          sts _rec_tail+1,R25
 012C 80930200          sts _rec_tail,R24
 0130                   .dbline 114
 0130           ;               if(rec_tail>=40)
 0130 8832              cpi R24,40
 0132 E0E0              ldi R30,0
 0134 9E07              cpc R25,R30
 0136 2CF0              brlt L25
 0138           X5:
 0138                   .dbline 115
 0138           ;                  rec_tail=0;
 0138 2224              clr R2
 013A 30920300          sts _rec_tail+1,R3
 013E 20920200          sts _rec_tail,R2
 0142           L25:
 0142                   .dbline 117
 0142           ;                  
 0142           ;               dswin=rec_head<<2;
 0142 A0900000          lds R10,_rec_head
 0146 B0900100          lds R11,_rec_head+1
 014A AA0C              lsl R10
 014C BB1C              rol R11
 014E AA0C              lsl R10
 0150 BB1C              rol R11
 0152                   .dbline 118
 0152           ;           PORTD=dswin;
 0152 A2BA              out 0x12,R10
 0154                   .dbline 119
 0154           ;               PORTA=rec_data;
 0154 20900000          lds R2,_rec_data
 0158 30900100          lds R3,_rec_data+1
 015C 2BBA              out 0x1b,R2
 015E                   .dbline 120
 015E           ;               transmit(rec_data);
 015E 022D              mov R16,R2
 0160 BDDF              xcall _transmit
 0162                   .dbline 121
 0162           ;               if(rec_data==13)
 0162 80910000          lds R24,_rec_data
 0166 90910100          lds R25,_rec_data+1
 016A 8D30              cpi R24,13
 016C E0E0              ldi R30,0
 016E 9E07              cpc R25,R30
 0170 11F4              brne L27
 0172           X6:
 0172                   .dbline 122
 0172           ;                       transmit(10);                   
 0172 0AE0              ldi R16,10
 0174 B3DF              xcall _transmit
 0176           L27:
 0176                   .dbline 124
 0176           ;               
 0176           ;          } 
 0176           L23:
 0176                   .dbline 125
 0176           ;    }
 0176           L21:
 0176                   .dbline 107
 0176 BCCF              xjmp L20
 0178           X7:
 0178                   .dbline -2
 0178           L19:
 0178                   .dbline 0 ; func end
 0178 0895              ret
 017A                   .dbsym r outd 10 c
 017A                   .dbsym r outc 10 c
 017A                   .dbsym r outb 20 c
 017A                   .dbsym r outa 20 c
 017A                   .dbsym r dswin 10 I
 017A                   .dbend
                        .area bss(ram, con, rel)
 0000                   .dbfile C:\+samples-16small\UART-16sm\uart-16sm.c
 0000           _rec_data::
 0000                   .blkb 2
 0002                   .dbsym e rec_data _rec_data i
 0002           _RecBuf::
 0002                   .blkb 40
 002A                   .dbsym e RecBuf _RecBuf A[40:40]c
 002A           ; }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -