Assembly 加上一句「;延迟“;PIC16F684上LED时钟的部分?

Assembly 加上一句「;延迟“;PIC16F684上LED时钟的部分?,assembly,pic,Assembly,Pic,好的,我已经写了一个.asm来操作3个LED,但是我很久以前就做过了,并且对命令/结构非常生疏。我甚至不知道这个脚本到底是做什么的 据我所知,它以二进制形式从0-7计数(3个LED=0-7?) 我的问题是:如何在LED开启之间增加~1秒的延迟,使其作为基本的视觉二进制时钟工作 非常感谢 ; WRITTEN BY JL ; DATE 28/03/05 ; FILE SAVED AS SAMPLE6.ASM ; DEVICE

好的,我已经写了一个.asm来操作3个LED,但是我很久以前就做过了,并且对命令/结构非常生疏。我甚至不知道这个脚本到底是做什么的

据我所知,它以二进制形式从0-7计数(3个LED=0-7?)

我的问题是:如何在LED开启之间增加~1秒的延迟,使其作为基本的视觉二进制时钟工作

非常感谢

; WRITTEN BY            JL
; DATE                  28/03/05
; FILE SAVED AS         SAMPLE6.ASM
; DEVICE                PIC16F684
; OSCILLATOR            XT (4MHZ)
; WATCHDOG              DISABLED
; FUNCTION              LEDs are switched ON in a binary sequence 
    list      p=16f684            ; list directive to define processor
    #include <p16f684.inc>        ; processor specific variable definitions
__CONFIG  _CP_OFF & _WDT_OFF &_PWRTE_ON & _INTRC_OSC_NOCLKOUT & _MCLRE_OFF & _CPD_OFF

;*******************************Equates****************************************
PORTA EQU 05h
COUNT1 EQU 20h; Set up two counters to count down a delay
COUNT2 EQU 21h

;*******************************Defines****************************************
; define input/output designation for LEDs (what TRISA will equal)

#define TRIS_D0_D1  B'00001111' ; TRISIO setting for D0 and D1
#define TRIS_D2_D3  B'00101011' ; TRISIO setting for D2 and D3
#define TRIS_D4_D5  B'00011011' ; TRISIO setting for D4 and D5

; define LED state (what PORTA will equal)

#define D0_ON   B'00010000'     ; D0 LED
#define D1_ON   B'00100000'     ; D1 LED
#define D2_ON   B'00010000'     ; D2 LED

;****************************** Start of Program ******************************

           org     0x000               ; processor reset vector

;************* Initialize PortA **********
           movlw    B'00111111'     ; Set all I/O pins of PORTA as inputs
           TRIS    PORTA                
           clrf    PORTA               ; clear all outputs

;************** LED0 ON *********************
START        movlw  TRIS_D0_D1      ; move predefined value to TRISA to switch ON LED0
           TRIS    PORTA
             movlw  D0_ON              ; move predefined value to PORTA TO switch ON LED0
           movwf    PORTA
           decfsz   COUNT1,1       ;Subtract 1 from 00h (this gives 255 or FFh)
          goto     START          ;If COUNT is zero, carry on.
          decfsz   COUNT2,1       ;Subtract 1 from 00h
          goto     START          ;Go back to the start of our loop
;************** LED1 ON *********************
LOOP2       movlw   D1_ON              ; move predefined value to PORTA TO switch ON LED1
           movwf    PORTA
             decfsz   COUNT1,1       ;Subtract 1 from 00h (this gives 255 or FFh)
          goto     LOOP2          ;If COUNT is zero, carry on.
          decfsz   COUNT2,1       ;Subtract 1 from 00h
          goto     LOOP2          ;Go back to the start of our loop
;************** LED0 and LED1 ON **************
LOOP3    movlw  D0_ON              ; move predefined value to PORTA TO switch ON LED0
           movwf    PORTA
             movlw  D1_ON              ; move predefined value to PORTA TO switch ON LED1
           movwf    PORTA
          decfsz  COUNT1,1        ;Subtract 1 from 00h (this gives 255 or FFh)
          goto    LOOP3           ;If COUNT is zero, carry on.
          decfsz  COUNT2,1        ;Subtract 1 from 00h
          goto    LOOP3           ;Go back to the start of our loop
;************** LED2 ON *********************   
LOOP4        movlw  TRIS_D2_D3      ; move predefined value to TRISA to switch ON LED2
           TRIS    PORTA
             movlw  D2_ON              ; move predefined value to PORTA TO switch ON LED2
           movwf    PORTA
          decfsz   COUNT1,1       ;Subtract 1 from 00h (this gives 255 or FFh)
          goto     LOOP4          ;If COUNT is zero, carry on.
          decfsz   COUNT2,1       ;Subtract 1 from 00h
          goto     LOOP4          ;Go back to the start of our loop
;************** LED0 and LED2 ON **************
LOOP5        movlw  TRIS_D0_D1       ; move predefined value to TRISA to switch ON LED0
           TRIS    PORTA
             movlw  D0_ON               ; move predefined value to PORTA TO switch ON LED0
           movwf    PORTA
             movlw  TRIS_D2_D3       ; move predefined value to TRISA to switch ON LED2
           TRIS    PORTA
             movlw  D2_ON               ; move predefined value to PORTA TO switch ON LED2
           movwf    PORTA
            decfsz  COUNT1,1        ;Subtract 1 from 00h (this gives 255 or FFh)
          goto    LOOP5           ;If COUNT is zero, carry on.
          decfsz  COUNT2,1        ;Subtract 1 from 00h
          goto    LOOP5           ;Go back to the start of our loop
;************** LED1 and LED2 ON **************
LOOP6        clrf      PORTA               ; clear all outputs
             movlw  TRIS_D0_D1       ; move predefined value to TRISA to switch ON LED1
           TRIS    PORTA
             movlw  D1_ON               ; move predefined value to PORTA TO switch ON LED1
           movwf    PORTA
             movlw  TRIS_D2_D3       ; move predefined value to TRISA to switch ON LED2
           TRIS    PORTA
             movlw  D2_ON               ; move predefined value to PORTA TO switch ON LED2
           movwf    PORTA
            decfsz  COUNT1,1        ;Subtract 1 from 00h (this gives 255 or FFh)
          goto    LOOP6           ;If COUNT is zero, carry on.
          decfsz  COUNT2,1        ;Subtract 1 from 00h
          goto    LOOP6           ;Go back to the start of our loop
;************** LED0,LED1 and LED2 ON **************
LOOP7        movlw  TRIS_D0_D1       ; move predefined value to TRISA to switch ON LED0 and LED1
           TRIS    PORTA
             movlw  D0_ON               ; move predefined value to PORTA TO switch ON LED0
           movwf    PORTA
             movlw  D1_ON               ; move predefined value to PORTA TO switch ON LED1
           movwf    PORTA
             movlw  TRIS_D2_D3       ; move predefined value to TRISA to switch ON LED2
           TRIS    PORTA
             movlw  D2_ON               ; move predefined value to PORTA TO switch ON LED2
           movwf    PORTA
            decfsz  COUNT1,1        ;Subtract 1 from 00h (this gives 255 or FFh)
          goto    LOOP7           ;If COUNT is zero, carry on.
          decfsz  COUNT2,1        ;Subtract 1 from 00h
          goto    LOOP7           ;Go back to the start of our loop

;**********End of program *****************

          goto    START           ; indefinite loop
           END                        ; End instruction is needed by some compilers and also useful in case we miss goto instruction

;*********************************************************************************
;作者:JL
; 日期:2005年3月28日
; 文件另存为SAMPLE6.ASM
; 设备PIC16F684
; 振荡器XT(4MHZ)
; 看门狗残疾
; 功能LED以二进制顺序打开
列表p=16f684;用于定义处理器的list指令
#包括,;处理器特定变量定义
__配置CP关闭和WDT关闭和PWRTE打开和INTRC关闭和MCLRE关闭和CPD关闭
;*******************************等同于****************************************
门EQU 05h
计数1等于20小时;设置两个计数器以倒计时延迟
COUNT2 EQU 21h
;*******************************定义****************************************
; 定义LED的输入/输出名称(TRISA将等于什么)
#定义TRIS_D0_D1 B'00001111';D0和D1的TRISIO设置
#定义TRIS_D2_D3 B'00101011';D2和D3的TRISIO设置
#定义TRIS_D4_D5 B'0001011';D4和D5的TRISIO设置
; 定义LED状态(PORTA将等于什么)
#在B'00010000'上定义D0_;D0发光二极管
#在B'00100000'上定义D1_;首被告领先
#在B'00010000'上定义D2_;D2发光二极管
;****************************** 节目开始******************************
组织0x000;处理器复位向量
;************* 初始化端口**********
movlw B'00111111';将PORTA的所有I/O引脚设置为输入
三门
clrf门;清除所有输出
;************** 莱德*********************
启动movlw TRIS_D0_D1;将预定义值移动到TRISA以打开LED0
三门
移动D0_ON;将预定义值移动到PORTA以打开LED0
movwf门
decfsz计数1,1;从00h中减去1(即255或FFh)
转到开始;如果计数为零,则继续。
decfsz计数2,1;从00h中减去1
转到开始;回到循环的开始
;************** LED1接通*********************
回路2移动D1_ON;将预定义值移动到PORTA以打开LED1
movwf门
decfsz计数1,1;从00h中减去1(即255或FFh)
转到LOOP2;如果计数为零,则继续。
decfsz计数2,1;从00h中减去1
转到LOOP2;回到循环的开始
;************** LED0和LED1接通**************
LOOP3 movlw D0_ON;将预定义值移动到PORTA以打开LED0
movwf门
移动D1_ON;将预定义值移动到PORTA以打开LED1
movwf门
decfsz计数1,1;从00h中减去1(即255或FFh)
转到LOOP3;如果计数为零,则继续。
decfsz计数2,1;从00h中减去1
转到LOOP3;回到循环的开始
;************** ************************上的LED2
LOOP4 movlw TRIS_D2_D3;将预定义值移动到TRISA以打开LED2
三门
移动D2_ON;将预定义值移动到PORTA以打开LED2
movwf门
decfsz计数1,1;从00h中减去1(即255或FFh)
转到LOOP4;如果计数为零,则继续。
decfsz计数2,1;从00h中减去1
转到LOOP4;回到循环的开始
;************** LED0和LED2接通**************
回路5移动LW TRIS_D0_D1;将预定义值移动到TRISA以打开LED0
三门
移动D0_ON;将预定义值移动到PORTA以打开LED0
movwf门
movlw TRIS_D2_D3;将预定义值移动到TRISA以打开LED2
三门
移动D2_ON;将预定义值移动到PORTA以打开LED2
movwf门
decfsz计数1,1;从00h中减去1(即255或FFh)
转到环路5;如果计数为零,则继续。
decfsz计数2,1;从00h中减去1
转到环路5;回到循环的开始
;************** LED1和LED2接通**************
LOOP6 clrf端口;清除所有输出
movlw TRIS_D0_D1;将预定义值移动到TRISA以打开LED1
三门
移动D1_ON;将预定义值移动到PORTA以打开LED1
movwf门
movlw TRIS_D2_D3;将预定义值移动到TRISA以打开LED2
三门
移动D2_ON;将预定义值移动到PORTA以打开LED2
movwf门
decfsz计数1,1;从00h中减去1(即255或FFh)
转到LOOP6;如果计数为零,则继续。
decfsz计数2,1;从00h中减去1
转到LOOP6;回到循环的开始
;************** LED0、LED1和LED2接通**************
回路7移动LW TRIS_D0_D1;将预定义值移动到TRISA以打开LED0和LED1
三门
移动D0_ON;将预定义值移动到PORTA以打开LED0
movwf门
movlw D1_