• 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: [求助]PIC18F662X -- UART傳送問題??? 急~~~
#61
中級會員
中級會員


看起來是沒有明顯的錯誤啦!
但還是提一些修改的建議給你...
void SendACKtoPC(void)
{   
    
Pc_Output_Buffer[0] = STX;
    
Pc_Output_Buffer[1] = ACK;
    
Pc_Output_Buffer[2] = MODE;
    
Pc_Output_Buffer[3] = CHECKSUM;
    
Pc_Output_Buffer[4]= 0xDPc_Output_Buffer[5]= 0xA;
    
Pc_Output_Code_Cnt=6;
    
Pc_Output_Ptr 0;
    
Rs_232_Rx_Tx_Flag.Rs_232_Tx_Fg=1;
    
TXSTA2bits.TXEN 
                
//這行搬往前,
                //必竟發送的順序應是致能發送後才開始發送
    
PIE3bits.TX2IE=1;    
    
Nop();
    
Nop();
}

#pragma        interrupt    Isr_High
void    Isr_High(void)
{
    if (
PIR3bits.TX2IF==&& PIE3bits.TX2IE==1)
    {
        
Nop();
        
PIR3bits.TX2IF=0;
        if(
Rs_232_Rx_Tx_Flag.Rs_232_Tx_Fg==1)        
            
Rs_232_Tx_Isr ();         // Data received from Modem to be sent to PC
    
}
}

void Rs_232_Tx_Isr (void)
{
    
int i 

                
// 以下的條件式改為 Pc_Output_Ptr < Pc_Output_Code_Cnt
                // 以本程式為例, 發送6個字元時,
                // 應為 [0], [1], [2], [3], [4], [5] 這6個字元
    
if (Pc_Output_Ptr Pc_Output_Code_Cnt 
    {
        
Write2USART(Pc_Output_Buffer[Pc_Output_Ptr]) ;
        
Pc_Output_Ptr += 1;     
    }
    else
    {
        
// TXSTA2bits.TXEN = 0 ; 
                                // 此行消去
                                // 連續發送字元時, 最後一次中斷時,
                                // 還有字元在發送中,
                                // 這時就將發送除能不太好...
                                // 僅將發送中斷除能就好
        
PIE3bits.TX2IE=0;    
        for ( 
0<Pc_Output_Code_Cnti++)        // Pc_Output_Code_Cnt
            
Pc_Output_Buffer[i] = 
                                
// 清除發送資料的部份可以不用做
                                // 稍為節省中斷所佔用的時間
                                // 因為發送個數已被清除了
        
Pc_Output_Ptr 
        
Pc_Output_Code_Cnt 
        
Rs_232_Rx_Tx_Flag.Rs_232_Tx_Fg=0;
    }
}

void SendACKtoPC(void)

發表於: 2007/8/31 16:23
頂部


Re: ADC轉換的奇怪問題?…
#62
中級會員
中級會員


是不是這裡?????

注意看!

//-----A-----
CHS0 = 0; //AN0 is A/D input
Delay1us(32); //Delay 32us
ConvertADC();
while(BusyADC());
Vset_AD = ReadADC();
//------------

然後看!!!!!!
//-----B-----
CHS0 = 0; //AN1 is A/D input
Delay1us(32); //Delay 32us
ConvertADC();
while(BusyADC());
Vbat_AD = ReadADC();
//------------

**************************************
B 這一段裡面的 CHS0 = 0; //AN1 is A/D input
是不是要把它改為
CHS0 = 1; //AN1 is A/D input

發表於: 2007/6/25 17:01
頂部


Re: PIC IC壞掉的原因?
#63
中級會員
中級會員


提供一個方法給你參考!!!

在當成輸入的 I/O 腳上先串接一個電阻,
這樣它會跟內部的兩個保護二極體形成鉗位電路,
輸入腳的電位會限制在 Vcc+0.7 和 Vss-0.7,

如果輸入訊號範圍在 0~24V , 那使用 2k 的電阻應該蠻適合的,
受電阻限制的關係, 流過保護二極體的電流將小於 10mA,

且因為此 I/O 腳為輸入狀態, 所以輸入阻抗會很大,
輸入訊號在 0~Vcc 時, 2k 遠小於輸入阻抗,
對原輸入特性的影響也很小。

需注意的是, 若使用的 I/O 腳內部無保護二極體時,
要記得自己在外部加上。



發表於: 2007/6/14 8:59
頂部


Re: C語言行內組合引用變數錯誤
#64
中級會員
中級會員


我想..... 數值搬移的部份交回給 c 語言作塵該就可以了.
如下. 等數值搬好之後才開始組合語言的部分。


void test1(unsigned char datain,unsigned char var1)
{
unsigned char Buf1=0;

Buf1 = var1;
_asm
..................
............
........

_endasm
}

發表於: 2007/6/9 22:56
頂部


Re: ASCII 轉 hex
#65
中級會員
中級會員


可以的! 因為雖然說是 ascii 轉 hex,
但是當你以 movlw 'A' 時, 其實際作用卻是 movlw 041H
以此類推 movlw 'G' 應為 movlw 047H,

所以啦, W 的數值內容可為 00 ~ FF,
那得到的結果便是 '00' ~ 'FF',
這也是其中的副程式名稱為何是 BIN_HEX,
而不是 ASC_HEX了。

發表於: 2007/6/7 20:03
頂部


Re: ASCII 轉 hex
#66
中級會員
中級會員


LIST R=DEC
#INCLUDE <P16F876.INC>

HEX_CODE0 EQU 020H
HEX_CODE1 EQU 021H

ORG 0
GOTO MAIN

ORG 10
; SOURCE FROM W
BIN_HEX
MOVWF HEX_CODE1
ANDLW 00FH
ADDLW '0'
MOVWF HEX_CODE0
SUBLW '9'
MOVLW 007
BTFSS STATUS,W
ADDWF HEX_CODE0,F

SWAPF HEX_CODE1,W
ANDLW 00FH
ADDLW '0'
MOVWF HEX_CODE1
SUBLW '9'
MOVLW 007
BTFSS STATUS,W
ADDWF HEX_CODE1,F
RETURN

MAIN
MOVLW 'A'
CALL BIN_HEX
GOTO $

END

以上程式供你參考
轉換的結果在 HEX_CODE0, HEX_CODE1

使用方式, 將要轉換的值放入 W , 然後CALL BIN_HEX即可

發表於: 2007/6/7 15:36
頂部


Re: 有關數值移位問題
#67
中級會員
中級會員


從你所希望的結果和所得的結果看來,
所得的結果是正確的,
而所希望的結果則恐怕是那裏有點問題了???

所得的結果:
0x33 = 0011 0011
0x19 = 0001 1001
0x0C = 0000 1100
0x06 = 0000 0110
是右移的動作沒錯!

而且右移在算術上的意義也是除2沒錯的.

發表於: 2007/5/29 20:10
頂部


Re: 請問大大dsPIC4011有關RS232的傳輸問題
#68
中級會員
中級會員


Hi ! 你的問題看起來很有趣。

與其使用時間 delay 來分隔, 似乎不如真的就加上分隔符號吧!
把你所要的 X, Y 夾在結果數字串中。

這樣字串會變成 062X112Y,
pc接收字串時, X字符之前的3個數字就是 X 的數值,
而 Y字符之前的3個數字就是 Y 的數值。

這樣是不是會容易分辨點呢!
一點小建議給你參考...

發表於: 2007/5/19 9:12
頂部


Re: 角度平均計算
#69
中級會員
中級會員


Hi !!! 你還看得真仔細,

if(new_angle >= 180) new_angle = new_angle - 360;
if(new_angle <= -180) new_angle = new_angle + 360;

表示新角度差值大於 180 度或小於-180 度時作角度差值調整
將角度差值調整為相反方向, 因為此方向的夾角角度較小,
這是因為你有提到角度以 0 ~ 359.9 的角度來表示。

例: 前平均角度為 1, 新值為 350

角度差為 350 - 1 = 349 (實際值為 11)
大於 180 的條件成立, 調整為 349 - 360 = -11 (得正確值)
-------------------------------------------------------------------

前平均角度為 355, 新值為 30
角度差為 30 - 355 = -325 (實際值為 35)
小於180 的條件成立, 調整為 -325 + 360 = 35 (得正確值)
-------------------------------------------------------------------

至於你提了其中唯一的特例角度差 180 度,
因為剛好在正對面, 所以要不要在剛好差 180 度時調整就看你高興了,
如果改為

if(new_angle > 180) new_angle = new_angle - 360;
if(new_angle < -180) new_angle = new_angle + 360;
在角度差超過 180 度時才調整, 嗯..嗯.....效果一樣呢!! 哈! 哈!

不過你不也提到了抖動的角度差會在 90 度內嗎,
那不理會它也沒關係吧!


發表於: 2007/5/9 0:38
頂部


Re: 角度平均計算
#70
中級會員
中級會員


如果不是純要計算數學的平均值,
而只是希望降低sensor輸入訊號抖動的輸入均值的話!
那試試以下的方法吧! 看看合不合你的需求。

double average_angle, new_angle;
average_angle = 0;
...
...
...
...
...
// 以下這段請放在 sensor 取樣後的處理程式中

new_angle = (角度 sensor 輸入) - average_angle;
if(new_angle >= 180) new_angle = new_angle - 360;
if(new_angle <= -180) new_angle = new_angle + 360;
average_angle = average_angle + (new_angle / 20);
if(average_angle < 0) average_angle = average_angle + 360;
if(average_angle >= 360) average_angle = average_angle - 360;

// 係數 20 的地方會影響平均值的反應速度, 小一點反應快, 大一點反應慢
// 但是也會影響平均的效果, 小一點均值的效果好, 大一點均值的效果差
...
...
...
...
...

發表於: 2007/5/8 15:06
頂部



« 1 ... 4 5 6 (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... ]

教育訓練中心

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