?? testpro.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 + -