📄 有效值采集.asm
字号:
ORG 0000H
LJMP START
ORG 0003H ;中断INT0入口
LJMP INT0
ORG 0023H
LJMP RECE
START: MOV SP,#70H
SETB P3.5 ;上电后指示灯亮
MOV IE,#90H ;EA=1,ES=1,CPU开串行中断
MOV SCON,#50H
MOV TMOD,#20H ;设置定时器T1为方式2
MOV TH1,#0FDH ;设置波特率为9600b/s
MOV TL1,#0FDH
MOV R6,#00H
SETB TR1 ;定时器T1启动
WAIT1: NOP
CJNE R6,#01H,WAIT1
LJMP CAIJI
RECE: CLR EA
PUSH A
MOV A,SBUF ;接收到一个数据
CLR RI
CJNE A,#43H,OUT ;是否收到传送信号"C"
MOV R6,#01H ;收到"C"进入采集程序
OUT: POP A
SETB EA ;开中断
RETI
CAIJI: MOV TCON,#01H ;IT0=1,边沿触发
MOV R2,#01H
MOV R7,#00H
MOV R0,#08H
CLR P2.0 ;ST=0
CLR P3.4 ;OE=0
CLR P2.2 ;ALE=0
CLR P2.7 ;片选
CLR P3.3 ;选通4路,电流正半波
CLR P3.5
SETB P2.1
CAIJI1: SETB P2.2 ;通路地址锁存
CLR P2.2 ;
SETB P2.0 ;ADC0809输出端清零
CLR P2.0 ;启动A/D转换
MOV IE,#81H ;
WAIT: NOP ;等待中断
JNB RI,WAIT2 ;
CLR RI ;
MOV A,SBUF ;
CJNE A,#54H,WAIT2 ;
LJMP START ;
WAIT2: CJNE R7,#00H,BJ00 ;
LJMP WAIT
INT0: CLR EA
PUSH A
SETB P3.4 ;输出使能有效
MOV P1,#0FFH
NOP
NOP
LCALL D5ms ;0.5ms延时
MOV A,P1
MOV @R0,A ;数据转存
CLR P3.4 ;关闭输出
CJNE R0,#3AH,C1
MOV R7,#01H
LJMP SHAN
C1: INC R0
INT1: CJNE R2,#01H,INT2
CLR P3.3 ;选通4路,电流正半波
CLR P3.5
SETB P2.1
SETB P2.2 ;通路地址锁存
CLR P2.2
LJMP C0
INT2: CLR P3.3 ;选通0路,电压正半波
CLR P3.5
CLR P2.1
SETB P2.2 ;通路地址锁存
CLR P2.2
C0: SETB P2.0 ;ADC0809再次采集
CLR P2.0
SETB EA
SHAN: NOP
POP A
RETI
BJ00: NOP
MOV R0,#08H
CJNE R2,#01H,J1
B0: CJNE R0,#39H,B1 ;判断是否比较完
LJMP J1
B1: CLR C
MOV A,@R0
INC R0
MOV 7AH,@R0
CJNE A,7AH,B2
LJMP B0
B2: JNC B0 ;C=0则A>R0,转B0
B3: CJNE R0,#39H,B4
LJMP J1
B4: MOV A,@R0 ;A<R0,把R0赋给A
CLR C
INC R0
MOV 7AH,@R0
CJNE A,7AH,B5
LJMP B0
B5: JNC B6 ;C=0则A>R0,转B6
LJMP B3
B6: DEC R0
MOV @R0,#00H ;把毛刺赋0
INC R0 ;指向下一单元
LJMP B0
J1: MOV R0,#0AH
MOV A,@R0
BJ: CJNE R0,#38H,BJ1
LJMP BJ2
BJ1: INC R0
MOV 7AH,@R0
CJNE A,7AH,BJ3
LJMP BJ
BJ3: JNC BJ ;A>R0,返回继续比较
MOV A,@R0 ;A<R0,将R0赋给A
LJMP BJ
BJ2: NOP
MOV TMOD,#20H
MOV SCON,#50H
MOV TH1,#0FDH ;设置波特率为9600b/s
MOV TL1,#0FDH
SETB TR1
MOV SBUF,A
JNB TI,$
CLR TI ;发送完毕
LCALL SH2
CJNE R2,#01H,ZH ;R2=0,采集的是电压值,
MOV R2,#00H ;采集电压
MOV R7,#00H
MOV R0,#08H
CLR P2.0 ;ST=0
CLR P3.4 ;OE=0
CLR P2.2 ;ALE=0
CLR P2.7 ;片选
CLR P3.3 ;选通0路,,输入电压
CLR P3.5
CLR P2.1
LJMP CAIJI1
ZH: LCALL D200ms
LCALL D200ms
LCALL D200ms
LCALL D200ms
LCALL D200ms
LJMP CAIJI
D200ms: MOV R3,#0C4H ;延时200ms
DL2: MOV R4,#0FFH
DL1: NOP
NOP
NOP
DJNZ R4,DL1
DJNZ R3,DL2
RET
D5ms: MOV R5,#49H
DL3: NOP
NOP
DJNZ R5,DL3
RET
SH2: CLR P3.5
LCALL D200ms ;闪2次
LCALL D200ms
SETB P3.5
LCALL D200ms
LCALL D200ms
CLR P3.5
LCALL D200ms
LCALL D200ms
SETB P3.5
LCALL D200ms
LCALL D200ms
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -