📄 main.c
字号:
#include <hidef.h> /* common defines and macros */
#include <mc9s12dg128.h> /* derivative information */
#include "lib.c"
#include "funtion.h"
#pragma LINK_INFO DERIVATIVE "mc9s12dg128b"
void s_ini(void) //系统初始化
{
uchar tmp;
SYNR=3;
REFDV=1;
PLLCTL=0x50;
delay(100);
CLKSEL|=0x80; //超频到48M, 总线24M
// INITRG = 0x00; /* lock registers block to 0x0000 */
// INITRM = 0x39; /* lock Ram to end at 0x3FFF */
// INITEE = 0x09; /* lock EEPROM block to end at 0x0fff */
delay(100);
PORTB=0xff;
DDRB=0xff;
DDRA=0x00; //A口设置为输入
PTH=0x00;
DDRH=0x68; //PH1=input
PERH=0x97; //enable pull
PPSH=0x80; //PH7,PH6,PH5 pull up, PH4 pull down
PIEH=0x00; //使能遥控中断 PH7
PTP =0x00;
DDRP=0x30; //PP4,PP5 output
DDRA=0x00;
PUCR=0x01; //Port A enable pull up
PTJ=0x00;
DDRJ=0x00;
PERJ=0x00; //diable pull
PPSJ=0x80;
PIEJ=0xc0; //enable PJ interrupt
PTT=0x00;
DDRT=0x00; //PT7-PT4 =input
PERT=0x40; //enable pull for PT6
// PACN3=0x00;
// PACN2=0x00;
// PACTL=0x40; //enable pulse couter B
// DLYCT=0x00; //
TIOS=0x80; //ch 7 compare mode
OC7M=0x00;
OC7D=0x00;
// PACTL=0x74;
TSCR2=0x0f; //when ch7 compare rst pre div =128
TC7=50000; //timer for 200mS //*/
TSCR1=0x80; //enable timer
TCTL1=0x00;
TCTL2=0x00;
TCTL3=0x20;
TCTL4=0x00; //通道6下降沿输入捕捉
TIE =0xC0; //中断使能
ini_at45(); //初始化SPI0
PWME=0xc3; //enable ch1, ch7
PWMPOL=0xc3; //high level effect
PWMDTY6=(uchar)(3000>>8);
PWMDTY7=(uchar)(3000&0x00ff); //占空比
PWMPER6=(uchar)(40000>>8); // 舵机
PWMPER7=(uchar)(40000&0x00ff); //周期
PWMDTY0=(uchar)(0>>8);
PWMDTY1=(uchar)(0&0x00ff); //占空比 //
PWMPER0=(uchar)(2000>>8); //电机
PWMPER1=(uchar)(2000&0x00ff); //周期
PWMCLK=0x00;
PWMPRCLK=0x40; //SB=Fck/1 SA=Fck/8
PWMCTL=0x90; //4_16 bit PWM //*/
SCI0BDH=0; //串口0初始化
SCI0BDL=35; //set bandrate=57600bps
SCI0CR1=0x00;
SCI0CR2=0x2c; //enable to sent and receive
tmp=SCI0SR1;
ATD0CTL2=0xc0; //enable ATD, interrupt
ATD0CTL3=0x08;
ATD0CTL4=0x80; //8bit,
ATD1CTL2=0xc0; //enable ATD, interrupt
ATD1CTL3=0x08;
ATD1CTL4=0x80; //8bit,
ATD0DIEN=0x00; //AD口数字输入使能,使能CCD输入
ATD1DIEN=0x80; //CCD二元输入
ECLKDIV=0x5C; //EEPROM时钟分频器
INTCR=0xc0; //行同步中断, 下降沿触发,
delay(10);
SE_s; //舵机供电
}
interrupt 20 void sci0(void) //SCI0 interrupt
{
uchar sta,das;
sta=SCI0SR1; //read the state
das=SCI0DRL;
if(sta&0x40) //sent finish
{
}
if(sta&0x20) //receve a data
{
speed(das*8);
SCI0DRL=das;
}
}
interrupt 15 void ch7(void) //ch7 interrupt 266mS
{
TFLG1=0x80; //clr flag
if(m_en) //LED falsh
PORTB^=0xf0;
}
void choice(void) //choice a funtion
{
uchar kv;
uchar pp=0;
uchar tmp=0;
V1: kv=0;
wu(CN1[0],CN1[1],CN1[2],CN1[3]); //display
set(2);
go(0,pp); //flash
for(;;) //loop
{
kv=key();
if(kv==5&&pp) //last
pp--,go(0,pp);
else if(kv==6&&pp<3) //next
pp++,go(0,pp);
if(kv==8||kv==10) //enter
{
if(pp==0) //进入比赛
{
match();
goto V1;
}
else if(pp==1) //传感受器测方式
{
text();
goto V1;
}
else if(pp==2) //CCD 测试
{
t_ccd();
goto V1;
}
else if(pp==3) //参数设定
{
setting();
goto V1;
}
} //*/
}
}
void main(void) {
/* put your own code here */
volatile uint t1=0;
s_ini(); //系统初始化
EnableInterrupts;
get_s(); //获取设定参数
choice(); //shoice
for(;;) {} /* wait forever */
/* please make sure that you never leave this function */
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -