zoukankan      html  css  js  c++  java
  • 深圳高级电工单片机项目

    高电单片机实训 参考程序

    试卷3101:查找大小数

    试卷3102:航标灯控制

    试卷3103:计数报警器

    试卷3104:数码管显示

    试卷3105:循环灯点亮

    试卷3106:霓虹灯控制

    试卷3107:算术运算器

    试卷3108:继电器控制

    试卷3109:倒计时音乐报警器

    试卷3110:   数据传

     1 ORG   0000H           ;程序启始地址
     2            LJMP  MAIN            ;长跳主程序
     3            ORG   0800H           ;设主程序从0800H开始
     4 MAIN:  MOV   34H, 20H        ;先设第一个数为最大数送34H
     5            MOV   35H, 20H        ;又设第一个数为最小数送35H 
     6            MOV   R1,  #19        ;剩余数长度(个数)19送R1
     7            MOV   R0,  #21H     ;设剩余19个数地址指针(即剩余数首地址送R0)           
     8 M0:     MOV   A,   @R0       ;取第1余数送A
     9           CJNE  A,  34H,  M1    ;第1余数与当前最大数比较,不等转M1
    10           LJMP  NEXT            ;相等,不能取代,转NEXT
    11 M1:    JNC   M2               ;CY=0,大于当前最大数,转M2
    12           CJNE  A, 35H, M3       ;CY=1(小与当前最大数),须与当前最小数比较,不等转M3
    13           LJMP  NEXT            ;相等,不能取代,转NEXT
    14 M2:    MOV   34H, A          ;取代当前最大数
    15           LJMP   NEXT           ;转NEXT 
    16 M3:      JNC   NEXT            ;CY=0,大于当前最小数,转NEXT
    17           MOV   35H, A           ;CY=1,小于当前最小数,取代
    18           NEXT:  INC   R0                ;余数指针加1
    19           DJNZ  R1,  M0         ;余数长度减1,不等于0,返回M0
    20           SJMP  $                ;余数比较完毕,待机
    21           END
    3103最大最小数的选取
     1       ORG   0000H           ;程序启始地址
     2           LJMP  MAIN            ;长跳主程序
     3           ORG   0800H           ;设主程序从8000H开始
     4 MAIN: MOV   34H,20H           ;先设第一个数为最大数送34H
     5           MOV   35H,20H            ;又设第一个数为最小数送35H 
     6           MOV   R0, #21H           ;设剩余19个数地址指针(即剩余数首地址送R0)
     7           MOV   R1,#19            ;剩余数长度(个数)19送R1
     8 M0:       MOV   A,@R0            ;取第1余数送A
     9       CLR    C
    10       SUBB  A , 34H            ;减法
    11       JNC    M1                ;没有借位,A中数比34H中大,跳至M1
    12       MOV   A,@R0            ;再取原数
    13       CLR    C
    14       SUBB  A, 35H            ;减法
    15       JC     M2                ;有进位,跳至M2
    16       LJMP  NEXT
    17       M1:    MOV   34H, @R0        ;取代原最大数
    18       LJMP  NEXT            
    19       M2:    MOV   35H,@R0        ;取代原最小数
    20       NEXT:  INC   R0              ;余数指针加1
    21           DJNZ  R1,  M0        ;余数长度减1,不等于0,返回M0
    22           SJMP  $              ;余数比较完毕,待机
    23           END 
    3103最大最小数的选取02
     1              ORG   0000H          ;主程序入口
     2              AJMP  MAIN           ;转主程序
     3              ORG   0003H          ;设天黑外中断0入口地址
     4              AJMP  GINT           ;转外中断服务子程序
     5              ORG   0100H          ;设主程序存放0100H
     6 MAIN:    SETB  EX0            ;开外中断0
     7              SETB  EA             ;开CPU总中断
     8          CLR   P1.0           ;白天灭灯
     9          SJMP  $              ;等待天黑
    10 
    11 GINT:    SETB  P1.0
    12          MOV   R7, #DATA1     ;50ms×DATA1为亮灯时间
    13 LP1:      ACALL  DELAY          ;DELAY为延时50ms子程序
    14         DJNZ  R7,LP1
    15         CLR   P1.0
    16 
    17         MOV   R7, #DATA2     ;50ms×DATA2为灭灯时间
    18 LP2:      ACALL  DELAY
    19         DJNZ  R7,LP2
    20         JNB   P3.2,  GINT      ;P3.2=0转UP,即为黑夜时,程序跳转到GINT
    21             RETI
    22 DELAY: MOV   TMOD, #01H     ;设定时器T0为方式1定时
    23 LP:       MOV   TH0,  #3CH     ;定时50ms赋初值高8位
    24             MOV   TL0,  #0B0H    ;定时50ms赋初值低8位
    25             SETB  TR0            ;启动定时器T0
    26 UP:       JNB   TF0,  UP       ;查询50ms定时溢出标志。若不置位,等待.
    27             CLR   TF0
    28              RET
    29          END
    航标灯控制程序
     1           ORG   0000H          ;程序启始地址
     2           CLR   P1.0            ;报警复位
     3           MOV   TMOD, #06H    ;设T0为方式2计数
     4           MOV   TH0,  #250     ;设计数初始值为250(M-N=X)
     5           MOV   TL0,  #250     ;
     6           SETB  TR0            ;启动T0计数
     7 UP:    JBC   TF0, DOWN     ;查询计数溢出标志位。若置位转DOWN 
     8             SJMP  UP             ;若不置位,转UP再查
     9 DOWN: SETB  P1.0           ;计数报警
    10             ACALL DELAY         ;报警延时
    11             CLR   P1.0            ;关报警
    12             SJMP  UP             ;返回UP,等待计数
    13           
    14  DELAY:  MOV   R7, #200       ;延时200毫秒子程序
    15  DE2:     MOV   R6, #250
    16  DE1:     NOP
    17              NOP
    18              DJNZ  R6, DE1
    19              DJNZ  R7, DE2
    20              RET       
    21              END 
    计数报警程序
     1 ——在内存20H开始处存放8个任意序列正数,从串口输出静态显示
     2 
     3          ORG    0000H            ;主程序入口
     4          MOV   SCON,#00H         ;设置串口工作方式为方式0
     5          MOV    R2,  #8          ;设数据长度
     6          MOV    R0,  #20H        ;设数据地址指针R0
     7  NEXT: MOV    A,   @R0        ;取第一个数送A
     8          MOV    DPTR, #TAB       ;取表头地址送DPTR
     9          MOVC   A,  @A+DPTR    ;查数椐段码
    10 
    11          MOV    SBUF,  A         ;发送段码
    12          JNB     TI,   $           ;查发送标志TI,不置位等待
    13          CLR     TI                ;若已置位清0
    14 
    15          ACALL  DELAY            ;显示延时
    16          INC     R0                ;地址指针加1
    17          DJNZ    R2,   NEXT      ;查显示数字个数,不够返回继续显示
    18          SJMP    $
    19 TAB: DB  0C0H, 0F9H, 0A4H, 0B0H, 99H
    20          DB  92H, 82H, 0F8H, 80H, 90H
    21 
    22 DELAY: MOV  R6,  #200            ;200ms延时
    23 LP2:  MOV  R7,  #250
    24 LP1:  NOP
    25          NOP
    26          DJNZ  R7,  LP1
    27          DJNZ  R6,  LP2
    28          RET
    29          END
    30               
    3104串口输出数字显示
     1            ORG    0000H         ;程序启始地址
     2            MOV    P1,   #00H        ;开始全灭灯
     3            MOV    R3 ,  #5      ;重复5次
     4 
     5 DISP0: MOV    R2,   #8      ;每次亮8个灯
     6            MOV    A  ,  #01H    ;设低端第1个灯亮控制字
     7 DISP1: MOV    P1 ,  A       ;亮灯
     8             ACALL  DELAY        ;亮灯延时
     9             RL     A             ;左移修改控制字
    10             DJNZ   R2 ,  DISP1   ;查左移亮灯个数
    11 
    12             MOV    R2 ,  #8      ;重赋亮灯个数
    13             MOV    A,    #80H    ;设高端第1个灯亮控制字
    14             DISP2: MOV    P1,   A       ;亮灯
    15             ACALL  DELAY         ;亮灯延时
    16             RR     A                 ;右移修改控制字
    17             DJNZ    R2,   DISP2   ;查右移亮灯个数
    18 
    19             DJNZ   R3 ,  DISP0       ;查左右亮灯遍数,不够返回
    20             MOV    P1,   #00H    ;灭灯
    21             SJMP   $             ;待机
    22 
    23 DELAY:  MOV    R5,   #10     ;1秒延时
    24 LP3:      MOV    R6,   #100
    25 LP2:      MOV    R7,   #250
    26 LP1:      NOP
    27             NOP
    28             DJNZ   R7,   LP1
    29             DJNZ   R6,   LP2
    30             DJNZ   R5,   LP3
    31             RET
    32 END
    循环亮灯控制
     1           ORG    0000H
     2           MOV    P1,   #00H      ;灭灯
     3           MOV    R0,   #5        ;循环5遍
     4 
     5 START:MOV    R1,   #8        ;每遍8个状态
     6           MOV    DPTR, #TAB     ;取表基址
     7           MOV    R2,   #0        ;取表变址
     8           NEXT:MOV    A,    R2        ;变址送A
     9           MOVC   A, @A+DPTR    ;查控制码
    10           MOV    P1 ,  A          ;控制码送P1口亮灯
    11           ACALL  DELAY           ;延时
    12           INC     R2               ;修改地址指针
    13           DJNZ   R1 ,  NEXT        ;查8个状态
    14 
    15           DJNZ   R0 ,  START        ;查5遍
    16           MOV    P1,   #00H       ;灭灯    
    17           SJMP   $
    18 TAB:   DB     18H,24H,42H,81H,81H,42H,24H,18H
    19 
    20 DELAY:MOV   R7 ,  #200            ;200毫秒延时
    21 LP2:    MOV   R6 ,  #250
    22 LP1:    NOP
    23           NOP 
    24           DJNZ  R6 ,  LP1
    25           DJNZ  R7 ,  LP2
    26           RET
    27           END    
    霓虹灯控制
     1            ORG    0000H
     2 START: MOV    SCON, #00H     ;串口方式0初始化
     3            MOV    20H,  #08H     ;被减数8送20H
     4            MOV    30H,  #03H     ;减数3送30H
     5            MOV    A,    20H      ;20H内容送A
     6            MOV    B,    30H      ;30H内容送B
     7            CLR    C              ;进位位请0
     8            SUBB   A,    30H      ;两数相减,差数放A
     9            JNC    M1             ;判进位位,不置位跳M1
    10            SJMP   START          ;进位位置位,返回开始
    11 M1:     MUL    AB             ;差数乘以减数,其积放A
    12            MOV    DPTR, #TAB     ;取表基址
    13            MOVC   A, @A+DPTR     ;查显示段码
    14            CPL    A              ;段码取反
    15            MOV    SBUF,  A       ;段码送串口
    16               JNB     TI    $       ;查发送标志位
    17            CLR    TI
    18            SJMP   $              ;待机
    19 TAB:    DB     3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
    20            DB     77H,7CH,39H,5EH,79H,71H
    21            END
    算术运算器
     1         ORG    0000H
     2            MOV    R2,   #10        ;设置重复闪亮次数
     3            MOV    P1,  #00H
     4 DP0:  MOV    P1,   #01H      ;取初始控制值
     5            ACALL  DELAY            ;调延时
     6            CPL    P1.0            ;控制值取反
     7            ACALL  DELAY            ;调延时
     8            DJNZ   R2,   DP0        ;查闪亮次数
     9            SJMP   $                ;待机
    10 
    11 DELAY:  MOV    R5,   #15        ;1.5秒延时
    12 LP3:    MOV    R6,   #100
    13 LP2:    MOV    R7,   #250
    14 LP1:    NOP
    15            NOP 
    16            DJNZ   R7,   LP1
    17            DJNZ   R6,   LP2
    18            DJNZ   R5,   LP3
    19            RET
    20            END
    继电器控制
     1     ORG    0000H              ;主程序入口
     2     CLR     P1.1       
     3 
     4          JB      P3.2,  $                ;等待启动          
     5         MOV    SCON, #00H         ;串口0方式初始
     6     MOV    R1,   #10           ;显示10个数字
     7     MOV    DPTR, #TAB         ;取表基址
     8     MOV    R0,#20H                    
     9 LP:   MOV    A,   @R0              ;取表变址
    10        MOVC   A, @A+DPTR          ;查段码  
    11        MOV    SBUF,  A          ;送串口
    12 LP1: JBC     TI,    LP2         ;判发送标志位置
    13        SJMP   LP1                    ;清标志位
    14 LP2: ACALL  DELAY                ;显示延时
    15         INC    R0                  ;修改地址指针
    16         DJNZ   R1,   LP           ;查显示个数
    17         SETB   P1.1                ;响音乐
    18 
    19      JB      P3.3,  $                 ;等待结束按钮 
    20          CLR      P1.1
    21          SJMP   $                       ; 返回
    22 TAB:  DB  0C0H, 0F9H, 0A4H, 0B0H, 99H
    23          DB  92H, 82H, 0F8H, 80H, 90H
    24 
    25  DELAY: MOV  R6,  #200            ;200ms延时
    26  LP2:     MOV  R7,  #250
    27  LP1:     NOP
    28             NOP
    29             DJNZ  R7,  LP1
    30             DJNZ  R6,  LP2
    31             RET
    32             END
    倒计时音乐报警(1)

    显示20H-29H单元中十个数后响音乐:

     1 (2)显示20H-29H单元中十个数后响音乐,各单元中数可根据现场规定输入.
     2 
     3             ORG    0000H          ;主程序入口
     4             AJMP   MAIN
     5             ORG    0013H          ;外中断1入口
     6             AJMP   GINT1
     7             ORG    0100H           
     8 
     9 MAIN:   CLR    P1.1
    10             JB      P3.2,  $       ;等待启动
    11             MOV    IE,   #84H     ;开中断
    12             MOV   SCON, #00H     ;串口0方式初始化
    13 
    14            MOV    R2,   #10      ;显示10个数字
    15            MOV    DPTR, #TAB     ;取表基址
    16            MOV    R0,   #20H     ;取地址指针
    17 LP:      MOV    A, @R0      ;取表变址
    18            MOVC   A, @A+DPTR     ;查段码  
    19            MOV    SBUF,  A       ;送串口
    20            JNB    TI,    $       ;判发送标志位置位否
    21            CLR    TI             ;清标志位
    22            ACALL  DELAY          ;显示延时
    23            INC    R0             ;修改地址指针
    24            DJNZ   R2,  LP       ;查显示个数
    25            SETB   P1.1           ;响音乐
    26            SJMP   $              ; 待机
    27            
    28 GINT1: CLR    P1.1
    29            RETI
    30 
    31 DELAY:  MOV    R5,   #10        ;1秒延时
    32 LP3:      MOV    R6,   #100
    33 LP2:      MOV    R7,   #250
    34 LP1:      NOP
    35             NOP 
    36             DJNZ   R7,   LP1
    37             DJNZ   R6,   LP2
    38             DJNZ   R5,   LP3
    39             RET
    40 TAB:     DB  0C0H, 0F9H, 0A4H, 0B0H, 99H, 92H, 82H, 0F8H,
    41             DB  80H, 90H, 88H, 83H, 0C6H, 0A1H, 86H, 8EH
    42 
    43             END            
    倒计时音乐报警(2)
     1            ORG    0000H              ;主程序入口
     2            AJMP   MAIN
     3            ORG    0013H              ;外中断1入口
     4            AJMP   GINT1
     5            ORG    0100H           
     6 MAIN:  CLR     P1.1
     7            JB      P3.2,  $            ;等待启动
     8            MOV    IE,   #84H            ;开中断
     9        MOV    SCON, #00H         ;串口0方式初始化
    10            MOV    R1,   #10           ;显示10个数字
    11        MOV    DPTR, #TAB         ;取表基址
    12        MOV    R0,#09H                    
    13 LP: MOV    A,   R0              ;取表变址
    14            MOVC   A, @A+DPTR      ;查段码  
    15        MOV    SBUF,  A        ;送串口
    16 LP1:    JBC     TI,    LP2       ;判发送标志位置位否
    17           SJMP   LP1                    ;清标志位
    18 LP2:   ACALL  DELAY           ;显示延时
    19           DEC     R0              ;修改地址指针
    20           DJNZ   R1,   LP         ;查显示个数
    21           SETB   P1.1              ;响音乐
    22           SJMP   $                 ; 返回
    23 GINT1:  CLR    P1.1
    24             RETI
    25 TAB:   DB  0C0H, 0F9H, 0A4H, 0B0H, 99H
    26           DB   92H,  82H, 0F8H, 80H, 90H
    27           END    
    (2) 倒计9-0,响音乐
     1     ORG 0000H
     2     MOV  R0,#20H
     3     MOV  R1,#30H
     4     MOV  R2,#8
     5     MOV  DPH,#00H
     6 
     7  LP1:   MOV  A,R1
     8     PUSH ACC
     9     MOV  A,R0
    10     PUSH ACC
    11 
    12     POP DPL
    13     MOVX A,@DPTR
    14     POP DPL
    15     MOVX  @DPTR,A
    16 
    17     INC R1
    18     INC R0
    19 
    20     DJNZ  R2,LP1
    21     SJMP $
    22     END    
    数据传送(1)
     1     ORG      0000H 
     2     MOV      61H,  #20H       ;内存61H存#20H
     3     MOV      60H,  #30H       ;内存60H存#30H
     4     MOV      SP,   #61H       ;设栈顶SP= #61H
     5     POP      ACC              ;61H存放的数20H送给A
     6     MOV      R0, A          ;R0指针指向20H
     7     POP      ACC
     8     MOV      R1,   A          ;R1指针指向30H
     9     MOV      R2,  #8
    10 LP1:MOVX   A,   @R0           ;取原地址数送A
    11     MOVX   @R1,  A            ;送该数到新地址
    12     INC       R0              ;修改指针R0
    13     INC       R1              ;修改指针R1
    14     DJNZ    R2,   LP1         ;查8个数据传送完否
    15     SJMP    $                 ;注意在20H单元开始设8个数
    16     END
    数据传送(2)
  • 相关阅读:
    【codecombat】 试玩全攻略 第二章 边远地区的森林 一步错
    【codecombat】 试玩全攻略 第十八关 最后的kithman族
    【codecombat】 试玩全攻略 第二章 边远地区的森林 woodlang cubbies
    【codecombat】 试玩全攻略 第二章 边远地区的森林 羊肠小道
    【codecombat】 试玩全攻略 第十七关 混乱的梦境
    【codecombat】 试玩全攻略 第二章 边远地区的森林 林中的死亡回避
    【codecombat】 试玩全攻略 特别关:kithguard斗殴
    【codecombat】 试玩全攻略 第二章 边远地区的森林 森林保卫战
    【codecombat】 试玩全攻略 第二章 边远地区的森林
    实验3 类和对象||
  • 原文地址:https://www.cnblogs.com/lixiufeng1994/p/10555159.html
Copyright © 2011-2022 走看看