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

📄 4.bak

📁 《51系列单片机设计实例》配套光盘中的实例4
💻 BAK
字号:
;************************;
;八路模拟数据采集显示电路;
;     2001.10.08编      ;
;************************;
;
;70H-77H存放采样值,78H-7BH存放显示数据,依次为个位、十位、百位、通道标志
;
;*************************************
;*                                   *
;*      主程序和中断程序入口         *
;*                                   *
;*************************************
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           ;显示数据转为三位十进制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
DISLOOP2:       LCALL   DISP           ;调四位LED显示程序
                DJNZ    R2,DISLOOP2    ;每路显示时间控制
                INC     R0             ;显示下一路
                INC     7BH            ;通道显示数值加1
                DJNZ    R3,DISLOOP1    ;8路显示未完转DISLOOP1再循环
                RET                    ;8路显示完子程序结束
;
; LED共阳显示子程序,显示内容在78H-7BH,数据在P1输出,列扫描在P3.0-P3.3口
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       ;四位显示完转ENDOUT结束
                RL     A                  ;扫描字循环左移
                MOV    R5,A               ;扫描字放入R5暂存
                MOV    P3,#0FFH           ;显示暂停
                AJMP   PLAY               ;转PLAY循环
ENDOUT:         MOV    P3,#0FFH           ;显示结束,端口置1
                MOV    P1,#0FFH           ;
                RET                       ;子程序返回
;
;LED数码显示管用共阳段码表,分别对应0-9,最后一个是"熄灭符"
TAB:            DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH
;
; 1MS延时子程序,LED显示用
DL1MS:          MOV	 R6,#14H      ;
DL1:            MOV	 R7,#19H
DL2:            DJNZ R7,DL2
                DJNZ R6,DL1
                RET
;
;模数转换测量子程序
TEST:           CLR     A          ;清累加器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                ; 延时2微秒
                NOP                ;
                CLR     P2.3       ;测试通道地址锁存完毕
                SETB    P2.4      ; 启动测试,发开始脉冲
                NOP               ; 延时2微秒
                NOP               		  ;
                CLR     P2.4      		  ; 发启动脉冲完毕
                NOP                       ;延时4微秒
                NOP                       ;
                NOP                       ;
                NOP                       ;
                RET                       ;子程序调用结束
;
; 取A/D转换数据至70H-77H内存单元
MOVD:           SETB    P2.5              ;8090输出允许
                MOV     A,P0              ;将A/D转换值移入A
                MOV     @R0,A             ;放入内存单元
                CLR     P2.5              ;关闭8090输出
                INC     R0                ;内存地址加1
                MOV     A,P2              ;通道地址移入A
                INC     A                 ;通道地址加1
                MOV     P2,A              ; 通道地址送8090
				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口置1
                MOV     P1,A              ; P1口置1
                MOV     P3,A              ; P3口置1
                RET                       ; 取A/D转换数据结束
TESTCON:        LCALL   TESTART           ; 再发测试启动脉冲
                LJMP    WAIT              ; 跳至WAIT等待A/D转换结束信号
;
END                       ; 程序结束

⌨️ 快捷键说明

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