📄 dyhf-05.asm
字号:
;单片机内存分配申明!
m232_F EQU 78H ;发送数据存放位
M232_W EQU 79H
d7512_CS bit P1.6 ;7512P片选脚
d7512_CLK BIT P1.3 ;7512时钟
d7512_DI BIT P1.4 ;7512数据输入脚
Z_TAI EQU 74H ;输出内阻控制字 00--输出设定电压,01--输出对地1K 10--输出对地100K,11--输出对地高阻
SHUJU_H EQU 70H ;数据高位存放位
SHUJU_L EQU 71H ;数据低位存放位
DATA_2 EQU 72H ;控制数据发送字节
DATA_8 EQU 73H ;控制数据发送位数
;AD3208参数定义:
ad3208_cs bit p1.5 ;mcp3208片选
ad3208_clk bit p1.3 ;mcp3208时钟输入
ad3208_do bit p1.2 ;mcp3208数据输出
ad3208_di bit p1.4 ;mcp3208数据输入
a_data_2 equ 60h ;接收数据高、低位
a_data_8 equ 61h ;接受数据位数
ad3208_h equ 62h ;读出数据高位
ad3208_l equ 63h ;读出数据低位
CH_C EQU 64H ;通道选择存放位
ORG 0000H
ajmp main
ORG 0080H
MAIN:
mov sp,#07h
CLR P3.7
CLR EA
setb p1.2
MOV SHUJU_H,#03H
MOV SHUJU_L,#0C4H
lcall dac7512_in
MOV PSW,#00H
MOV TMOD,#21H ;主程序需要做的串口初始化
MOV TL1,#0FDH
MOV TH1,#0FDH
MOV PCON,#00H
MOV SCON,#50H
SETB TR1
CLR TI
clr ri
main_1:
CLR RI
SETB REN
ts:
lcall dac7512_in
JNB RI,ts
MOV A,SBUF
CJNE A,#0AAH,main_1
MOV m232_F,#0BBH
LCALL m232_FS
CLR RI
JNB RI,$
MOV M232_W,SBUF
CLR RI
JNB RI,$
MOV M232_W+1,SBUF
CLR RI
JNB RI,$
MOV M232_W+2,SBUF
CLR RI
JNB RI,$
MOV M232_W+3,SBUF
CLR REN
MOV A,#0AAH
ADD A,M232_W
ADD A,M232_W+1
ADD A,M232_W+2
CJNE A,M232_W+3,DATA_ERR
MOV m232_F,#00H
LCALL m232_FS
MOV A,M232_W
CJNE A,#01H,MODE_1
; MOV m232_F,#01H
; LCALL m232_FS
MOV SHUJU_H,M232_W+1
MOV SHUJU_L,M232_W+2
lcall dac7512_in
; MOV m232_F,SHUJU_H
; LCALL m232_FS
; MOV m232_F,SHUJU_L
; LCALL m232_FS
ajmp main_1
DATA_ERR:
MOV m232_F,#0FFH
LCALL m232_FS
OE:
MOV M232_W,#00H
MOV M232_W+1,#00H
MOV M232_W+2,#00H
MOV M232_W+3,#00H
; MOV m232_F,#0EH
; LCALL m232_FS
AJMP main_1
MODE_1:
CJNE A,#02H,OE
; MOV m232_F,#02H
; LCALL m232_FS
MOV A,M232_W+1
CJNE A,#01H,MODEA
MOV m232_F,#01H
LCALL m232_FS
MOV CH_C,#00H
LCALL ad3208
MOV m232_F,ad3208_h
LCALL m232_FS
MOV m232_F,ad3208_L
LCALL m232_FS
AJMP MAIN_1
MODEA:
CJNE A,#02H,OE
; MOV m232_F,#02H
; LCALL m232_FS
MOV CH_C,#10H
LCALL ad3208
MOV m232_F,ad3208_h
LCALL m232_FS
MOV m232_F,ad3208_L
LCALL m232_FS
AJMP MAIN_1
m232_FS:
CLR TI ;清除发送标志位
MOV SBUF,m232_F ;发送数据
JNB TI,$ ;等待发送完毕
CLR TI
ret
;DA数据写入程序
Dac7512_IN:
MOV DATA_2,#02H ;发送位数为16位
MOV DATA_8,#08H
/* CLR C
MOV A,SHUJU_L
SUBB A,#88H
MOV A,SHUJU_H
SUBB A,#04H
JNC DAC_PDH
CLR C
MOV A,SHUJU_L
SUBB A,#0CH
MOV A,SHUJU_H
SUBB A,#03H
JC DAC_PDL */
DATA_IN0:
SETB d7512_CS ;发送片选
CLR d7512_CS
MOV A,SHUJU_H ;发送数据送A,移位比较确认数据为1或0,发送
DATA_IN1:
CLR C
RLC A
JC XIE_1
setb d7512_CLK ;发送数据0
CLR d7512_DI
DATA_IN3:
clr d7512_CLK
DJNZ DATA_8,DATA_IN1 ;检测高低8位发送完毕没有
DJNZ DATA_2,DATA_IN2 ;检测数据全部发送完毕没有,没有转低8位发送
setb d7512_cs
AJMP RET_MAIN
XIE_1:
setb d7512_CLK ;发送数据1
SETB d7512_DI
AJMP DATA_IN3
DATA_IN2: ;转低8位数据
MOV DATA_8,#08H
MOV A,SHUJU_L
AJMP DATA_IN1
RET_MAIN:
RET
DAC_PDH:
MOV m232_F,#0FH
LCALL m232_FS
AJMP RET_MAIN
DAC_PDL:
MOV m232_F,#00H
LCALL m232_FS
AJMP RET_MAIN
;读AD3208程序
ad3208:
clr ad3208_cs
clr ad3208_clk
setb ad3208_di ;发送start位
setb ad3208_clk
clr ad3208_clk
setb ad3208_di ;发送sgl位
setb ad3208_clk
MOV A,CH_C
MOV R2,#03H
RL A
AD3208_4:
CLR C
RLC A
JC AD3208_3
clr ad3208_clk ;发送地址位
clr ad3208_di
setb ad3208_clk
AD3208_5:
DJNZ R2,AD3208_4
AJMP AD3208_6
AD3208_3:
clr ad3208_clk
SETB ad3208_di
setb ad3208_clk
AJMP AD3208_5
AD3208_6:
clr c ;准备读数据
mov a,#00h
mov a_data_2,#02h
mov a_data_8,#05h ;读高5位
ad3208_1: ;读入数据
clr ad3208_clk
setb ad3208_clk
clr ad3208_clk
mov c,ad3208_do
rlc a
djnz a_data_8,ad3208_1
djnz a_data_2,ad3208_2
mov ad3208_l,a
setb ad3208_cs
ret
ad3208_2:
mov ad3208_h,a
mov a_data_8,#08h ;读低8位
mov a,#00h
ajmp ad3208_1
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -