📄 main.asm
字号:
;Address macro definition
TIMER0_ADDRESS EQU 0B0H ; 8253芯片 定时器0
TIMER1_ADDRESS EQU 0B1H ; 8253芯片 定时器1
TIMER2_ADDRESS EQU 0B2H ; 8253芯片 定时器2
TIMERCONTROL_ADDRESS EQU 0B3H ; 8253芯片 定时控制器
TIMER0_MODE EQU 0F4H ;1111 X100
TIMER0_COUNTER EQU 0FFFFH ;
INTERRUPT0_ADDRESS EQU 0D8H ; 8259芯片
INTERRUPT1_ADDRESS EQU 0D9H ; 8259芯片
ICW1 EQU 1BH ; 高电平触发,单片工作
ICW2 EQU 08H ; 中断类型码为08H,和09H
ICW3 EQU 00H ; 没有从片
ICW4 EQU 06H ; 一般EOI方式
OCW1 EQU 0FCH ; 屏蔽IR2~IR7 A0=1
OCW2 EQU 20H ; 0010 0000 一般EOI命令 A0=0
OCW3 EQU 08H ; 0000 1X0X A0=1
AD_SELLECT_ADDRESS EQU 0E8H ; 选择MAX1246芯片(A/D转换器)
AD_CANCEL_ADDRESS EQU 0F0H ; 取消MAX1246的片选 (A/D转换器)
KEY_SEG_ADDRESS EQU 70H ; CH451芯片(键盘&LED控制器)
CH451Isolate EQU 0FH ; 用于在AD输入时,屏蔽CH451的端口
CH451DCLKPre EQU 85H ; 传送准备电平
CH451DCLKSend EQU 84H ; 传送电平
CH451DCLKPreCMD EQU 87H ; 传送准备电平 (命令)
CH451DCLKSendCMD EQU 85H ; 传送电平 (命令)
FEED_DOG_DCLK EQU 8EH ; 变化DCLK以清除看门狗的计数
CH451LOAD EQU 8BH ; 将LOAD脚置0(and方式)在让其自然上拉
FUNC_KEY_PUSH EQU 40H ; 功能选择键被按下
SHIFT_KEY_PUSH EQU 41H ; 移位键被按下,循环设定
ROTATE_KEY_PUSH EQU 42H ; 循环累加键被按下,对某一位进行循环累加
ENTER_KEY_PUSH EQU 43H ; 确定键被按下,输入设定
;command word macro definition
CH451_INITIAL_CMD EQU 4007H ;设定系统参数:010000000[WDOG][KEYB][DISP]B
; WDOG:1(启用),KEYB:1(启用),DISP:1(启用)
SEG_INITIAL_CMD EQU 50E4H ;设定显示参数:0101[MODE][LIMIT][INTENSITY]B
;MODE:1(BCD 译码方式),LIMIT:6(6数码管),INTENSITY:4(占空比4/16)
SEG_FLASH_CMD EQU 6000H ;设定闪烁控制:0110[D7S][D6S][D5S][D4S][D3S][D2S][D1S][D0S]B
;D7S~D0S 分别对应于8 个字驱动DIG7~DIG0.将相应的位置1 则闪烁
LOAD_SEG_CMD EQU 1000H ;加载字数据:1[DIG_ADDR][DIG_DATA]B
;DIG_DATA:8位字数据,。DIG_ADDR:3位地址,000B~111B对应于DIG0~DIG7引脚
INITIAL8259 MACRO
ENDM
MOV AL,76H ;INITIAL8253
OUT 0B3H,AL
MOV AL,
OUT 0B1H,AL
MOV AL,
OUT 0B1H,AL
MOV AL,0BAH
OUT 0B3H,AL
PID MACRO CURRENT,OBJECT,RESULT,LIMIT_1,LIMIT_2
PUSH AX
PUSH BX
MOV AX, CURRENT
SUB AX, OBJECT
MOV ERROR,AX ;X(0)=ERROR-ERROR_1
SUB AX,ERROR_1
MOV X[0],AX
MOV AX,ERROR ;X(1)=ERROR-2*ERROR_1+ERROR_2
MOV BX,ERROR_1
SAL BX,1
SUB AX,BX
ADD AX,ERROR_2
MOV X[2],AX
MOV AX,ERROR ;X(2)= ERROR
MOV X[4],AX
MOV AX,Kp ;计算PID结果RESULT=KP*X(0)+KD*X(1)+KI*X(3)
IMUL X[0]
MOV BX,AX
MOV AX,Kd
IMUL X[2]
ADD BX,AX
MOV AX,Ki
IMUL X[4]
ADD AX,BX ;对RESULT增量进行数据处理,防止越界。
CMP AX,LIMIT_1
JL LOOP1
MOV AX,LIMIT_1
JMP DONE1
LOOP1 MOV BX, LIMIT_1
NEG BX
CMP AX,BX
JG DONE1
MOV AX,BX
JMP DONE1
DONE1 ADD RESULT,AX
MOV AX,RESULT ;对RESULT进行数据处理,防止越界
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -