⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ad255.asm

📁 说明:本文件夹一共提供各类编程实例200多个
💻 ASM
字号:
;********************************************************************************
;AD 0804控制程序:转动电位器,数码管后三位依次显示000-255,                      *
;此程序可以做一个温度计, 一个电压表...                                         *
;连接:数码管数据接P0,数码管控制接P2,ad0804 wr接p3.6 rd接p3.7 ad0804数据接p1口  *
;********************************************************************************
;*  日期:  2007-3-25                                                            *
;*  版本:  3.0                                                                  *
;*  作者:  深圳学林电子有限公司     专业8051单片机教学站                        *
;*  邮箱: sxj1974@163.com                                                       *
;*  网站: http://www.51c51.com     http://www.8951.com    更多例程请登陆网站   *
;********************************************************************************
;*  硬件:此程序在本公司xlisp系列单片机实验仪运行通过                           *
;********************************************************************************
;* 【版权】 Copyright(C)深圳学林电子有限公司 www.51c51.com  All Rights Reserved *
;* 【声明】 此程序仅用于学习与参考,引用请注明版权和作者信息!                  *
;********************************************************************************
				;//定义ADC的连接端口
ad_cs   equ P3.6   		;芯片选择
ad_wr   equ P2.0   		;转换开始
ad_rd   equ P3.7   		;RD=LOW,数字信号输出
ad_input_port   equ p1  	;定义数据位
Counter EQU     59H     	;计数器,显示程序通过它得知现正显示哪个数码管
FIRST   EQU     P2.4    	;第一位数码管的位控制
SECOND  EQU     P2.5    	;第二位数码管的位控制
THEER    EQU     P2.6   	; 第三位数码管的位控制
DISPBUF EQU     5AH     	;显示缓冲区为5AH和5BH

    org 0000h
    ajmp    main
    ORG     000BH           	;定时器T0的入口
    AJMP    DISP            	;显示程序
    org 0030h
main:
    MOV     SP,#5FH         	;设置堆栈
    MOV     P1,#0FFH
    MOV     P0,#0FFH
    MOV     P2,#0FFH        	;初始化,所显示器,LED灭
    MOV     TMOD,#00000001B 	;定时器T0工作于模式1(16位定时/计数模式)
    MOV     TH0,#HIGH(65536-2000)
    MOV     TL0,#LOW(65536-2000)
    SETB    TR0      		;开定时器0
    SETB    EA        		;开总中断
    SETB    ET0        		;开定时器0中断
    MOV     Counter,#0      	;计数器初始化
LOOP:
    lcall adc_demo      	;调用AD子程序
    ajmp    LOOP

;//==========================================
;// 启动AD转换
;//==========================================
Adc_Start:
    clr ad_cs
    nop
    clr ad_wr
    nop
    setb    ad_wr
    nop
    setb    ad_cs
    nop
    ret
;//==========================================
;// 读AD转换
;//==========================================
Adc_Read:
    mov ad_input_port,#0ffh
    clr ad_cs
    nop
    clr ad_rd
    nop
    nop
    mov a,AD_INPUT_PORT
    nop
    setb    ad_rd
    nop
    setb    ad_cs
    ret
;//==========================================
;// AD转换读取延时程序,显示读到的数值
;//==========================================
Adc_Demo:
	lcall Adc_Start
	lcall delay1ms
	lcall adc_read
    MOV B,#100   		;AD转换出的值除100商为百位数
	DIV AB         		; 取百位数 余数在B寄存器
	MOV DISPBUF,A   	;把百位存入百位寄存器DISPBUF
	MOV A,B         	;余数再送A
	MOV B,#10       	;余数除10商为十位数
	DIV AB           	; 除法,余数在寄存器B
	MOV DISPBUF+1,A    	;A是十位数存第二位显示寄存器
	MOV DISPBUF+2,B     	; B是个位数存第三位显示寄存器
    RET

DISP:                       	;定时器T0的中断响应程序动态扫描
    PUSH    ACC             	;ACC入栈
    PUSH    PSW             	;PSW入栈
    MOV     TH0,#HIGH(65536-2000);定时时间为2000个周期,约2170微秒
    MOV     TL0,#LOW(65536-2000)
    SETB    FIRST
    SETB    SECOND          	;关显示
    SETB    THEER
    MOV     A,#DISPBUF      	;显示缓冲区首地址
    ADD     A,Counter
    MOV     R0,A
    MOV     A,@R0           	;根据计数器的值取相应的显示缓冲区的值
    MOV     DPTR,#DISPTAB   	;字形表首地址
    MOVC    A,@A+DPTR       	;取字形码
    MOV     P0,A            	;将字形码送P0位(段口)
    MOV     A,Counter       	;取计数器的值
    JZ      DISPFIRST       	;如果是0则显示第一位
    DEC     A
    JZ      DISPSECOND      	;如果是1显示第二位
    CLR     THEER          	;否则显示第3位
    AJMP    DISPNEXT
DISPFIRST:
    CLR     FIRST           	;显示第一位
    AJMP    DISPNEXT
DISPSECOND:
    CLR     SECOND
DISPNEXT:
    INC     Counter         	;计数器加1
    MOV     A,Counter
    DEC     A               	;如果计数器计到3,则让它回0
    DEC     A
    DEC     A
    JZ      RSTCOUNT
    AJMP    DISPEXIT
RSTCOUNT:
    MOV     Counter,#0      	;计数器的值回0
DISPEXIT:
    POP     PSW
    POP     ACC
    RETI
DISPTAB:db 28h,7eh,0a2h,62h,74h,61h,21h,7ah,20h,60h ;字形代码表
;0 1 2 3 4 5 6 7 8 9
delay1ms:                       ;延时子程序
	mov	r7,#10
	MM:mov	r6,#50
	djnz	r6,$		;2us
	djnz	r7,MM
	ret
	end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -