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

📄 fjv14.lis

📁 一本关于控制系统仿真的书的程序 1、文件夹1中的程序是书中的一些仿真。 2、文件2中的是最近做的预测控制、PID控制及逻辑控制的对比综合研究。 3、文件夹3中是与maltab通信的数据采集板的设
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 01C2           ;               
 01C2           ;    return y;
 01C2                   .dbline -2
 01C2           L42:
 01C2 00D0              rcall pop_gset1
 01C4                   .dbline 0 ; func end
 01C4 0895              ret
 01C6                   .dbsym r y 20 c
 01C6                   .dbend
 01C6                   .dbfunc e USART_Transmit _USART_Transmit fV
 01C6           ;          tdata -> R16
                        .even
 01C6           _USART_Transmit::
 01C6                   .dbline -1
 01C6                   .dbline 207
 01C6           ;    }
 01C6           ; /*******************************************************************/
 01C6           ; //串口发送数据
 01C6           ; void USART_Transmit(unsigned char tdata)
 01C6           ; {
 01C6                   .dbline 209
 01C6           ; //等待数据寄存器空
 01C6           ;       UDR=tdata;
 01C6 0CB9              out 0xc,R16
 01C8           L47:
 01C8                   .dbline 211
 01C8           L48:
 01C8                   .dbline 210
 01C8           ;       while(!(UCSRA&(1<<UDRE)))
 01C8 5D9B              sbis 0xb,5
 01CA FECF              rjmp L47
 01CC                   .dbline -2
 01CC           L46:
 01CC                   .dbline 0 ; func end
 01CC 0895              ret
 01CE                   .dbsym r tdata 16 c
 01CE                   .dbend
 01CE                   .dbfunc e ADC_Value _ADC_Value fi
 01CE           ;           temp -> R20,R21
 01CE           ;    adc_channel -> R22
                        .even
 01CE           _ADC_Value::
 01CE 00D0              rcall push_gset2
 01D0 602F              mov R22,R16
 01D2                   .dbline -1
 01D2                   .dbline 223
 01D2           ;        ;
 01D2           ;       
 01D2           ;       
 01D2           ; }
 01D2           ; /******************************************************************/
 01D2           ; /*******************************************************************
 01D2           ;  函数功能:AD数据、通道采集,10位精度。
 01D2           ;  入口参数:adc_channel通道选择。
 01D2           ;  出口参数:AD采集的数据
 01D2           ;  说明:此处可以加入中值滤波程序。使用ADC降噪中断方式
 01D2           ; *******************************************************/
 01D2           ; unsigned int ADC_Value (unsigned char adc_channel)
 01D2           ; {
 01D2                   .dbline 225
 01D2           ;   unsigned int temp;
 01D2           ;   temp=0;
 01D2 4427              clr R20
 01D4 5527              clr R21
 01D6                   .dbline 226
 01D6           ;   switch (adc_channel)
 01D6 7727              clr R23
 01D8 6130              cpi R22,1
 01DA E0E0              ldi R30,0
 01DC 7E07              cpc R23,R30
 01DE 69F0              breq L54
 01E0 6230              cpi R22,2
 01E2 E0E0              ldi R30,0
 01E4 7E07              cpc R23,R30
 01E6 71F0              breq L55
 01E8 6330              cpi R22,3
 01EA E0E0              ldi R30,0
 01EC 7E07              cpc R23,R30
 01EE 79F0              breq L56
 01F0 6430              cpi R22,4
 01F2 E0E0              ldi R30,0
 01F4 7E07              cpc R23,R30
 01F6 81F0              breq L57
 01F8 13C0              rjmp L52
 01FA           X4:
 01FA                   .dbline 227
 01FA           ;        {
 01FA           L54:
 01FA                   .dbline 229
 01FA           ;            case 0x01: //如果为00则启动CH1通道
 01FA           ;                ADMUX=0x00;//寄存器后4位对应通道。0代表CH1通道。
 01FA 2224              clr R2
 01FC 27B8              out 0x7,R2
 01FE                   .dbline 230
 01FE           ;                temp=ADC_filter();
 01FE 13D0              rcall _ADC_filter
 0200 A801              movw R20,R16
 0202                   .dbline 231
 0202           ;                break;   
 0202 0EC0              rjmp L52
 0204           L55:
 0204                   .dbline 233
 0204           ;           case 0x02:  //如果为01则启动CH2通道
 0204           ;                ADMUX=0x01;//寄存器后4位对应通道。1代表CH2通道。
 0204 81E0              ldi R24,1
 0206 87B9              out 0x7,R24
 0208                   .dbline 234
 0208           ;                temp=ADC_filter();  
 0208 0ED0              rcall _ADC_filter
 020A A801              movw R20,R16
 020C                   .dbline 235
 020C           ;                      break; 
 020C 09C0              rjmp L52
 020E           L56:
 020E                   .dbline 237
 020E           ;           case 0x03:  //如果为10则启动CH2通道
 020E           ;                ADMUX=0x02;//寄存器后4位对应通道。2代表CH3通道。
 020E 82E0              ldi R24,2
 0210 87B9              out 0x7,R24
 0212                   .dbline 238
 0212           ;                temp=ADC_filter();  
 0212 09D0              rcall _ADC_filter
 0214 A801              movw R20,R16
 0216                   .dbline 239
 0216           ;                      break;  
 0216 04C0              rjmp L52
 0218           L57:
 0218                   .dbline 241
 0218           ;           case 0x04:  //如果为00则启动CH1通道
 0218           ;                ADMUX=0x03;//寄存器后4位对应通道。3代表CH4通道。
 0218 83E0              ldi R24,3
 021A 87B9              out 0x7,R24
 021C                   .dbline 242
 021C           ;                temp=ADC_filter(); 
 021C 04D0              rcall _ADC_filter
 021E A801              movw R20,R16
 0220                   .dbline 243
 0220           ;                      break;           
 0220                   .dbline 244
 0220           ;                  default:break;
 0220           L52:
 0220                   .dbline 246
 0220           ;               }
 0220           ;   return temp;
 0220 8A01              movw R16,R20
 0222                   .dbline -2
 0222           L50:
 0222 00D0              rcall pop_gset2
 0224                   .dbline 0 ; func end
 0224 0895              ret
 0226                   .dbsym r temp 20 i
 0226                   .dbsym r adc_channel 22 c
 0226                   .dbend
 0226                   .dbfunc e ADC_filter _ADC_filter fi
 0226           ;        outdata -> R20,R21
 0226           ;              a -> R20,R21
 0226           ;           temp -> y+0
                        .even
 0226           _ADC_filter::
 0226 00D0              rcall push_gset1
 0228 2497              sbiw R28,4
 022A                   .dbline -1
 022A                   .dbline 255
 022A           ; }  
 022A           ; /*******************************************************************
 022A           ;  函数功能:首先采集数据,然后三点中值滤波。同时解决第一次采集不准问题。
 022A           ;  入口参数:无
 022A           ;  出口参数:outdata,滤波后的结果
 022A           ;  说明:
 022A           ; *******************************************************/
 022A           ; unsigned int  ADC_filter(void)
 022A           ;       {
 022A                   .dbline 259
 022A           ;             unsigned int a;
 022A           ;             unsigned int outdata;
 022A           ;             unsigned int temp[2];
 022A           ;             temp[0]=0;
 022A 2224              clr R2
 022C 3324              clr R3
 022E 3982              std y+1,R3
 0230 2882              std y+0,R2
 0232                   .dbline 260
 0232           ;           temp[1]=0;
 0232 3B82              std y+3,R3
 0234 2A82              std y+2,R2
 0236                   .dbline 261
 0236           ;           temp[2]=0;
 0236 3D82              std y+5,R3
 0238 2C82              std y+4,R2
 023A                   .dbline 262
 023A           ;             ADC_Start();//丢弃第一次结果。
 023A 48D0              rcall _ADC_Start
 023C                   .dbline 263
 023C           ;             AD_value10=0;//采集数据前先将变量清零。避免上一次的干扰。
 023C 2224              clr R2
 023E 3324              clr R3
 0240 30920100          sts _AD_value10+1,R3
 0244 20920000          sts _AD_value10,R2
 0248                   .dbline 264
 0248           ;             ADC_Start();
 0248 41D0              rcall _ADC_Start
 024A                   .dbline 265
 024A           ;             temp[0]=AD_value10;//AD转换结果
 024A 20900000          lds R2,_AD_value10
 024E 30900100          lds R3,_AD_value10+1
 0252 3982              std y+1,R3
 0254 2882              std y+0,R2
 0256                   .dbline 266
 0256           ;             ADC_Start();
 0256 3AD0              rcall _ADC_Start
 0258                   .dbline 267
 0258           ;             temp[1]=AD_value10;//AD转换结果
 0258 20900000          lds R2,_AD_value10
 025C 30900100          lds R3,_AD_value10+1
 0260 3B82              std y+3,R3
 0262 2A82              std y+2,R2
 0264                   .dbline 268
 0264           ;             ADC_Start();
 0264 33D0              rcall _ADC_Start
 0266                   .dbline 269
 0266           ;             temp[2]=AD_value10;//AD转换结果
 0266 20900000          lds R2,_AD_value10
 026A 30900100          lds R3,_AD_value10+1
 026E 3D82              std y+5,R3
 0270 2C82              std y+4,R2
 0272                   .dbline 271
 0272           ;             //下面的程序让数组从小到大排列
 0272           ;             if (temp[0]>temp[1])
 0272 2A80              ldd R2,y+2
 0274 3B80              ldd R3,y+3
 0276 4880              ldd R4,y+0
 0278 5980              ldd R5,y+1
 027A 2414              cp R2,R4
 027C 3504              cpc R3,R5
 027E 30F4              brsh L63
 0280                   .dbline 272
 0280           ;                {
 0280                   .dbline 273
 0280           ;                         a=temp[1];
 0280 A101              movw R20,R2
 0282                   .dbline 274
 0282           ;                   temp[1]=temp[0];
 0282 1201              movw R2,R4
 0284 3B82              std y+3,R3
 0286 2A82              std y+2,R2
 0288                   .dbline 275
 0288           ;                   temp[0]=a;
 0288 5983              std y+1,R21
 028A 4883              std y+0,R20
 028C                   .dbline 276
 028C           ;                 }
 028C           L63:
 028C                   .dbline 277
 028C           ;              if (temp[0]>temp[2])
 028C 2C80              ldd R2,y+4
 028E 3D80              ldd R3,y+5
 0290 4880              ldd R4,y+0
 0292 5980              ldd R5,y+1
 0294 2414              cp R2,R4
 0296 3504              cpc R3,R5
 0298 30F4              brsh L68
 029A                   .dbline 278
 029A           ;                 {
 029A                   .dbline 279
 029A           ;                   a=temp[2];
 029A A101              movw R20,R2
 029C                   .dbline 280
 029C           ;                   temp[2]=temp[0];
 029C 1201              movw R2,R4
 029E 3D82              std y+5,R3
 02A0 2C82              std y+4,R2
 02A2                   .dbline 281
 02A2           ;                   temp[0]=a;                  
 02A2 5983              std y+1,R21
 02A4 4883              std y+0,R20
 02A6                   .dbline 282
 02A6           ;                 }
 02A6           L68:
 02A6                   .dbline 283
 02A6           ;              if (temp[1]>temp[2])
 02A6 2C80              ldd R2,y+4
 02A8 3D80              ldd R3,y+5
 02AA 4A80              ldd R4,y+2
 02AC 5B80              ldd R5,y+3
 02AE 2414              cp R2,R4
 02B0 3504              cpc R3,R5
 02B2 30F4              brsh L73
 02B4                   .dbline 284
 02B4           ;                  {
 02B4                   .dbline 285
 02B4           ;                    a=temp[2];
 02B4 A101              movw R20,R2
 02B6                   .dbline 286
 02B6           ;                    temp[2]=temp[1];
 02B6 1201              movw R2,R4
 02B8 3D82              std y+5,R3
 02BA 2C82              std y+4,R2
 02BC                   .dbline 287
 02BC           ;                    temp[1]=a;
 02BC 5B83              std y+3,R21
 02BE 4A83              std y+2,R20
 02C0                   .dbline 288
 02C0           ;                  }  
 02C0           L73:
 02C0                   .dbline 289
 02C0           ;              outdata=temp[1];
 02C0 4A81              ldd R20,y+2
 02C2 5B81              ldd R21,y+3
 02C4                   .dbline 290
 02C4           ;              return outdata;   
 02C4 8A01              movw R16,R20
 02C6                   .dbline -2
 02C6           L58:
 02C6 2496              adiw R28,4
 02C8 00D0              rcall pop_gset1
 02CA                   .dbline 0 ; func end
 02CA 0895              ret
 02CC                   .dbsym r outdata 20 i
 02CC                   .dbsym r a 20 i

⌨️ 快捷键说明

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