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


Browsing this Thread:   2 Anonymous Users






Re: 16系列的程式碼改成24系列的程式碼出現錯誤
#3
版主
版主


查看用戶資訊
比喻一下:
一個是不會講中文的非洲人,一個是只會講中文的華人,雞同鴨講不會通的。

雖然兩個都叫 PIC,但是架構及指令都是不一樣的東西。如果是C 的話那還好改,組合語言那就只有重新看 dsPIC30F ASM Programming Guide 裡面的 PIC24 的指令。我只能說重寫的機率為 90% ... 好像只有 NOP CALL GOTO RETURN 等指令相同而已。

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


Re: 16系列的程式碼改成24系列的程式碼出現錯誤
#2
中級會員
中級會員


查看用戶資訊
雖然我沒有寫過PIC24的程式,但是我剛剛幫你看過PIC24FJ256GB110的命令列裡面沒有decfsz這個命令

建議使用dec搭配cpseq來完成

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


16系列的程式碼改成24系列的程式碼出現錯誤
#1
新會員
新會員


查看用戶資訊
原本是PIC16F877的程式碼
改成PIC24FJ256GB110的程式碼錯誤了 請問要怎樣改才能正確


錯誤:
no1.s: Assembler messages:
no1.s:135: Error: Invalid mnemonic: 'decfsz'
no1.s:145: Error: Invalid mnemonic: 'decfsz'



程式碼:
;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
DecFSZ COUNT_MS ;若fa>fd 則跳(PIC指令)
GOTO LOOP_MS ;重複迴圈
RETURN ;副程式結束 返回主程式
;---------------------------------------------------------------------------
DELAY_1MS: ;延遲時間的副程式
MOV VAL_US ;設定W值為1MS DELAY給定初值
MOV #COUNT,w0 ;將W值給COUNT
;---------------------------------------------------------------------------
DEC_LOOP ;延遲時間迴圈副程式
NOP ;不做任何運算
decfsz COUNT,f ;若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/28 23:05
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... ]

教育訓練中心

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