/*#################################################
**程序描述: 以串口方式接收从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();
}
}