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

📄 增量式模糊控制.lst

📁 增量式模糊PID控制方法AVR单片机mega16
💻 LST
📖 第 1 页 / 共 5 页
字号:
__text_start:
__start:
    009A E5CF      LDI	R28,0x5F
    009B E0D4      LDI	R29,4
    009C BFCD      OUT	0x3D,R28
    009D BFDE      OUT	0x3E,R29
    009E 51C0      SUBI	R28,0x10
    009F 40D0      SBCI	R29,0
    00A0 EA0A      LDI	R16,0xAA
    00A1 8308      STD	Y+0,R16
    00A2 2400      CLR	R0
    00A3 E2E6      LDI	R30,0x26
    00A4 E0F1      LDI	R31,1
    00A5 E011      LDI	R17,1
    00A6 34EA      CPI	R30,0x4A
    00A7 07F1      CPC	R31,R17
    00A8 F011      BEQ	0x00AB
    00A9 9201      ST	R0,Z+
    00AA CFFB      RJMP	0x00A6
    00AB 8300      STD	Z+0,R16
    00AC E6EE      LDI	R30,0x6E
    00AD E0F0      LDI	R31,0
    00AE E6A0      LDI	R26,0x60
    00AF E0B0      LDI	R27,0
    00B0 E011      LDI	R17,1
    00B1 33E4      CPI	R30,0x34
    00B2 07F1      CPC	R31,R17
    00B3 F021      BEQ	0x00B8
    00B4 95C8      LPM
    00B5 9631      ADIW	R30,1
    00B6 920D      ST	R0,X+
    00B7 CFF9      RJMP	0x00B1
    00B8 940E035E  CALL	_main
_exit:
    00BA CFFF      RJMP	_exit
FILE: D:\仿真\增量式模糊控制\delay.c
(0001) #define DELAY_C
(0002) #include "includes.h"
(0003) #define XTAL 4    //晶振频率,单位MHz
(0004) void delay_1us(void)                 //1us延时函数
(0005)   {
(0006)    asm("nop");
_delay_1us:
    00BB 0000      NOP
    00BC 9508      RET
_delay_nus:
  i                    --> R20
  n                    --> R22
    00BD 940E03F4  CALL	push_gset2
    00BF 01B8      MOVW	R22,R16
(0007)   }
(0008) 
(0009) void delay_nus(unsigned int n)       //N us延时函数
(0010)   {
(0011)    unsigned int i=0;
    00C0 2744      CLR	R20
    00C1 2755      CLR	R21
(0012)    for (i=0;i<n;i++)
    00C2 C003      RJMP	0x00C6
(0013)    delay_1us();
    00C3 DFF7      RCALL	_delay_1us
    00C4 5F4F      SUBI	R20,0xFF
    00C5 4F5F      SBCI	R21,0xFF
    00C6 1746      CP	R20,R22
    00C7 0757      CPC	R21,R23
    00C8 F3D0      BCS	0x00C3
    00C9 940E03E8  CALL	pop_gset2
    00CB 9508      RET
(0014)   }
(0015)   
(0016) void delay_1ms(void)                 //1ms延时函数
(0017)   {
(0018)    unsigned int i;
(0019)    for (i=0;i<(unsigned int)(XTAL*143-2);i++);
_delay_1ms:
  i                    --> R16
    00CC 2700      CLR	R16
    00CD 2711      CLR	R17
    00CE C002      RJMP	0x00D1
    00CF 5F0F      SUBI	R16,0xFF
    00D0 4F1F      SBCI	R17,0xFF
    00D1 330A      CPI	R16,0x3A
    00D2 E0E2      LDI	R30,2
    00D3 071E      CPC	R17,R30
    00D4 F3D0      BCS	0x00CF
    00D5 9508      RET
_delay_nms:
  i                    --> R20
  n                    --> R22
    00D6 940E03F4  CALL	push_gset2
    00D8 01B8      MOVW	R22,R16
(0020)   }
(0021)   
(0022) void delay_nms(unsigned int n)       //N ms延时函数
(0023)   {
(0024)    unsigned int i=0;
    00D9 2744      CLR	R20
    00DA 2755      CLR	R21
(0025)    for (i=0;i<n;i++)
    00DB C003      RJMP	0x00DF
(0026)    {
(0027)       delay_1ms();
    00DC DFEF      RCALL	_delay_1ms
    00DD 5F4F      SUBI	R20,0xFF
    00DE 4F5F      SBCI	R21,0xFF
    00DF 1746      CP	R20,R22
    00E0 0757      CPC	R21,R23
    00E1 F3D0      BCS	0x00DC
    00E2 940E03E8  CALL	pop_gset2
    00E4 9508      RET
FILE: D:\仿真\增量式模糊控制\init.c
(0001) #define INIT_C
(0002) #include "includes.h"
(0003) //#define Vref 25600
(0004) 
(0005) 
(0006) int count;
(0007) float j;  
(0008)    
(0009) unsigned char *test = "The Voltage is: ";
(0010) unsigned char *value = "0.000 V";	
(0011) 
(0012) void WDR(void)
(0013) {
(0014)      asm("wdr");
_WDR:
    00E5 95A8      WDR
    00E6 9508      RET
(0015) }
(0016) 
(0017) void WDT_init(void)
(0018) {
(0019)    WDR();
_WDT_init:
    00E7 DFFD      RCALL	_WDR
(0020)    WDTCR = 0x0f;
    00E8 E08F      LDI	R24,0xF
    00E9 BD81      OUT	0x21,R24
    00EA 9508      RET
(0021) }
(0022) void init_time1(void)
(0023) {
(0024)     TIMSK = 0X02;  //T1溢出中断
_init_time1:
    00EB E082      LDI	R24,2
    00EC BF89      OUT	0x39,R24
(0025)     TCCR1B = 0X00; //停止T1
    00ED 2422      CLR	R2
    00EE BC2E      OUT	0x2E,R2
(0026)     TCNT1H = 0XF9; //
    00EF EF89      LDI	R24,0xF9
    00F0 BD8D      OUT	0x2D,R24
(0027)     TCNT1L = 0XE6;
    00F1 EE86      LDI	R24,0xE6
    00F2 BD8C      OUT	0x2C,R24
(0028)     TCCR1A = 0X00;
    00F3 BC2F      OUT	0x2F,R2
(0029)     TCCR1B = 0X01; 
    00F4 E081      LDI	R24,1
    00F5 BD8E      OUT	0x2E,R24
(0030)     asm("sei");
    00F6 9478      BSET	7
    00F7 9508      RET
_timer1_ovf_isr:
    00F8 940E042A  CALL	push_lset
    00FA 9722      SBIW	R28,2
(0031) }
(0032) 
(0033) 
(0034) 
(0035) #pragma interrupt_handler timer1_ovf_isr:9
(0036) void timer1_ovf_isr(void)
(0037) {
(0038)     TCNT1H = 0XF9; //
    00FB EF89      LDI	R24,0xF9
    00FC BD8D      OUT	0x2D,R24
(0039)     TCNT1L = 0XE6;
    00FD EE86      LDI	R24,0xE6
    00FE BD8C      OUT	0x2C,R24
(0040)     j = (float)(((float)((Vref /1023)))*( ADC&0X3FF))/1000.00;
    00FF B184      IN	R24,0x04
    0100 B195      IN	R25,0x05
    0101 7081      ANDI	R24,1
    0102 7090      ANDI	R25,0
    0103 011C      MOVW	R2,R24
    0104 E600      LDI	R16,0x60
    0105 E010      LDI	R17,0
    0106 940E0416  CALL	lpm32
    0108 933A      ST	R19,-Y
    0109 932A      ST	R18,-Y
    010A 931A      ST	R17,-Y
    010B 930A      ST	R16,-Y
    010C E50C      LDI	R16,0x5C
    010D E010      LDI	R17,0
    010E 940E0416  CALL	lpm32
    0110 933A      ST	R19,-Y
    0111 932A      ST	R18,-Y
    0112 931A      ST	R17,-Y
    0113 930A      ST	R16,-Y
    0114 0181      MOVW	R16,R2
    0115 9516      LSR	R17
    0116 9507      ROR	R16
    0117 940E04A0  CALL	int2fp
    0119 933A      ST	R19,-Y
    011A 932A      ST	R18,-Y
    011B 931A      ST	R17,-Y
    011C 930A      ST	R16,-Y
    011D 940E05C4  CALL	empy32fs
    011F 0181      MOVW	R16,R2
    0120 940E04A0  CALL	int2fp
    0122 933A      ST	R19,-Y
    0123 932A      ST	R18,-Y
    0124 931A      ST	R17,-Y
    0125 930A      ST	R16,-Y
    0126 940E04FA  CALL	add32fs
    0128 940E05C4  CALL	empy32fs
    012A E508      LDI	R16,0x58
    012B E010      LDI	R17,0
    012C 940E0416  CALL	lpm32
    012E 933A      ST	R19,-Y
    012F 932A      ST	R18,-Y
    0130 931A      ST	R17,-Y
    0131 930A      ST	R16,-Y
    0132 940E055E  CALL	div32f
    0134 93100127  STS	j+1,R17
    0136 93000126  STS	j,R16
    0138 93300129  STS	j+3,R19
    013A 93200128  STS	j+2,R18
(0041)     count = j*100;					
    013C E504      LDI	R16,0x54
    013D E010      LDI	R17,0
    013E 940E0416  CALL	lpm32
    0140 933A      ST	R19,-Y
    0141 932A      ST	R18,-Y
    0142 931A      ST	R17,-Y
    0143 930A      ST	R16,-Y
    0144 90400128  LDS	R4,j+2
    0146 90500129  LDS	R5,j+3
    0148 90200126  LDS	R2,j
    014A 90300127  LDS	R3,j+1
    014C 925A      ST	R5,-Y
    014D 924A      ST	R4,-Y
    014E 923A      ST	R3,-Y
    014F 922A      ST	R2,-Y
    0150 940E05C7  CALL	empy32f
    0152 940E0458  CALL	fp2int
    0154 9310012B  STS	count+1,R17
    0156 9300012A  STS	count,R16
(0042)     value[0] = count /1000+0x30;
    0158 EE28      LDI	R18,0xE8
    0159 E033      LDI	R19,3
    015A 940E03A2  CALL	div16s
    015C 01C8      MOVW	R24,R16
    015D 96C0      ADIW	R24,0x30
    015E 91E00062  LDS	R30,value
    0160 91F00063  LDS	R31,value+1
    0162 8380      STD	Z+0,R24
(0043)     count = count %1000;
    0163 EE28      LDI	R18,0xE8
    0164 E033      LDI	R19,3
    0165 9100012A  LDS	R16,count
    0167 9110012B  LDS	R17,count+1
    0169 940E039E  CALL	mod16s
    016B 9310012B  STS	count+1,R17
    016D 9300012A  STS	count,R16
(0044)     value[2] = count /100+0x30;
    016F E624      LDI	R18,0x64
    0170 E030      LDI	R19,0
    0171 940E03A2  CALL	div16s
    0173 01C8      MOVW	R24,R16
    0174 96C0      ADIW	R24,0x30
    0175 91E00062  LDS	R30,value
    0177 91F00063  LDS	R31,value+1
    0179 8382      STD	Z+2,R24
(0045)     count = count %100;
    017A E624      LDI	R18,0x64
    017B E030      LDI	R19,0
    017C 9100012A  LDS	R16,count
    017E 9110012B  LDS	R17,count+1
    0180 940E039E  CALL	mod16s
    0182 9310012B  STS	count+1,R17
    0184 9300012A  STS	count,R16
(0046)     value[3] = count  /10 + 0x30;			 
    0186 E02A      LDI	R18,0xA
    0187 E030      LDI	R19,0
    0188 940E03A2  CALL	div16s
    018A 01C8      MOVW	R24,R16
    018B 96C0      ADIW	R24,0x30
    018C 91E00062  LDS	R30,value
    018E 91F00063  LDS	R31,value+1
    0190 8383      STD	Z+3,R24
(0047)     value[4] = count  %10 + 0x30;			 
    0191 E02A      LDI	R18,0xA
    0192 E030      LDI	R19,0
    0193 9100012A  LDS	R16,count
    0195 9110012B  LDS	R17,count+1
    0197 940E039E  CALL	mod16s
    0199 01C8      MOVW	R24,R16
    019A 96C0      ADIW	R24,0x30
    019B 91E00062  LDS	R30,value
    019D 91F00063  LDS	R31,value+1
    019F 8384      STD	Z+4,R24
(0048)       
(0049)     LCD_Cursor(0,1);
    01A0 E021      LDI	R18,1
    01A1 2700      CLR	R16
    01A2 940E0283  CALL	_LCD_Cursor
(0050)     LCD_DisplayString(2,2,value); 
    01A4 90200062  LDS	R2,value
    01A6 90300063  LDS	R3,value+1
    01A8 8239      STD	Y+1,R3
    01A9 8228      STD	Y+0,R2
    01AA E022      LDI	R18,2
    01AB E002      LDI	R16,2
    01AC 940E026E  CALL	_LCD_DisplayString
    01AE 9622      ADIW	R28,2
    01AF 940E0441  CALL	pop_lset
    01B1 9518      RETI
FILE: D:\仿真\增量式模糊控制\LCD.c
(0001) // ************************************************
(0002) // *** 采用4位数据线的1602液晶驱动程序 ***
(0003) // *** LCD.C ***
(0004) // ************************************************
(0005) #define ENABLE_BIT_DEFINITIONS
(0006) #define LCD_C
(0007) #include "includes.h"
(0008) // ***** Define I/O pins ***** //
(0009) #define BIT7 0x80
(0010) #define BIT6 0x40
(0011) #define BIT5 0x20
(0012) #define BIT4 0x10
(0013) #define BIT3 0x08
(0014) #define BIT2 0x04
(0015) #define BIT1 0x02
(0016) #define BIT0 0x01
(0017) // *** Set port for LCD Data Bus 8 bit mode *** //
(0018) #define LCD_OP_PORT PORTB
(0019) #define LCD_IP_PORT PINB
(0020) #define LCD_DIR_PORT DDRB
(0021) // *** Set LCD Enable Port and Bit values *** //
(0022) //#define LCD_EN LCD_OP_PORT.2
(0023) // *** Set LCD Register Select Port and Bit values *** //
(0024) //#define LCD_RS LCD_OP_PORT.0
(0025) // *** Set LCD Read/Write Port and Bit values *** //
(0026) //#define LCD_RW LCD_OP_PORT.1
(0027) /****************************************************************/
(0028)  
(0029)  #define LCD_EN  (1 << 2)     //引脚定义
(0030)  #define LCD_RS (1 << 0)
(0031)  #define LCD_RW (1 << 1)
(0032)  
(0033)  #define lcd_set_e()  (LCD_OP_PORT |= LCD_EN)   //置位与清零
(0034)  #define lcd_set_rs() (LCD_OP_PORT |= LCD_RS)
(0035)  #define lcd_set_rw() (LCD_OP_PORT |= LCD_RW)
(0036)  #define lcd_clear_e()  (LCD_OP_PORT &= ~LCD_EN)
(0037)  #define lcd_clear_rs() (LCD_OP_PORT &= ~LCD_RS)
(0038)  #define lcd_clear_rw() (LCD_OP_PORT &= ~LCD_RW)
(0039) /****************************************************************/
(0040) 
(0041) #define LCD_ON 0x0C
(0042) #define LCD_CURS_ON 0x0D
(0043) #define LCD_OFF 0x08
(0044) #define LCD_HOME 0x02
(0045) #define LCD_CLEAR 0x01
(0046) #define LCD_NEW_LINE 0xC0
(0047) #define LCD_FUNCTION_SET 0x28
(0048) #define LCD_MODE_SET 0x06
(0049) 
(0050) 
(0051) void LCD_INIT(void)
(0052) {
(0053) LCD_DIR_PORT = 0xff; // LCD port output
_LCD_INIT:
    01B2 EF8F      LDI	R24,0xFF
    01B3 BB87      OUT	0x17,R24
(0054) LCD_OP_PORT = 0x30; // Load high-data to port
    01B4 E380      LDI	R24,0x30
    01B5 BB88      OUT	0x18,R24
(0055) lcd_clear_rw(); // Set LCD to write
    01B6 98C1      CBI	0x18,1
(0056) lcd_clear_rs(); // Set LCD to command
    01B7 98C0      CBI	0x18,0
(0057) lcd_set_e(); // Write data to LCD
    01B8 9AC2      SBI	0x18,2
(0058) asm("nop");
    01B9 0000      NOP
(0059) asm("nop");
    01BA 0000      NOP
(0060) lcd_clear_e(); // Disable LCD
    01BB 98C2      CBI	0x18,2
(0061) delay_nus(40);
    01BC E208      LDI	R16,0x28
    01BD E010      LDI	R17,0
    01BE 940E00BD  CALL	_delay_nus
(0062) lcd_clear_rw() ; // Set LCD to write

⌨️ 快捷键说明

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