• slider image 442
  • slider image 477
  • slider image 479
  • slider image 480
  • slider image 481
  • slider image 482
:::

論壇索引


Board index » All Posts (pic5566)




C18 compiler超慢
#21
高級會員
高級會員


我的程式只有64KBYTES COMPILER 超過3分鐘以前大概是30SEC以內現在變超慢

我有下列問題
1.我的C18 是2.4版 P4CPU RAM 256MB HD 40GB這樣的配備應該可以吧
2. 我在COMPILER時要如何停止COMPILER的動作?
3. 我無法上網DOWNLOAD C18 UPDATE版本?

High security alert!!!
You are not permitted to download the file "MPLAB-C18-Beta-v3_00b2.exe".

URL = http://ww1.microchip.com/downloads/en ... PLAB-C18-Beta-v3_00b2.exe



發表於: 2005/9/23 12:37
頂部


Re: 我的中斷程式哪邊有錯?
#22
高級會員
高級會員


1.當程式怎麼看都看不出有時麼不對時最好的方法是使用DEBUG工具DEBUG,你可以使用ICD2或ICE2000
看他的program counter "PC"跑到那裡了
2. 你的CODE看起來好像是18F系列的MCU,你沒有說明很難猜
3. 光提供interrupt subroutine很難判斷出來不過18Fxxx如果設定高優先權中斷應該會幫你push pop W,status因為18f我都用C寫不太確定我先查一下再跟你說
不過我還是建議你練習使用debug tools因為小程式還可以用看的,因為CODE很小通常很快就看出來了,但是大程式尤其是有好幾個人寫的CASE那就很難看了,要驗證別人的程式或者別人要驗證你的程式通常都是run --->bug--->debug



發表於: 2005/9/16 8:24
頂部


Re: 請問有關ICD 2的使用方法..
#23
高級會員
高級會員


你也可以想一下其他即時偵錯的方法
例如:
1. 設DEBUG PIN方式
2. 透過UART將資料丟到電腦
剛好我這裡有這一些方法
我是用CCS C寫的
你要參考一下嗎?
void debug_p4(uchar i)
{
switch(i)
{
case 10:
L_TEST2 = 0;
DLY10US();
L_TEST2 = 1;
case 9:
L_TEST2 = 0;
DLY10US();
L_TEST2 = 1;
case 8:
L_TEST2 = 0;
DLY10US();
L_TEST2 = 1;
case 7:
L_TEST2 = 0;
DLY10US();
L_TEST2 = 1;
case 6:
L_TEST2 = 0;
DLY10US();
L_TEST2 = 1;
case 5:
L_TEST2 = 0;
DLY10US();
L_TEST2 = 1;
case 4:
L_TEST2 = 0;
DLY10US();
L_TEST2 = 1;
case 3:
L_TEST2 = 0;
DLY10US();
L_TEST2 = 1;
case 2:
L_TEST2 = 0;
DLY10US();
L_TEST2 = 1;
case 1:
L_TEST2 = 0;
DLY10US();
L_TEST2 = 1;
default:
break;
}

}

這是你要有較好的示波緝獲邏輯分析儀比較適用
這是埋地雷法我常常用
要是你比較窮示波器很爛
那就用UART方法
void tx_command_buffer(void)
{
int16 ii;
for (ii=0;ii<2048;ii++)
{
ptr=ii+&CXD3068_COMMAND_BUFFER[0];
command = *ptr;
printf("\n\r BYTE: %4X COMMAND: %2X",ii,command);
}
index = 0;
}

CCS printf()很好用
你可以透過終端機看出你的狀態
但是他丟一筆資料要耗費一點時間如果不允許你可以選一適當時機再丟出來
我一般都釋放在記憶體中需要是按一下按鍵就丟出來了。

發表於: 2005/9/2 10:39
頂部


Re: 請問省電模式要如何設定與控制??
#24
高級會員
高級會員


我喜歡做好人所以住你一把
我是用CCS 寫的
耗電大概是32UA
//#include <12C508A.h>
#include <12f675.h>

#fuses LP,WDT,NOPROTECT, NOMCLR,NOBROWNOUT
//#byte gpio = 06
//#bit P_SYNC = gpio.0
//#bit P_OUT = gpio.1
//#BIT P_DEBUG = gpio.2
//#BIT P_HZ = gpio.4
#byte gpio = 05
#bit P_OUT = gpio.0
struct {
short bit0;
short bit1;
short bit2;
short bit3;
short bit4;
short bit5;
short bit6;
}flg0;
//#define GP0 PIN_A0
//#define GP1 PIN_A1
//#define GP2 PIN_A2
//#define GP3 PIN_A3
//#define GP4 PIN_A4
//#define GP5 PIN_A5
//#define P_OUT GP0

#define f_tmain flg0.bit0
#define F_HZ flg0.bit1
#DEFINE F_TIMEOUT flg0.bit2

INT8 TB_1SEC,TB_SEC,TB_MIN,TB_HOUR,T_OUT;
//int16 COUNTER;

#use delay(clock=32768) // 4000000) // SET DELAY CLOCK 4MHZ

void POWERON_INIT()
{
set_tris_a(0x00);
output_a(0x01);
setup_counters (RTCC_INTERNAL,WDT_2304MS);
// set_tris_b(0xfe);
setup_wdt(WDT_2304MS);

}
void main()
{
POWERON_INIT();
// SLEEP();
while(1)
{
int8 i;
for (i=0;i<250;i++)
{
// output_low(P_OUT); // OUTPUT PWM
P_OUT = 0;
delay_us(500);
P_OUT=1;
// output_high(P_OUT);
delay_us(500);
}
// output_high(P_OUT);
P_OUT = 1;
restart_wdt();
sleep();
}
}
當LED ON時我是用掃瞄方式還可以省很多電流消耗量
我裝一顆鈕釦電池放在我的愛車面版上假裝防盜系統至今已經過了好久還在WORK
算是蠻省電了
希望你會喜歡



發表於: 2005/8/24 10:47
頂部


Re: pic16f877問題請教~棘手~
#25
高級會員
高級會員


你應該規劃出硬體電路
假設你的系統電壓是5V
你可以在ADC 輸入端設計一個分壓電路把5V分壓成2.5V
這軟體簡單但是你沒有說明硬體如何設計這。。。。。叫人很難幫你
請在明述你的需求或者你的狀況例如code 貼上來或許可以比較快可以幫你
例如:你是用組合語言或者C
如果是C是哪一家compiler 是hitech CCS或IAR或。。。。。。


發表於: 2005/8/24 10:39
頂部


Re: 有人用c18 的c compler 開發程式嗎/
#26
高級會員
高級會員


我都是用C18寫的啊,應該沒問題吧
我寫的程式也蠻大的,已經量產很久了應該可以放心使用
每一家的C COMPILER如果程式架構弄不好也都很難DEBUG啊
所以。。。用了才知道啊
不然就用組合語言寫展現一下自己的技術能力。

發表於: 2005/8/15 13:31
頂部


Re: 想請問I2C應用範例
#27
高級會員
高級會員



解開就好,有問題再問好了。

發表於: 2005/8/9 19:14
頂部


Re: 想請問I2C應用範例
#28
高級會員
高級會員


這是針對pic12f675所寫的
所以運用在pic18fxx你要讀一下data sheet

.................... ack = input(P_SDA);
005F: BSF 03.5
0060: BSF 05.5
0061: BCF 03.5
0062: CLRF 2D
0063: BTFSC 05.5
0064: INCF 2D,F
回應一下INPUT()所產生的CODE
很嚇人喔,但是保證不會出錯因為你每input()他都會幫你切BANK設輸入但是CODE真的比較多
.................... output_low(P_SCL);
0065: BSF 03.5
0066: BCF 05.4
0067: BCF 03.5
0068: BCF 05.4
output()也一樣
在C18你可以以一行就解決
這是你問的delay_us() and delay_ms() CCS C compiler所產生的CODES

.................... delay_ms(250);
01B3: MOVLW FA
01B4: MOVWF 25
01B5: CALL 00A
000A: MOVLW 25
000B: MOVWF 04
000C: MOVF 00,W
000D: BTFSC 03.2
000E: GOTO 01E
000F: MOVLW 01
0010: MOVWF 21
0011: CLRF 20
0012: DECFSZ 20,F
0013: GOTO 012
0014: DECFSZ 21,F
0015: GOTO 011
0016: MOVLW 4A
0017: MOVWF 20
0018: DECFSZ 20,F
0019: GOTO 018
001A: NOP
001B: NOP
001C: DECFSZ 00,F
001D: GOTO 00F
001E: RETLW 00
總之希望對你有所幫助

發表於: 2005/8/9 19:12
頂部


Re: 想請問I2C應用範例
#29
高級會員
高級會員


Re: 想請問I2C應用範例
版主~各位大大~
小弟我想把上述的程式改成C18可以compiler的程式
不過在"解讀"上述ccs的程式時遇到一些問題= ="
問題如下:
問題一
函式input()的作用是做什麼用的?

就是c18 的 if (Port==1 or 0)
CCS 比較C化他都幫使用者寫好函數但是他也是笨笨的不管怎樣他都會翻出比較多的CODE

難道作用在於讀取腳位電位?如果是,是不是對應到C18指的PORTXbits.RXX?
ans: 對
問題二
函式debug_pin()的作用是做什麼用的?
ans:
由於我沒有ICE,PIC12Fxx實在太小顆了,我很窮沒錢買ICE,我只有一台三十幾萬的是波器而已,所以我會利用一隻IO腳輸出信號用示波器量測看輸出幾個脈波就可以知道程式跑到那裡了,這是一種DEBUG技巧,有時你無法停下MCU,所以就必須藉助這一個方法來做。
乾脆我再送你一個我的DEBUG();
這一個我是用C18寫的希望你好好運用一下窮人DEBUG法說不定你會用到

使用方法:
例如你要輸出一個脈波

debug_p4(1);
----+ +--------
| |
+--+
就會在示波器顯示這樣的波形




void debug_p4(uchar i)
{
switch(i)
{
case 10:
L_TEST2 = 0;
DLY10US();
L_TEST2 = 1;
case 9:
L_TEST2 = 0;
DLY10US();
L_TEST2 = 1;
case 8:
L_TEST2 = 0;
DLY10US();
L_TEST2 = 1;
case 7:
L_TEST2 = 0;
DLY10US();
L_TEST2 = 1;
case 6:
L_TEST2 = 0;
DLY10US();
L_TEST2 = 1;
case 5:
L_TEST2 = 0;
DLY10US();
L_TEST2 = 1;
case 4:
L_TEST2 = 0;
DLY10US();
L_TEST2 = 1;
case 3:
L_TEST2 = 0;
DLY10US();
L_TEST2 = 1;
case 2:
L_TEST2 = 0;
DLY10US();
L_TEST2 = 1;
case 1:
L_TEST2 = 0;
DLY10US();
L_TEST2 = 1;
default:
break;
}

}

我再示範一下
ex:
switch(step)
{
case 1:
{ debug_p4(1); break;}
case 2:
{ debug_p4(2);break}
.
.

}


問題三
delay_us(2)--->延遲2us?? ans--->yes這也是CCS C compiler所提供的函數
delay_ms(100)--->延遲100ms?? ans -->yes這也是CCS C compiler所提供的函數

問題四
BUFFER1 = IIC_RECEIVE_BYTE();
BUFFER2 = IIC_RECEIVE_BYTE();
PORTDATA = IIC_RECEIVE_BYTE();
input(P_INTERRUPT);
問題四 C code 中提到BURRER1、BURRER2、 PORTDATA、P_INTERRUPT分別指的是什麼??
透過IIC_RECEIVE_BYTE()向裝置讀資料進來然後放在記憶體備用因為我需要讀兩筆資料所以開兩個bytes的記憶體
input(P_INTERRUPT); 將IO port設定為輸入端,因為我這一個程式是用來控制MICROCHIP公司的MCP23016 IO PORTS EXPANDER 所以他有一隻腳是在通知io port有輸入
我是原作者啦~~~~不好意思喔害你讀的這麼辛苦


版主還有其他大大可以幫忙解答嗎??
小弟我感激不盡!!!

發表於: 2005/8/9 18:21
頂部


Re: 請問一下C18函式庫
#30
高級會員
高級會員


這。。。。。應該沒有吧
我知道CCS 有三角函數
用MCU算這麼複雜的數學有一點。。。。
不如你幫他算一算用查表方式還比較有效率

發表於: 2005/8/9 12:29
頂部



« 1 2 (3) 4 5 6 ... 13 »



:::

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

教育訓練中心

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