• 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 (C_H_M)




Re: 使用函數指標疑問...
#11
中級會員
中級會員


試了一下, 果然是不對的結果...

建議修改如下:

加上 libpic30.h 使用其中的 _prog_addressT 與 _init_prog_address()

#include "libpic30.h"
...
...
...

// C30 函數的開始位址不能是奇數位址, 所以改為 0x12340 這個偶數位址
void __attribute__((address(0x12340))) a123(void)
{
...
...
...
}

...
...
...
_prog_addressT pvTemp; // 使用 _prog_addressT 資料型態, 可超過 0xFFFF
...
...
_init_prog_address(pvTemp, a123); // 使用_init_prog_address() 來取得程式位址
...

發表於: 2008/7/16 13:47
頂部


Re: IC4011+MCP4921(D/A)
#12
中級會員
中級會員


你好!

因為你已將 /CS 連接 VSS, 所以應該將 /LDAC 以 I/O 控制.

但是, 建議你將 /LDAC 連接 VSS, 然後以 I/O 控制 CS,
或是, 兩者皆以 I/O 控制, 這樣更符合資料手冊的敘述.

跟據資料手冊的敘述, /CS 轉為 LOW 時開始資料的傳送,
所以若你的 /CS 永遠為 LOW, 可能會因為 /CS 無法再次
HIGH ---> LOW 而導致無法傳入新的資料數據.

最後,
MCP 為一個 從裝置, SCK 與 SDI 為 DSP30F4011 控制狀態,
既然你已經說到了 SCK, SDI 無訊號狀態,
那麼表示你的程式很可能是有問題的, 請先再檢查看看吧!


發表於: 2008/7/6 13:17
頂部


Re: 請問這個名詞 psects (program sections or blocks) 的意思是什麼?
#13
中級會員
中級會員


你好!
引用 HI-TECH 的官網 FAQs 內容, 如下:

I get the error: Cant find XXX words/bytes in psect XXX
> I get the error: Can't find XXX words/bytes in psect XXX
> What does this mean??

This error message simply means that the linker could not find enough
space in ROM or RAM to fit your program.

If you are using the PICC compiler and the error says that it can't find
space in segment CODE, then this can mean one of two things.
Either your program is simply too big to fit into the available ROM space
of the processor you are compiling for; OR
You have a large function which won't fit into a single ROM page. There is
a restriction that functions must be able to fit within a ROM page. To overcome
this, split the large function into two or more smaller functions. You can
determine which function is causing the problem by generating an assembler
listing file (-asmlist), and locating the psect that was given in the error
message.

If the error message says that it was segment BANKx that it couldn't find space,
then this means you have run out of RAM in that particular bank. FAQ number 29
has details of this.
----------------------------------------------------------------------

大致上是說:
很單純的就是 linker 找不出足夠的空間以符合你程式的使用,
這個空間呢! 或許是 ROM 區域 或許是 RAM 區域.

如果, 編譯器所顯示的訊息為 ........ segment CODE.
這表示你的程式目的碼有可能超過了總程式空間,
或是你其中有一個副程式太龐大超過了一個程式頁的空間.

如果, 編譯器所顯示的訊息為 ........ segment BANKx.
那就表示 BANKx 空間已經被使用完了不夠用.

若是程式空間不夠, 可能需要考慮改用程式空間較大的 IC,
刪減程式, 精簡程式等等...

若是 BANKx 不敷使用, 可以使用 bank1, bank2, bank3 指令
指定到尚還有 RAM 空間的 BANK 中,
如果全部空間還不夠, 那就需要考慮改用 RAM 較多的 IC 了.

發表於: 2008/7/6 12:34
頂部


Re: 困惑uart
#14
中級會員
中級會員


你好!

如果你是使用了 75176 或 MAX485 來當作 rs485 的收發介面時,
分別控制了 DE 與 /RE 接腳時就有可能出現這樣的情況.

例如 /RE 連接至 GND , 只控制 DE 是否對 RS485 BUS 發送數據.
這樣就會出現接收端也將自己發送的數據從 RS485 BUS 上接收回來.

----------------------------------------------------------------------
可以將 DE 與/RE 共同連接在一起控制, 然後在 D 連接 1K ~ 10K 電阻到 VCC 就可以了.
(連接 10K 到 VCC 是為了確保 /RE = 1 時的準位, 因為此時 D 為 Hi-Z)



發表於: 2008/6/7 8:49
頂部


Re: 錯誤的訊息
#15
中級會員
中級會員


你好!
這個訊息是指你安裝在電腦上的 c30 編譯程式 License 已經到期了.

一直到目前為止, c30 編譯程式即使 License 到期也不會無法使用.
只是除去了最佳化功能, 所以極大部分的情況下是不會導致編譯後無法使用的.

當然, 如果你想使用正式版的 c30, 那麼購買正式版的 c30 軟體安裝使用是最好的了.

----------------------------------------------------------------------
如果你不 care 麻煩, 在其它沒有安裝過 c30 的電腦上安裝.
或是將目前使用的電腦重新安裝windows作業系統, 再安裝 mplab 與 c30 也能再次有 c30 試用的 60 天 License 期限.

發表於: 2008/6/7 8:28
頂部


Re: PIC16F690 軟體模擬I2C read問題
#16
中級會員
中級會員


使用 PIC16F690 的 PORTB I/O 來操作啊!

那你要注意一下是否有使用到 RB4 或 RB5,

因為 RB4 / RB5 還具有 AN10 / AN11 的功能在.

需要將 ANSELH 的 Bit2(ANS10) / Bit3 (ANS11) 設為 0 時 digital 功能才會正常.

--------------------------------------------------------------------
另外, 一點點建議如下...
BITIN
     bcf     STATUS
,RP0  Bank 0
     bcf     PORTB
,SCL    Make sure SCL is low
     bsf     STATUS
,RP0  ;Bank 1
     movlw   SDA_IN      
Configure SDA to be an input
     movwf   TRISB        
Copy value to TRISB register
     bcf     STATUS
,RP1
     bcf     STATUS
,RP0  Bank 0
     bsf     PORTB
,SCL    Bring SCL high to begin transfer
TAA                        
Output valid from clock delay
[color=FF0000]     bsf     buffer,DI       Assume input bit is high[/color]
即然 SDA 是在準位改變至1時才送出且 bsf buffer,DI 也是需要執行的,
那何不移至此處當作 SDA 等待時間.
     
btfss   PORTB,SDA  Check for state of SDA bit
     bcf     buffer
,DI       ; If SDA is lowset bit low
     bcf     PORTB
,SCL    Bring SCL low again
     retlw   0


Good luck !

發表於: 2008/5/10 23:00
頂部


Re: DsPic30F2010與18F458的RS232通訊 <- 暈倒
#17
中級會員
中級會員


從程式看來, 可以發現您設定了 uart 的 buff 在 3/4 滿的時候才中斷.
這樣的話你所敘述傳了3個 byte 後才有回應的狀況可能其實是正確的現象.
建議您以下修改後再試一下...

void Init_UART1(unsigned BaudRateValue)
{
int U1ModeValue;
int U1StatusValue;

U1ModeValue =
UART_EN &
UART_IDLE_CON &
UART_TX_ENABLE // test
UART_EN_WAKE &
UART_DIS_LOOPBACK &
UART_DIS_ABAUD &
UART_1STOPBIT //test
UART_NO_PAR_8BIT;

U1StatusValue =
UART_INT_TX_BUF_EMPTY &
UART_TX_PIN_NORMAL &
UART_TX_ENABLE &
[
color=CC0000]UART_INT_RX_CHAR[/color] &
UART_ADR_DETECT_DIS &
UART_RX_OVERRUN_CLEAR;

OpenUART1U1ModeValueU1StatusValueBaudRateValue );

SetPriorityIntU1RX(6) ;
EnableIntU1RX

}

發表於: 2008/5/10 11:30
頂部


Re: PIC16F877 DEBUG問題
#18
中級會員
中級會員


的確是因為 PCLATH 值不正確所導致的.

當你要使用 ADDWF PCL,F 這樣的查表方式時,

PCLATH 的內容值需要自行填入表格位址 高位元組的部分,

不能使用 CALL, GOTO 所搭配的 PAGESEL, 造成的結果會不同的.

依你的程式, 表格索引來源值是 DPTR , 我修改了一下提供你參考:
----------------------------------------------------------------------
ORG        100H
TABLE
                     MOVLW      HIGH  TABLE_INDEX
                     MOVWF      PCLATH
                     MOVF       DPTR
,W
                     ADDWF      PCL
,F
TABLE_INDEX
        RETLW    0X0D    
;1
        RETLW    0X5C
        RETLW    0X0E    
;2
        RETLW    0X4E
        RETLW    0X0F    
;3
        RETLW    0XC5
        RETLW    0X0B    
;4
        RETLW    0X08
        RETLW    0X0C    
;5
        RETLW    0X00
        RETLW    0X10    
;6
        RETLW    0X86
        RETLW    0X11    
;7
        RETLW    0X83
        RETLW    0X12    
;8
        RETLW    0X03
        RETLW    0X13    
;9
        RETLW    0X43
        RETLW    0X14    
;10
        RETLW    0X3B
        RETLW    0X0A    
;11
        RETLW    0X00
        RETLW    0X15    
;12
        RETLW    0X44
        RETLW    0X22    
;13
        RETLW    0X10
        RETLW    0X21    
;14
        RETLW    0X56
        RETLW    0X18    
;15
        RETLW    0X08
        RETLW    0X19    
;16
        RETLW    0X16
        RETLW    0X1A    
;17
        RETLW    0X6C
        RETLW    0X1B    
;18
        RETLW    0X03
        RETLW    0X1C    
;19
        RETLW    0X40
        RETLW    0X1D    
;20
        RETLW    0X91
        RETLW    0X23    
;21
        RETLW    0XA9
        RETLW    0X24    
;22
        RETLW    0X0A
        RETLW    0X25    
;23
        RETLW    0X00
        RETLW    0X26    
;24
        RETLW    0X11
        RETLW    0X29    
;25
        RETLW    0X59
        RETLW    0X2C    
;26
        RETLW    0X81
        RETLW    0X2D    
;27
        RETLW    0X35
        RETLW    0X2E    
;28
        RETLW    0X0B
        RETLW    0X08    
;29
        RETLW    0X04
        RETLW    0X07    
;30
        RETLW    0X04
        RETLW    0X02    
;31
        RETLW    0X06
        RETLW    0X00    
;32
        RETLW    0X1B
        RETLW    0X09    
;33
        RETLW    0X00
        RETLW    0X06    
;34
        RETLW    0X1E
        END

發表於: 2008/5/5 23:21
頂部


Re: 请教BANK页选择
#19
中級會員
中級會員


程式編譯中會出現2種類型的訊息,

一個是 Error[n], 會使編譯出錯, 無法產生目的碼.

一個是 Message[n], 只是提示, 還是會產生目的碼.
(如果都只有 Message 這種, 請注意最後應有 BUILD SUCCEEDED: ....... 表示有產生目的碼)

建議你還是要上下捲動一下檢視所有的訊息, 以避免程式出錯!
-------------------------------------------------------------------------------------------------------
你所提出的 Message[302] D:\DCCJSB\FILE5\NEWFILE_B.ASM 337 : Register in operand not in bank 0. Ensure that bank bits are correct.

它表示-> 你所操作的暫存器不在 bank 0 中, 請確認你已經設好了 bank bit

------------------------------------------------------------------------------------------------------
如果你已經確定程式的動作結果是正確的了. 而想除去這個提示訊息.
可以在程式開始的地方加入如下的指令來除去它.

(程式開始)
errorlevel   -302     不出現 Message[302這一個提示訊息
#include <p16f876a.inc>
   
.
   .
   .


發表於: 2008/5/1 21:58
頂部


Re: c18中斷副程式使用除法運算
#20
中級會員
中級會員


那麼以下供你參考, 取代 uns16_spd=46083/sp_count;
(事實上就是無號16 bit 除法的計算展開, 避免主程式與中斷都有使用除法的一些問題產生)

(使用的變數宣告為全域好了...)

union unsigned long _DIV_long;
        
unsigned int  _DIV_int[2];
      } 
_DIV_SHIFT;
#define  _DIV_A       _DIV_SHIFT._DIV_int[0]
#define  _DIV_R       _DIV_SHIFT._DIV_int[1]
unsigned int  _DIV_B_DIV_Q;
unsigned char _DIV_N;

   .
   .
   .

if(
INT0IE && INT0IF)
  {
    
stop_count=0;
    if(
mode_select==0)//not setup mode
      
{
        
bit_start=TRUE; [color=CC0000]

       
_DIV_A 46083;        // _DIV_Q = _DIV_A / _DIV_B
       
_DIV_B sp_count;
       
_DIV_Q 0;
       
_DIV_R 0;
       for(
_DIV_N 0_DIV_N 16_DIV_N++)
           { 
_DIV_SHIFT._DIV_long <<= 1;
             
_DIV_Q <<= 1;
             if(
_DIV_R >= _DIV_B)
               { 
_DIV_R -= _DIV_B;
                 
_DIV_Q++;
               }
           }    
        
uns16_spd _DIV_Q; [/color]

      }
    
INT0IF=0;
}

-----------------------------------------------------------
最後, 請注意!
不管是使用 c 語言的除法 或 自行構成的除法, 都會蠻有一段執行時間的.(因為 pic18 是 8 bit MCU 的關係)
請注意是否會對你的程式造成影響.

發表於: 2008/4/30 17:04
頂部



« 1 (2) 3 4 5 ... 7 »



:::

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

教育訓練中心

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