|
0.png (13.15 KB, 下載次數: 146)
下載附件
2016-9-4 19:57 上傳
題目:電壓檢測系統
概述: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
- ;=======================================
復制代碼
0.png (70.75 KB, 下載次數: 97)
下載附件
2016-9-4 19:57 上傳
|
|