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

論壇索引


Board index » All Posts (coyyhw)




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


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

發表於: 2006/10/19 11:48
頂部


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


謝謝幫忙 !

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

;**************************************************************************
;**** 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
頂部


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


願聞其詳 ! 請指教 !
變數該如何宣告呢 ?

發表於: 2006/10/18 15:14
頂部


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


我用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
頂部


誰有W401 ex2,3,4,5 的標準答案 ?
#35
中級會員
中級會員


W401 Exercise 內 ex2,3,4,5 問號部份填不出來
不知誰有asm 程式 ?
( 我用 pic18f452 + 外部 8MHz crystal )
以下是自作實習板及 自己填的ex2及ex3 程式, 請指教
縮圖
;**************************************************************************
;**** File : Ex2.asm
;**** 設計一個一秒鐘讓 PORTD 的 LED 自動加一的程式
;**************************************************************************
list p = 18F452
#include <p18F452.inc>
;
Temp EQU b'00000001'
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

goto Null_Loop ; Do loop here
;
;***********************************************************************
;**** Initial the PORTD for the output port
;***********************************************************************
Init_IO
movlw 0FFH
movwf ADCON1
movlw 0FFH
movwf TRISC
clrf TRISD
movlw b'00000001'
movwf PORTD
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
;***************************************************************************************
;**** 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
addwfc PORTD,Temp
; infsnz PORTD ; PORTD = PORTD + 1;
retfie FAST ; Return with shadow register
;
END

;**************************************************************************
;**** File : Ex3.asm
;**** Read VR1 with the analog voltage input and convert the voltage
;**** to 8-bit digital on LED
;**************************************************************************

list p = 18F452
include <p18F452.inc>

;
C_Hold_Delay equ 0x20
;
;********************************************************************
;**** 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_AD
;
AD_Loop rcall C_Hold_Time ; Delay 50uS for the sample hold time
bsf ADCON0, GO ; Start convert the A/D
nop ; Nop
Check btfsc ADCON0, GO ; Check the A/D completed ?
goto Check ; A/D isn't completed yet, continut check.
swapf ADRESH, w ; save the a/D result with MSB to
;
andlw 0x0F
movwf PORTD
nop
rcall C_Hold_Time
goto AD_Loop
;***********************************************************************
;**** Initial the PORTD for the output port
;***********************************************************************
Init_IO:
clrf TRISD
clrf PORTD
;
bsf TRISA,RA0 ; Set RA0 with input mode
;
return
;***********************************************************************
;**** Initial A/D Converter
;***********************************************************************
Init_AD:
movlw b'00001110' ; Left Justified, Fosc/32
movwf ADCON1 ; Set AN0 for the Analog Input
;
movlw b'10000001' ; Fosc/32 , Select AN0 channel
movwf ADCON0 ; A/D on
;
bsf PIE1,ADIE ; Disable interrupt of A/D

return
;
;
;***********************************************************************
;**** Sample Hold (Charge) time delay routine (50uS)
;***********************************************************************
C_Hold_Time:
movlw 020H
movwf C_Hold_Delay
nop
decfsz C_Hold_Delay,F
bra $-4
return

;***************************************************************************************
;**** ISRs() : High priority interrupt service routine
;****
;***************************************************************************************
Hi_ISRs
retfie FAST ; Return with shadow register
;
END


發表於: 2006/7/17 11:33
頂部


Re: 自己作demo board 就是不通
#36
中級會員
中級會員


ok , 只用 22pF , 結果如下.
縮圖
縮圖
依圖作的結果如下( Configuration bit 設為 HS )
MPLAB ICD 2 Ready
Programming Target...
...Validating configuration fields
...Erasing Part
...Programming Program Memory (0x0 - 0x2F)
...Loading DebugExecutive
...Programming DebugExecutive
...Programming Debug Vector
...Programming RSBUG
Verifying...
...Program Memory
...Debug Executive
...Debug Vector
...Verify Succeeded
Programming Configuration Bits
.. Config Memory
Verifying configuration memory...
...Verify Succeeded
Connecting to debug executive
ICD0083: Debug: Unable to enter debug mode. Please double click this message for more information.
MPLAB ICD 2 Ready
還是卡住 !!!


***************

Crystal 改 8Mhz 就 解決了! 縮圖

發表於: 2006/6/30 9:43
頂部


Re: 自己作demo board 就是不通
#37
中級會員
中級會員


我用的是 33p 2 個 加上 10MHz crystal .
是否有電路圖可以剪來參考, 我想只作一片含括MCLR 外部振盪器 及電話接頭 的最小功能實驗板 ( LCD , LED , sensor 等
考慮 外接 ) , 謝謝 .

發表於: 2006/6/30 9:03
頂部


Re: 自己作demo board 就是不通
#38
中級會員
中級會員


已設為 HS , 不過晚上回家後會再檢查看看 , 謝謝 .
還是不通 , 改了一些電路 , 全掛了 . 只好再重作一塊板子了 .
不管如何 , 仍然謝謝各位的指導 .

發表於: 2006/6/27 9:28
頂部


Re: 自己作demo board 就是不通
#39
中級會員
中級會員


好的 , 晚一點 會剪下, 先請各位休息 , 我再對一對線路圖 (我是
依照 PIC18F452 C Advance Training Board 作的 )
Connecting to MPLAB ICD 2
...Connected
Setting Vdd source to target
Target Device PIC18F452 found, revision = b5
...Reading ICD Product ID
Running ICD Self Test
...Passed
MPLAB ICD 2 Ready
Resetting Target
MPLAB ICD 2 Ready
Programming Target...
...Validating configuration fields
...Erasing Part
...Programming Program Memory (0x0 - 0x2F)
...Loading DebugExecutive
...Programming DebugExecutive
...Programming Debug Vector
...Programming RSBUG
Verifying...
...Program Memory
...Debug Executive
...Debug Vector
...Verify Succeeded
Programming Configuration Bits
.. Config Memory
Verifying configuration memory...
...Verify Succeeded
Connecting to debug executive
ICD0083: Debug: Unable to enter debug mode. Please double click this message for more information.
MPLAB ICD 2 Ready

發表於: 2006/6/26 17:17
頂部


Re: 自己作demo board 就是不通
#40
中級會員
中級會員


RB6 , RB7 僅用於 ICD2 電話線的 第2,3 腳 (PGC 及 PGD )

發表於: 2006/6/26 16:15
頂部



« 1 2 3 (4) 5 »



:::

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... ]

教育訓練中心

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