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

📄 adc0809.txt

📁 本人是用在AT89C52单片机上的
💻 TXT
字号:
        ORG	0000H		;程序执行开始地址
        LJMP	START		;跳至START执行
        ORG	0003H		;外部中断0入口地址
        RETI			;中断返回
        ORG	000BH		;定时器T0入口地址
        RETI			;中断返回
        ORG	0013H		;外部中断1入口地址
        RETI			;中断返回
        ORG	001BH		;定时器T1入口地址
        RETI			;中断返回
        ORG	0023H		;串行口中断入口地址
        RETI			;中断返回
        ORG	002BH		;定时器T2入口地址
        RETI			;中断返回
CLEARMEMIO: CLR	A
        MOV	P2,A		;P2口置0
        MOV	R0,#70H		;内存循环清0(70H-7BH)
        MOV	R2,#0CH
LOOPMEM:MOV	@R0,A
        INC	R0
        DJNZ	R2,LOOPMEM
        MOV	A,#0FFH
        MOV	P0,A		;P0,P1,P3端口置1
        MOV	P1,A
        MOV	P3,A
        RET			;子程序返回
START:  LCALL	CLEARMEMIO		;初始化
MAIN:   LCALL	DISPLAY		;显示数据一次
        LCALL	TEST
        AJMP	MAIN		;返回MAIN循环
        NOP			;PC值出错处理
        NOP			;空操作
        NOP			;空操作
        LJMP	START		;重新复位启动
DISPLAY:MOV	R3,#08H		;8路信号循环显示控制
        MOV	R0,#70H		;显示数据初始值(70H-77H)
        MOV	7BH,#00H	;显示通道路数(0-7)
DISLOOP1:MOV	A,@R0		;显示数据转为3位十进制BCD码存入
        MOV	B,#100		;7AH,79H,78H显示单元内
        DIV	AB              ;显示数据除100
        MOV	7AH,A		;商入7AH
        MOV	A,#10		;A放入数10
        XCH	A,B		;余数与数10交换
        DIV	AB		;余数除10
        MOV	79H,A		;商入79H
        MOV	78H,B		;余数入78H
        MOV	R2,#0FFH	;每路显示时间控制4ms*255
DISOOP2:LCALL	DISP		;调4位LED显示程序
        DJNZ	R2,DISLOOP2     ;每路显示时间控制
        INC	R0		;显示下一路
        INC	7BH		;通道显示数值加1
        DJNZ	R3,DISLOOP1     ;8路显示未完转DIS1再循环
        RET			;8路显示完子程序结束
DISP:   MOV	R1,#78H		;赋显示数据单元首地址
        MOV	R5,#0FEH	;扫描字
PLAY:   MOV	P1,#0FFH	;关显示
        MOV	A,R5		;取扫描字
        ANL	P3,A		;开显示
        MOV	A,@R1		;取显示数据
        MOV	DPTR,#TAB	;取段码表首地址
        MOVC	A,@A+DPTR	;查显示数据对应段码	 
        MOV	P1,A		;段码放入P1口
        LCALL	DL1MS		;显示1ms
        INC	R1		;指向下一地址
        MOV	A,P3		;取P3口扫描字
        JNB	ACC.3,ENDOUT	;4位显示完转ENDOUT结束
        RL	A		;扫描字循环左移
        MOV	R5,A		;扫描字放入R5暂存
        MOV	P3,#0FFH	;显示暂停
        AJMP	PLAY		;转PLAY
ENDOUT: MOV	P3,#0FFH	;显示结束,端口置1
        MOV	P1,#0FFH
        RET			;子程序返回
TAB:    DB 	0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH
DL1MS:  MOV	R6,#14H		;1ms延时程序
DL1:    MOV	R7,#19H
DL2:    DJNZ	R7,DL2
        DJNZ	R6,DL1
        RET
TEST:   CLR	A		;清累加器
        MOV	P2,A		;清P2口
        MOV	R0,#70H		;转换值存放首地址
        MOV	R7,#08H		;转换8次控制
        LCALL	TESTART		;启动测试
WAIT:   JB	P3.7,MOVD	;等待A/D转换结束信号后转MOVD
        AJMP	WAIT		;P3.7为0,等待
TESTART:SETB	P2.3		;锁存测试通道地址
        NOP			;延时2us
        NOP
        CLR	P2.3		;测试通道地址锁存完毕
        SETB	P2.4		;启动测试,开发脉冲	
 	NOP			;延时2us
        NOP
        CLR	P2.4		;发启动脉冲完毕
        NOP			;延时4us
        NOP
        NOP
        NOP
        RET			;子程序调用结束
MOVD:   SETB	P2.5		;允许0809输出
        MOV	A,P0		;将A/D转换值移入A
        MOV	@R0,A		;放入内存单元
        CLR	P2.5		;关闭0809输出
        INC	R0		;内存地址加1		
        MOV	A,P2		;通道地址移入A
        INC	A		;通道地址加1
        MOV	P2,A		;通道地址送0809
        CLR	C		;清进位标志
        CJNE	A,#08H,TESTCON	;通道地址不等于8转TESTCONT再调试
        JC	TESTCON		;通道地址小于8转TESTCONT再调试
        CLR	A		;大于或等于8,A/D转换结束,恢复端口
        MOV	P2,A		;P2口置0
        MOV	A,#0FFH
        MOV	P0,A		;P0口置0
        MOV	P1,A		;P1口置0
        MOV	P3,A		;P3口置0
        RET			;取A/D转换数据结束
TESTCON:LCALL	TESTART		;再发测试启动脉冲
        LJMP	WAIT		;跳至WAIT等待A/D转换结束信号
        END			;程序结束
			



⌨️ 快捷键说明

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