• slider image 442
  • slider image 483
  • slider image 484
  • slider image 485
  • slider image 486
  • slider image 487
:::


Browsing this Thread:   1 Anonymous Users






Re: 組語變數可以這樣用嗎 ?
#9
中級會員
中級會員


查看用戶資訊
好的,謝謝.
改成 cblock .. res .. endc 如下
(此程式已可顯示時間00:00至11:59並循環)
;**************************************************************************
;**** File : clock.asm
;**** 設計一個時鐘程式
;**************************************************************************
list p = 18F452
#include <p18F452.inc>
;
cblock 0x00
Clock_HourH:1 ; define address for hour upper digit
Clock_HourL:1 ; define address for hour lower digit
Clock_MinH:1 ; define address for minute upper digit
Clock_MinL:1 ; define address for minute lower digit
Clock_SecH:1 ; define address for second upper digit
Clock_SecL:1 ; define address for second lower digit
Count1:1 ; define address for time delay count number
Count1_1:1
Count1_2:1
Count2:1
Count2_1:1
Count2_2:1
endc
;
#define NINE b'00001001'
#define FIVE b'00000101'
#define THREE b'00000011'
#define TWO b'00000010'
#define ONE b'00000001'
#define ZERO b'00000000'
#define TEMP b'00000000'
#define TEMP1 b'00000001'
#define Count1_Init_Value 06AH ; LED digits alternately display times(SCANNING)
#define TMR1_VAL .2000 ; Timer1 設定為 500ms 中斷一次

;********************************************************************
;**** RESET Vector @ 0x0000
;********************************************************************
org 0x0000
bra Main
;
org 0x0008
bra Hi_ISRs
;
;********************************************************************
;**** The Main Program start from Here !!
;********************************************************************
org 0x002A
Main:


call Init_IO
call Init_Timer1
bsf RCON,IPEN ; Enable Interrupt priority
bsf INTCON,GIEH ; Enable all High Priority Interrupt
movlw ZERO
movwf Clock_SecH
movlw ZERO
movwf Clock_SecL
movlw ZERO
movwf Clock_MinL
movlw ZERO
movwf Clock_MinH
movlw ZERO
movwf Clock_HourL
movlw ZERO
movwf Clock_HourH
movlw ZERO
movwf Count1
movlw ZERO
movwf Count2_1
movlw ZERO
movwf Count2_2
;


Null_Loop
goto LEDdisplay
Null_Loop1 goto CountUpSecL
goto Null_Loop ; Do loop here
;
LEDdisplay
movlw Count1_Init_Value
nop
nop
cpfseq Count1,W
goto IncCount1
goto clrCount1
goto Null_Loop1
IncCount1
movf Clock_HourH,W
movwf PORTD
bsf PORTC,7
call TIMER100U
bcf PORTC,7
movf Clock_HourL,W
movwf PORTD
bsf PORTC,6
call TIMER100U
bcf PORTC,6
movf Clock_MinH,W
movwf PORTD
bsf PORTC,5
call TIMER100U
bcf PORTC,5
movf Clock_MinL,W
movwf PORTD
bsf PORTC,4
call TIMER100U
bcf PORTC,4
incf Count1
goto LEDdisplay
clrCount1
movlw ZERO
movwf Count1
goto Null_Loop1
;***********************************************************************
;**** Initial the PORTE&PORTD for the output port
;***********************************************************************

CountUpSecL
nop
movlw b'00001001'
nop
nop
nop
cpfseq Clock_SecL,0
goto SecLCountUp
goto SecLZero

SecLCountUp
incf Clock_SecL
nop
goto Null_Loop
SecLZero
nop
movlw ZERO
movwf Clock_SecL
movlw b'00000101'
nop
nop
nop
cpfseq Clock_SecH,0
goto SecHCountUp
goto SecHZero
goto Null_Loop
SecHCountUp
nop
incf Clock_SecH
nop
goto Null_Loop
SecHZero
nop
movlw ZERO
movwf Clock_SecH
nop
movlw NINE
nop
nop
cpfseq Clock_MinL,0
goto MinLCountUp
goto MinLZero
goto Null_Loop
MinLCountUp
incf Clock_MinL
goto Null_Loop
MinLZero
movlw ZERO
movwf Clock_MinL
movlw FIVE
nop
nop
cpfseq Clock_MinH,0
goto MinHCountUp
goto MinHZero
goto Null_Loop
MinHCountUp
incf Clock_MinH
goto Null_Loop
MinHZero
movlw ZERO
movwf Clock_MinH
movlw ONE
nop
nop
cpfseq Clock_HourH,0
goto CountUpHourL
goto HourLCheck
goto Null_Loop
CountUpHourL
movlw NINE
nop
nop
cpfseq Clock_HourL,0
goto HourLCountUp
goto HourLZero
goto Null_Loop
HourLCheck
movlw ONE
nop
nop
cpfseq Clock_HourL,0
goto PureCountUpHourL
goto HourHLZero
goto Null_Loop
HourLCountUp
incf Clock_HourL
goto Null_Loop
HourLZero
movlw ZERO
movwf Clock_HourL
incf Clock_HourH
goto Null_Loop

PureCountUpHourL
incf Clock_HourL
goto Null_Loop
HourHLZero
movlw ZERO
movwf Clock_HourL
movlw ZERO
movwf Clock_HourH
goto Null_Loop
Init_IO
movlw 00FH
movwf ADCON1
bsf TRISB,0
bcf PORTB,0
clrf TRISE
movlw b'00000010'
movwf PORTE
clrf TRISD
bcf TRISC,4 ; LED power digit for Sec Low
bcf TRISC,5 ; LED power digit for Sec High
bcf TRISC,6 ; LED power digit for Min Low
bcf TRISC,7 ; LED power digit for Min High
bcf PORTC,4
bcf PORTC,5
bcf PORTC,6
bcf PORTC,7
movlw b'00000000'
movwf PORTD
call TIMER100U
call TIMER100U
call TIMER100U
return

;***********************************************************************
;**** Initial Timer1 as a 500ms Timer
;***********************************************************************
Init_Timer1
movlw 0CFH ; 16-bit mode , Prescaler = 1:1 , Async mode
movwf T1CON ; Use external 32768Hz crystal , Timer1 On
;
movlw (.65536-TMR1_VAL)/.256 ; Calcute the MSB value for the Timer1
movwf TMR1H
movlw (.65536-TMR1_VAL)%.256 ; Calcute the LSB value for the Timer1
movwf TMR1L
;
movlw 001H ; Set Timer1 for high priority interrupt
movwf PIE1 ; Clear Timer1 Interrupt flag
movlw 001H
movwf IPR1
bcf PIR1, TMR1IF
bsf PIE1, TMR1IE ; Enable Timer1 Interrupt
return
TIMER100U
movlw 002H
nop
cpfseq Count2_2,0
goto Time_Loop1
goto TIMER_Finish2
Time_Loop1
incf Count2_2
Time_Loop2
movlw 005H
nop
cpfseq Count2_1,0
goto TIMER_Loop
goto TIMER_Finish1
TIMER_Loop
incf Count2_1
movlw 0A8H
movwf Count2
decfsz Count2
bra $-2
goto Time_Loop2
TIMER_Finish1
clrf Count2_1
goto TIMER100U
TIMER_Finish2
clrf Count2_2
return
;***************************************************************************************
;**** ISRs() : 中斷服務程式
;****
;***************************************************************************************
Hi_ISRs
bcf PIR1, TMR1IF ; Clear Timer1 Interrupt flag
;
movlw (.65536-TMR1_VAL)/.256 ; Calcute the MSB value for the Timer1
movwf TMR1H
movlw (.65536-TMR1_VAL)%.256 ; Calcute the LSB value for the Timer1
movwf TMR1L
retfie FAST ; Return with shadow register
;
END

發表於: 2006/10/19 16:38
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 組語變數可以這樣用嗎 ?
#8
版主
版主


查看用戶資訊
不懂,可以打 0800-717-718 技術支援專線。

發表於: 2006/10/19 15:38
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 組語變數可以這樣用嗎 ?
#7
中級會員
中級會員


查看用戶資訊
'MPASMㄧ天講義' 看的霧煞煞 , 因為實在抽不出時間上課 .
謝謝 Ryang !

發表於: 2006/10/19 11:48
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 組語變數可以這樣用嗎 ?
#6
版主
版主


查看用戶資訊
不行這樣寫,udata是屬於Linker定變數的指令,而城市裡是用絕對定址的方式(org)所以是不對的。
可以用 Cblock + res + endc 的指令來定義變數或直接使用EQU 也可以。
看你的程式還是常數跟變數分不清楚,equ 可以為常數或變數看你的指令如何,你都把分鐘和小時都宣告為位址0x00造成打架了, 

發表於: 2006/10/19 10:49
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 組語變數可以這樣用嗎 ?
#5
中級會員
中級會員


查看用戶資訊
謝謝幫忙 !

改了一點如下 , 組譯過不了 .

;**************************************************************************
;**** File : clock.asm
;**** 設計一個時鐘程式
;**************************************************************************
list p = 18F452
#include <p18F452.inc>
HourU equ H'0' ; hour upper digit
HourL equ H'0' ; hour lower digit
MinU equ H'0' ; minute upper digit
MinL equ H'0' ; minute lower digit

Nine equ H'9'
Six equ H'6'
Two equ H'2'
One equ H'1'
Zero equ 0x00
Temp equ 0x00
Temp1 equ 0x01
Count1 equ 0x00
TMR1_VAL equ .2000 ; Timer1 設定為 500ms 中斷一次
udata
global SecH, SecL
SecH res 1
SecL res 1
;********************************************************************
;**** RESET Vector @ 0x0000
;********************************************************************
org 0x0000
bra Main
;
org 0x0008
bra Hi_ISRs
;
;********************************************************************
;**** The Main Program start from Here !!
;********************************************************************
org 0x002A
Main:
clrf SecH
clrf SecL
call Init_IO
call Init_Timer1
bsf RCON,IPEN ; Enable Interrupt priority
bsf INTCON,GIEH ; Enable all High Priority Interrupt
;
Null_Loop
call CountUp
goto Null_Loop ; Do loop here
;
;***********************************************************************
;**** Initial the PORTE&PORTD for the output port
;***********************************************************************
CountUp
if SecL < Nine
incf PORTD
incf SecL
call TIMER100U
else
if SecH < Six
incf SecH
clrf SecL
clrf PORTD
call TIMER100U
else
clrf SecL
clrf SecH
clrf PORTD
call TIMER100U
endif
endif
return
Init_IO
movlw 00FH
movwf ADCON1
bsf TRISB,0
bcf PORTB,0
clrf TRISE
movlw b'00000010'
movwf PORTE
clrf TRISD
movlw b'00000000'
movwf PORTD
call TIMER100U


return
;***********************************************************************
;**** Initial Timer1 as a 500ms Timer
;***********************************************************************
Init_Timer1
movlw 0CFH ; 16-bit mode , Prescaler = 1:1 , Async mode
movwf T1CON ; Use external 32768Hz crystal , Timer1 On
;
movlw (.65536-TMR1_VAL)/.256 ; Calcute the MSB value for the Timer1
movwf TMR1H
movlw (.65536-TMR1_VAL)%.256 ; Calcute the LSB value for the Timer1
movwf TMR1L
;
movlw 001H ; Set Timer1 for high priority interrupt
movwf PIE1 ; Clear Timer1 Interrupt flag
movlw 001H
movwf IPR1
bcf PIR1, TMR1IF
bsf PIE1, TMR1IE ; Enable Timer1 Interrupt
return
TIMER100U
movlw 002H
movwf Count1
decfsz Count1
bra $-2
return
;***************************************************************************************
;**** ISRs() : 中斷服務程式
;****
;***************************************************************************************
Hi_ISRs
bcf PIR1, TMR1IF ; Clear Timer1 Interrupt flag
;
movlw (.65536-TMR1_VAL)/.256 ; Calcute the MSB value for the Timer1
movwf TMR1H
movlw (.65536-TMR1_VAL)%.256 ; Calcute the LSB value for the Timer1
movwf TMR1L
; btfsc PORTB,0
; infsnz PORTD ; PORTD = PORTD + 1;
retfie FAST ; Return with shadow register
;
END

發表於: 2006/10/18 15:31
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 組語變數可以這樣用嗎 ?
#4
版主
版主


查看用戶資訊
說來話長,請參考右邊教育訓練裡的 W100 & W400 & MPASMㄧ天講義。

發表於: 2006/10/18 15:18
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 組語變數可以這樣用嗎 ?
#3
中級會員
中級會員


查看用戶資訊
願聞其詳 ! 請指教 !
變數該如何宣告呢 ?

發表於: 2006/10/18 15:14
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 組語變數可以這樣用嗎 ?
#2
版主
版主


查看用戶資訊
從宣告上來看,SecH & SecL 是常數其值為0,但程式處理時卻把它當作是變數且戰的位址都是0x00且位址重複,所以你的程式要改。

發表於: 2006/10/18 14:47
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


組語變數可以這樣用嗎 ?
#1
中級會員
中級會員


查看用戶資訊
我用pic18f452及ICD2 想寫組語時發現變數SecL一直是常數,
同時不知到 if...else...endif 這樣做是否有效 .

以下是發展中程式 , SecL 代表秒數的個位數, 超過 9 時 秒數的
十位要進位 , 但是 SecL 一直不變, 是何原因, 請先進們指教 !
;**************************************************************************
;****    
File clock.asm
;****    設計一個時鐘程式      
;**************************************************************************
            list     
18F452
            
#include <p18F452.inc>
HourU       equ     H'0'    hour upper digit
HourL       equ     H
'0'    hour lower digit
MinU        equ     H
'0'    minute upper digit
MinL        equ     H
'0'    minute lower digit
SecH        equ     
b'00000000'
SecL        equ     b'00000000'
Nine        equ     b'00001001'
Six         equ     b'00000110'
Two         equ     H'2'
One         equ     H'1'
Zero        equ     0x00
Temp        equ     0x00
Temp1       equ     0x01
Count1      equ     0x00                           
TMR1_VAL    equ        .2000            
Timer1 設定為 500ms 中斷一次 
;********************************************************************
;****    
RESET Vector 0x0000
;********************************************************************
            
org        0x0000         
            bra     Main

            
org        0x0008        
            bra     Hi_ISRs
;
;********************************************************************
;****    
The Main Program start from Here !! 
;********************************************************************
            
org        0x002A
Main
:
            
call    Init_IO
            call    Init_Timer1
            bsf        RCON
,IPEN        Enable Interrupt priority
            bsf        INTCON
,GIEH        Enable all High Priority Interrupt
;
Null_Loop  
            call    CountUp 
            
goto    Null_Loop        ; Do loop here
;
;***********************************************************************
;****        
Initial the PORTE&PORTD for the output port 
;***********************************************************************
CountUp
        
if  ( SecL Nine 
            
incf    PORTD
            incf    SecL
            call    TIMER100U
        
else
          if   
SecH Six 
            incf    SecH
            clrf    SecL
            clrf    PORTD
            call    TIMER100U
          
else
            
clrf    SecL
            clrf    SecH
            clrf    PORTD
            call    TIMER100U
          
endif
        endif
            return
Init_IO
            movlw   00FH
            movwf   ADCON1
            bsf     TRISB
,0
            bcf     PORTB
,0
            clrf    TRISE
            movlw   
b'00000010'
            
movwf   PORTE
             clrf    TRISD
            movlw   
b'00000000'
            
movwf    PORTD
            call    TIMER100U
            
            
            
return
;***********************************************************************
;****        
Initial Timer1 as a 500ms Timer 
;***********************************************************************
Init_Timer1
            movlw   0CFH                            
16-bit mode Prescaler 1:Async mode
            movwf   T1CON                            
; Use external 32768Hz crystal Timer1 On
;
            
movlw    (.65536-TMR1_VAL)/.256    Calcute the MSB value for the Timer1
            movwf    TMR1H
            movlw    
(.65536-TMR1_VAL)%.256    Calcute the LSB value for the Timer1
            movwf    TMR1L
;
            
movlw   001H                            Set Timer1 for high priority interrupt
            movwf   PIE1                            
Clear Timer1 Interrupt flag
            movlw   001H
            movwf   IPR1
            bcf     PIR1
TMR1IF
            bsf     PIE1
TMR1IE                    Enable Timer1 Interrupt
            
return
TIMER100U
           movlw 002H
           movwf Count1
           decfsz Count1
           bra 
$-2
           
return
;***************************************************************************************
;****        
ISRs() : 中斷服務程式 
;****
;***************************************************************************************
Hi_ISRs
            bcf     PIR1
TMR1IF                            Clear Timer1 Interrupt flag
;                                       
            
movlw   (.65536-TMR1_VAL)/.256                            Calcute the MSB value for the Timer1
            movwf   TMR1H
            movlw   
(.65536-TMR1_VAL)%.256                            Calcute the LSB value for the Timer1
            movwf   TMR1L
   
;         btfsc   PORTB,0
    
;        infsnz  PORTD                            PORTD PORTD 1;
            
retfie    FAST                     ; Return with shadow register

               
END


發表於: 2006/10/18 9:04
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部







You can view topic.
不可以 發起新主題
You cannot reply to posts.
You cannot edit your posts.
You cannot delete your posts.
You cannot add new polls.
You cannot vote in polls.
You cannot attach files to posts.
You cannot post without approval.
You cannot use topic type.
You cannot use HTML syntax.
You cannot use signature.
You cannot create PDF files.
You cannot get print page.

[進階搜尋]


:::

Microchip連結

https://www.facebook.com/microchiptechnologytaiwan/
http://www.microchip.com.tw/modules/tad_uploader/index.php?of_cat_sn=13
https://mu.microchip.com/page/tmu
http://elearning.microchip.com.tw/modules/tad_link/index.php?cate_sn=1
https://page.microchip.com/APAC-PrefCenters-TW.html
http://www.microchip.com/
http://www.microchip.com/treelink
http://www.microchipdirect.com/
http://www.microchip.com.cn/newcommunity/index.php?m=Video&a=index&id=103
http://www.microchip.com.tw/modules/tad_uploader/index.php?of_cat_sn=2
http://www.microchip.com.tw/Data_CD/eLearning/index.html
http://www.microchip.com.tw/RTC/RTC_DVD/
https://www.microchip.com/development-tools/
https://www.youtube.com/user/MicrochipTechnology
[ more... ]

教育訓練中心

!開發工具購買
辦法說明 [業界客戶] [教育單位]
----------------------------------
!校園樣品申請
辦法說明 [教師資格] [學生資格]
----------------------------------