📄 mydesign.lst
字号:
0655 1FF9 ADC R31,R25
0656 8180 LDD R24,Z+0
0657 2799 CLR R25
0658 96C0 ADIW R24,0x30
0659 8399 STD Y+1,R25
065A 8388 STD Y+0,R24
065B 2722 CLR R18
065C 910000F9 LDS R16,_j
065E D1B7 RCALL _LCD_write
(0141) break;
065F C06C RJMP 0x06CC
(0142) case KEY_DEC:
(0143) value_table[j+1]--;
0660 EF8D LDI R24,0xFD
0661 E090 LDI R25,0
0662 902000F9 LDS R2,_j
0664 2433 CLR R3
0665 0E28 ADD R2,R24
0666 1E39 ADC R3,R25
0667 2DE2 MOV R30,R2
0668 2DF3 MOV R31,R3
0669 8180 LDD R24,Z+0
066A 5081 SUBI R24,1
066B 8380 STD Z+0,R24
(0144) if(value_table[j+1]==255) value_table[j+1]=9;
066C EF8D LDI R24,0xFD
066D E090 LDI R25,0
066E 91E000F9 LDS R30,_j
0670 27FF CLR R31
0671 0FE8 ADD R30,R24
0672 1FF9 ADC R31,R25
0673 8180 LDD R24,Z+0
0674 3F8F CPI R24,0xFF
0675 F449 BNE 0x067F
0676 EF8D LDI R24,0xFD
0677 E090 LDI R25,0
0678 91E000F9 LDS R30,_j
067A 27FF CLR R31
067B 0FE8 ADD R30,R24
067C 1FF9 ADC R31,R25
067D E089 LDI R24,0x9
067E 8380 STD Z+0,R24
(0145) LCD_write(j,0,value_table[j+1]+'0');
067F EF8D LDI R24,0xFD
0680 E090 LDI R25,0
0681 91E000F9 LDS R30,_j
0683 27FF CLR R31
0684 0FE8 ADD R30,R24
0685 1FF9 ADC R31,R25
0686 8180 LDD R24,Z+0
0687 2799 CLR R25
0688 96C0 ADIW R24,0x30
0689 8399 STD Y+1,R25
068A 8388 STD Y+0,R24
068B 2722 CLR R18
068C 910000F9 LDS R16,_j
068E D187 RCALL _LCD_write
(0146) break;
068F C03C RJMP 0x06CC
(0147) case KEY_FN:
(0148) Time1=value_table[1]*1000+ value_table[2]*100+value_table[3]*10+value_table[4];
0690 912000FE LDS R18,_value_table+2
0692 2733 CLR R19
0693 E604 LDI R16,0x64
0694 E010 LDI R17,0
0695 D614 RCALL mpy16s
0696 2E20 MOV R2,R16
0697 2E31 MOV R3,R17
0698 912000FD LDS R18,_value_table+1
069A 2733 CLR R19
069B EE08 LDI R16,0xE8
069C E013 LDI R17,3
069D D60C RCALL mpy16s
069E 2E40 MOV R4,R16
069F 2E51 MOV R5,R17
06A0 0C42 ADD R4,R2
06A1 1C53 ADC R5,R3
06A2 912000FF LDS R18,_value_table+3
06A4 2733 CLR R19
06A5 E00A LDI R16,0xA
06A6 E010 LDI R17,0
06A7 D602 RCALL mpy16s
06A8 0E40 ADD R4,R16
06A9 1E51 ADC R5,R17
06AA 90200100 LDS R2,0x100
06AC 2433 CLR R3
06AD 0C42 ADD R4,R2
06AE 1C53 ADC R5,R3
06AF 925000F8 STS __idata_end+1,R5
06B1 924000F7 STS __idata_end,R4
(0149) if(Time1<MIN_T) Time1=MIN_T;
06B3 2D84 MOV R24,R4
06B4 2D95 MOV R25,R5
06B5 3382 CPI R24,0x32
06B6 E0E0 LDI R30,0
06B7 079E CPC R25,R30
06B8 F430 BCC 0x06BF
06B9 E382 LDI R24,0x32
06BA E090 LDI R25,0
06BB 939000F8 STS __idata_end+1,R25
06BD 938000F7 STS __idata_end,R24
(0150) data_init(Time1);
06BF 910000F7 LDS R16,__idata_end
06C1 911000F8 LDS R17,__idata_end+1
06C3 D9FD RCALL _data_init
(0151) SaveToEEPROM(1,4,5);
06C4 E085 LDI R24,5
06C5 E090 LDI R25,0
06C6 8399 STD Y+1,R25
06C7 8388 STD Y+0,R24
06C8 E024 LDI R18,4
06C9 E001 LDI R16,1
06CA DC25 RCALL _SaveToEEPROM
(0152) goto mode_again;
06CB CD7E RJMP 0x044A
06CC 2344 TST R20
06CD F009 BEQ 0x06CF
06CE CF2B RJMP 0x05FA
06CF 2344 TST R20
06D0 F009 BEQ 0x06D2
06D1 CDA5 RJMP 0x0477
(0153) }
(0154) }
(0155) }
(0156) }
(0157) }
06D2 9626 ADIW R28,6
06D3 D558 RCALL pop_gset4
06D4 9508 RET
_PID:
flag --> R12
newDAC --> Y+0
ee --> R10
06D5 D577 RCALL push_gset4
06D6 2EA0 MOV R10,R16
06D7 2EB1 MOV R11,R17
06D8 9724 SBIW R28,4
FILE: D:\hujie\PID.c
(0001) // PID.c
(0002) // 8/7/2005 written by MrLiu
(0003) //
(0004)
(0005) #include <io8515v.h>
(0006) #include "PID.h"
(0007) #include "main.h"
(0008) #define PID_EE_VALUE_MAX 100
(0009)
(0010) void PID(int ee)
(0011) {
(0012) long newDAC;
(0013) int flag=1;
06D9 E081 LDI R24,1
06DA E090 LDI R25,0
06DB 2EC8 MOV R12,R24
06DC 2ED9 MOV R13,R25
(0014)
(0015) if(ee>PID_EE_VALUE_MAX) ee=PID_EE_VALUE_MAX;
06DD E684 LDI R24,0x64
06DE 158A CP R24,R10
06DF 059B CPC R25,R11
06E0 F414 BGE 0x06E3
06E1 2EA8 MOV R10,R24
06E2 2EB9 MOV R11,R25
(0016) if(ee<-PID_EE_VALUE_MAX) ee=-PID_EE_VALUE_MAX;
06E3 2D8A MOV R24,R10
06E4 2D9B MOV R25,R11
06E5 398C CPI R24,0x9C
06E6 EFEF LDI R30,0xFF
06E7 079E CPC R25,R30
06E8 F424 BGE 0x06ED
06E9 E98C LDI R24,0x9C
06EA EF9F LDI R25,0xFF
06EB 2EA8 MOV R10,R24
06EC 2EB9 MOV R11,R25
(0017) newDAC=(long)DAC-((long)ee<<2);
06ED E082 LDI R24,2
06EE E090 LDI R25,0
06EF 2C2A MOV R2,R10
06F0 2C3B MOV R3,R11
06F1 2444 CLR R4
06F2 FC37 SBRC R3,7
06F3 9440 COM R4
06F4 2455 CLR R5
06F5 FC47 SBRC R4,7
06F6 9450 COM R5
06F7 938A ST R24,-Y
06F8 2D02 MOV R16,R2
06F9 2D13 MOV R17,R3
06FA 2D24 MOV R18,R4
06FB 2D35 MOV R19,R5
06FC D5A1 RCALL lsl32
06FD 90200106 LDS R2,_DAC
06FF 90300107 LDS R3,_DAC+1
0701 2444 CLR R4
0702 2455 CLR R5
0703 1A20 SUB R2,R16
0704 0A31 SBC R3,R17
0705 0A42 SBC R4,R18
0706 0A53 SBC R5,R19
0707 2FEC MOV R30,R28
0708 2FFD MOV R31,R29
0709 8220 STD Z+0,R2
070A 8231 STD Z+1,R3
070B 8242 STD Z+2,R4
070C 8253 STD Z+3,R5
(0018) if (newDAC>65535) DAC=65535;
070D EF4F LDI R20,0xFF
070E EF5F LDI R21,0xFF
070F E060 LDI R22,0
0710 E070 LDI R23,0
0711 2FEC MOV R30,R28
0712 2FFD MOV R31,R29
0713 8020 LDD R2,Z+0
0714 8031 LDD R3,Z+1
0715 8042 LDD R4,Z+2
0716 8053 LDD R5,Z+3
0717 1542 CP R20,R2
0718 0553 CPC R21,R3
0719 0564 CPC R22,R4
071A 0575 CPC R23,R5
071B F43C BGE 0x0723
071C EF8F LDI R24,0xFF
071D EF9F LDI R25,0xFF
071E 93900107 STS _DAC+1,R25
0720 93800106 STS _DAC,R24
0722 C028 RJMP 0x074B
(0019) else if (newDAC<0) DAC=0;
0723 E040 LDI R20,0
0724 E050 LDI R21,0
0725 E060 LDI R22,0
0726 E070 LDI R23,0
0727 2FEC MOV R30,R28
0728 2FFD MOV R31,R29
0729 8020 LDD R2,Z+0
072A 8031 LDD R3,Z+1
072B 8042 LDD R4,Z+2
072C 8053 LDD R5,Z+3
072D 1624 CP R2,R20
072E 0635 CPC R3,R21
072F 0646 CPC R4,R22
0730 0657 CPC R5,R23
0731 F43C BGE 0x0739
0732 2422 CLR R2
0733 2433 CLR R3
0734 92300107 STS _DAC+1,R3
0736 92200106 STS _DAC,R2
0738 C012 RJMP 0x074B
(0020) else DAC=newDAC&0x0ffff;
0739 EF4F LDI R20,0xFF
073A EF5F LDI R21,0xFF
073B E060 LDI R22,0
073C E070 LDI R23,0
073D 2FEC MOV R30,R28
073E 2FFD MOV R31,R29
073F 8020 LDD R2,Z+0
0740 8031 LDD R3,Z+1
0741 8042 LDD R4,Z+2
0742 8053 LDD R5,Z+3
0743 2224 AND R2,R20
0744 2235 AND R3,R21
0745 2246 AND R4,R22
0746 2257 AND R5,R23
0747 92300107 STS _DAC+1,R3
0749 92200106 STS _DAC,R2
(0021) }
074B 9624 ADIW R28,4
074C D4DF RCALL pop_gset4
074D 9508 RET
FILE: D:\hujie\1602B_LCD.c
(0001) // 1602B_LCD.c
(0002) //
(0003)
(0004) /**********************************************************
(0005) /* TC1602B LCD DISPLAY
(0006) /* LCD_write函数功能:当command=0时,向LCD写入数据,否则向LCD写
(0007) 入命令
(0008) /* LCD第一行显示寄存器地址:0X80-0X8F
(0009) /* LCD第二行显示寄存器地址:0XC0-0XCF
(0010) /* 光标命令:
(0011) /* LCD_write_char(0x0e,0); //光标开
(0012) /* LCD_write_char(0x0d,0); //光标所在字符闪烁
(0013) /* LCD_write_char(0x0c,0); //光标关
(0014) **********************************************************/
(0015) #include <io8515v.h>
(0016) #include <macros.h>
(0017) #include "1602LCD.h"
(0018)
(0019) void LCD_init(void)
(0020) {
(0021) LCD_CTRL_DDR|=LCD_RS | LCD_EN | LCD_RW;
_LCD_init:
074E B387 IN R24,0x17
074F 608E ORI R24,0xE
0750 BB87 OUT 0x17,R24
(0022) LCD_DATA_DDR|=LCD_DATA;
0751 B387 IN R24,0x17
0752 6F80 ORI R24,0xF0
0753 BB87 OUT 0x17,R24
(0023) delay_nms(100);
0754 E604 LDI R16,0x64
0755 E010 LDI R17,0
0756 D135 RCALL _delay_nms
(0024) LCD_write_char(0x28,0); //功能设置
0757 2722 CLR R18
0758 2733 CLR R19
0759 E208 LDI R16,0x28
075A E010 LDI R17,0
075B D021 RCALL _LCD_write_char
(0025) delay_nus(100);
075C E604 LDI R16,0x64
075D E010 LDI R17,0
075E D115 RCALL _delay_nus
(0026) LCD_write_char(0x06,0); //显示光标移动设置
075F 2722 CLR R18
0760 2733 CLR R19
0761 E006 LDI R16,6
0762 E010 LDI R17,0
0763 D019 RCALL _LCD_write_char
(0027) delay_nus(100);
0764 E604 LDI R16,0x64
0765 E010 LDI R17,0
0766 D10D RCALL _delay_nus
(0028) LCD_write_char(0x01,0); //显示清屏
0767 2722 CLR R18
0768 2733 CLR R19
0769 E001 LDI R16,1
076A E010 LDI R17,0
076B D011 RCALL _LCD_write_char
(0029) delay_nms(2);
076C E002 LDI R16,2
076D E010 LDI R17,0
076E D11D RCALL _delay_nms
(0030) LCD_write_char(0x0C,0); //显示开
076F 2722 CLR R18
0770 2733 CLR R19
0771 E00C LDI R16,0xC
0772 E010 LDI R17,0
0773 D009 RCALL _LCD_write_char
(0031) delay_nus(100);
0774 E604 LDI R16,0x64
0775 E010 LDI R17,0
(0032) }
0776 C0FD RJMP _delay_nus
(0033)
(0034) void LCD_en_write(void) //EN端产生一个高电平脉冲,写LCD
(0035) {
(0036) LCD_EN_PORT |= LCD_EN;
_LCD_en_write:
0777 9AC3 SBI 0x18,3
(0037) delay_nus(5);
0778 E005 LDI R16,5
0779 E010 LDI R17,0
077A D0F9 RCALL _delay_nus
(0038) LCD_EN_PORT &= ~LCD_EN;
077B 98C3 CBI 0x18,3
(0039) }
077C 9508 RET
_LCD_write_char:
data_temp --> R22
command_temp --> R20
data --> R12
command --> R10
077D D4CF RCALL push_gset4
077E 2EC2 MOV R12,R18
077F 2ED3 MOV R13,R19
0780 2EA0 MOV R10,R16
0781 2EB1 MOV R11,R17
(0040)
(0041) /****************************************************************
(0042) /* LCD_write_char : 英文字符串显示函数
(0043) /* 输入参数:*s :英文字符串指针?
(0044) X、Y : 显示字符串的位置,X:0-15,Y:0-1
(0045) LCD第一行显示寄存器地址:0X80-0X8F
(0046) LCD第一行显示寄存器地址:0XC0-0XCF
(0047) *****************************************************************/
(0048) void LCD_write_char(unsigned command,unsigned data)
(0049) {
(0050) unsigned command_temp,data_temp;
(0051)
(0052) command_temp = command;
0782 2D4A MOV R20,R10
0783 2D5B MOV R21,R11
(0053) data_temp = data;
0784 2D6C MOV R22,R12
0785 2D7D MOV R23,R13
(0054) LCD_wait_Ready();
0786 D052 RCALL _LCD_wait_Ready
(0055) LCD_RW_PORT &= ~LCD_RW; //RW=0
0787 98C2 CBI 0x18,2
(0056) if (command == 0)
0788 3040 CPI R20,0
0789 0745 CPC R20,R21
078A F471 BNE 0x0799
(0057) {
(0058) LCD_RS_PORT |= LCD_RS; //RS=1
078B 9AC1 SBI 0x18,1
(0059) LCD_DATA_PORT &= 0X0F;
078C B388 IN R24,0x18
078D 708F ANDI R24,0xF
078E BB88 OUT 0x18,R24
(0060) LCD_DATA_PORT |= data_temp&0xf0; //send high 4bit
078F 2F86 MOV R24,R22
0790 2F97 MOV R25,R23
0791 7F80 ANDI R24,0xF0
0792 7090 ANDI R25,0
0793 B228 IN R2,0x18
0794 2433 CLR R3
0795 2A28 OR R2,R24
0796 2A39 OR R3,R25
0797 BA28 OUT 0x18,R2
(0061) }
0798 C00D RJMP 0x07A6
(0062) else
(0063) {
(0064) LCD_RS_PORT &= ~LCD_RS; //RS
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -