📄 93c46adc.asm
字号:
;0123456789012345;
; Wang fucheng ;
;TEL:13891968864 ;
;0123456789012345;
;+++++++++++++++++++++++++
;位定义
;显示
RS bit P2.5
R_W BIT P2.6
ADD_LCD BIT P2.7
;采样
ADC_OE BIT P2.1 ;1:正跳延数据输出
ADC_EOC BIT P2.2 ;数据输入 1:有效
ADC_STR BIT P2.3 ;1:正跳延数据输出
WR_DATA BIT 22H.2 ;adc地址写入但未完成
QUSHU BIT 22H.1 ;0:取数完成可以下一次取数,1:正在取数中
ADC_ADD EQU 1CH ;当前访问ADC地址
ADC_0ADD EQU 0X10
ADCJISH EQU 1DH ;ADC读数不成功时的循环复位次数
;存储
C46_CS BIT P2.4 ;
C46_SK BIT P0.0
C46_DI BIT P0.1
C46_DO BIT P0.2
C46_FAL BIT 21H.3 ;93C46故障
;++++++++++++++++++++++++++
;寄存器定义
DIS_RAM EQU 30H ;30H~4FH
DIS_ADD EQU 50H ;显示地址
;_____________________________
org 0h
jmp begin
;:::::::::::::::::::::::::::::::::::::::::::::::
org 30h
dis_WR: setb R_W
MOVX A,@R0
ANL A,#80H
JNZ DIS_WR
CLR R_W
MOV A,B
MOVX @R0,A
RET
;________________________________________________
INIT_LCD: clr add_lcd
clr rs
clr R_W
MOV B,#38H ;模式;8位2行显示
LCALL DIS_WR
mov B,#01h ;清除显示
lcall dis_WR
MOV B,#03H ;归位
LCALL DIS_WR
MOV B,#06H ;自动加1
LCALL DIS_WR
MOV B,#0CH ;开显示,无光标,不闪烁
LCALL DIS_WR
; MOV B,#0C0H ;
; LCALL DIS_WR
SETB ADD_LCD
SETB RS
SETB R_W
RET
;+++++++++++++++++++++++++++++++++++++++++++++++++++
DELAY0: MOV R6,#0aH ; 5 ms
DELAY1: MOV R7,#0EAH ; 0.5 ms
DJNZ R7,$
DJNZ R6,DELAY1
RET
;::::::::::::::::::::::::::::::::::::::
XIANSHI: CLR RS
SETB R_W
CLR ADD_LCD
MOVX A,@R0
ANL A,#80H
JNZ XIANSHIEND
MOV A,DIS_ADD
CJNE A,#50H,XIANSHI1
MOV DIS_ADD,#30H
CLR RS
CLR R_W
CLR ADD_LCD
MOV B,#80H ;第一行
LCALL DIS_WR
LCALL DELAY0
XIANSHI1: MOV A,DIS_ADD
cjne a,#40h,xianshi2
MOV B,#0c0H ;第二行
LCALL DIS_WR
LCALL DELAY0
xianshi2: mov a,DIS_ADD
mov r1,a
INC A
MOV DIS_ADD,A
SETB RS
CLR R_W
CLR ADD_LCD
mov a,@r1
MOVX @R0,A
XIANSHIEND: SETB RS
SETB R_W
SETB ADD_LCD
RET
;==========================================================================
;RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR
;93c46操作程序,初始化C46_SK=0,C46_CS=0,C46_DI=0,C46_DO=1
;93C46读操作
C46_RD: ;地址=A,取回数据在=A
LCALL C46_STR
LCALL CMD_RD
LCALL C46_ADD
nop
nop
nop
MOV R0,#80H
C46_RD2: JNB C46_DO,C46_RD3
DJNZ R0,C46_RD2
SETB C46_FAL
CLR C46_CS
RET
C46_RD3: MOV R0,#08H
C46_RD1: LCALL RD_BIT
RLC A
DJNZ R0,C46_RD1
CLR C46_CS
RET
;WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
;写入数据
C46_WD: ;地址=A,数据=R1,使用R0,R1,R2
LCALL C46_WY
LCALL C46_WD0
LCALL C46_WN
RET
;93C46写入的允许10011、禁止10000
C46_WY: LCALL C46_STR
SETB C
LCALL WD_BIT
CLR C
LCALL WD_BIT
LCALL WD_BIT
SETB C
MOV R0,#07H
C46_WY1: LCALL WD_BIT
DJNZ R0,C46_WY1
CLR C46_CS
RET
;93C46写入的允许10011、禁止10000
C46_WN: LCALL C46_STR
SETB C
LCALL WD_BIT
CLR C
MOV R0,#09H
C46_WN1: LCALL WD_BIT
DJNZ R0,C46_WN1
CLR C46_CS
RET
;93C46写入操作
C46_WD0: ;地址=A,数据=R1,使用R0,R1,R2
MOV R2,A
LCALL C46_STR
LCALL CMD_WD
LCALL C46_ADD
MOV R0,#08H
MOV A,R1
C46_WD1: RLC A
LCALL WD_BIT
DJNZ R0,C46_WD1
CLR C46_CS ;保持0.5
mov r0,#04h
DJNZ R0,$
SETB C46_CS
mov r0,#04h
DJNZ R0,$
MOV R0,#80H
C46_WD2: JNB C46_DO,C46_WD5 ;2*0.83μ需要5ms
DJNZ R0,C46_WD2 ;2 =5ms*Fosc/(12*N)
C46_WD4: CLR C46_CS
MOV A,R2
LCALL C46_RD
CLR C
SUBB A,R1
JZ C46_WD8
C46_WD3: SETB C46_FAL
C46_WD8: CLR C46_CS
RET
C46_WD5: MOV A,#10H
mov r0,#0E2H
C46_WD6: JB C46_DO,C46_WD4 ;2
DJNZ R0,C46_WD6 ;2
djnz ACC,c46_wd6 ;2
LJMP C46_WD4
C46_ADD: MOV R0,#07H
RLC A
C46_ADD1: RLC A
LCALL WD_BIT
DJNZ R0,C46_ADD1
RET
C46_STR: SETB C46_DO
CLR C46_SK
SETB C46_CS
RET
CMD_RD: SETB CY
LCALL WD_BIT
LCALL WD_BIT
CLR CY
LCALL WD_BIT
RET
CMD_WD: SETB C
LCALL WD_BIT
CLR C
LCALL WD_BIT
SETB C
LCALL WD_BIT
RET
WD_BIT: MOV C46_DI,C
SETB C46_SK
NOP
NOP
NOP
CLR C46_SK
RET
RD_BIT: SETB C46_SK
NOP
NOP
NOP
CLR C46_SK
MOV C,C46_DO
RET
;LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
;模拟量取数
ADC_RW: LCALL ADC_WR
LCALL ADC_RD
LCALL ADC_ERR
RET
ADC_ERR: JNB WR_DATA,ADC_ERR1
ADC_ERR3: DJNZ ADCJISH,ADC_ERR2
CLR QUSHU
CLR WR_DATA
ADC_ERR2: RET
ADC_ERR1: MOV ADCJISH,#05H
JB QUSHU,ADC_ERR3
RET
ADC_WR: JB QUSHU,ADC_WR5 ;正在取数
JB WR_DATA,ADC_WR2
MOV A,ADC_ADD
ADC_WR1: LCALL ADC_WR10
ADC_WR2: SETB WR_DATA
JB ADC_EOC,ADC_WR5
CLR WR_DATA
SETB QUSHU
ADC_WR5: RET
ADC_WR10: MOV P0,A
NOP
NOP
NOP
SETB ADC_STR
NOP
NOP
NOP
NOP
NOP
NOP
CLR ADC_STR
RET
ADC_RD: JNB QUSHU,ADC_RD5
JNB ADC_EOC,ADC_RD5
LCALL ADC_RD10
MOV B,A
MOV A,ADC_ADD
CLR C
ADD A,#ADC_0ADD
MOV R1,A
MOV @R1,B
MOV A,ADC_ADD
INC A
ANL A,#07H
MOV ADC_ADD,A
CLR QUSHU
ADC_RD5: RET
ADC_RD10: MOV P0,#0FFH
SETB ADC_OE
NOP
NOP
NOP
MOV A,P0
CLR ADC_OE
RET
;+++++++====== =++++++++++++++++++++++++++++++
begin: LCALL INIT_LCD
MOV DIS_ADD,#30H ;显示指针初始化
; MOV DPTR,#BIAOTI
MOV DPTR,#SHUIWEN_DIS
MOV R1,#30H
BEGIN1: CLR A ;显示区初始化
MOVC A,@A+DPTR
MOV @R1,A
INC DPTR
INC R1
CJNE R1,#50H,BEGIN1
MOV R4,#0FFH
DIS_BIAOTI0: MOV R3,#0FFH
DIS_BIAOTI: LCALL XIANSHI
DJNZ R3,DIS_BIAOTI
DJNZ R4,DIS_BIAOTI0
WORK: LCALL XIANSHI
LCALL ADC_RW
JMP WORK
;____________________0123456789abcdef0123456789abcdef_________________
BIAOTI: DB " Wang fucheng TEL: 13891968864"
SHUIWEN_DIS: DB "lengquye: ___ kai:___ guan:___"
yeyawendu: db "yeya: ___ kai:___ guan:___"
jiezhi: db "jiezhi: ___ kai:___ guan:___"
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -