⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 yi3.asm

📁 我搜集的10余个关于C51的小程序.里面包含了绝大多数C51的基本操作.适合新手作为入门的小程序.
💻 ASM
字号:

  ; 假使 使用的是8051 芯片,用8255做I/O口的联接
  ; 并假设8255的PA口 ,PB 口 , pc 口 , 控制口的地址为:
  ; #3F00H ,#3F01H, #3F02H ,#3F03H
  ;R0 ,R1,R2 ,R3,的用处用来分别表4位LED的计数

   ORG  0000H
   SJMP MAIN

   ORG 000bH
   
    ljmp Timer_0;
   ORG 001bH
   AJMP Timer_1  ;用以刷新数据
   org 0040h

 MAIN:
        
        SETB  ET0  ;   允许T0中断
        SETB  ET1  ;   允许T1中断
        SETB  EA   ;   CPU 开中断


        MOV TMOD , #01H ;   送2ms时间常数
        MOV TL1  , #04H ;
        MOV TH1  , #0FH ;
        MOV TL0  , #0E8H ;  送计数1000
        MOV TH0  , #03H ;
        SETB  TR0  ;   启动T0计数
        SETB  TR1  ;   启动T1计数
        MOV A    , #80H
        MOV DPTR , #CWR
        MOVX @DPTR , A ;送方式控制字
        MOV R0   ,#00H  ;寄存器清零
        MOV R1   ,#00H
        MOV R3   ,#00H
        MOV R3   ,#00H
        MOV R4   ,#00H

    loop:
         nop
         nop
         nop
            jmp  loop      ;  等待
   ; Timer_0 中断子程序
   Timer_0:
        nop

        nop
        LCALL  DELAY ;  调用延时
        INC  R0  ;让R0加一代表数据加了1
        MOV A ,R0
        PUSH  A
        CLR  C   ;
        MOV  A ,R0
        SUBB A , #0AH  ;
        JZ   L2      ; A 为0 就转移
         POP A
         MOV R0 ,A
        ;RETI     ;   中断返回
   
  L2:
        INC  R1
        MOV A, R1
        PUSH A
        MOV  R0 , #00H    ;R0清零
        CLR  C
        MOV  A ,R1
        SUBB A , #0AH  ;
        JZ   L3  ;  A 为0 就转移 否则返回
        POP A
        MOV R1 ,A

        RETI    ;    中断返回
  L3:
        INC  R2
        MOV  R1 , #00H  ; R1清零
        CLR  C
        MOV  A ,R2
        SUBB A , #0AH
        JZ   L4  ;  A  为0 就转移 否则返
        RETI     ;   中断返回
  L4:   INC  R3
        MOV  R2 , #00H  ; R2清零
        CLR  C
        MOV  A  ,R3
        SUBB A ,#0AH
        JZ   L5
        RETI
  L5:
        MOV  R3 ,#00H   ;R3清零
        RETI
  ;Timer_1的子程序
   TIMER_1 :
        INC  R4  ;  用R4 表示要送数的位
        PUSH A
        MOV  A ,R4
        CLR  C
        SUBB A ,#01H
        JZ   PM1  ; A为零转移
        MOV  A ,R4
        SUBB A ,#02H
        JZ   PM2  ; A为零转
        MOV  A ,R4
        SUBB A ,#03H
        JZ   PM3  ; A为零转移
  PM4:  MOV  A ,BUFFER  ; 数据口的首地址
        ADD  A ,R3
        MOV  DPTR ,#PORTB  ;
        MOVX @DPTR , A    ;
        MOV  DPTR , #PORTA ;
        MOV  A  ,#08H
        MOVX @DPTR , A    ;
        PUSH A
        MOV  R4 , #00H  ;   R4清零
        RETI ;  中断返回
   PM1:
        MOV  A ,BUFFER  ; 数据口的首地址
        ADD  A ,R0
        MOV  DPTR ,#PORTB  ;
        MOVX @DPTR , A    ;
        MOV  DPTR , #PORTA ;
        MOV  A  ,#01H
        MOVX @DPTR , A    ;
        RETI  ;
  PM2:
        MOV  A ,BUFFER  ; 数据口的首地址
        ADD  A ,R1
        MOV  DPTR ,#PORTB  ;
        MOVX @DPTR , A    ;
        MOV  DPTR , #PORTA ;
        MOV  A  ,#02H
        MOVX @DPTR , A    ;
        RETI
  PM3:
        MOV  A ,BUFFER  ; 数据口的首地址
        ADD  A ,R2
        MOV  DPTR ,#PORTB  ;
        MOVX @DPTR , A    ;
        MOV  DPTR , #PORTA ;
        MOV  A  ,#04H
        MOVX @DPTR , A    ;
        RETI

        ;延时1MS
  DELAY:
        MOV  R6 , #02H ;
   DL:  MOV  R7 , #0FH
   DL7: DJNZ R7 , DL7  ;
        DJNZ R6 , DL
        RET
   PORTA: DW  0F00H
   PORTB: DW  0F01H
   CWR :  DW  0F03H    ; 确定方是字 A口为输出送7段码,B 口为输出送地址;

BUFFER:
      DB 0EFH ; "灭"
      DB 3FH  ; 0
      DB 06H  ; 1
      DB 5BH  ; 2
      DB 4FH  ; 3
      DB 66H  ; 4
      DB 6DH  ; 5
      DB 7DH  ; 6
      DB 07H  ; 7

  end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -