⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 testpro.c

📁 这是ARMS3C44爸的基础例程
💻 C
字号:
#include "44b.h"
#include "TestPro.h"
#include "IntAddress.h"


//可调延时
void Delay(DWORD count)   
{
  DWORD i;
  for(i=0;i<count;i++);
}


//************************************************
//运行灯闪烁
void RunLed(void)          
{
   AddTimer5 = (DWORD)IntTimer5;
   rINTMSK &= 0x03fffeff;  //开Ttimer5中断
   rTCFG0 |= 0xf0000;      //Timer5预分频值为0xf
   rTCFG1 |= 0x300000;     //Timer5分割值为16
   rTCNTB5 = 0x4000;       //Timer5计数初值
   rTCON = 0x2000000;      //手动更新
   rTCON = 0x5000000;      //自动重载,启动
}

//定时器5中断处理
void __irq IntTimer5(void)    
{
   rI_ISPC |= (0x1<<8);
   Led1Blink;
}
//************************************************

//************************************************
//初始化串口0
void InitCom0(void)
{
   rULCON0 = 0x03;   //无奇偶校检,1位停止位,8位数据位
   rUCON0 = 0x05;    //脉冲中断
   rUFCON0 = 0x00;   //FIFO禁止
   rUMCON0 = 0x00;   //AFC(Auto Flow Control)禁止  
   rUBRDIV0 = 0x40;  //波特率9600 UBRDIV0=MCLK/(rate*16)-1
}

//用串口0发送一个字节数据
void SendByte(char ch)     
{
		if(ch=='\n')
		{
		    while(!(rUTRSTAT0 & 0x2));  //等待,直到发送缓冲区为空
		    Delay(10);	                //超级中断的响应速度较慢 
		    WrUTXH0('\r');              //发送回车符
		}    

    Delay(10);
    while(!(rUTRSTAT0 & 0x2));
    WrUTXH0(ch);
} 

//用串口0发送文字     
void SendWZ(char *str)    
{
	while (*str)
	  SendByte(*str++);
}

//用串口0接收一个字节数据
BYTE  ReceiveByte(void)
{
    while(!(rUTRSTAT0 & 0x1));
    return rURXH0;
}    
//*************************************************

//*************************************************
//IIC直接IO控制处理数据
//启动
void IicStartM(void)
{
  rPCONF = (rPCONF&(~0xf))|0x5; //使能IIC端口的IO直接控制
  Delay(IicDelay);
  SetSCL;
  Delay(IicDelay);
  SetSDA;
  Delay(IicDelay);
  ClrSDA;
  Delay(IicDelay);
  ClrSCL;
}

//停止
void IicStopM(void)
{
  Delay(IicDelay);
  ClrSDA;
  Delay(IicDelay);
  SetSCL;
  Delay(IicDelay);
  SetSDA;
  Delay(IicDelay);
  ClrSCL;
  rPCONF = (rPCONF&(~0xf))|0xa;//使能IIC端口的DMA控制
}

//向IIC芯片写一字节
void IicWriteByteM(BYTE Data)
{
  DWORD k;
  for(k=0;k<8;k++)
   {
    ClrSCL;
    Delay(IicDelay);
    if(Data&0x80)
       SetSDA;
    else 
       ClrSDA;
    Delay(IicDelay);
    SetSCL;
    Data = Data << 1;
    Delay(IicDelay);
   }
   ClrSCL;
   
   Delay(IicDelay);
   SetSDA;
   
   rPCONF = 0x249151;     //SDA输入使能   
   SetSCL;
   Delay(IicDelay);

   while(rPDATF&0x2);

   ClrSCL;
   rPCONF = 0x249155;     //SDA输出使能     
}

//从IIC芯片读一字节
BYTE IicReadByteM(void)
{
   BYTE Data = 0;
   DWORD k;
   rPCONF = 0x249151;     //SDA输入使能    
   for(k=0;k<8;k++)
     {
        SetSCL;
        Delay(IicDelay);
        Data <<= 1;         
        Data |= ((rPDATF&0x2)>>1);
        ClrSCL;
        Delay(IicDelay);
     }

   rPCONF = 0x249155;     //SDA输出使能       
   SetSDA;
   Delay(IicDelay);
   ClrSDA;
   Delay(IicDelay);
   SetSCL;
   Delay(IicDelay);
   ClrSCL;
   Delay(IicDelay);
   return Data;
}
//**********************************************

//**********************************************
//按键中断处理(IRQ模式)
//初始化按键中断
void StartKeyIntInit(void)
{
   AddEint4567 = (DWORD)Eint4567;   
   rPCONG |= 0xff00;                   //中断端口设置
   rINTMOD &= ~(0x1<<21);              //EINT4567为IRQ模式
   rEXTINT &= 0x7fff;                  //EINT4567为低电平触发
   rINTCON = 0x5;                      //非向量中断,IRQ中断使能,FIQ中断禁止
   rINTMSK &= 0x3dfffff;               //开EINT4567中断
}

//关按键中断
void StopKeyInt(void)
{
   rPCONG &= ~0xaa00;                  //将中断端口设置为输出
   rINTMSK |= 0x1<<21;                 //关EINT4567中断  
}

//Eint4567中断处理
void  __irq Eint4567(void)
{  

   if(rEXTINPND == 1)          //Key0中断
   {
   }
   else if(rEXTINPND == 2)     //Key0中断
   {
   }
   else if(rEXTINPND == 4)     //Key0中断
   {
   }
   else if(rEXTINPND == 8)     //Key0中断
   {
   }

   rEXTINPND = 0x0f;           //清Eint4567各中断标志位
   rI_ISPC |= (0x1<<21);       //清Eint4567中断标志位
}
//*********************************************

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -