• 深圳高级电工单片机项目


    高电单片机实训 参考程序

    试卷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)
  • 相关阅读:
    c程序设计语言_习题1-16_自己编写getline()函数,接收整行字符串,并完整输出
    c程序设计语言_习题1-13_统计输入中单词的长度,并且根据不同长度出现的次数绘制相应的直方图
    c程序设计语言_习题1-11_学习单元测试,自己生成测试输入文件
    c程序设计语言_习题1-9_将输入流复制到输出流,并将多个空格过滤成一个空格
    c语言时间库函数#include<time.h>
    c语言输入与输出库函数#include<stdio.h>
    c语言诊断_断言库函数#include<assert.h>
    c语言实用功能库函数#include<stdlib.h>
    Remove Duplicates from Sorted List
    Merge Sorted Array
  • 原文地址:https://www.cnblogs.com/lixiufeng1994/p/10555159.html
Copyright © 2020-2023  润新知