用来检测寻迹小车电路的代码

/*#################################################
**程序描述:   以串口方式接收从PC机发送的数据做出相应的动作
**           
**硬件连接:   PTA0-7 连 传感器 
**            PTB0-7 连 灯
**            PTD5,PTD4 分别连 L293D的EN1,EN2
**作者:    钱彬丰
**开始时间:   2005/5/2 9:00
**结束时间:  2005/5/2 19:00  
###################################################*/
#include <hidef.h> /* for EnableInterrupts macro */
#include <MC68HC908GP32.h> /* include peripheral declarations */
#define FAST_H 0x80
#define FAST_L 0x00
#define SLOW_H 0x30
#define SLOW_L 0x00
#define END '0'
#define LEFT_MOTO_FAST '1'
#define RIGHT_MOTO_FAST '2'
#define LEFT_MOTO_SLOW '3'
#define RIGHT_MOTO_SLOW '4'
#define LIGHT_ON '5'

void timer_init()
{
 //-----------计时器初始化-------------------
    T1SC=0x26;          //定时器停止,无中断,64分频
    T1MODH=0x96;        //预置数为9600
    T1MODL=0x00;
}
void channel_0_init(byte ch0h,byte ch0l)
{
 //----------0通道初始化---------------------
 T1CH0H=ch0h;
 T1CH0L==ch0l;
    T1SC0=0x16;         //清标志位,无中断,无缓冲PWM,电平翻转,溢出翻转 
}
void channel_1_init(byte ch1h,byte ch1l)
{
 //----------1通道初始化---------------------
 T1CH1H=ch1h;
 T1CH1L=ch1l;
 T1SC1=0x16;         //清标志位,无中断,无缓冲PWM,电平翻转,溢出翻转
}

void sci_init()
{
 //--------------串口寄存器初始化-----------------------
    SCC1=0x40;          //允许SCI,正常输出,8位数据,无校验
    SCC2=0x0C;          // 不允许发送中断,不允许接受中断,允许发送、接受
    SCBR=0x02;          // 波特率9600
}

void run_left_fast()
{
 timer_init();
 channel_0_init(FAST_H,FAST_L);
 T1SC_TSTOP=0;       //计时起开始计时
}

void run_right_fast()
{
 timer_init();
 channel_1_init(FAST_H,FAST_L);
 T1SC_TSTOP=0;       //计时起开始计时
}

void run_left_slow()
{
 timer_init();
 channel_0_init(SLOW_H,SLOW_L);
 T1SC_TSTOP=0;       //计时起开始计时
}

void run_right_slow()
{
 timer_init();
 channel_1_init(SLOW_H,SLOW_L);
 T1SC_TSTOP=0;       //计时起开始计时
}

void end()
{
 T1SC_TSTOP=1;       //计时起停止计时
 PTB=0xff;           //B口初始值为全灭
}

void sent_data(byte data)
{
    while(SCS1_SCTE==0)
    {
    }
    SCDR=data;
}

void get_data(void)
{
 byte data;
    while(SCS1_SCRF==1)
    {
     data=SCDR;
    }
    switch(data)
    {
     case END:
      end();
     break;
    case LEFT_MOTO_FAST:
     run_left_fast();
     break;
    case RIGHT_MOTO_FAST:
     run_right_fast();
     break;
    case LEFT_MOTO_SLOW:
     run_left_slow();
     break;
    case RIGHT_MOTO_SLOW:
     run_right_slow();
     break;
    case LIGHT_ON:
     PTB=0x00;           //B口全亮
     sent_data(PTA);
     break;
    default:
     end();
    } 
}

void main(void) {
 CONFIG1=0x01;       //禁止看门狗
 DDRA=0x00;          //设置A口为输入  
    DDRB=0xff;          //设置B口为输出
    PTB=0xff;           //B口初始值为全灭
   
    sci_init();

 for(;;)
 {
  get_data();
 }
}

阅读更多
文章标签: timer byte include c
个人分类: 我的奋斗
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭