找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4229|回复: 3
打印 上一主题 下一主题
收起左侧

51单片机汇编源程序包 带详细注释

[复制链接]
跳转到指定楼层
楼主

51单片机常用的汇编程序,每个程序都带详细的注释
所有资料下载:
51单片机汇编源程序包 带详细注释.rar (222.66 KB, 下载次数: 46)

实例1:
  1. ;************************;
  2. ;八路模拟数据采集显示电路;
  3. ;     2001.10.08编      ;
  4. ;************************;
  5. ;
  6. ;70H-77H存放采样值,78H-7BH存放显示数据,依次为个位、十位、百位、通道标志
  7. ;
  8. ;*************************************
  9. ;*                                   *
  10. ;*      主程序和中断程序入口         *
  11. ;*                                   *
  12. ;*************************************
  13. ORG     0000H    ;程序执行开始地址
  14. LJMP    START    ;跳至START执行
  15. ORG     0003H    ;外中断0中断入口地址
  16. RETI             ;中断返回(不开中断)
  17. ORG     000BH    ;定时器T0中断入口地址
  18. RETI             ;中断返回(不开中断)
  19. ORG     0013H    ;外中断1中断入口地址
  20. RETI             ;中断返回(不开中断)
  21. ORG     001BH    ;定时器T1中断入口地址
  22. RETI             ;中断返回(不开中断)
  23. ORG     0023H    ;串行口中断入口地址
  24. RETI             ;中断返回(不开中断)
  25. ORG     002BH    ;定时器T2中断入口地址
  26. RETI             ;中断返回(不开中断)
  27. ;
  28. ;*************************************
  29. ;*                                   *
  30. ;*       初始化程序中的各变量        *
  31. ;*                                   *
  32. ;*************************************
  33. CLEARMEMIO:     CLR     A           ;
  34.                 MOV     P2,A        ;P2口置0
  35.                 MOV     R0,#70H     ;内存循环清0(70H-7BH)
  36.                 MOV     R2,#0CH     ;
  37. LOOPMEM:        MOV     @R0,A       ;
  38.                 INC     R0          ;
  39.                 DJNZ    R2,LOOPMEM  ;
  40.                 MOV     A,#0FFH     ;
  41.                 MOV     P0,A            ;P0、P1、P3端口置1
  42.                 MOV     P1,A            ;
  43.                 MOV     P3,A            ;
  44.                 RET                     ;子程序返回
  45. ;
  46. ;*************************************
  47. ;*                                   *
  48. ;*            主 程 序                 *
  49. ;*                                   *
  50. ;*************************************
  51. START:          LCALL   CLEARMEMIO      ;初始化
  52. MAIN:           LCALL   DISPLAY         ;显示数据一次
  53.                 LCALL   TEST            ;测量一次
  54.                 AJMP        MAIN            ;返回MAIN循环
  55.                 NOP                        ;PC值出错处理
  56.                 NOP                     ;空操作
  57.                 NOP                     ;空操作
  58.                 LJMP        START           ;重新复位起动
  59. ;
  60. DISPLAY:        MOV     R3,#08H         ;8路信号循环显示控制
  61.                 MOV     R0,#70H         ;显示数据初址(70H-77H)
  62.                 MOV     7BH,#00H        ;显示通道路数(0-7)
  63. DISLOOP1:       MOV     A,@R0           ;显示数据转为三位十进制BCD码存入
  64.                 MOV     B,#100          ;7AH、79H、78H显示单元内
  65.                 DIV     AB              ;显示数据除100
  66.                 MOV     7AH,A           ;商入7AH
  67.                 MOV     A,#10           ;A放入数10
  68.                 XCH     A,B             ;余数与数10交换
  69.                 DIV     AB              ;余数除10
  70.                 MOV     79H,A           ;商入79H
  71.                 MOV     78H,B           ;余数入78H
  72.                 MOV     R2,#0FFH       ;每路显示时间控制 4MS*255
  73. DISLOOP2:       LCALL   DISP           ;调四位LED显示程序
  74.                 DJNZ    R2,DISLOOP2    ;每路显示时间控制
  75.                 INC     R0             ;显示下一路
  76.                 INC     7BH            ;通道显示数值加1
  77.                 DJNZ    R3,DISLOOP1    ;8路显示未完转DISLOOP1再循环
  78.                 RET                    ;8路显示完子程序结束
  79. ;
  80. ; LED共阳显示子程序,显示内容在78H-7BH,数据在P1输出,列扫描在P3.0-P3.3口
  81. DISP:           MOV     R1,#78H       ;赋显示数据单元首址
  82.                 MOV     R5,#0FEH      ;扫描字
  83. PLAY:           MOV     P1,#0FFH                ;关显示
  84.                 MOV     A,R5                    ;取扫描字
  85.                 ANL     P3,A              ;开显示
  86.                 MOV    A,@R1              ;取显示数据
  87.                 MOV    DPTR,#TAB          ;取段码表首址
  88.                 MOVC   A,@A+DPTR          ;查显示数据对应段码
  89.                 MOV    P1,A                ;段码放入P1口
  90.                 LCALL  DL1MS              ;显示1MS
  91.                 INC    R1                 ;指向下一地址
  92.                 MOV    A,P3               ;取P3口扫描字
  93.                 JNB    ACC.3,ENDOUT       ;四位显示完转ENDOUT结束
  94.                 RL     A                  ;扫描字循环左移
  95.                 MOV    R5,A               ;扫描字放入R5暂存
  96.                 MOV    P3,#0FFH           ;显示暂停
  97.                 AJMP   PLAY               ;转PLAY循环
  98. ENDOUT:         MOV    P3,#0FFH           ;显示结束,端口置1
  99.                 MOV    P1,#0FFH           ;
  100.                 RET                       ;子程序返回
  101. ;
  102. ;LED数码显示管用共阳段码表,分别对应0-9,最后一个是"熄灭符"
  103. TAB:            DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH
  104. ;
  105. ; 1MS延时子程序,LED显示用
  106. DL1MS:          MOV         R6,#14H      ;
  107. DL1:            MOV         R7,#19H
  108. DL2:            DJNZ     R7,DL2
  109.                 DJNZ     R6,DL1
  110.                 RET
  111. ;
  112. ;模数转换测量子程序
  113. TEST:           CLR     A          ;清累加器A
  114.                 MOV     P2,A       ;清P2口
  115.                 MOV     R0,#70H    ;转换值存放首址
  116.                 MOV     R7,#08H    ;转换8次控制
  117.                 LCALL  TESTART     ;启动测试
  118. WAIT:           JB     P3.7,MOVD   ;等A/D转换结束信号后转MOVD
  119.                 AJMP   WAIT        ;P3.7为0等待
  120. ;
  121. TESTART:        SETB    P2.3       ;锁存测试通道地址
  122.                 NOP                ; 延时2微秒
  123.                 NOP                ;
  124.                 CLR     P2.3       ;测试通道地址锁存完毕
  125.                 SETB    P2.4      ; 启动测试,发开始脉冲
  126.                 NOP               ; 延时2微秒
  127.                 NOP                                 ;
  128.                 CLR     P2.4                        ; 发启动脉冲完毕
  129.                 NOP                       ;延时4微秒
  130.                 NOP                       ;
  131.                 NOP                       ;
  132.                 NOP                       ;
  133.                 RET                       ;子程序调用结束
  134. ;
  135. ; 取A/D转换数据至70H-77H内存单元
  136. MOVD:           SETB    P2.5              ;8090输出允许
  137.                 MOV     A,P0              ;将A/D转换值移入A
  138.                 MOV     @R0,A             ;放入内存单元
  139.                 CLR     P2.5              ;关闭8090输出
  140.                 INC     R0                ;内存地址加1
  141.                 MOV     A,P2              ;通道地址移入A
  142.                 INC     A                 ;通道地址加1
  143.                 MOV     P2,A              ; 通道地址送8090
  144.                 CLR        C                 ;清进位标志
  145.                 CJNE    A,#08H,TESTCON    ; 通道地址不等于8转TESTCONT再测试
  146.                 JC      TESTCON           ; 通道地址小于8转TESTCONT再测试
  147.                 CLR     A                 ; 大于或等于8,A/D转换结束,恢复端口
  148.                 MOV     P2,A              ; P2口置0
  149.                 MOV     A,#0FFH           ;
  150.                 MOV     P0,A              ; P0口置1
  151.                 MOV     P1,A              ; P1口置1
  152.                 MOV     P3,A              ; P3口置1
  153.                 RET                       ; 取A/D转换数据结束
  154. TESTCON:        LCALL   TESTART           ; 再发测试启动脉冲
  155.                 LJMP    WAIT              ; 跳至WAIT等待A/D转换结束信号
  156. ;
  157.                 END                       ; 程序结束
复制代码




分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:55584 发表于 2016-10-24 08:13 | 只看该作者
谢谢分享,下载学习
回复

使用道具 举报

板凳
ID:398632 发表于 2018-9-16 13:47 | 只看该作者
谢谢分享。学习一下。
回复

使用道具 举报

地板
ID:398692 发表于 2018-9-16 16:35 | 只看该作者
谢谢分享,学习一下
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表