找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机LED灯控制器汇编语言微机实验报告+思考题+源码

[复制链接]
跳转到指定楼层
楼主
ID:408531 发表于 2018-11-8 09:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
实验名称 实验三  综合实验-LED灯控制器
  • 任务要求

加深对定时/计数器、中断、IO端口的理解,掌握定时/计数器、中断的应用编程技术及中断程序的调试方法。

  • 设计思路

首先设计大体框架,分成三个主要功能:

1.P0.0口产生三种频率的波形控制指示灯,同时完成P3.1口的波形输出

2.动态显示的方法在八段数码管上面显示当前的模式与频率值

3.通过kint控制三种频率的转换

三、资源分配

1.R1:外部中断数据存储位置,根据数据的不同执行不同的模式,可以再00,01,02三个模式依次切换

2.R4:判断切换和转到当前所处的模式

3.R2,R3,R6:控制八段数码管和led灯蜂鸣器

4.R5:数码管模式切换

5. 20H: P0口的等效输出口

  • 流程图

     


  • 程序测试方法与结果

可以先在89C51运行,查看P3.1 P0.0波形是否正确

无外部中断的时候,波形没20秒有规律地变化一次

触发外部中断的时候

此时波形不再是规律的20秒切换一次模式,而是随着中断的触发进入新的模式,在下次中断到来或者到达20秒的时候进入下一个模式。


思考题

  • 若想实现3种闪烁方式的持续时间在5s-60s范围内可调,且每种方式的持续时间各不相同,应如何设计程序?

   可以改变程序寄存器中的循环次数,比如模式为1hz的时候,循环取反40次,若要让时间可以调节,通过改变寄存器的值来调节循环次数,就可以改变持续时间。但是在5HZ 的时候可能需要两个寄存器来定值,因为此时持续时间为60秒,需要寄存器的值大于600,已经超过了255。


其它说明:
1.标题:黑体,小四号
2. 正文:宋体,五号,1.5倍行距
3.流程图使用 SmartDraw7  或Visio软件绘制
4.不要加封面


源代码 (含文件头说明、语句行注释)

  1. STOP4:
  2.            ORG   0000H
  3.            LJMP  MAIN         ; 转主程序
  4.                                ORG 0003H
  5.                                LJMP INTER0
  6.           ORG   000BH         ; T0的中断入口
  7.           LJMP ITOP                      ; 转T0中断处理程序
  8.                                             ORG 001BH                                          ; T1的中断入口
  9.                       JMP IMER_INT1                           

  10.          ORG   0100H
  11. MAIN: LCALL Init_Device
  12. P0T EQU 20H                  ;设置P0口的输出值
  13.                 MOV P0T,#0FFH
  14.                 MOV R1,#0FFH     ;外部中断数据存储位置,根据数据的不同执行不同的模式,可以再00,01,02三个模式依次切换
  15.               MOV   R3,#0                              ;间接选址的时候的指针中间值
  16.                             MOV R4,#00H                ;控制三种模式的区分的自变量
  17.               SETB EX0                                          ;开启外部中断
  18.               SETB PX0
  19.               SETB EX0
  20.               MOV  DPTR,#SEGTAB1
  21. MOV   SP,#60H        ; 设堆栈指针
  22.   MOV   TMOD,#11H ; 设置T0和T1为方式1
  23. ACALL PT0M0          ; 调用初始化子程序PT0M0
  24. HERE:

  25.         JB P0.1 ,HERE        ; 自身跳转
  26.                             LJMP CHECK
  27.                             RET
  28.                             ITOP:
  29.               CJNE R4,#00H,PT0M022JIN                              ;模式选择的中间跳板
  30.      CJNE R2,#202,delay1m

  31.        MOV   TL0, #15H    ; 延时程序指令,延时100ms
  32.        MOV   TH0,#0E7H
  33.                  CLR P3.1
  34.                        DEC R2
  35.                  RETI
  36.                 PT0M022JIN  :                                                                                       ;跳到另一个模式
  37.                 CJNE R5,#00,ITOP2JIN                                              ;判断是否已经进行过初始化 ,为0说明未进行初始化
  38.                               
  39.                 LJMP                PT0M022

  40.                             delay1m:                               ;让蜂鸣器响一次
  41.                                  DEC R2
  42.        MOV   TL0, #15H    ; T0置初值
  43.        MOV   TH0,#0E7H
  44.        CPL   P0T.0                  ;P0.0的状态取反
  45.                  MOV P0,P0T
  46.                             CJNE R2,#200,NORING1    ;开始的时候响一次
  47.                             SETB P3.1                              ;
  48.                             RETI
  49.                             ITOP2JIN:LJMP ITOP2              
  50.                             NORING1:  CLR P3.1
  51.                                CJNE R2,#01,NORING2
  52.                                           SETB P3.1                                             ;结束的时候响一次
  53.                                           RETI
  54.                             NORING2:
  55.                             CLR P3.1
  56.                             CJNE R2,#00H,GOON1
  57.                             LJMP STOP1
  58.                  GOON1:
  59.        RETI

  60.                 PT0M0222JIN:
  61.                  LJMP              PT0M022
  62.                  PT0M0:
  63.               CJNE  R4,#00H, PT0M0222JIN                                          ;选择模式,如果不是模式0,就跳到下一个初始化程序
  64.               MOV   TH1,  #0FEH                ;初始化程序,延时一秒后进入模式
  65.               MOV   TL1,  #0C2H
  66.               MOV  DPTR,#SEGTAB1
  67.                 CLR P3.1
  68.                 MOV R2,#202
  69.       SETB  TR0;允许T0中断
  70.       SETB  ET0              ;全局开中断
  71.                 MOV   TMOD, #11H            
  72.                   MOV   TH1,  #0FEH                ;延时100ms
  73.                 MOV   TL1,  #0C2H
  74.                  SETB  ET1                      ;允许定时器1中断

  75.                   SETB  TR1                       ;打开定时器1
  76.        SETB  EA
  77.        RETI
  78. IMER_INT12JIN:LJMP IMER_INT12            
  79. IMER_INT1:
  80. CJNE R4,#00H,IMER_INT12JIN   ;              位选信号的对应的模式选择
  81.               MOV P1,#00H

  82.               CJNE R3,#00H,FIVEHZ1
  83.                             MOV   TMOD, #11H              ;定时器0,1工作方式1,16位
  84.               MOV   TH1,  #0FEH               
  85.               MOV   TL1,  #0C2H
  86.               SETB  ET1                      ;允许定时器0中断
  87.               SETB  EA                       ;允许全局中断
  88.               SETB  TR1                       ;打开定时器0
  89.                             MOV  A, R3
  90.               MOVC   A, @A+DPTR
  91.               INC       R3
  92.               PUSH ACC                                             ;存储段码
  93.   CLR A
  94.   ORL A,P0T                                             ;作为p0口的等价输出口
  95.               ORL A,#0D0H                                          ;进行移位

  96.               MOV P0T,A
  97.    MOV P0,P0T
  98.               POP ACC                                             ;弹出段码
  99.               MOV     P1,A
  100. RETI

  101. FIVEHZ1:  CJNE R3,#01H,FIVEHZ2              ;位选信号
  102.               MOV   TMOD, #11H              ;定时器0,1工作方式1,16位
  103.               MOV   TH1,  #0FEH
  104.               MOV   TL1,  #0C2H
  105.               SETB  ET1                      ;允许定时器0中断
  106.               SETB  EA                       ;允许全局中断
  107.               SETB  TR1                       ;打开定时器0
  108.               MOV     A, R3
  109.               MOVC   A, @A+DPTR
  110.               INC       R3
  111.               PUSH ACC



  112.               MOV A,P0T
  113.    ADD  A,#0C0H
  114.               MOV P0T,A
  115.               MOV P0,P0T
  116.               POP ACC
  117.               MOV     P1,A
  118.   RETI
  119.               FIVEHZ2:
  120.                             MOV   TMOD, #11H              ;定时器0,1工作方式1,16位
  121.               MOV   TH1,  #0FEH               
  122.               MOV   TL1,  #0C2H
  123.               SETB  ET1                      ;允许定时器0中断
  124.               SETB  EA                       ;允许全局中断
  125.               SETB  TR1                       ;打开定时器0
  126.               MOV     A, R3
  127.               MOVC   A, @A+DPTR
  128.               INC       R3
  129.               PUSH ACC

  130.     MOV A,P0T
  131.               ADD A,#0C0H
  132.               MOV P0T,A
  133.               MOV P0,P0T


  134.               POP ACC
  135.               MOV    P1,A
  136.                             MOV    R3,#0
  137. RETI
  138.    ;**********************************************************************
  139.    ;***********************************************************************
  140.      STOP1:MOV P1,#00H                                 ;熄灭LED
  141.             
  142.               MOV R4,#01H

  143.                                PT0M022:                                                                          ;模式二的初始化
  144.                                CJNE R4,#01H, PT0M023JIN                               ;作为跳板进行跳到下一个模式

  145.     MOV   TL0, #66H    ;                                            延时1秒
  146.        MOV   TH0,#83H
  147.                                             MOV DPTR,#SEGTAB2
  148.                 CLR P3.1
  149.                 MOV R5,#42
  150.       SETB  TR0;允许T0中断
  151.       SETB  ET0              ;全局开中断
  152.                 SETB IT0
  153.                 MOV   TMOD, #11H              ;
  154.                   MOV   TH1,  #0FEH                ;2ms方波
  155.                 MOV   TL1,  #0C2H
  156.                  SETB  ET1                      ;允许定时器0中断

  157.                   SETB  TR1                       ;打开定时器0
  158.        SETB  EA
  159.        RETI
  160. PT0M023JIN:                 LJMP PT0M023                                                          ;跳到下一个模式
  161. ITOP2:                             CJNE R4,#01,ITOP3

  162.       CJNE R5,#42,delay1m2

  163.               MOV   TL0, #0CBH    ; T0置初值
  164.        MOV   TH0,#06H
  165.                  CLR P3.1
  166.                        DEC R5
  167.                  RETI
  168.                                ITOP3:LJMP ITOP4
  169.                             delay1m2:
  170.                                  DEC R5
  171.        MOV   TL0, #66H    ; ;延时0.5秒
  172.        MOV   TH0,#83H
  173.        CPL   P0T.0                  ;P0.0的状态取反
  174.                  MOV P0,P0T
  175.                             CJNE R5,#40,NORING11                 ;让蜂鸣器响
  176.                             SETB P3.1
  177.                             RETI
  178.                             NORING11:  CLR P3.1                 ;结束的时候熄灭蜂鸣器
  179.                                CJNE R5,#01,NORING21
  180.                                           SETB P3.1
  181.                                           RETI
  182.                             NORING21:
  183.                             CLR P3.1
  184.                             CJNE R5,#00H,GOON11                            ;已经达到了20秒,清零
  185.                             LJMP STOP3
  186.                  GOON11:
  187.        RETI


  188. IMER_INT13JIN:LJMP              IMER_INT13
  189.                
  190. IMER_INT12:
  191. CJNE R4,#01H,IMER_INT13JIN                  ;切换到下一个模式
  192.               MOV P1,#00H

  193.               CJNE R3,#00H,FIVEHZ12
  194.                             MOV   TMOD, #11H              ;定时器0,1工作方式1,16位
  195.               MOV   TH1,  #0FEH               
  196.               MOV   TL1,  #0C2H
  197.               SETB  ET1                      ;允许定时器0中断
  198.               SETB  EA                       ;允许全局中断
  199.               SETB  TR1                       ;打开定时器0
  200.                             MOV  A, R3

  201.               MOVC   A, @A+DPTR
  202.               INC       R3
  203.               PUSH ACC
  204.   CLR A
  205.   ORL A,P0T
  206.               ORL A,#0D0H

  207.               MOV P0T,A
  208.    MOV P0,P0T
  209.               POP ACC
  210.               MOV     P1,A
  211. RETI

  212. FIVEHZ12:  CJNE R3,#01H,FIVEHZ22
  213.               MOV   TMOD, #11H              ;定时器0工作方式1,16位
  214.               MOV   TH1,  #0FEH                ;2ms方波
  215.               MOV   TL1,  #0C2H
  216.               SETB  ET1                      ;允许定时器0中断
  217.               SETB  EA                       ;允许全局中断
  218.               SETB  TR1                       ;打开定时器0
  219.               MOV     A, R3
  220.               MOVC   A, @A+DPTR
  221.               INC       R3
  222.               PUSH ACC



  223.               MOV A,P0T
  224.    ADD  A,#0C0H
  225.               MOV P0T,A
  226.               MOV P0,P0T
  227.               POP ACC
  228.               MOV     P1,A
  229.   RETI
  230.               FIVEHZ22:
  231.                             MOV   TMOD, #11H              ;定时器0工作方式1,16位
  232.               MOV   TH1,  #0FEH                ;2ms方波
  233.               MOV   TL1,  #0C2H
  234.               SETB  ET1                      ;允许定时器0中断
  235.               SETB  EA                       ;允许全局中断
  236.               SETB  TR1                       ;打开定时器0
  237.               MOV     A, R3
  238.               MOVC   A, @A+DPTR
  239.               INC       R3
  240.               PUSH ACC

  241.     MOV A,P0T
  242.               ADD A,#0C0H
  243.               MOV P0T,A
  244.               MOV P0,P0T


  245.               POP ACC
  246.               MOV     P1,A
  247.                             MOV    R3,#0
  248. RETI
  249. ;**************************************************************************************
  250. ;***************************************************************************************
  251. ;***************************************************************************************
  252.   STOP3:
  253.                    MOV P1,#00H
  254.               MOV R4,#02H
  255.    LJMP               PT0M023
  256.                                PT0M023:
  257.                                CJNE R6,#00H,ITOP4

  258.     MOV   TL0, #66H    ; T0置初值
  259.        MOV   TH0,#83H
  260.                                              MOV DPTR,#SEGTAB3
  261.                 CLR P3.1
  262.                 MOV R6,#22 ;延时1秒
  263.       SETB  TR0;允许T0中断
  264.       SETB  ET0              ;全局开中断
  265.                 MOV   TMOD, #11H              ;
  266.                   MOV   TH1,  #0FEH                ;2ms方波
  267.                 MOV   TL1,  #0C2H
  268.                  SETB  ET1                      ;允许定时器0中断

  269.                   SETB  TR1                       ;打开定时器0
  270.        SETB  EA
  271.        RETI
  272. ITOP4:
  273.                                MOV DPTR,#SEGTAB3
  274. MOV P1,#00H
  275. CJNE R6,#22,delay1m3

  276.               MOV   TL0, #0CBH    ; 延时一秒
  277.        MOV   TH0,#06H
  278.                  CLR P3.1
  279.                        DEC R6
  280.                                           MOV DPTR,#SEGTAB3
  281.                  RETI
  282.                
  283.                             delay1m3:
  284.                                  DEC R6
  285.        MOV   TL0, #0CBH    ; 1S
  286.        MOV   TH0,#06H
  287.        CPL   P0T.0                  ;P0.0的状态取反
  288.                  MOV P0,P0T
  289.                             CJNE R6,#20,NORING13
  290.                             SETB P3.1
  291.                             RETI
  292.                             LJMP NORING11
  293.                             NORING13:  CLR P3.1
  294.                                CJNE R6,#01,NORING23
  295.                                           SETB P3.1
  296.                                           RETI
  297.                             NORING23:
  298.                             CLR P3.1
  299.                             CJNE R6,#00H,GOON13
  300.                             MOV R4,#00H
  301.                             LJMP STOP4
  302.                  GOON13:
  303.        RETI



  304.                
  305. IMER_INT13:
  306.               MOV P1,#00H

  307.               CJNE R3,#00H,FIVEHZ13
  308.                             MOV   TMOD, #11H              ;定时器0工作方式1,16位
  309.               MOV   TH1,  #0FEH                ;2ms方波
  310.               MOV   TL1,  #0C2H
  311.               SETB  ET1                      ;允许定时器0中断
  312.               SETB  EA                       ;允许全局中断
  313.               SETB  TR1                       ;打开定时器0
  314.                             MOV  A, R3
  315.               MOVC   A, @A+DPTR
  316.               INC       R3
  317.               PUSH ACC
  318.   CLR A
  319.   ORL A,P0T
  320.               ORL A,#0D0H

  321.               MOV P0T,A
  322.    MOV P0,P0T
  323.               POP ACC
  324.               MOV     P1,A
  325. RETI

  326. FIVEHZ13:  CJNE R3,#01H,FIVEHZ23
  327.               MOV   TMOD, #11H              ;定时器0工作方式1,16位
  328.               MOV   TH1,  #0FEH                ;2ms方波
  329.               MOV   TL1,  #0C2H
  330.               SETB  ET1                      ;允许定时器0中断
  331.               SETB  EA                       ;允许全局中断
  332.               SETB  TR1                       ;打开定时器0
  333.               MOV     A, R3
  334.               MOVC   A, @A+DPTR
  335.               INC       R3
  336.               PUSH ACC



  337.               MOV A,P0T
  338.    ADD  A,#0C0H
  339.               MOV P0T,A
  340.               MOV P0,P0T
  341.               POP ACC
  342.               MOV     P1,A
  343.   RETI
  344.               FIVEHZ23:
  345.                             MOV   TMOD, #11H              ;定时器0工作方式1,16位
  346.               MOV   TH1,  #0FEH                ;2ms方波
  347.               MOV   TL1,  #0C2H
  348.               SETB  ET1                      ;允许定时器0中断
  349.               SETB  EA                       ;允许全局中断
  350.               SETB  TR1                       ;打开定时器0
  351.               MOV     A, R3
  352.               MOVC   A, @A+DPTR
  353.               INC       R3
  354.               PUSH ACC

  355.     MOV A,P0T
  356.               ADD A,#0C0H
  357.               MOV P0T,A
  358.               MOV P0,P0T


  359.               POP ACC
  360.               MOV     P1,A
  361.                             MOV    R3,#0
  362. RETI


  363.    INTER0: INC R1
  364.    CJNE R1,#03H,FUZHI
  365.    MOV R1,#00H
  366. FUZHI:  MOV 71H,R1
  367. MOV R4,71H
  368.    LJMP  PT0M0
  369. BACK:  LJMP HERE
  370. CHECK:
  371. LJMP   HERE





  372. SEGTAB1: DB 0B7H, 0FCH, 6EH
  373. SEGTAB2: DB 0DH, 0FCH, 6EH
  374. SEGTAB3: DB 0FDH,0B6H, 6EH
复制代码

完整的Word格式文档51黑下载地址:

单片机 LED灯控制.doc (469.5 KB, 下载次数: 8)



评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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