• slider image 514
  • slider image 516
  • slider image 517
  • slider image 518
  • slider image 519
:::


Browsing this Thread:   1 Anonymous Users






Re: equ值讀取不到
#3
版主
版主


查看用戶資訊
這個組語無法被 ASM30 所接受,從定義及Reset 後的執行都不正確,PIC24 的 Reset 後沒這麼簡單,它需要用 Link30 設定堆疊的位址及初始變數的設定。你先參考一下底下所附的最簡單的祖語範例看看跟你寫的是否差很多。
看一下 : Eg1_BlinkLED.s 的檔案


組語的部分建議你看一下底下的投體片裡有關 ASM30 的說明,他跟 PIC16 差很多的。

http://www.microchip.com.tw/modules/w ... nglefile.php?cid=4&lid=39

Attach file:


Link only for registered users

發表於: 2010/1/29 13:49
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: equ值讀取不到
#2
資深會員
資深會員


查看用戶資訊
改成DEFINE 看看

發表於: 2010/1/29 13:37
My name is jan,Jan是棒的
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


equ值讀取不到
#1
新會員
新會員


查看用戶資訊
錯誤:
Debug build of project `C:NO1no1.s.mcp' started.
Language tool versions: pic30-as.exe v3.21, pic30-ld.exe v3.21, pic30-ar.exe v3.21
Preprocessor symbol 
`__DEBUG' is defined.
Fri Jan 29 11:56:58 2010
----------------------------------------------------------------------
Clean: Deleting intermediary and output files.
Clean: Deleted file "C:NO1no1.o".
Clean: Done.
Executing: "C:Program FilesMicrochipMPLAB ASM30 Suitebinpic30-as.exe" "no1.s" -o"no1.o" -p=24FJ128GB110 --defsym=__DEBUG=1 -g
Executing: "C:Program FilesMicrochipMPLAB ASM30 Suitebinpic30-ld.exe" "no1.o" -Tp24FJ128GB110.gld --defsym=__MPLAB_BUILD=1 --defsym=__MPLAB_DEBUG=1 -o"no1.s.cof" -Map="no1.s.map" --report-mem
C:Program FilesMicrochipMPLAB ASM30 Suitebinbin/pic30-coff-ld.exe: cannot open linker script file p24FJ128GB110.gld: No such file or directory
Link step failed.
----------------------------------------------------------------------
Debug build of project `C:NO1no1.s.mcp' 
failed.
Language tool versionspic30-as.exe v3.21pic30-ld.exe v3.21pic30-ar.exe v3.21
Preprocessor symbol 
`__DEBUG' is defined.
Fri Jan 29 11:56:59 2010



指令碼:
;LIST  P=24fj128gb106    ;目錄控制
    #INCLUDE<P24fj128gb106.INC>    ;存取設定之特殊暫存器
VAL_US    =  .249     ;1MS DELAY給定初值
VAL_MS    =  .100     ;呼叫1MS DELAY之次數
COUNT     =  0x20     ;1MS DELEY變數位址
COUNT_MS  =  0x21     ;呼叫1MS DELAY之變數位址
#CN       EQU  0x22     ;設定CN變數位址
#CN1      EQU  0x23     ;設定CN1變數位址
#ORG      0x00     ;程式的起點(以下程式的機器碼由000開始存放)
 NOP           ;不做任何運算
;---------------------------------------------------------------------------
START:                  ;起始程式
  CALL    PIC           ;呼叫單晶片初始化副程式       
  CALL    CURSOR        ;呼叫LCD的游標初始狀態副程式
  CALL    CLEAR         ;呼叫LCD的銀幕全部清除副程式
  CALL    FUNC          ;呼叫LCD字型點數.行數.及匯流排的位元數(D0-D7)副程式
  CALL    ONOFF         ;呼叫作為設定LCD會顯示字元 顯示游標並閃爍的副程式
  ClR    CN            ;清除CN
  CLR    CN1           ;清除CN1
;---------------------------------------------------------------------------
CHECK:                  ;檢查副程式
  Btss   PORTD,#4    ;判斷是否有按按鍵(判斷DA是否被按. .1表示有 0表示沒有)
  GOTO    CHECK         ;再回去檢查按鍵是否被按
  MOV    #PORTD,w0      ;將PORTD的值給W
  AND    #0x0F,w0          ;將按鍵由PORTD輸入的值和Ox0F做AND取前四位元查表用(0x0F和W的值做AND後再給W)
  MOV   #CN1,w0           ;將W的值給CN1
  INC    CN1           ;將CN1裡面的值加1
  Btsc   CN1,#4        ;判斷按鍵是否按到F(判斷CN1的第4位元是否為零)
  GOTO    START         ;回到前面.重新開始
  CALL    TABLE         ;呼叫查表
  CALL    OUT           ;呼叫LCD顯示輸出的副程式(呼叫OUT副程式)
  CALL    DELAY         ;呼叫延遲副程式
  INC    CN            ;將CN裡面的值加1
  BTss   CN, #4         ;判斷LCD是否顯示16個位元(判斷CN的第4位元是否為1)
  GOTO    CHECK         ;回去檢查是否有按鍵被按或是按到F
  CALL    SET2          ;呼叫設定LCD從第二行第一個字開始顯示的副程式(呼叫SET2副程式)
  CLR    CN            ;將CN暫存器清為0
;---------------------------------------------------------------------------
CHECK1:                 ;檢查副程式
  BTss   PORTD, #4      ;判斷是否有按按鍵(判斷DA是否被按. .1表示有 0表示沒有)
  GOTO    CHECK1        ;再回去檢查按鍵是否被按
  MOV    #PORTD,W0      ;將PORTD的值給W
  AND   #0x0F,W0          ;將按鍵由PORTD輸入的值和Ox0F做AND取前四位元查表用(0x0F和W的值做AND後再給W)
  MOV   CN1,w0           ;將W的值給CN1
  INC    CN1           ;將CN1裡面的值加1
  BTSC  CN1,#4       ;判斷按鍵是否按到F(判斷CN1的第4位元是否為零)       
  GOTO    START                      ;回到前面.重新開始
  CALL    TABLE         ;呼叫查表
  CALL    OUT           ;呼叫LCD顯示輸出的副程式(呼叫OUT副程式)
  CALL    DELAY         ;呼叫延遲副程式
  INC    CN            ;將CN裡面的值加1
  BTSS   CN, #4         ;判斷LCD是否顯示16個位元(判斷CN的第4位元是否為1)
  GOTO    CHECK1        ;回去檢查是否有按鍵被按或是按到F
  GOTO    START         ;回到初始狀態
;---------------------------------------------------------------------------
SET2:                   ;作為設定LCD從第二行第一個字開始顯示的副程式
  MOV   0xC0          ;將十六進制常數0xCO載入暫存器W內
  MOV   #PORTC,w0         ;將W的值給PORTC
  CALL    SET3          ;呼叫SET3副程式
  RETURN         ;副程式結束 返回主程式
;---------------------------------------------------------------------------
OUT:                    ;作為將PORTC的值讀到LCD裡面顯示的副程式
  MOV   #PORTC,W0         ;將W值給PORTC
  BCLR     PORTB, #0      ;RS
  BCLR     PORTB, #1      ;RW
  BCLR     PORTB, #2      ;EN
  NOP                   ;不做任何運算
  BCLR     PORTB, #2      ;EN
  CALL    DELAY         ;呼叫延遲副程式(呼叫DELAY副程式)
  RETURN                ;副程式結束 返回主程式
;---------------------------------------------------------------------------
PIC:                    ;作為單晶片初始化的副程式(規劃PIC)
  CLR    PCLATH        ;清除PCLATH
 
  CLR    TRISC         ;清除TRISC
 
  CLR    PORTC         ;清除PORTC
 
  CLR    TRISB         ;清除TRISB
 
  CLR    PORTB         ;清除PORTB

  MOV   B'00011111'   ;設定W值為0-4位元輸入 5-7位元輸出
  MOV   #TRISD,w0         ;將W值給TRISD
  CLR    PORTD         ;清除PORTD
  RETURN                ;副程式結束 返回主程式
;---------------------------------------------------------------------------
CURSOR:                 ;作為設定LCD游標從00H開始的副程式
  MOV   B'00000011'   ;設定W值為0-1位元輸入 2-7位元輸出
  MOV   #PORTC,w0         ;將W值給PORTC
  CALL    SET3          ;呼叫將要設定LCD的值讀進LCD裡設定的副程式(呼叫SET3)
  RETURN                ;副程式結束 返回主程式
;---------------------------------------------------------------------------
FUNC:                   ;作為設定LCD使用8位元的匯流排 5x7字型及用兩行顯示的副程式
  MOV   B'00111011'   ;設定W值為0-1和3-5位元輸入 3和6-7位元輸出
  MOV   #PORTC,w0         ;將W值給PORTC
  CALL    SET3          ;呼叫將要設定LCD的值讀進LCD裡設定的副程式(呼叫SET3)
  RETURN                ;副程式結束 返回主程式
;---------------------------------------------------------------------------
CLEAR:                  ;作為設定LCD清除銀幕顯示的副程式
  MOV   B'00000001'   ;設定W值0位元輸入 2-7位元輸出
  MOV   #PORTC,w0         ;將W值給PORTC
  CALL    SET3          ;呼叫將要設定LCD的值讀進LCD裡設定的副程式(呼叫SET3)
  RETURN                ;副程式結束 返回主程式
;---------------------------------------------------------------------------
ONOFF:                  ;作為設定LCD會顯示字元 顯示游標並閃爍的副程式
  MOV   B'00001111'   ;設定W值0-3位元輸入 4-7位元輸出
  MOV   #PORTC,w0         ;將W值給PORTC
  CALL    SET3          ;呼叫將要設定LCD的值讀進LCD裡設定的副程式(呼叫SET3)
  RETURN                ;副程式結束 返回主程式
;---------------------------------------------------------------------------
SET3:                   ;將要設定LCD的值讀進LCD裡設定的副程式
  BCLR     PORTB, #0      ;RS
  BCLR     PORTB, #1      ;RW
  BCLR     PORTB,#2      ;EN
  NOP                   ;不做任何運算
  BCLR     PORTB,#2      ;EN
  CALL    DELAY         ;呼叫延遲副程式(呼叫DELAY副程式)
  RETURN                ;副程式結束 返回主程式
;---------------------------------------------------------------------------
DELAY:                  ;延遲時間的副程式 
  MOV   VAL_MS        ;設定W值為呼叫1MS DELAY之次數
  MOV   #COUNT_MS,w0      ;將W值給COUNT_MS
;---------------------------------------------------------------------------
LOOP_MS:                ;延遲時間迴圈副程式
  CALL    DELAY_1MS     ;呼叫DELAY_1MS
  DEC     CPSGT     ;若fa>fd 則跳(PIC指令)
  GOTO    LOOP_MS       ;重複迴圈
  RETURN                ;副程式結束 返回主程式
;---------------------------------------------------------------------------
DELAY_1MS:              ;延遲時間的副程式            
  MOV   VAL_US        ;設定W值為1MS DELAY給定初值
  MOV   #COUNT,w0         ;將W值給COUNT
;---------------------------------------------------------------------------
DEC_LOOP                ;延遲時間迴圈副程式
  NOP                   ;不做任何運算
  DEC     CPSGT          ;若fa>fd 則跳(PIC指令)          
  GOTO    DEC_LOOP      ;重複迴圈
  RETURN                ;副程式結束 返回主程式
;---------------------------------------------------------------------------             
  ;TABLE                 ;查表的內容          
  ADD   PCL        ;將PCL與f相加 (加法器)
  RETLW   #0x30,w0          ;0       
  RETLW   #0x31,w0          ;1
  RETLW   #0x32,w0          ;2
  RETLW   #0x33,w0          ;3
  RETLW   #0x34,w0          ;4
  RETLW   #0x35,w0          ;5 
  RETLW   #0x36,w0          ;6
  RETLW   #0x37,w0          ;7
  RETLW   #0x38,w0          ;8
  RETLW   #0x39,w0          ;9
  RETLW   #0x41,w0          ;A
  RETLW   #0x42,w0          ;B
  RETLW   #0x43,w0          ;C
  RETLW   #0x44,w0          ;D
  RETLW   #0x45,w0          ;E
  .END                   ;程式結束
/*
EOF
*/

發表於: 2010/1/29 12:12

Edited by Ryang on 2010年01月29日 13:29:54
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... ]

教育訓練中心

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