• slider image 442
  • slider image 483
  • slider image 484
  • slider image 485
  • slider image 486
  • slider image 487
:::


Browsing this Thread:   1 Anonymous Users




(1) 2 »


Re: 求救P18F4520 usart通訊
#14
版主
版主


查看用戶資訊
參照:

posthsu 寫道:
1). 程式壓縮解不開? 沒辦法看

RAR 在此網站傳送會有檔案損毀的情形,可以用 RAR 主選單下的"工具" --> "修復壓縮檔" 的功能來修復。

2). RXptr=&RX_ARRAY[0]; <~~??
將陣列 RX_ARRY 的位址傳給指標 RXptr,設定指標的索引位址。

RXptr &= RX_ARRAY[0];

發表於: 2009/10/20 10:06
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 求救P18F4520 usart通訊
#13
新會員
新會員


查看用戶資訊
1). 程式壓縮解不開? 沒辦法看
2). RXptr=&RX_ARRAY[0]; <~~??
RXptr &= RX_ARRAY[0];

發表於: 2009/10/20 9:38
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 求救P18F4520 usart通訊
#12
資深會員
資深會員


查看用戶資訊
嗯,感謝nicecookie大大的回覆,
我有試著將TXRX短路來試,送什麼就收什麼,
代表是正常的,所以應該是對的,如果有問題的話再請教各位,
謝謝!

發表於: 2009/10/8 8:58
不怕苦...苦半輩子;怕苦...苦一輩子
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 求救P18F4520 usart通訊
#11
資深會員
資深會員


查看用戶資訊
dsPIC部分我就比較不熟了

看看版主可否給你好建議

發表於: 2009/10/8 8:50
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 求救P18F4520 usart通訊
#10
資深會員
資深會員


查看用戶資訊
請教nicecookie大大及其他前輩:

目前用30F4011寫,改了又改寫了又寫,還是不行,
我用LOOKRS232送12BYTE資料,只收到9BYTE,
我將結果上傳,煩請您幫我看一下
不了解為什麼明明送了12byte,卻只能收到9byte,
而且只有第一個byte的資料是對的,是我抓的時間太慢,
導致loss資料嗎?有方法可以查出若RCREG都滿了的狀態嗎?

#define __dsPIC30F4011__
#include <p30F4011.h>
#include <timer.h>
#include <uart.h>
#include "C30EVM_LCD.h"

#define  FCY 7372800*2
#define  SW5   PORTEbits.RE8
#define  SW6   PORTBbits.RB3
#define  LED1  LATEbits.LATE0
#define  LED1C TRISEbits.TRISE0
#define  SW5C  TRISEbits.TRISE8
#define  SW6C  TRISBbits.TRISB3

#define  INPUT   1
#define  OUTPUT  0

_FOSC(CSW_FSCM_OFF XT_PLL8);
_FWDT(WDT_OFF);
_FBORPOR(PBOR_OFF MCLR_EN);
_FGS(CODE_PROT_OFF);

const 
char string[]="BAT_USART";
const 
char diplaycmd[5]={129,101,2,0,0};

void Init_UART(void);
void sitoa(unsigned char,unsigned char *TXdata);
void Init_UART(void);
void Init_IO(void);
void Scankey(void);
void SendCMD(void);
void DispVolt(void);
void Init_T1(void);
void parity_bit(unsigned char);
void CLR_RXDATA(void);

unsigned char RX_DATA;
unsigned char *RXptr;
unsigned char keydelay=30;
unsigned char RX_ARRAY[12];
unsigned char RXcnt=0;
unsigned int  voltage;
unsigned char SW5_Debance=0;
unsigned char DIG1,DIG2,DIG3;

struct Flag
{
   
unsigned RXEND:1;
   
unsigned Key_Flag:1;
   
unsigned kin:1;
}
FLAGbits;

void _ISR _U1RXInterrupt(void)
{
   *
RXptr=ReadUART1();
   
RXptr++;
   
RXcnt++;
   if(
RXcnt==12)
      {
      
FLAGbits.RXEND=1;
      
RXcnt=0;
      
RXptr=&RX_ARRAY[0];
      }
   
IFS0bits.U1RXIF=0;
}

void _ISR _T1Interrupt(void)
{
   if (
SW5_Debance!=0)
   {    
      if (!
SW5
         
SW5_Debance=10;
      else    
         
SW5_Debance--;
   }    
   else 
   {
      if (!
SW5)
      { 
         
FLAGbits.Key_Flag =;
         
SW5_Debance=10;
      }
   }
   
IFS0bits.T1IF=0;
}

int main(void)
{
   
Init_IO();
   
Init_T1();
   
Init_UART();
   
OpenLCD();
   
setcurLCD(0,0);
   
putrsLCD(string);
   
//CLR_RXDATA();
   
RXptr=&RX_ARRAY[0];

   
FLAGbits.RXEND=0;
   
FLAGbits.kin=0;
   
IFS0bits.U1RXIF=0;
   
IFS0bits.T1IF=0;

   while(
1)
   {
      
Scankey();
      if(
FLAGbits.RXEND==1)
      {
         if(
RX_ARRAY[11]-129==0)
         {
            
voltage=(RX_ARRAY[2]<<8+RX_ARRAY[3]);
            
CLR_RXDATA();
         }
         
FLAGbits.RXEND=0;
      }
   }              
}

void Init_T1(void)
{
   
ConfigIntTimer1(T1_INT_PRIOR_6   &
                   
T1_INT_ON
                  
);
   
   
OpenTimer1(T1_ON            
              
T1_IDLE_STOP     &
              
T1_GATE_OFF      &
              
T1_PS_1_1        &
              
T1_SYNC_EXT_OFF  &
              
T1_SOURCE_INT    ,
              
FCY/1000         //Timer1 period 1ms
             
);
}

void Init_UART(void)
{
   
unsigned int baudvalue;
   
unsigned int U1MODEvalue;
   
unsigned int U1STAvalue;
   
CloseUART1();
   
ConfigIntUART1(
                 
UART_RX_INT_EN  
                 
UART_RX_INT_PR7 
                 
UART_TX_INT_DIS 
                 
UART_TX_INT_PR7
                 
);
   
baudvalue=191;    //UXBRG=((7372800*2/4800)/16)-1=191
   
U1MODEvalue=UART_EN             
               
UART_IDLE_CON       &
               
UART_DIS_WAKE       
               
UART_DIS_LOOPBACK   &
               
UART_DIS_ABAUD      
               
UART_EVEN_PAR_8BIT  &
               
UART_1STOPBIT;
  
   
U1STAvalue=UART_INT_TX_BUF_EMPTY  &
              
UART_TX_PIN_NORMAL     &
              
UART_TX_ENABLE         
              
UART_INT_RX_CHAR       &
              
UART_RX_OVERRUN_CLEAR;

   
OpenUART1(U1MODEvalue,U1STAvalue,baudvalue);

   return;
}   

void Init_IO(void)
{
   
ADPCFG=0XFFFF;
   
SW5C=INPUT;
   
LED1C=0;
   
LED1=0;
}

void Scankey(void)
{
     if (
FLAGbits.Key_Flag)                // SW2 press ?
    
{
        
FLAGbits.Key_Flag=0;            // Clear key press flag
        
SendCMD();
    }
}

/*void Scankey(void)
{
   if(SW5==0)
      {
      FLAGbits.kin=1;
      }
   if(keydelay==0)
   {
      if(SW5==1)
      {
         LED1=!LED1;
         SendCMD();
         keydelay=30;
      }
      FLAGbits.kin=0;
   }
}
*/
        
void SendCMD(void)
{
   
unsigned char cnt;
   for(
cnt=0;cnt<5;cnt++)
   {
      while(
BusyUART1());
      
WriteUART1(diplaycmd[cnt]);
   }
}
 
void parity_bit(unsigned char parity)
{
        
unsigned char ebit,result;
        
unsigned char sum=0,cnt
        for(
cnt=0;cnt<8;cnt++)
        {
        
sum+=(parity 0x01);
        
parity=parity>>1;
        }
        
result=sum%2;
}

char Hex_ASCII_Code(char Data)                     // call by value & return value
{

    if (
Data<0x0a
       return (
Data+0x30);            
    else 
       return (
Data+0x37);
}

void DEC_ASCII(unsigned char HEX_DATA)
{
   
//if HEX_DATA=0XFF-->DEC:255-->ASCII 2 5 5
   
DIG1=Hex_ASCII_Code(HEX_DATA/100);  
   
DIG2=Hex_ASCII_Code((HEX_DATA-DIG1*100)/10);
   
DIG3=Hex_ASCII_Code(HEX_DATA-DIG1*100-DIG2*10);
}

void CLR_RXDATA(void)
{
   
unsigned char cnt;
   for(
cnt=0;cnt<12;cnt++)
   {
      
RX_ARRAY[cnt]=0x00;
   }
}

Attach file:


Link only for registered users

發表於: 2009/10/5 22:46

Edited by Ryang on 2009年10月20日 09:57:04
不怕苦...苦半輩子;怕苦...苦一輩子
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 求救P18F4520 usart通訊
#9
資深會員
資深會員


查看用戶資訊
nicecookie大大:
晚上回去再把昨天的問題po出來,
感謝您的回覆,受益良多!

發表於: 2009/10/1 16:40
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 求救P18F4520 usart通訊
#8
資深會員
資深會員


查看用戶資訊
請問我如何量鮑率,是量輸出端每bit之間的間格時間嗎?
然後計算出每秒可以送多少bit嗎?

是的



如我每bit間格200us,那算出的鮑率大約為5000bit per second
(如果沒錯的話,這是之前量測出來的)

是的
4800bps 每bit是208us, 和200us接近, 是正確的結果,
可能是示波器觀看的誤差, 也可能實際真的有誤差,
但不論如何誤差都在可接受範圍

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


Re: 求救P18F4520 usart通訊
#7
資深會員
資深會員


查看用戶資訊
參考
http://commons.wikimedia.org/wiki/Fil ... 32_oscilloscope_trace.svg

http://www.ltivs.ilc.edu.tw/kocp/mpu/m7/m7-3-1.htm

每個bit 的寬度就是 1/4800 秒

要注意的是, RS232是由低位元先送

發表於: 2009/10/1 13:58
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 求救P18F4520 usart通訊
#6
資深會員
資深會員


查看用戶資訊
nicecookie大大:

對不起,小弟能力不太好!
請問我如何量鮑率,是量輸出端每bit之間的間格時間嗎?
然後計算出每秒可以送多少bit嗎?
如我每bit間格200us,那算出的鮑率大約為5000bit per second(如果沒錯的話,這是之前量測出來的)

發表於: 2009/10/1 11:45
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 求救P18F4520 usart通訊
#5
資深會員
資深會員


查看用戶資訊
正常來說 9bit傳輸並不會有甚麼問題才對

所以建議 要先確認幾件事

1. 確認傳送過來的資料是否為正確格式
用個示波器確認一下吧,鮑率對嗎? 資料真的是9bit嗎?

2. 收錯的資料是甚麼內容? (整筆的)
把發送資料和收到的資料 貼上來看看吧
或許可以看是哪的問題

發表於: 2009/10/1 9:49
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... ]

教育訓練中心

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