?? 數(shù)據(jù)采集系統(tǒng)程序.txt
字號(hào):
數(shù)據(jù)采集程序如下:
DATA_SAM:
MOV R0,#30H ;數(shù)據(jù)緩沖區(qū)首地址30H→R0
MOV R1,#00000000B ;0通道方式/通道數(shù)據(jù)
ACALL RD_AD ;第一次讀取的轉(zhuǎn)換結(jié)果可能不準(zhǔn)確,丟棄。
MOV R1,#00010000B ;1通道方式/通道數(shù)據(jù)
ACALL RD_AD ;送1通道方式/通道數(shù)據(jù)并讀第0通道轉(zhuǎn)換結(jié)果
MOV @R0,R2 ;轉(zhuǎn)換結(jié)果存放到數(shù)據(jù)緩沖區(qū),下同
INC R0
MOV @R0,R3
INC R0
MOV R1,#00100000B ;2通道方式/通道數(shù)據(jù)
ACALL RD_AD ;送2通道方式/通道數(shù)據(jù)并讀第1通道轉(zhuǎn)換結(jié)果
MOV @R0,R2
INC R0
MOV @RO,R3
INC R0
………… ;其它通道操作方式類推
RET
單片機(jī)通過編程產(chǎn)生串行時(shí)鐘,并按時(shí)序發(fā)送與接收數(shù)據(jù)位,完成通道方式/通道數(shù)據(jù)的寫入和轉(zhuǎn)換結(jié)果的讀出,程序如下,供數(shù)據(jù)采集模塊“DATA_SAM” 調(diào)用。
CLK EQU P3.3
DIN EQU P3.4
DOUT EQU P3.5
CS EQU P3.7
RD_AD:
CLR CLK ;清I/O時(shí)鐘
SETB CS ;設(shè)置片選為高
CLR CS ;設(shè)置片選為低
MOV R4,#08 ;先讀高8位
MOV A, R1 ;把方式/通道控制字放到A
LOP1:
MOV C,DOUT ;讀轉(zhuǎn)換結(jié)果
RLC A ;A寄存器左移,移入結(jié)果數(shù)據(jù)位,移出方式/通道控制位
MOV DIN,C ;輸出方式/通道位
SETB CLK ;設(shè)置I/O時(shí)鐘為高
CLR CLK ;清I/O時(shí)鐘
DJNZ R4,LOP1 ;R4不為0,則返回LOP1
MOV R2,A ;轉(zhuǎn)換結(jié)果的高8位放到R2中
MOV A,#00H ;復(fù)位A寄存器
MOV R4,#04 ;再讀低4位
LOP2:
MOV C,DOUT ;讀轉(zhuǎn)換結(jié)果
RLC A ;A寄存器左移,移入結(jié)果數(shù)據(jù)位
SETB CLK ;設(shè)置I/O時(shí)鐘為高
CLR CLK ;清I/O時(shí)鐘
DJNZ R4,LOP2 ;R4不為0,則返回LOP2
MOV R3,A ;轉(zhuǎn)換結(jié)果的低4位放到R3中
SETB CS ;設(shè)置片選為高
RET
串行數(shù)據(jù)傳輸模塊包括串行口初始化子程序和數(shù)據(jù)傳輸子程序,各子程序分別如下。其中數(shù)據(jù)傳輸采用查詢方式,也可以方便地改為中斷方式。
INIT_COM:
MOV SCON,#50H ;串口方式1工作,8位數(shù)據(jù)位,1位停止位,無奇偶校驗(yàn)
MOV PCON,#80H ;SMOD=1,波特率增倍
MOV TMOD,#20H ;波特率設(shè)置,fOSC=12MHz,波特率=2* 2400,N=0F3H
MOV TH1,#0F3H
MOV TL1,#0F3H
SETB TR1 ;啟動(dòng)定時(shí)器T1
RET
RS232:
MOV R0,#30H ;緩沖區(qū)首地址30H→R0
MOV R5,#22 ;發(fā)送數(shù)據(jù)長(zhǎng)度→R5,11* 2=22
LOOP:
MOV A,@R0 ;取數(shù)據(jù)→A
MOV SBUF,A ;數(shù)據(jù)→SBUF
WAIT:
JBC TI,CONT ;判斷發(fā)送中斷標(biāo)志,是1則轉(zhuǎn)到CONT,并清TI
SJMP WAIT
CONT:
INC R0
DJNZ R5,LOOP
RET
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -