📄 增量式模糊控制.lst
字号:
__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 + -