音影先锋亚洲天堂网|电影世界尽头的爱完整版播放|国产 熟女 91|高清无码免费观看欧美日韩|韩国一区二区三区黄色录像|美女亚洲加勒比在线|亚洲综合网 开心五月|7x成人在线入口|成人网站免费日韩毛片区|国产黄片?一级?二级?三级

登錄 免費(fèi)注冊 首頁 | 行業(yè)黑名單 | 幫助
維庫電子市場網(wǎng)
技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng)
驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe

初次編ARM程序,請大蝦指教

作者:melearn 欄目:ARM技術(shù)
初次編ARM程序,請大蝦指教
此程序要實現(xiàn)的功能是從上位機(jī)接收數(shù)據(jù)后,按KEY1鍵后數(shù)碼管顯示高4位,同時LED1亮,按KEY2鍵后數(shù)碼管顯示第四位,同時LED1滅,我用的是EasyARM2100開發(fā)板,現(xiàn)在按鍵LED1會亮和滅,但數(shù)碼管死活不顯示,現(xiàn)將原程序附于下,請大蝦指教其中的錯誤,菜鳥不甚感激啊。。。
/********************************************************************
* 文件名:DATARET.C
* 功能:使用串口UART0接收上位機(jī)發(fā)送的數(shù)據(jù),當(dāng)接收到8個連續(xù)數(shù)據(jù)后,將接收計數(shù)值加一后輸
*      出數(shù)碼管D1顯示,并將數(shù)據(jù)原封不動地發(fā)送回上位機(jī)。
* 說明:將跳線器JP5、JP3短接。
*      通訊波特率115200,8位數(shù)據(jù)位,1位停止位,無奇偶校驗。
****************************************************************************/
#include  "config.h"

#define   SPI_CS    (1<<29)            /* P0.29 */
#define   SPI_DATA    (1<<6)            /* P0.6 */
#define   SPI_CLK    (1<<4)            /* P0.4 */

#define   SPI_IOCON    (SPI_CS|SPI_DATA|SPI_CLK)    /* 定義SPI接口的I/O設(shè)置字 */
#define   KEY1      (1<<16)
#define   KEY2      (1<<17)
#define  LEDCON1    1<<22
/* 定義串口模式設(shè)置數(shù)據(jù)結(jié)構(gòu) */
typedef  struct  UartMode
{  uint8 datab;         // 字長度,5/6/7/8
   uint8 stopb;         // 停止位,1/2
   uint8 parity;        // 奇偶校驗位,0為無校驗,1奇數(shù)校驗,2為偶數(shù)校驗
}  UARTMODE;


uint8 rcv_buf[8];       // UART0數(shù)據(jù)接收緩沖區(qū)
uint8 rcv_new;          // 接收新數(shù)據(jù)標(biāo)志
//////////////////////////////
int WAITKEY1()
{
  uint32   i;
  while(1)
{
  while((IO0PIN&KEY1)!=0);
  for(i=0;i<50000;i++);
  if((IO0PIN&KEY1)==0);
   break;
  }
  while((IO0PIN&KEY1)==0);
  return(1);
}

////////////////////////////////
int WAITKEY2()
{
  uint32   i;
  while(1)
{
  while((IO0PIN&KEY2)!=0);
  for(i=0;i<50000;i++);
  if((IO0PIN&KEY2)==0);
   break;
  }
  while((IO0PIN&KEY2)==0);
  return(1);
}
//////////////////////////////////////
/****************************************************************************
* 名稱:IRQ_UART0()
* 功能:串口UART0接收中斷。
* 入口參數(shù):無
* 出口參數(shù):無
****************************************************************************/
void   __irq IRQ_UART0(void)
{  uint8  i;
     
   if( 0x04==(U0IIR&0x0F) ) rcv_new = 1;// 設(shè)置接收到新的數(shù)據(jù)標(biāo)志
   for(i=0; i<8; i++)
   { rcv_buf[i] = U0RBR;                  // 讀取FIFO的數(shù)據(jù),并清除中斷標(biāo)志
   }
   
   VICVectAddr = 0x00;                  // 中斷處理結(jié)束
}               

      
/****************************************************************************
* 名稱:UART0_Ini()
* 功能:初始化串口0。設(shè)置其工作模式及波特率。
* 入口參數(shù):baud                波特率
*          set          模式設(shè)置(UARTMODE數(shù)據(jù)結(jié)構(gòu))
* 出口參數(shù):返回值為1時表示初始化成功,為0表示參數(shù)出錯
****************************************************************************/
uint8  UART0_Ini(uint32 baud, UARTMODE set)
{  uint32  bak;
   
   /* 參數(shù)過濾 */
   if( (0==baud)||(baud>115200) ) return(0);
   if( (set.datab<5)||(set.datab>8) ) return(0);
   if( (0==set.stopb)||(set.stopb>2) ) return(0);
   if( set.parity>4 ) return(0);

   /* 設(shè)置串口波特率 */
   U0LCR = 0x80;                        // DLAB位置1
   bak = (Fpclk>>4)/baud;
   U0DLM = bak>>8;
   U0DLL = bak&0xff;
   
   /* 設(shè)置串口模式 */
   bak = set.datab-5;                   // 設(shè)置字長度
   if(2==set.stopb) bak |= 0x04;        // 判斷是否為2位停止位  
   
   if(0!=set.parity) {set.parity = set.parity-1; bak |= 0x08;}
   bak |= set.parity<<4;                  // 設(shè)置奇偶校驗
      
   U0LCR = bak;
   
   return(1);
}


/****************************************************************************
* 名稱:HC595_SendDat()
* 功能:向74HC595發(fā)送一字節(jié)數(shù)據(jù)
* 入口參數(shù):dat        要發(fā)送的數(shù)據(jù)
* 出口參數(shù):無
* 說明:發(fā)送數(shù)據(jù)時,高位先發(fā)送。
****************************************************************************/
/////////////////////////////////////////////
void  MSPI_Init(void)

{ PINSEL0 = (PINSEL0&0xFFFF00FF)|0x00005500;
  S0PCCR = 0x52;
  S0PCR = (0<<3)|(1<<4)|(1<<5)|(0<<6)|(0<<7);
  
}
//////////////////////////////////////////////
void  HC595_SendDat(uint8 dat)
{  uint8  i;

   IO0CLR = SPI_CS;                        // SPI_CS = 0
   for(i=0; i<8; i++)                    // 發(fā)送8位數(shù)據(jù)
   {  IO0CLR = SPI_CLK;                    // SPI_CLK = 0
      /* 設(shè)置SPI_DATA輸出值 */
      if( (dat&0x80)!=0 ) IO0SET = SPI_DATA;
        else IO0CLR = SPI_DATA;
      dat <<= 1;
      IO0SET = SPI_CLK;               &nbs
2樓: >>參與討論
melearn
怎么沒有大蝦指教嗎,版主大人們都在休息嗎
 
參與討論
昵稱:
討論內(nèi)容:
 
 
相關(guān)帖子
2148不能運(yùn)行基本功能試驗
回:LPC213x電源設(shè)計注意事項
原廠程序出現(xiàn)“取指令終止”問題!
請教﹕Easyarm2200板上PWM是獨(dú)立的嗎﹖
請問一下214x的USB設(shè)備在計算機(jī)段有通用的驅(qū)動程序么?
免費(fèi)注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進(jìn)入


Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號