|
題目:電壓檢測(cè)系統(tǒng)
概述:1、用一個(gè)單片機(jī)和DA轉(zhuǎn)換組成一個(gè)隨機(jī)電壓發(fā)生單元(0~5V);
2、另一個(gè)單片機(jī)和AD轉(zhuǎn)換組成數(shù)據(jù)采集單元;
3、通過(guò)串行接口將采集的數(shù)據(jù)傳到上位機(jī)中,需要編寫上位計(jì)算機(jī)程序,對(duì)采集的數(shù)據(jù)進(jìn)行處理,如顯示當(dāng)前值、畫出一定時(shí)間內(nèi)的記錄曲線等。
說(shuō)明:1、這里是一個(gè)仿真系統(tǒng),需要安裝虛擬串口工具。proteus的串行接口對(duì)應(yīng)虛擬串口com3,VB程序?qū)?yīng)虛擬串口com4。
1200BSP,無(wú)校驗(yàn)位,8個(gè)數(shù)據(jù)位,1個(gè)停止位;單片機(jī)系統(tǒng)采用的是6M晶振。
2、上位機(jī)程序用VB編寫,數(shù)據(jù)采集程序用匯編語(yǔ)言編寫,隨機(jī)電壓發(fā)生程序用C語(yǔ)言編寫。
3、上位機(jī)程序可直接運(yùn)行“工程1.exe”,如果在VB6.0的機(jī)器上可以看見原代碼。
4、如果提示缺少M(fèi)SCOMM32.OCX,可將文件夾中所帶的MSCOMM32.OCX復(fù)制粘帖到c:\windows\system32\下即可(不會(huì)對(duì)您的系統(tǒng)造成任何危害)。
下面是下位機(jī)的匯編程序:
- ;ADCS BIT P3.5 ;使能接口
- ;ADCLK BIT P3.6 ;時(shí)鐘接口
- ;ADDO BIT P3.7 ;數(shù)據(jù)輸出接口(復(fù)用)
- ;ADDI BIT P3.7 ;數(shù)據(jù)輸入接口
- ORG 0000H
- LJMP INITOUT
- ORG 0023H
- LJMP SERVE
- ORG 30H
- INITOUT:
- MOV SP,#60H ;棧頂?shù)刂?br />
- MOV TMOD,#20H ;定時(shí)器1初始化
- MOV TH1,#0F3H ;設(shè)置波特率為1200MHz,6MHz的晶振
- MOV TL1,#0F3H ;
- MOV SCON,#50H ;串口初始化為可以接收
- MOV PCON,#00H ;波特率不倍增
- SETB TR1 ;啟動(dòng)定時(shí)器
- SETB EA ;開中斷
- SETB ES ;允許串口中斷
- MainProgram:
- NOP ;主程序主要是等中斷
- NOP
- LCALL CONV
- SJMP Mainprogram
- ;=======================================================
- SERVE:
- PUSH PSW ;將程序狀態(tài)字壓入堆棧
- PUSH ACC ;將累加器壓入堆棧
- CLR EA ;關(guān)閉系統(tǒng)中斷
- CLR RI ;清除中斷標(biāo)志位
- MOV A,SBUF
- CJNE A,#01,NEXTI;判斷,01號(hào)單片機(jī)
- MOV SBUF,31H
- wait:jnb ti,wait
- clr ti
- CLR RI ;清除中斷標(biāo)志位
- SETB EA ;打開系統(tǒng)中斷
- POP ACC ;累加器出棧
- POP PSW ;程序狀態(tài)字出棧
- NEXTI:RETI ;中斷程序返回
- ;==============================================
-
- CONV:MOV 30H,#02H;方式字選擇
- MOV R0,#31H;數(shù)據(jù)存儲(chǔ)首地址
- LCALL ADC0832;調(diào)用A/D轉(zhuǎn)換子程序
- 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 ;準(zhǔn)備送下后8個(gè)時(shí)鐘脈沖
- ADH:MOV C,P3.7 ;接收數(shù)據(jù)
- MOV ACC.0,C
- RL A ;左移一次
- SETB P3.6
- NOP
- NOP
- CLR P3.6 ;形成一次時(shí)鐘脈沖
- NOP
- NOP
- DJNZ R7,ADH ;循環(huán)8次
- MOV C,P3.7 ;接收數(shù)據(jù)
- MOV ACC.0,C
- MOV @R0,A
- MOV R7,#8
- ADL:MOV C,P3.7 ;接收數(shù)據(jù)
- MOV ACC.0,C
- RR A ;左移一次
- SETB P3.6
- NOP
- NOP
- CLR P3.6 ;形成一次時(shí)鐘脈沖
- NOP
- NOP
- DJNZ R7,ADL ;循環(huán)8次
- MOV B,@R0
- CJNE A,B,ADC0832 ;數(shù)據(jù)校驗(yàn)
- SETB P3.5 ;拉高/CS端
- CLR P3.6 ;拉低CLK端
- SETB P3.7 ;拉高數(shù)據(jù)端,回到初始狀態(tài)
- RET
- ;=======================================
復(fù)制代碼
|
|