找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3037|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

芯片PL3201核心通道板驅(qū)動(dòng)程序調(diào)試

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:82781 發(fā)表于 2015-6-13 15:55 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
前幾天為串口2的接收發(fā)愁,總是以為是軟件問題,后來和建華,一頓示波器,一頓萬用表,捉住幾個(gè)波形,測量電壓,最后才說是電平被USB供電的串口芯片拉低,只有3,5V的高電平,PL3201這塊貨識(shí)別不出來,所以唯一的辦法就是抬升加中間轉(zhuǎn)換芯片,,再次聲明PL3201是他媽的大垃圾!大家千萬不要用了,垃圾的要死!麻痹的下載個(gè)程序卡的要死,10次能同步一次,還有啊,不能JTAG,想看個(gè)變量都要打印出來,調(diào)試程序要了命了,麻煩!全是眼淚啊!嗚嗚!
// 控制看門狗喂狗時(shí)間長度                          
  CKCON=0xfF;
  // 8位/16位運(yùn)算模式選擇位設(shè)置
  ALU_MOD=0;      // 設(shè)置成8位運(yùn)算模式
  //載波通訊配置
        //************   3201的載波寄存器設(shè)置  **********//
  set_PLC_3105 ( );                        //上電為3105模式
  
  SSC_ADR=0xFF;
  SSC_DAT=0xFF;
  SSC_ADR=0x02;
  SSC_DAT=0x1F;
  SSC_ADR=0xFF;
  SSC_DAT=0x00;
         
//************   3201的載波寄存器設(shè)置  **********//
                                                                                           //  ( C8H ) 為邊沿觸發(fā)方式(IT2=1)
  
//串口通訊配置
  //TMOD1 = 0x10 ;                              // 設(shè) T/C1 為1分頻模式,ZZZ
  TMOD = 0x21 ;                              // 設(shè) T/C1 為定時(shí)方式2 設(shè)置為8位自裝載計(jì)數(shù)器  T/C0 為定時(shí)方式 1
  SCON=0x50;                           // 工作方式1
  
  PCON=0x80;                           // 波特率加倍
  TH1=BPS2400;
  TL1=BPS2400;                        // 加倍設(shè)定波特率 9.6MHz ( 按1分頻2400計(jì)算)
  TR1=1;
  
  IE=0x82;                              // 啟動(dòng)定時(shí)器1
  TH0=0x63;
  TL0=0xcc;                                                                                                    // 定時(shí) 50 ms 一個(gè)定時(shí)中斷
  TR0 = 1;           
         
        
  TMOD1=0x12; //time2方式2
  SCON1=0x50; //
  TH2=0xfb;
  TL2=TH2;
  TR2 =1;

   ES=1;
   ES1=1;
   EA=1;

sbit  USART0_RX_A=P1^2;
sbit  USART1_TX_A=P0^3;
static   uint8_t write=0;
static   uint8_t read=0;
uint8_t xdata  USART_BUF[50];//usart緩存


static   uint8_t write1=0;
static   uint8_t read1=0;
uint8_t xdata  USART_BUF1[50];//usart緩存




void check_usart()
{


if(write!=read)
{
        USART1_TX_A=~USART1_TX_A;//發(fā)送指示
   SendOneByte1(USART_BUF[read]);
   read++;
   if(read==49)read=0;


  }


}
void check_usart1()
{
if(write1!=read1)
{
        USART1_TX_A=~USART1_TX_A;//發(fā)送指示
   SendOneByte1(USART_BUF1[read1]);
   read1++;
   if(read1==49)read1=0;


  }        


}
void Show_version(void)
{
        
  printf_usart(" Version:0.0.0 \n");
  printf_usart("  小ARM菜菜 \n");
  printf_usart("QQ:925295580 \n");
  printf_usart("王建華的路燈終端板 \n");
  printf_usart("Over! \n");




}




    void SendOneByte1(unsigned char c)
{
   USART1_TX_A=~USART1_TX_A;
    SBUF1 = c;
    while(!ETI);
    ETI=0;
}




  void printf_usart(char  *ptr)
{
                        char a;
        while (*ptr) {
                        
                a=(char)*ptr;
                SendOneByte1(a);
                ptr++;        
        }                                                               
}


  void send_usart1_data(char  *ptr,unsigned char len)
{
                        char a,i;
        for(i=0;i<len;i++)
         {
                        
                a=(char)*ptr;
                SendOneByte1(a);
                ptr++;        
        }                                                               
}


void UARTInterrupt(void) interrupt 4
{
           char a;


    if(RI)
    {
        RI = 0;
        USART0_RX_A=~USART0_RX_A; //串口1接收
        /*USART_BUF[write]=SBUF;
                write++;
                if(write==49)write=0;  */
                a=SBUF;
           SendOneByte1(a);
    }
    else
        TI = 0;
}


void UARTI1nterrupt(void) interrupt 6
{

                char b;


         

           if(ERI)
    {
                ERI=0;
                USART0_RX_A=~USART0_RX_A; //串口1接收
                 /*USART_BUF1[write1]=SBUF1;
                write1++;
                if(write1==49)write1=0;
                   */
           b= SBUF1;
          SendOneByte1(b);
         }
         else
         {
         
           ETI=0 ;
          //send_usart1_data("456",3);
         }





}


void SendOneByte(unsigned char c)
{
    SBUF = c;
    while(!TI);
    TI = 0;
}



分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表