单片机计数器编程问题

分别用“统计外部中断0中断次数”和“让定时/计数器T0工作于方式2计数”的方法,实现对10个脉冲的计数,计数完成后,控制P1.0引脚上的电平取反,写出两种方法的完整程序

单片机计数器编程问题
单片机
分别用“统计外部中断0中断次数”和“让定时/计数器T0工作于方式2计数”的方法,实现对10个脉冲的计数,计数完成后,控制P1.0引脚上的电平取反,写出两种方法的完整程序

ORG 0x0000

    MOV TMOD, #0x00  ; T0工作于模式0
    MOV TH0, #0x00   ; 定时器初值
    MOV TL0, #0x00
    MOV TCON, #0x04  ; 启动T0
    
    MOV IE, #0x81    ; 启用外部中断0,启用总中断
    MOV IT0, #1      ; 外部中断0上升沿触发
    
    MOV P1, #0xFF    ; 初始化P1
    MOV CNT, #0      ; 计数器初始化
    
LOOP:
    JNB P1.0, LOOP   ; 等待外部中断0触发
    
    INC CNT
    CPL P1.0         ; 取反P1.0引脚
    
    CJNE CNT, #10, LOOP ; 继续循环
    
    SJMP $           ; 无限循环

EX0_ISR:
    CLR EX0          ; 清除外部中断0标志
    RETI

ORG 0x003B
    LJMP EX0_ISR

END

方法二:让定时/计数器T0工作于方式2计数

ORG 0x0000

    MOV TMOD, #0x06  ; T0工作于方式2计数
    MOV TH0, #0x00   ; 定时器初值
    MOV TL0, #0x00
    MOV TCON, #0x04  ; 启动T0
    
    MOV P1, #0xFF    ; 初始化P1
    MOV CNT, #0      ; 计数器初始化
    
LOOP:
    JNB TF0, LOOP    ; 等待T0溢出中断触发
    
    CLR TF0          ; 清除T0溢出标志
    INC CNT
    
    CPL P1.0         ; 取反P1.0引脚
    
    CJNE CNT, #10, LOOP ; 继续循环
    
    SJMP $           ; 无限循环