|
题目:电压检测系统
概述:1、用一个单片机和DA转换组成一个随机电压发生单元(0~5V);
2、另一个单片机和AD转换组成数据采集单元;
3、通过串行接口将采集的数据传到上位机中,需要编写上位计算机程序,对采集的数据进行处理,如显示当前值、画出一定时间内的记录曲线等。
说明:1、这里是一个仿真系统,需要安装虚拟串口工具。proteus的串行接口对应虚拟串口com3,VB程序对应虚拟串口com4。
1200BSP,无校验位,8个数据位,1个停止位;单片机系统采用的是6M晶振。
2、上位机程序用VB编写,数据采集程序用汇编语言编写,随机电压发生程序用C语言编写。
3、上位机程序可直接运行“工程1.exe”,如果在VB6.0的机器上可以看见原代码。
4、如果提示缺少MSCOMM32.OCX,可将文件夹中所带的MSCOMM32.OCX复制粘帖到c:\windows\system32\下即可(不会对您的系统造成任何危害)。
下面是下位机的汇编程序:
- ;ADCS BIT P3.5 ;使能接口
- ;ADCLK BIT P3.6 ;时钟接口
- ;ADDO BIT P3.7 ;数据输出接口(复用)
- ;ADDI BIT P3.7 ;数据输入接口
- ORG 0000H
- LJMP INITOUT
- ORG 0023H
- LJMP SERVE
- ORG 30H
- INITOUT:
- MOV SP,#60H ;栈顶地址
- MOV TMOD,#20H ;定时器1初始化
- MOV TH1,#0F3H ;设置波特率为1200MHz,6MHz的晶振
- MOV TL1,#0F3H ;
- MOV SCON,#50H ;串口初始化为可以接收
- MOV PCON,#00H ;波特率不倍增
- SETB TR1 ;启动定时器
- SETB EA ;开中断
- SETB ES ;允许串口中断
- MainProgram:
- NOP ;主程序主要是等中断
- NOP
- LCALL CONV
- SJMP Mainprogram
- ;=======================================================
- SERVE:
- PUSH PSW ;将程序状态字压入堆栈
- PUSH ACC ;将累加器压入堆栈
- CLR EA ;关闭系统中断
- CLR RI ;清除中断标志位
- MOV A,SBUF
- CJNE A,#01,NEXTI;判断,01号单片机
- MOV SBUF,31H
- wait:jnb ti,wait
- clr ti
- CLR RI ;清除中断标志位
- SETB EA ;打开系统中断
- POP ACC ;累加器出栈
- POP PSW ;程序状态字出栈
- NEXTI:RETI ;中断程序返回
- ;==============================================
-
- CONV:MOV 30H,#02H;方式字选择
- MOV R0,#31H;数据存储首地址
- LCALL ADC0832;调用A/D转换子程序
- RET
- ;========================================
- ADC0832:SETB P3.7 ;初始化通道选择
- NOP
- NOP
- CLR P3.5 ;拉低/CS端
- NOP
- NOP
- SETB P3.6 ;拉高CLK端
- NOP
- NOP
- CLR P3.6 ;拉低CLK端,形成下降沿
- MOV A,30H
- MOV C,ACC.1 ;确定取值通道选择
- MOV P3.7,C
- NOP
- NOP
- SETB P3.6 ;拉高CLK端
- NOP
- NOP
- CLR P3.6 ;拉低CLK端,形成下降沿2
- MOV A,30H
- MOV C,ACC.0 ;确定取值通道选择
- MOV P3.7,C
- NOP
- NOP
- SETB P3.6 ;拉高CLK端
- NOP
- NOP
- CLR P3.6 ;拉低CLK端,形成下降沿3
- SETB P3.7
- NOP
- NOP
- MOV R7,#8 ;准备送下后8个时钟脉冲
- ADH:MOV C,P3.7 ;接收数据
- MOV ACC.0,C
- RL A ;左移一次
- SETB P3.6
- NOP
- NOP
- CLR P3.6 ;形成一次时钟脉冲
- NOP
- NOP
- DJNZ R7,ADH ;循环8次
- MOV C,P3.7 ;接收数据
- MOV ACC.0,C
- MOV @R0,A
- MOV R7,#8
- ADL:MOV C,P3.7 ;接收数据
- MOV ACC.0,C
- RR A ;左移一次
- SETB P3.6
- NOP
- NOP
- CLR P3.6 ;形成一次时钟脉冲
- NOP
- NOP
- DJNZ R7,ADL ;循环8次
- MOV B,@R0
- CJNE A,B,ADC0832 ;数据校验
- SETB P3.5 ;拉高/CS端
- CLR P3.6 ;拉低CLK端
- SETB P3.7 ;拉高数据端,回到初始状态
- RET
- ;=======================================
复制代码
|
|