📄 波形采集.asm
字号:
ORG 0000H
LJMP START
ORG 0003H ;中断INT0入口
LJMP INT0
ORG 0023H
LJMP RECE
START: SETB P3.5 ;上电后指示灯亮
MOV IE,#90H ;EA=1,ES=1,CPU开串行中断
MOV SCON,#50H ;设置串行口方式1,允许串行接收
MOV TMOD,#20H ;设置定时器T1为方式2
MOV TH1,#0FDH ;设置波特率为9600b/s
MOV TL1,#0FDH
MOV R6,#00H
SETB TR1 ;定时器T1启动
WAIT1: NOP ;判断R6=01H,则顺序执行采集程序,否则循环等待
CJNE R6,#01H,WAIT1
LJMP CAIJI
RECE: CLR EA
PUSH A
MOV A,SBUF ;接收到一个数据
CLR RI
CJNE A,#43H,OUT1 ;是否收到传送数据信号"C"
CLR P3.5 ;收到"C"就闪烁两次
LCALL D200ms
LCALL D200ms
SETB P3.5
LCALL D200ms
LCALL D200ms
CLR P3.5
LCALL D200ms
LCALL D200ms
SETB P3.5
LCALL D200ms
LCALL D200ms
MOV R6,#01H ;收到"C"将R6置1,跳出中断,进入采集程序
LJMP OUT
OUT1: CJNE A,#53H,OUT
CLR P3.5 ;收到"S"就闪烁一次,
LCALL D200ms
LCALL D200ms
SETB P3.5
LCALL D200ms
LCALL D200ms
LCALL SEND ;调用发送32K外部存储器数据子程序
OUT: POP A
SETB EA ;开中断
RETI
CAIJI: MOV DPTR,#0000H ;DPTR=0,偶数地址存0路数据,奇数地址存1路数据
MOV TCON,#01H ;IT0=1,边沿触发方式,负跳变
MOV R2,#00H
MOV R7,#00H
CLR P3.5
LCALL D200ms
SETB P3.5
LCALL D200ms
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
MOV R2,#01H
SETB P2.2 ;锁存0路
CLR P2.2
SETB P2.0 ;ADC0809输出端清零
CLR P2.0 ;启动A/D转换
MOV IE,#81H ;开中断INT0,EA=1,EX0=1
WAIT: NOP ;等待中断
CJNE R7,#00H,TRAN
LJMP WAIT
INT0: CLR EA
SETB P3.4 ;输出使能有效
MOV P1,#0FFH
NOP
NOP
MOV A,P1
MOVX @DPTR,A ;数据转存
CLR P3.4 ;关闭输出
MOV A,DPH ;判断是否存满
CJNE A,#7FH,ST
MOV A,DPL
CJNE A,#0FFH,ST
MOV R7,#0FFH
LJMP SHAN
ST: INC DPTR
Zero: CJNE R2,#00H,First
CLR P3.3 ;选通0路,电压正半波
CLR P3.5
CLR P2.1
SETB P2.2 ;通路地址锁存
CLR P2.2
MOV R2,#01H
LJMP NEXT
First: CJNE R2,#01H,Second
SETB P3.3 ;选通1路,电压负半波
CLR P3.5
CLR P2.1
SETB P2.2 ;通路地址锁存
CLR P2.2
MOV R2,#02H
LJMP NEXT
Second: CJNE R2,#02H,Third
CLR P3.3 ;选通4路,电流正半波
CLR P3.5
SETB P2.1
SETB P2.2 ;通路地址锁存
CLR P2.2
MOV R2,#03H
LJMP NEXT
Third:
SETB P3.3 ;选通5路,电流负半波
CLR P3.5
SETB P2.1
SETB P2.2 ;通路地址锁存
CLR P2.2
MOV R2,#00H
NEXT:
SETB P2.0 ;ADC0809再次采集
CLR P2.0
SETB EA
SHAN: NOP
RETI
TRAN: SETB P3.5
LCALL D200ms
CLR P3.5
LCALL D200ms
SETB P3.5
LJMP START
;发送1字节子程序
SEND1: CLR ES
MOV SBUF,A
JNB TI,$
CLR TI
SETB ES
RET
;发送32K外部存储器数据子程序
SEND: MOV DPTR,#0000H ;首地址
S1: MOVX A,@DPTR
LCALL SEND1 ;调发送1字节子程序
MOV R2,DPH ;判断是否传完
CJNE R2,#07FH, NEXT1
MOV R3,DPL
CJNE R3,#0FFH,NEXT1
CLR P3.5 ;发送完灯熄灭
LJMP OVER
NEXT1: INC DPTR
LJMP S1
OVER: RET
D200ms: MOV R0,#0C4H ;延时200ms
DL2: MOV R1,#0FFH
DL1: NOP
NOP
NOP
DJNZ R1,DL1
DJNZ R0,DL2
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -