• 赞助网站
  • 您的位置:  首页 >> 技术交流区 >> MCU技术 >> 绕线机计数器程序源代码。
    绕线机计数器程序源代码。
    2012年01月15日 点击: 编辑: 吉林slz
    [audio06]
    下面是5位数可逆记数程序:


    ;**************************;
    ; 绕线机计数器程序 ;
    ; CPU : AT89C2051 ;
    ; 作者:137
    ; 2005-02-01 ;
    ;*************************;

    ORG 0000H ;程序执行开始地址
    LJMP START ;跳至START执行
    ORG 0003H ;外中断0中断入口地址
    LJMP INTEXT0 ;
    ORG 000BH ;定时器T0中断入口地址
    RETI ;中断返回
    ORG 0013H ;外中断1中断入口地址
    LJMP INTEXT1 ;
    ORG 001BH ;定时器T1中断入口地址
    RETI ;中断返回
    ORG 0023H ;串行口中断入口地址
    RETI ;中断返回
    ORG 002BH ;定时器T2中断入口地址
    RETI ;中断返回

    ;************;
    ; 初始化程序 ;
    ;************;

    CLEAR: MOV A,#00H;
    MOV R0,A
    MOV R1,A
    MOV R2,A
    MOV R3,A
    MOV R4,A
    MOV P3,#0FFH
    MOV P1,#0FFH
    LJMP MAIN; 跳到主程序开始计数

    START: MOV P1,#0FFH; 开机显示LIN.P
    MOV P3,#0FFH
    MOV R4,#0AH;L
    MOV R3,#0BH;I
    MOV R2,#0CH;N
    MOV R1,#0DH;
    MOV R0,#0EH;P
    JNB P1.7,START1;如清零键按下跳至清零确认程序
    ACALL DISPLAY;
    AJMP START
    START0: MOV R4,#0EH;P 清零时显示"P L"
    MOV R3,#0DH;
    MOV R2,#0DH;
    MOV R1,#0AH;L
    MOV R0,#0DH;
    START1: ACALL DISPLAY; 等待键释放
    JNB P1.7, START1
    AJMP CLEAR

    ;************;
    ; 主 程 序 ;
    ;************;

    MAIN: ACALL DISPLAY; 调用显示程序
    MOV P1,#0FFH; 置P1口为输入状态
    MOV P3,#0FFH; 置P3口为输入状态
    JNB P1.7,START0; 如清零键按下跳至清零程序
    SETB IT0
    SETB EX0
    SETB IT1
    SETB EX1
    SETB EA; 开总中断
    AJMP MAIN


    ;************;
    ; 加1程序 ;
    ;************;

    INTEXT0: PUSH ACC; 进栈
    PUSH PSW;
    INC R0; 寄存单元R0加1
    CJNE R0,#0AH,INT0OUT; R0数是否在10内0-9
    MOV R0,#00H; 如到了则将R0置0
    INC R1; R1加1
    CJNE R1,#0AH,INT0OUT; .
    MOV R1,#00H; .
    INC R2; .
    CJNE R2,#0AH,INT0OUT
    MOV R2,#00H
    INC R3
    CJNE R3,#0AH,INT0OUT
    MOV R3,#00H
    INC R4
    CJNE R4,#0AH,INT0OUT
    MOV R4,#00H
    INT0OUT: POP PSW; 出栈
    POP ACC
    RETI; 中断返回

    ;************;
    ; 减1程序 ;
    ;************;

    INTEXT1: PUSH ACC; 进栈
    PUSH PSW
    DEC R0; R0减1
    CLR C; 清进位标致
    CJNE R0,#0FFH,INT1OUT; 判断R0是不在0-9中
    MOV R0,#09H; 不是将R0置9
    DEC R1; R1减1
    CLR C; .
    CJNE R1,#0FFH,INT1OUT; .
    MOV R1,#09H; .
    DEC R2;
    CLR C
    CJNE R2,#0FFH,INT1OUT
    MOV R2,#09H
    DEC R3
    CLR C
    CJNE R3,#0FFH,INT1OUT
    MOV R3,#09H
    DEC R4
    CLR C
    CJNE R4,#0FFH,INT1OUT
    MOV R4,#09H
    INT1OUT: POP PSW
    POP ACC
    RETI
    ;************;
    ; 显示程序 ;
    ;************;
    DISPLAY: MOV DPTR,#NUMTAB
    MOV A,R0
    MOVC A,@A+DPTR
    MOV P1,A
    CLR P3.0; 选中小数位显示
    ACALL D1MS
    SETB P3.0

    MOV A,R1
    MOVC A,@A+DPTR
    MOV P1,A
    CLR P3.1; 选中个位数显示
    ACALL D1MS
    SETB P3.1

    MOV A,R2
    MOVC A,@A+DPTR
    MOV P1,A
    CLR P3.4; 选中十位数显示
    ACALL D1MS
    SETB P3.4

    MOV A,R3
    MOVC A,@A+DPTR
    MOV P1,A
    CLR P3.7; 选中百位数显示
    ACALL D1MS
    SETB P3.7

    MOV A,R4
    MOVC A,@A+DPTR
    MOV P1,A
    CLR P3.5; 选中千位数显示
    ACALL D1MS
    SETB P3.5
    RET

    ;*******;
    ;延时程序;
    ;*******;
    D1MS: MOV R7,#2
    DJNZ R7,$
    RET
    ;*********;
    ; 查表程序 ;
    ;*********;
    NUMTAB: DB 03FH;0
    DB 006H;1
    DB 05BH;2
    DB 04FH;3
    DB 066H;4
    DB 06DH;5
    DB 07DH;6
    DB 007H;7
    DB 07FH;8
    DB 06FH;9
    DB 038H;L
    DB 030H;I
    DB 037H;N
    DB 000H;
    DB 073H;P
    END
    赞助网站 | 关于我们 | 版权声明 | 站点导航 | 收藏本站 | 设为首页