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

📄 main.lis

📁 mega16的rs232通讯程序
💻 LIS
📖 第 1 页 / 共 3 页
字号:
 00E2 2CB0              in R2,0xc
 00E4 20920D00          sts _RxBuffer,R2
 00E8                   .dbline 80
 00E8 80910C00          lds R24,_n
 00EC 8F5F              subi R24,255    ; addi 1
 00EE 80930C00          sts _n,R24
 00F2                   .dbline 80
 00F2 22C0              xjmp L7
 00F4           L19:
 00F4                   .dbline 81
 00F4           ;                  case 4: RxBuffer[1] = UDR; n++; break;
 00F4 2CB0              in R2,0xc
 00F6 20920E00          sts _RxBuffer+1,R2
 00FA                   .dbline 81
 00FA 80910C00          lds R24,_n
 00FE 8F5F              subi R24,255    ; addi 1
 0100 80930C00          sts _n,R24
 0104                   .dbline 81
 0104 19C0              xjmp L7
 0106           L21:
 0106                   .dbline 82
 0106           ;                  case 5: RxBuffer[2] = UDR; n++; break;
 0106 2CB0              in R2,0xc
 0108 20920F00          sts _RxBuffer+2,R2
 010C                   .dbline 82
 010C 80910C00          lds R24,_n
 0110 8F5F              subi R24,255    ; addi 1
 0112 80930C00          sts _n,R24
 0116                   .dbline 82
 0116 10C0              xjmp L7
 0118           L23:
 0118                   .dbline 83
 0118           ;                  case 6: RxBuffer[3] = UDR;  n++;      //data
 0118 2CB0              in R2,0xc
 011A 20921000          sts _RxBuffer+3,R2
 011E                   .dbline 83
 011E 80910C00          lds R24,_n
 0122 8F5F              subi R24,255    ; addi 1
 0124 80930C00          sts _n,R24
 0128                   .dbline 87
 0128           ;                                               // break;
 0128           ;                 /* case 7: temp = RxBuffer[0]%16 + RxBuffer[1]%16 + RxBuffer[2]%16 +RxBuffer[3]%16 +len;
 0128           ;                                  if (UDR == temp) {              //校验*/
 0128           ;                                         flag = OK;
 0128 81E0              ldi R24,1
 012A 80930500          sts _flag,R24
 012E                   .dbline 88
 012E           ;                                         PORTA = 0xff;
 012E 8FEF              ldi R24,255
 0130 8BBB              out 0x1b,R24
 0132                   .dbline 93
 0132           ;                                         //CLI();
 0132           ;                                        // UCSRB = 0xC8;                          //关接受中断
 0132           ;                                        // SEI();
 0132           ;                                       // }
 0132           ;                                        n = 0;
 0132 2224              clr R2
 0134 20920C00          sts _n,R2
 0138                   .dbline 94
 0138           ;                                  break;
 0138                   .dbline 95
 0138           ;                       default: break;
 0138           L7:
 0138                   .dbline 97
 0138           L4:
 0138                   .dbline -2
 0138           L3:
 0138 2990              ld R2,y+
 013A 2FBE              out 0x3f,R2
 013C E991              ld R30,y+
 013E 9991              ld R25,y+
 0140 8991              ld R24,y+
 0142 1991              ld R17,y+
 0144 0991              ld R16,y+
 0146 2990              ld R2,y+
 0148                   .dbline 0 ; func end
 0148 1895              reti
 014A                   .dbsym l temp 1 c
 014A                   .dbend
                        .area vector(rom, abs)
                        .org 52
 0034 0C94A500          jmp _uart0_tx_isr
                        .area text(rom, con, rel)
 014A                   .dbfile G:\ly\mega\m16rs\main.c
 014A                   .dbfunc e uart0_tx_isr _uart0_tx_isr fV
                        .even
 014A           _uart0_tx_isr::
 014A 2A92              st -y,R2
 014C 3A92              st -y,R3
 014E 0A93              st -y,R16
 0150 1A93              st -y,R17
 0152 8A93              st -y,R24
 0154 9A93              st -y,R25
 0156 EA93              st -y,R30
 0158 2FB6              in R2,0x3f
 015A 2A92              st -y,R2
 015C                   .dbline -1
 015C                   .dbline 103
 015C           ;       }
 015C           ;  }
 015C           ; 
 015C           ; }
 015C           ; 
 015C           ; #pragma interrupt_handler uart0_tx_isr:14
 015C           ; void uart0_tx_isr(void)
 015C           ; {
 015C                   .dbline 104
 015C           ;       if (flag == OK){
 015C 80910500          lds R24,_flag
 0160 8130              cpi R24,1
 0162 09F0              breq X9
 0164 57C0              xjmp L26
 0166           X9:
 0166                   .dbline 104
 0166                   .dbline 105
 0166           ;          PORTC = 0xff;
 0166 8FEF              ldi R24,255
 0168 85BB              out 0x15,R24
 016A                   .dbline 106
 016A 00910C00          lds R16,_n
 016E 1127              clr R17
 0170 0130              cpi R16,1
 0172 E0E0              ldi R30,0
 0174 1E07              cpc R17,R30
 0176 A9F0              breq L31
 0178 0230              cpi R16,2
 017A E0E0              ldi R30,0
 017C 1E07              cpc R17,R30
 017E C9F0              breq L32
 0180 0330              cpi R16,3
 0182 E0E0              ldi R30,0
 0184 1E07              cpc R17,R30
 0186 19F1              breq L33
 0188 0430              cpi R16,4
 018A E0E0              ldi R30,0
 018C 1E07              cpc R17,R30
 018E 41F1              breq L34
 0190 0530              cpi R16,5
 0192 E0E0              ldi R30,0
 0194 1E07              cpc R17,R30
 0196 69F1              breq L36
 0198 0630              cpi R16,6
 019A E0E0              ldi R30,0
 019C 1E07              cpc R17,R30
 019E 91F1              breq L38
 01A0 39C0              xjmp L29
 01A2           X8:
 01A2                   .dbline 106
 01A2           ;          switch (n){
 01A2           L31:
 01A2                   .dbline 107
 01A2           ;                         case 1: n++;UDR = TSTA2;  break;                         //头2
 01A2 80910C00          lds R24,_n
 01A6 8F5F              subi R24,255    ; addi 1
 01A8 80930C00          sts _n,R24
 01AC                   .dbline 107
 01AC 8CE4              ldi R24,76
 01AE 8CB9              out 0xc,R24
 01B0                   .dbline 107
 01B0 31C0              xjmp L29
 01B2           L32:
 01B2                   .dbline 108
 01B2           ;                         case 2: n++;UDR = DataT - len;  break;           //长度
 01B2 80910C00          lds R24,_n
 01B6 8F5F              subi R24,255    ; addi 1
 01B8 80930C00          sts _n,R24
 01BC                   .dbline 108
 01BC 20900600          lds R2,_len
 01C0 3324              clr R3
 01C2 8FEA              ldi R24,175
 01C4 90E0              ldi R25,0
 01C6 8219              sub R24,R2
 01C8 9309              sbc R25,R3
 01CA 8CB9              out 0xc,R24
 01CC                   .dbline 108
 01CC 23C0              xjmp L29
 01CE           L33:
 01CE                   .dbline 109
 01CE           ;                         case 3: n++;UDR = RxBuffer[0];  break;        
 01CE 80910C00          lds R24,_n
 01D2 8F5F              subi R24,255    ; addi 1
 01D4 80930C00          sts _n,R24
 01D8                   .dbline 109
 01D8 20900D00          lds R2,_RxBuffer
 01DC 2CB8              out 0xc,R2
 01DE                   .dbline 109
 01DE 1AC0              xjmp L29
 01E0           L34:
 01E0                   .dbline 110
 01E0           ;                         case 4: n++; UDR = RxBuffer[1]; break;        
 01E0 80910C00          lds R24,_n
 01E4 8F5F              subi R24,255    ; addi 1
 01E6 80930C00          sts _n,R24
 01EA                   .dbline 110
 01EA 20900E00          lds R2,_RxBuffer+1
 01EE 2CB8              out 0xc,R2
 01F0                   .dbline 110
 01F0 11C0              xjmp L29
 01F2           L36:
 01F2                   .dbline 111
 01F2           ;                         case 5: n++;UDR = RxBuffer[2];  break;        
 01F2 80910C00          lds R24,_n
 01F6 8F5F              subi R24,255    ; addi 1
 01F8 80930C00          sts _n,R24
 01FC                   .dbline 111
 01FC 20900F00          lds R2,_RxBuffer+2
 0200 2CB8              out 0xc,R2
 0202                   .dbline 111
 0202 08C0              xjmp L29
 0204           L38:
 0204                   .dbline 112
 0204           ;                         case 6: n=0; flag = NG;UDR = RxBuffer[3]; break;         //data
 0204 2224              clr R2
 0206 20920C00          sts _n,R2
 020A                   .dbline 112
 020A 20920500          sts _flag,R2
 020E                   .dbline 112
 020E 20901000          lds R2,_RxBuffer+3
 0212 2CB8              out 0xc,R2
 0214                   .dbline 112
 0214                   .dbline 114
 0214           ;                       //  case 6: UDR = RxBuffer[0]%16 + RxBuffer[1]%16 + RxBuffer[2]%16 +RxBuffer[3]%16  + DataT - len; n = 0; break;//校验
 0214           ;                         default:break;
 0214           L29:
 0214                   .dbline 116
 0214           L26:
 0214                   .dbline -2
 0214           L25:
 0214 2990              ld R2,y+
 0216 2FBE              out 0x3f,R2
 0218 E991              ld R30,y+
 021A 9991              ld R25,y+
 021C 8991              ld R24,y+
 021E 1991              ld R17,y+
 0220 0991              ld R16,y+
 0222 3990              ld R3,y+
 0224 2990              ld R2,y+
 0226                   .dbline 0 ; func end
 0226 1895              reti
 0228                   .dbend
 0228                   .dbfunc e init_devices _init_devices fV
                        .even
 0228           _init_devices::
 0228                   .dbline -1
 0228                   .dbline 121
 0228           ;          }
 0228           ;          }
 0228           ; }
 0228           ; 
 0228           ; //call this routine to initialize all peripherals
 0228           ; void init_devices(void)
 0228           ; {
 0228                   .dbline 123
 0228           ;  //stop errant interrupts until set up
 0228           ;  CLI(); //disable all interrupts
 0228 F894              cli
 022A                   .dbline 124
 022A           ;  port_init();
 022A EADE              xcall _port_init
 022C                   .dbline 125
 022C           ;  uart0_init();
 022C F4DE              xcall _uart0_init
 022E                   .dbline 127
 022E           ; 
 022E           ;  MCUCR = 0x00;
 022E 2224              clr R2
 0230 25BE              out 0x35,R2
 0232                   .dbline 128
 0232           ;  GICR  = 0x00;
 0232 2BBE              out 0x3b,R2
 0234                   .dbline 129
 0234           ;  TIMSK = 0x00; //timer interrupt sources
 0234 29BE              out 0x39,R2
 0236                   .dbline 130
 0236           ;  SEI(); //re-enable interrupts
 0236 7894              sei
 0238                   .dbline -2
 0238           L40:
 0238                   .dbline 0 ; func end
 0238 0895              ret
 023A                   .dbend
 023A                   .dbfunc e check_buf _check_buf fc
 023A           ;              i -> R20
 023A           ;            num -> R18
 023A           ;    CheckBuffer -> R16,R17
                        .even
 023A           _check_buf::
 023A 0E940000          xcall push_gset1
 023E                   .dbline -1
 023E                   .dbline 139
 023E           ;  //all peripherals are now initialized
 023E           ; }
 023E           ; /*****************************************************
 023E           ; unsigned char check_buf( unsigned char *CheckBuffer)
 023E           ; 检测命令是否符合要求
 023E           ; 
 023E           ; *****************************************************/
 023E           ; 
 023E           ; unsigned char check_buf( unsigned char *CheckBuffer,unsigned char num){
 023E                   .dbline 141
 023E 4427              clr R20
 0240 10C0              xjmp L45
 0242           L42:
 0242                   .dbline 141
 0242           ;                 unsigned char i;
 0242           ;                 for (i = 0;i < num; i++){
 0242                   .dbline 142
 0242           ;                         if (CheckBuffer[i] != RxBuffer[i])
 0242 80E0              ldi R24,<_RxBuffer
 0244 90E0              ldi R25,>_RxBuffer
 0246 E42F              mov R30,R20
 0248 FF27              clr R31
 024A E80F              add R30,R24
 024C F91F              adc R31,R25
 024E 2080              ldd R2,z+0
 0250 E42F              mov R30,R20

⌨️ 快捷键说明

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