Re: 18F Data Memory存取問題
|
||||
---|---|---|---|---|
版主
|
我覺得很奇怪,FSRx就是指向RAM的指標,所以位址是不能亂給的。
RAM 的位址對 LFSR x 指令而言就是一個立即值,如下例所示將 Hex_Temp的位址傳給 FSR1 的例子。 不過我又將它加了0x110的 offset 位址值。 CBLOCK 0x00 C_Hold_Delay ; variable used for the sample hold charge time TxD_Flag ; 500mS time flag, Send TxD data to Terminal Hex_Temp ENDC org 0x0020 Init: lfsr 1,Hex_Temp+0x110
發表於: 2004/9/3 14:02
|
|||
|
Re: 18F Data Memory存取問題
|
||||
---|---|---|---|---|
版主
|
何仁杰回覆:
如果 FSRn 的值不是立即值 , 就必須使用 movf 或 movff 將計算後的數值載入 FSRnL & FSRnH. 假設要使用的 FSR 是 FSR0 , 而經計算的目的位址為 TargetL & TargetH movff TargetL,FSR0L movff TargetH,FSR0H movff MyData,POSTINC0 ; 真正將 MyData 的內容寫入 FSR0 所指的位址 ....
發表於: 2004/9/3 14:01
|
|||
|
Re: 请教
|
||||
---|---|---|---|---|
版主
|
MPLAB IDE 是一個開發/除錯的工作平台,它只能顯示程式...等,它並不能編譯程式。
所以Optimization的處理動作是 C Compiler 所要處理的事情,並不是除錯平台所要做的事。 不可混淆。 Hi-Tech PICC 已有提供一些 ASCII BCD code to Hex 的函數庫如atoi , atol , atof。但未提供 Hex to ASCII BCD code 的轉換(C18有提供,例: itoa, ltoa, ftoa..),不過你可以用除法的方式來進行Hex to BCD的轉換。怎麼轉?請參考Workshop W401 的第四章的練習。
發表於: 2004/9/3 13:58
|
|||
|
Re: 关于W寄存器
|
||||
---|---|---|---|---|
版主
|
首先我要知道你所講的 W 寄存器是哪一種類的 PIC。
1. PIC12, PIC16 等系列的的 W Register 是獨立的暫存器不佔用內部的RAM (Specification Function Register, SFR) 2. PIC18系列的 W Register 本身就是一個 SFR,所以在PIC18裡對 W Reg. 動作,就與操作一般的SFR一樣。 3. dsPIC 共有16個寄存器,W0可以向下相容於 PIC18 & PIC16 的元件。 File Register 就是寄存器,以 PIC 而言就是內部的 RAM,當然這個 RAM 也包含了MCU內的特殊寄存器 (SFR) 例如: Timer, UART...等。
發表於: 2004/9/3 9:18
|
|||
|
Re: MPLAB-C18 或 CCS C 是否有這個功能?
|
||||
---|---|---|---|---|
版主
|
Microchip 的 C18 的名稱應該是 Optimum ANSI C compiler for PIC18Fxxxx, 這只是最佳化(Optimization)的功能,如果你在 MPLAB IDE 下使用 MPLAB C18 的話,基本上你有11種最佳化的設定選項。
你可以在設定好 Language Tools 為 C18 後,點選"Project --> Build Options --> Project" 再選擇 C18 內的 Categories 裡將 Optimization 功能打開就可以了。 不過給個建議 : 一般在寫 C 程式時最好先不要將Optimization功能打開,因為你一打開就如 x8051 先生所講的會有一些想不到的問題發生,最好是等程式功能已完成後在一項一項的打開Optimization。這樣發生了問題也會比較好解決。 一些特殊的變數你也可以加入 volatile 的宣告以確保這些變數不做最佳化的處理,例如: 週邊暫存器。
發表於: 2004/9/2 22:38
|
|||
|
Re: 共用震盪訊號最多可以並聯幾顆PIC ?
|
||||
---|---|---|---|---|
版主
|
盡量接吧! CMOS端都是高組抗輸入,只要你的線不要太長,總雜散電容不要太大應沒問題的;或著你也可以加入終端電阻(1K ohms)來降低電路的組抗増加傳送的速度。很奇怪ㄡ,不是怕推不動嗎? 為什麼要加電阻呢! 想想看,
發表於: 2004/9/1 10:27
|
|||
|
Re: 傳輸錯誤 Q__Q
|
||||
---|---|---|---|---|
版主
|
1. 你有沒有用示波器檢查你的 DO , DI 的訊號,SPI 從 Master 送一個 Byte 的資料給 Slave 時,同時 Slave 也會回傳一個 Byte 的資料給 Master,所以用示波器(或 LA)來檢查 DO , DI 是很重要的。
2. 基本上 SPI 是以 Byte 為傳送單位,每當一個 Byte 傳送完畢後,SSPIF 將會被設定為 1 (See 18F4320 data sheet FIGURE 17-5), 此時你必須讀取 SSPBUF 方可將 SSPIF 清為零,軟體無法直接情除 SSPIF。 3. 單一 Byte 傳輸沒問題後,再以此為基礎去擴展為 16, 24 ....位元的傳輸。 4. 我只有用 C 寫的SPI Master Mode for reading the 25LC160 (EEPROM), recommend to use the C18.
發表於: 2004/9/1 10:17
|
|||
|
Re: 求助
|
||||
---|---|---|---|---|
版主
|
發表於: 2004/8/31 15:35
|
|||
|
Re: 請問有關MPLINK的問題?
|
||||
---|---|---|---|---|
版主
|
既然用了 ORG 的虛指令強定程式的位址,就表示你的組合語言是屬於單一原始程式的架構,就不能用 MPLINK 來排定執行的位址。
如果你是採用Re-Locaatable的多原始程式的語法,就需改用 CODE 的程式節區宣告並交由 MPLINK 幫你排定最後的執行位址。 程式與變數都有特定的編排方式,有關此詳細的介紹請參考右邊"教材及講義"內的workshop中的MPASM 一天講義。
發表於: 2004/8/30 8:49
|
|||
|