📄 main.c
字号:
#include "ctrl_set.h"
#include "console.h"
#include "utils.h"
#include "39vf160.h"
#include "DataType.h"
#include "inc/44b0x.h" //本来需要的
#define DFT_DOWNLOAD_ADDR 0xc008000 //缺省的下载地址
#define MAX_CMD_LEN 128 //定义最大的命令字符数是128个
#define MAX_ARGS MAX_CMD_LEN/4 //定义最多的参数个数,比如“route 1" "route 2"...
extern U32 MCLK; //从外部的文件引用该变量(常数),在外部文件已经定义好了
//const char d[8]={0x0e,0x0c,0x0d,0x09,0x0b,0x03,0x07,0x06}; //MAC地址,自己随意设置,但不能与网络上其他网络芯片的物理地址重复
//unsigned char left=1,right=1; //left=1,right=1时左、右轮转动,=0是不转
unsigned char i=0,j=0,l=0;
//unsigned char sec_h=0,sec_l=0; //数码管上显示的数值与这两位相同,sec_h=0高位,sec_l=0低位
//unsigned char Roadold,Roadnew; //定义中间变量
U32 program_begin;
extern U32 size;
U8 i,usbinited;
U32 * Ep2OutBuf;
/*********************************************************/
static void delay(U32 cnt) //软件延时子程序
{
while(cnt--);
}
/*********************************************************/
int SysClock(int argc, char *argv[]) //调整44B0X的运行时钟
{
int i, mdiv,pdiv=6,sdiv=1,freq;
if(argc < 2)
{
return 0;
}
else
{
freq = strtoul2(argv[1]);
if((freq==-1)||(freq<10)||(freq>90))
{
return 0;
}
mdiv=16*freq/10-8;
ChangePllValue(mdiv, pdiv, sdiv);
i = 8000;
while(i--);
return 0;
}
}
//==================================================================================寻迹程序
unsigned char Road;
// 右 中 左
//-->CCPR2L-->RB0 RB1 RB2
//================================================================================
const char d[8]={0x0e,0x0c,0x0d,0x09,0x0b,0x03,0x07,0x06};
const char e[8]={0x06,0x07,0x03,0x0b,0x09,0x0d,0x0c,0x0e};
unsigned char left=1,right=1;
unsigned char ii=0,jj=0;
unsigned char sec_h=0,sec_l=0;
volatile int tracker_variable=0;
//================================================================================
void tracker_Timer0Done(void)
{
unsigned char temp1,temp2,temp3;
rI_ISPC=BIT_TIMER0;
Road=rPDATE;
Road=Road&0xC0;
switch(Road)
{ //右 左
case 0x40: //10
// left=1;
// right=0;
left=0;
right=1;
break;
case 0x80: //01
// left=0;
// right=1;
left=1;
right=0;
break;
case 0xC0: //00
// left=0;
// right=0;
left=1;
right=1;
break;
case 0: //11
// left=1;
// right=1;
left=0;
right=0;
break;
}
if(left)
{
temp1=d[ii];
ii=ii+1;
ii=ii%8;
}
else rPDATG=0xFF;
if(right)
{
temp2=e[jj];
jj=jj+1;
jj=jj%8;
}
else rPDATG=0xFF;
temp2=temp2<<4;
temp2=temp2&0xF0;
temp1=temp1&0x0F;
temp1=temp1|temp2;
rPDATG=temp1;
temp3=rPDATD;
if(temp3==0xFE) tracker_variable=1;
}
int Tracker(int argc, char *argv[]) //循迹子程序
{
volatile int aaa;
rPCONG=0x5555;
rPUPG=0x00;
rPCONE=rPCONE&0xf0fff;
rPUPE=0x00;
rPCOND=0x0000; //设置PCOND的PD0~PD7每一个都为输入 (P227页)
rPUPD=0xFF;
rINTCON=0x1;
rINTMOD=0x0000000;
rINTMSK=~(BIT_GLOBAL|BIT_TIMER0);
/*7 6 5 4 3 2 1:0 */
/*Internal clock,LSB mode,Transmit/Receive mode,rising edge clock,No action,Non hand-shaking mode,SIO interrupt mode*/
/*0 1 1 1 0 0 01*/
rSIOCON=0x71;
rSBRDR=15;//band rate = 60MHz/2/(15+1)=1.875MHz
rIVTCNT=7;//Intervals=60MHz/4/(7+1)=1.875MHz
rTCFG0=0xF9;
rTCFG1=0x1;
rTCON=0x08;
rTCNTB0=60;
rTCON=0x02;
rTCON=0x09;
while(tracker_variable==0)
{
rI_ISPC=0x1000000;
aaa=rI_ISPR;
if(aaa==0x2000) tracker_Timer0Done();
}
return 0;
}
/*********************************************************/
#include "44b0x.h"
int main()
{
int i, key,seconds;
char command[MAX_CMD_LEN];
void (*fp)(void) = (void (*)(void))(0x10000);
ChangePllValue(56, 6, 1); //修改系统主频为4 倍频
PortInit();
Tracker(0,0);
}
/********************************************************/
int pIrqStart = 0;
int pIrqHandler = 0;
int pIrqFinish = 0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -