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

📄 fjv14.lis

📁 一本关于控制系统仿真的书的程序 1、文件夹1中的程序是书中的一些仿真。 2、文件2中的是最近做的预测控制、PID控制及逻辑控制的对比综合研究。 3、文件夹3中是与maltab通信的数据采集板的设
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 00BA                   .dbfunc e main _main fV
 00BA           ;              m -> R22,R23
 00BA           ;         temp10 -> y+6
 00BA           ;          temp8 -> R12
 00BA           ;         charry -> y+1
 00BA           ;              y -> R14
 00BA           ;              i -> R10,R11
                        .even
 00BA           _main::
 00BA 2897              sbiw R28,8
 00BC                   .dbline -1
 00BC                   .dbline 121
 00BC           ; }
 00BC           ; /**************************************************************************/
 00BC           ; /**************************************************************************/
 00BC           ; void main( )
 00BC           ; {
 00BC                   .dbline 129
 00BC           ;   
 00BC           ;   unsigned char charry[5];
 00BC           ;   unsigned char y;
 00BC           ;   unsigned char temp8;
 00BC           ;   unsigned int temp10;//接收10位的数据,如AD等。
 00BC           ;   unsigned int i;
 00BC           ;   unsigned int m;
 00BC           ;   init_devices();//初始化
 00BC F2DF              rcall _init_devices
 00BE 79C0              rjmp L11
 00C0           L10:
 00C0                   .dbline 131
 00C0           ;   while(1)
 00C0           ;       {
 00C0                   .dbline 132
 00C0           ;        charry[0]=0;//初始化
 00C0 2224              clr R2
 00C2 2982              std y+1,R2
 00C4                   .dbline 133
 00C4           ;        charry[1]=0;
 00C4 2A82              std y+2,R2
 00C6                   .dbline 134
 00C6           ;        charry[2]=0;
 00C6 2B82              std y+3,R2
 00C8                   .dbline 135
 00C8           ;        charry[3]=0;
 00C8 2C82              std y+4,R2
 00CA                   .dbline 136
 00CA           ;        charry[4]=0;
 00CA 2D82              std y+5,R2
 00CC                   .dbline 137
 00CC           ;        y=0;
 00CC EE24              clr R14
 00CE                   .dbline 138
 00CE           ;        temp8=0;
 00CE CC24              clr R12
 00D0                   .dbline 139
 00D0           ;        temp10=0;
 00D0 0024              clr R0
 00D2 1124              clr R1
 00D4 1F82              std y+7,R1
 00D6 0E82              std y+6,R0
 00D8                   .dbline 140
 00D8           ;        m=0;
 00D8 6627              clr R22
 00DA 7727              clr R23
 00DC                   .dbline 142
 00DC           ;        
 00DC           ;        WDT_off();//等待第一个接收数据。
 00DC 9EDF              rcall _WDT_off
 00DE                   .dbline 143
 00DE           ;        y=USART_Recive();
 00DE 6CD0              rcall _USART_Recive
 00E0 E02E              mov R14,R16
 00E2                   .dbline 144
 00E2           ;        charry[0]=y;//接收数据
 00E2 E982              std y+1,R14
 00E4                   .dbline 145
 00E4           ;        watchdog_init();//打开看门狗,防止串行数据中断而无限等待。
 00E4 96DF              rcall _watchdog_init
 00E6                   .dbline 146
 00E6           ;        for(i=1;i<5;i++)
 00E6 81E0              ldi R24,1
 00E8 90E0              ldi R25,0
 00EA 5C01              movw R10,R24
 00EC 0BC0              rjmp L20
 00EE           L17:
 00EE                   .dbline 147
 00EE                   .dbline 148
 00EE 64D0              rcall _USART_Recive
 00F0 E02E              mov R14,R16
 00F2                   .dbline 149
 00F2 CE01              movw R24,R28
 00F4 0196              adiw R24,1
 00F6 F501              movw R30,R10
 00F8 E80F              add R30,R24
 00FA F91F              adc R31,R25
 00FC E082              std z+0,R14
 00FE                   .dbline 150
 00FE           L18:
 00FE                   .dbline 146
 00FE C501              movw R24,R10
 0100 0196              adiw R24,1
 0102 5C01              movw R10,R24
 0104           L20:
 0104                   .dbline 146
 0104 C501              movw R24,R10
 0106 8530              cpi R24,5
 0108 E0E0              ldi R30,0
 010A 9E07              cpc R25,R30
 010C 80F3              brlo L17
 010E                   .dbline 152
 010E           ;             { 
 010E           ;                   y=USART_Recive();
 010E           ;                       charry[i]=y;//接收数据
 010E           ;                 }
 010E           ;      
 010E           ;         if (charry[0]==0x55)
 010E 8981              ldd R24,y+1
 0110 8535              cpi R24,85
 0112 09F0              breq X2
 0114 4EC0              rjmp L21
 0116           X2:
 0116                   .dbline 153
 0116           ;                {
 0116                   .dbline 156
 0116           ;               
 0116           ;                   //功能选择判断
 0116           ;                     switch (charry[1])
 0116 4A81              ldd R20,y+2
 0118 5527              clr R21
 011A 4130              cpi R20,1
 011C E0E0              ldi R30,0
 011E 5E07              cpc R21,R30
 0120 F9F0              breq L32
 0122 4230              cpi R20,2
 0124 E0E0              ldi R30,0
 0126 5E07              cpc R21,R30
 0128 B1F0              breq L30
 012A 4330              cpi R20,3
 012C E0E0              ldi R30,0
 012E 5E07              cpc R21,R30
 0130 71F0              breq L27
 0132 4130              cpi R20,1
 0134 E0E0              ldi R30,0
 0136 5E07              cpc R21,R30
 0138 0CF4              brge X3
 013A 3BC0              rjmp L24
 013C           X3:
 013C           L41:
 013C 4031              cpi R20,16
 013E E0E0              ldi R30,0
 0140 5E07              cpc R21,R30
 0142 E9F0              breq L34
 0144 4131              cpi R20,17
 0146 E0E0              ldi R30,0
 0148 5E07              cpc R21,R30
 014A F9F0              breq L38
 014C 32C0              rjmp L24
 014E           X0:
 014E                   .dbline 157
 014E           ;                       {
 014E           L27:
 014E                   .dbline 159
 014E           ;                          case 0x03:  //如果为00则启动IO输出
 014E           ;                               IO_out(charry[3],charry[2]);    //确定输出数据和端口
 014E 2B81              ldd R18,y+3
 0150 0C81              ldd R16,y+4
 0152 1DD1              rcall _IO_out
 0154                   .dbline 160
 0154           ;                               break;
 0154 2EC0              rjmp L24
 0156           L30:
 0156                   .dbline 162
 0156           ;                          case 0x02:  //如果为00则启动IO输入
 0156           ;                               temp8=IO_in(charry[2]);//启动IO转换,确定通道数。
 0156 0B81              ldd R16,y+3
 0158 8DD1              rcall _IO_in
 015A C02E              mov R12,R16
 015C                   .dbline 163
 015C           ;                                       USART_Transmit(temp8);//启动串口发送IO数据(第四位)
 015C 34D0              rcall _USART_Transmit
 015E                   .dbline 165
 015E           ;                                       //USART_Transmit(0x00);//启动串口发送IO数据(第五位) 
 015E           ;                               break;
 015E 29C0              rjmp L24
 0160           L32:
 0160                   .dbline 167
 0160           ;                          case 0x01://如果为01则启动AD转换
 0160           ;                                temp10=ADC_Value(charry[2]);//启动AD转换,确定通道数。
 0160 0B81              ldd R16,y+3
 0162 35D0              rcall _ADC_Value
 0164 1F83              std y+7,R17
 0166 0E83              std y+6,R16
 0168                   .dbline 168
 0168           ;                                m=temp10;
 0168 B801              movw R22,R16
 016A                   .dbline 169
 016A           ;                                  temp8=(unsigned char)(m>>8);
 016A 6B01              movw R12,R22
 016C CD2C              mov R12,R13
 016E DD24              clr R13
 0170                   .dbline 170
 0170           ;                                USART_Transmit(temp8);//启动串口发送数据(高8位)
 0170 0C2D              mov R16,R12
 0172 29D0              rcall _USART_Transmit
 0174                   .dbline 171
 0174           ;                                temp8=(unsigned char)temp10;
 0174 CE80              ldd R12,y+6
 0176 DF80              ldd R13,y+7
 0178                   .dbline 172
 0178           ;                                USART_Transmit(temp8);//启动串口发送数据(低8位)
 0178 0C2D              mov R16,R12
 017A 25D0              rcall _USART_Transmit
 017C                   .dbline 173
 017C           ;                                break;
 017C 1AC0              rjmp L24
 017E           L34:
 017E                   .dbline 175
 017E           ;                          case  0x10://如果为10则启动DA转换
 017E           ;                                  DAC_5617_10(charry[3],charry[4],charry[2]);  //启动DA5716            
 017E 2B80              ldd R2,y+3
 0180 2882              std y+0,R2
 0182 2D81              ldd R18,y+5
 0184 0C81              ldd R16,y+4
 0186 AAD0              rcall _DAC_5617_10
 0188                   .dbline 176
 0188           ;                                break;
 0188 14C0              rjmp L24
 018A           L38:
 018A                   .dbline 178
 018A           ;                          case 0x11://如果为11则先启动DA再启动AD转换
 018A           ;                                    DAC_5617_10(charry[3],charry[4],0x01);     //启动DA5716    
 018A 81E0              ldi R24,1
 018C 8883              std y+0,R24
 018E 2D81              ldd R18,y+5
 0190 0C81              ldd R16,y+4
 0192 A4D0              rcall _DAC_5617_10
 0194                   .dbline 179
 0194           ;                                        asm("NOP");
 0194 0000              NOP
 0196                   .dbline 180
 0196           ;                                    temp10=ADC_Value(0x01);      //启动AD转换,AD/DA使用相同通道1。
 0196 01E0              ldi R16,1
 0198 1AD0              rcall _ADC_Value
 019A 1F83              std y+7,R17
 019C 0E83              std y+6,R16
 019E                   .dbline 181
 019E           ;                            m=temp10;
 019E B801              movw R22,R16
 01A0                   .dbline 182
 01A0           ;                      temp8=(unsigned char)(m>>8);
 01A0 6B01              movw R12,R22
 01A2 CD2C              mov R12,R13
 01A4 DD24              clr R13
 01A6                   .dbline 183
 01A6           ;                      USART_Transmit(temp8);//启动串口发送数据(高8位)
 01A6 0C2D              mov R16,R12
 01A8 0ED0              rcall _USART_Transmit
 01AA                   .dbline 184
 01AA           ;                      temp8=(unsigned char)temp10;
 01AA CE80              ldd R12,y+6
 01AC DF80              ldd R13,y+7
 01AE                   .dbline 185
 01AE           ;                                        USART_Transmit(temp8);//启动串口发送数据(低8位)
 01AE 0C2D              mov R16,R12
 01B0 0AD0              rcall _USART_Transmit
 01B2                   .dbline 186
 01B2           ;                       break;
 01B2                   .dbline 187
 01B2           ;                         default:break;
 01B2           L24:
 01B2                   .dbline 189
 01B2           ;                       }        
 01B2           ;              }
 01B2           L21:
 01B2                   .dbline 191
 01B2           L11:
 01B2                   .dbline 130
 01B2 86CF              rjmp L10
 01B4           X1:
 01B4                   .dbline -2
 01B4           L9:
 01B4 2896              adiw R28,8
 01B6                   .dbline 0 ; func end
 01B6 0895              ret
 01B8                   .dbsym r m 22 i
 01B8                   .dbsym l temp10 6 i
 01B8                   .dbsym r temp8 12 c
 01B8                   .dbsym l charry 1 A[5:5]c
 01B8                   .dbsym r y 14 c
 01B8                   .dbsym r i 10 i
 01B8                   .dbend
 01B8                   .dbfunc e USART_Recive _USART_Recive fc
 01B8           ;              y -> R20
                        .even
 01B8           _USART_Recive::
 01B8 00D0              rcall push_gset1
 01BA                   .dbline -1
 01BA                   .dbline 196
 01BA           ;           
 01BA           ;      }          
 01BA           ; }
 01BA           ; /**************************************************************************/
 01BA           ; //串口接收数据
 01BA           ; unsigned char USART_Recive(void)
 01BA           ;     { 
 01BA           L43:
 01BA                   .dbline 199
 01BA           L44:
 01BA                   .dbline 199
 01BA           ;       unsigned char y;        
 01BA           ;       //等待接收数据
 01BA           ;       while(!(UCSRA&(1<<RXC)));
 01BA 5F9B              sbis 0xb,7
 01BC FECF              rjmp L43
 01BE                   .dbline 200
 01BE           ;               y=getchar();  //接收数据
 01BE 00D0              rcall _getchar
 01C0 402F              mov R20,R16
 01C2                   .dbline 202

⌨️ 快捷键说明

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