?? 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:正跳延數(shù)據(jù)輸出
ADC_EOC BIT P2.2 ;數(shù)據(jù)輸入 1:有效
ADC_STR BIT P2.3 ;1:正跳延數(shù)據(jù)輸出
WR_DATA BIT 22H.2 ;adc地址寫入但未完成
QUSHU BIT 22H.1 ;0:取數(shù)完成可以下一次取數(shù),1:正在取數(shù)中
ADC_ADD EQU 1CH ;當(dāng)前訪問ADC地址
ADC_0ADD EQU 0X10
ADCJISH EQU 1DH ;ADC讀數(shù)不成功時的循環(huán)復(fù)位次數(shù)
;存儲
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 ;開顯示,無光標(biāo),不閃爍
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,取回數(shù)據(jù)在=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
;寫入數(shù)據(jù)
C46_WD: ;地址=A,數(shù)據(jù)=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,數(shù)據(jù)=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
;模擬量取數(shù)
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 ;正在取數(shù)
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 ;顯示區(qū)初始化
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
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -