请高手看看我做的实验台的数据采集系统,看看下面的程序哪里有问题??????? 图一,为硬件电路图, 图二,为计算机方面的软件界面(用VB做的)
;====================== ; 设置波特率 ;====================== ORG 0000H AJMP MAIN ORG 0003H AJMP ADZD MAIN: MOV TMOD,#20H ;令定时器1工作于模式2 MOV TH1,#0FDH MOV TL1,#0FDH ;设定计数值,令波特率为9600 SETB TR1 ;启动定时器1 SETB IT0 ;为边沿触发方式 SETB EA ;开中断 SETB EX0 ;允许中断 ;====================== ; 接收数据 ;====================== MOV SCON,#70H ;设定串行端口为模式1 LOOP: CLR RI ;清除接收中断标志位(开始接收数据) JNB RI,$ ;等待数据接收完毕
;====================== ; 判断哪个按钮被按下 ;====================== MOV A,SBUF ;接收到的数据(即代码)存入A内
NEXT1: CJNE A,#'1',NEXT0 ;若代码为1(即“开始”按钮被按下) AJMP ADZH ;则调用AD转换模块
NEXT0: CJNE A,#'0',DONT ;若代码为0(即“复位”按钮被按下) AJMP ALLOFF ;则跳去执行ALLOFF
DONT: AJMP LOOP ;重复执行程序
;==================================================== ; 执行相应的程序 ;====================================================
;AD转换模块 ADZH: MOV R0,#30H ;存数据首地址 SETB P3.7 ;经与非门后使R/C=0 CLR P3.6 ;经与非门后使CE=1 MOV DPTR,#3FFFH ;使AO=0,CS=0,启动12位转换 MOVX @DPTR,A ;启动AD转换 HERE: AJMP HERE ;等待中断 ADZD: PUSH PSW PUSH DPH PUSH DPL PUSH ACC ;保护现场 CLR P3.7 ;经与非门后使R/C=1 MOV DPTR,#3FFFH ;允许高8位并行输出(CS=0,R/C=1,AO=0) MOVX A,@DPTR ;读高8位 MOV @R0,A ;高8位存入RAM单元 MOV DPTR,#7FFFH ;允许低4位加上4个0输出(CS=0,R/C=1,AO=1) MOVX A,@DPTR ;读低4位 ANL A,#0FH ;屏蔽高4位随机数据 INC R0 ;数据地址加1 MOV @R0,A ;存低4位 POP ACC ;恢复现场 POP DPL POP DPH POP PSW RETI AJMP SENDON
;复位按钮的相应程序 ALLOFF: MOV P0,#00H ;数据清零 AJMP SENDALL ;发送代码1
;==================================================== ; 发送数据 ;==================================================== ;发送代码0 SENDALL: CLR TI ;清除发送中断标志位(准备发送数据) MOV SBUF,#'0' ;发送代码2 JNB TI,$ ;等待数据发送完毕 AJMP LOOP ;重复执行程序
;发送代码1 SENDON: CLR TI MOV SBUF,#'1' JNB TI,$ AJMP LOOP
END
[此贴子已经被admin于2009-10-31 14:33:10编辑过]
|