专注电子技术学习与研究
当前位置:单片机教程网 >> MCU设计实例 >> 浏览文章

基于CH372的单片机波形采集程序

作者:佚名   来源:本站原创   点击数:  更新时间:2013年08月11日   【字体:

电路图:

 ;*************************************
上位机软件及pcb文件下载地址: http://www.51hei.com/bbs/dpj-19233-1.html 
;STC89C51RC单片机,6M晶振 
 ;P0.7为红外输入
 ;P0.6为无线电信号输入
 ;P0.5为外部信号输入
 ;*************************************
 CS EQU P0.0 
 A0 EQU P0.1 
 DX EQU P0.3 
 CE EQU P0.4 
 GET EQU P0.2 
 ORG 0000H
 LJMP AMIT
 ORG 0030H
AMIT: MOV SP,#0FBH
 MOV P0,#0FFH
 MOV P1,#0FFH
 MOV P2,#0FFH
 MOV P3,#0FFH
 MOV R0,#08H
 MOV R7,#68
 MOV R2,#00H 
 CLR P0.7
 MOV TMOD,#01H
 MOV TL0,#00H
 MOV TH0,#00H
 CLR TR0
 ;********CH372复位*********
FW: MOV A,#05H
 MOV P2,A
 CLR CS
 SETB A0 ;写复位命令
 CLR DX
 NOP
 NOP ;50NS就可以
 SETB DX
 LCALL DYL
JSCS: JB GET,$
 MOV A,#22H ;接受中断数据
 ACALL XML ;调用CH372写命令
 ACALL DSJ ;调用CH372读数据
 CJNE A,#01H,G1
 AJMP OUT1
G1: CJNE A,#0F2H,G2
 ACALL OUT2 ;如果CH372返回0F2则读端口2的命令
 AJMP CHKOF
G2: CJNE A,#0F5H,G3
 AJMP PEND
G3: CJNE A,#0F6H,G4
 AJMP LEEP
G4: CJNE A,#0F9H,G5
 ACALL INO
 AJMP JSCS
G5: CJNE A,#0FAH,JSCS
 ACALL INO
 AJMP JSCS
 ;*******采集子程序********
CHKOF: CJNE A,#0A1H,F1 ;捕获输入信号。
 AJMP TIM
F1: CJNE A,#0A2H,F2 ;如果收到A2则复位主程序。
 AJMP AMIT
F2: CJNE A,#0A3H,F3 ;红外输入。
 AJMP HWX
F3: CJNE A,#0A4H,F4 ;无线电信号输入。
 AJMP WXD
F4: CJNE A,#0A5H,JSCS ;外部信号输入。
 SETB P0.7
 SETB P0.6
 CLR P0.5
 MOV R2,#02H
 AJMP JSCS
HWX: SETB P0.5
 SETB P0.6
 CLR P0.7
 MOV R2,#00H
 AJMP JSCS
WXD: SETB P0.5
 SETB P0.7
 CLR P0.6
 MOV R2,#01H
AML: AJMP JSCS
 ;***********判断输入端***********
TIM: CJNE R2,#0F1H,TI1
 AJMP WTT
TI1: CJNE R2,#0F2H,TI2
 AJMP UTT
TI2: CJNE R2,#0F0H,AML
 ;***********数据采集1红外输入************
CT: JNB GET,QH_1
 JB P3.7,CT
 SETB TR0
THO: JNB P3.7,$
 CLR TR0
 MOV A,TH0
 MOV R1,TL0
 MOV TL0,#01H
 MOV TH0,#00H
 SETB TR0
 MOV @R0,A
 INC R0
 MOV A,R1
 MOV @R0,A
 JB P3.7,$
 CLR TR0
 MOV A,TH0
 MOV R1,TL0
 MOV TL0,#01H
 MOV TH0,#00H
 SETB TR0
 INC R0
 MOV @R0,A
 INC R0
 MOV A,R1
 MOV @R0,A
 INC R0
 DJNZ R7,THO
 CLR TR0
 AJMP FZCX
QH_1: AJMP JSCS
 ;***********数据采集2无线输入************
WTT: JNB GET,QH_2
 JB P3.6,WTT
 SETB TR0
THA: JNB P3.6,$
 CLR TR0
 MOV A,TH0
 MOV R1,TL0
 MOV TL0,#01H
 MOV TH0,#00H
 SETB TR0
 MOV @R0,A
 INC R0
 MOV A,R1
 MOV @R0,A
 JB P3.6,$
 CLR TR0
 MOV A,TH0
 MOV R1,TL0
 MOV TL0,#01H
 MOV TH0,#00H
 SETB TR0
 INC R0
 MOV @R0,A
 INC R0
 MOV A,R1
 MOV @R0,A
 INC R0
 DJNZ R7,THA
 CLR TR0
 AJMP FZCX
QH_2: AJMP JSCS
 ;************数据采集3外部输入************
UTT: JNB GET,QH_2
 JB P3.5,UTT
 SETB TR0
THB: JNB P3.5,$
 CLR TR0
 MOV A,TH0
 MOV R1,TL0
 MOV TL0,#01H
 MOV TH0,#00H
 SETB TR0
 MOV @R0,A
 INC R0
 MOV A,R1
 MOV @R0,A
 JB P3.5,$
 CLR TR0
 MOV A,TH0
 MOV R1,TL0
 MOV TL0,#01H
 MOV TH0,#00H
 SETB TR0
 INC R0
 MOV @R0,A
 INC R0
 MOV A,R1
 MOV @R0,A
 INC R0
 DJNZ R7,THB
 CLR TR0
 ;*************数据发送***********
FZCX: MOV R7,#122
 MOV R0,#08H
ZDDS: MOV A,#2AH ;CH372中断命令通知PC机
 ACALL XML
 NOP
 NOP
 MOV A,#02H ;可输入8个字节
 ACALL XSJ
 MOV A,@R0 ;送入要上传的数据
 ACALL XSJ
 INC R0
 MOV A,@R0 ;送入要上传的数据
 ACALL XSJ
 INC R0
 ACALL FYL
 MOV A,#22H ;接受中断数据
 ACALL XML
 ACALL DSJ
 ACALL FYL
 ACALL INO
 DJNZ R7,ZDDS
 MOV R0,#08H
 MOV R7,#61
 AJMP JSCS
 ;********CH372读出数据**********
OUT2: MOV A,#28H ;读端口2的命令
 ACALL XML
 ACALL DSJ
 NOP
 ACALL DSJ
 NOP
 RET
 ;****************
OUT1: NOP
PEND: NOP
LEEP: NOP
 AJMP AMIT
 ;******释放缓冲区子程序*****
INO: MOV A,#2BH ;释放当前USB 缓冲区
 ACALL XML
 NOP
 NOP
 RET
 ;*******写入数据子程序*******
XSJ: CLR A0 ;写入数据
 NOP
 NOP ;延时2US,根据主频来确定NOP的值
 MOV P2,A
 NOP
 NOP ;50NS就可以
 SETB DX
 NOP
 NOP ;延时1.2US根据主频调整
 RET
 ;*********延时子程序******
DYL: MOV R6,#100
D1: MOV R5,#50
 DJNZ R5,$
 DJNZ R6,D1
 RET
FYL: MOV R6,#2
FD1: MOV R5,#68
 DJNZ R5,$
 DJNZ R6,FD1
 RET
 END

关闭窗口

相关文章