?? wadc0.asm
字號:
;參考程序A.WADC0.ASM程序轉化通道AIN0.0的輸入值,LCD顯示兩位16進制數.
;測試前將S6的第一撥碼開關撥到ON.
$include (c8051f020.inc)
TCMS EQU 1234H ;設定T3初始化重載計數值
INTBit BIT 20H.0
ORG 0
AJMP main
ORG 7BH
AJMP ADC_ISR
ORG 0100H
main: MOV WDTCN,#0deH
MOV WDTCN,#0adH ;禁止看門狗定時器
MOV R1,#30H ;從地址30H開始賦常數#0AH,#0DH,#0CH,#00H,#68H,#68H
MOV @R1,#0AH ;準備顯示字符"ADC0"
INC R1
MOV @R1,#0DH
INC R1
MOV @R1,#0CH
INC R1
MOV @R1,#00H
INC R1
MOV @R1,#68H
INC R1
MOV @R1,#68H
CLR INTBit ;清INTBIT位
LCALL PORT_Init;I/O口初始化
LCALL LCD_Init ;液晶初始化
LCALL Timer3_Init ;初始化定時3
LCALL ADC_Init ;初始化A/D
SETB EA ;使能總中斷標志
MOV AMX0SL,#00 ;選擇通道0
LCALL Delay
LOOP:JNB INTBit,LOOP ;ADC0中斷是否發生?
ANL TMR3CN,#0fbH ;ADC0中斷已經發生,關定時器3
CLR INTBit ;清INTBIT位
MOV P7,#02H ;返回初始位置,LCD的歸位指令
MOV P6,#1H ;寫LCD的命令寄存器
MOV P6,#0H ;結束寫LCD的命令寄存器的操作
MOV R1,#39H ;將A/D轉化值保存到RAM 36H,37H,38H,39H中去.
MOV A,ADC0L
ANL A,#0FH
MOV @R1,A
MOV A,ADC0L
SWAP A
ANL A,#0FH
DEC R1
MOV @R1,A
MOV A,ADC0H
ANL A,#0FH
DEC R1
MOV @R1,A
MOV A,ADC0H
SWAP A
ANL A,#0FH
DEC R1
MOV @R1,A
MOV P6,#05H ;準備送數據
LCALL Delay ;延時
MOV R1,#30H ;顯示數據首地址
MOV R2,#0AH ;顯示數據長度
NDATA: MOV A,@R1;將顯示數據轉化為液晶的顯示字符碼
MOV R0,A
CLR C
SUBB A,#0AH
JC KK ;C=1,A=0----9
MOV A,R0 ;C=0,A=0AH----0FH
ADD A,#37H ;將BCD碼轉換為ASCII碼. 0AH+37H=41H ('A')
AJMP TT
KK: MOV A,R0
ADD A,#30H ;將BCD碼轉換為ASCII碼. 0H+30H=30H ('0')
TT: MOV P7,A ;送顯示數據
MOV P6,#05H
MOV P6,#04H
INC R1
LCALL Delay
DJNZ R2,NDATA ;數據是否送完
ORL TMR3CN,#04H ;使能定時器3
SJMP LOOP
RET
LCD_Init:MOV P6,#1H ;初始化液晶模塊
LCALL Delay
MOV P7,#38H ;兩行顯示
MOV P6,#1H ; 寫命令
MOV P6,#0H
LCALL Delay
MOV P7,#0EH ;LCD顯示開關控制命令,開顯示,開光標,字符不閃爍
MOV P6,#01H ;寫命令
MOV P6,#0H
LCALL Delay
MOV P7,#1cH ;AC自動增1,整體顯示不移動
MOV P6,#1H ; 寫命令
MOV P6,#0H
LCALL Delay
MOV P7,#01H ;清除DDRAM,置AC=0
MOV P6,#1H ; 寫命令
MOV P6,#0H
LCALL Delay
RET
Timer3_Init: ;初始化定時器3
MOV TMR3CN,#00H
MOV TMR3RLH, #HIGH(-TCMS) ;初始化重載值
MOV TMR3RLL, #LOW(-TCMS)
MOV TMR3H, #0ffh ;設置自動重載值
MOV TMR3L, #0ffh
ORL TMR3CN,#04H
RET
ADC_Init: ;初始化A/D
ORL ADC0CN,#84H;ADC0使能,定時器3溢出使能模/數轉換
ORL REF0CN,#03H;內部電壓基準提供從VREF腳輸出,ADC0電壓基準取自VREF0
ORL ADC0CF,#50H;設定轉換周期,設定增益為1
ORL AMX0CF,#00H;單端輸入
ORL EIE2,#02H ;允許ADC0轉換結束中斷
RET
;初始化I/O口
PORT_Init:
ORL P74OUT,#0c0H ;P6,P7為推挽輸出
RET
ADC_ISR: ;A/D中斷服務程序
CLR AD0INT ;清ADC0的中斷標志位
SETB INTBit ;置INTBIT位
RETI
Delay: MOV R7, #01h ;延時子程序
Delay1: MOV R6, #80h
Delay0: MOV R5, #00h
DJNZ R5, $
DJNZ R6, Delay0
DJNZ R7, Delay1
RET
END
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -