51/AVR单片机技术驿站!  <在线翻译>     便利工具    特色网址   无弹窗、无插件的绿色站点...  英才招聘   学历查询  喜欢>>收藏我站 

当前位置:首页 > 单片机源码 > 详细内容
八路模拟数据采集显示(汇编)
发布时间:2009/6/2  阅读次数:339  字体大小: 【】 【】【

作者:未知       来源:89s52.cn

;************************;
;八路模拟数据采集显示;
;************************;
;
;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                                             ; 程序结束

  

我要评论
  • 匿名发表
  • [添加到收藏夹]
  • 发表评论:(匿名发表无需登录,已登录用户可直接发表。) 登录状态:未登录
最新评论
所有评论[0]
    暂无已审核评论!

网站导航 管理登陆 ┊ 免责声明 问题反馈  友链说明
本站部分内容来自网络共享资源,如有冒犯您的权利请来信告之删除或纠正!
不得对本站进行复制、盗链或镜像,转载内容须获得同意或授权;欢迎友情链接、站务合作!

    我要报警 Alexa
 mcusy_cn#126.com (请把#改成@) 交流:522422171
本站学习交流群:138..158(高级群1-)、77930286(高级群2)、61804809(群3)
Copyright© MCUSY All Rights Reserved
本站网警备案号: WZ36040002485
  ICP备案证书号:粤ICP备09034963号