用来检测寻迹小车电路的代码
2005-05-03 00:44
375 查看
/*#################################################
**程序描述: 以串口方式接收从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();
}
}
**程序描述: 以串口方式接收从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();
}
}
相关文章推荐
- 一段奇怪的代码,可以用来检测杀毒软件
- 一个可以用来做人脸检测的视频帧间差分代码
- 智能小车22:安装电压检测模块
- 实用小代码之内存泄漏检测(二)
- JavaScript常用检测脚本实例代码[正则表达式]
- 从客户端检测到有潜在危险的Request.Form值的asp.net代码
- 基于git diff进行的eslint代码检测
- 充电器类型检测实现代码分析
- Python项目代码检测
- ERR_BLOCKED_BY_XSS_AUDITOR:Chrome 在此网页上检测到了异常代码:解决办法
- [转]国外的一个图像显著区域检测代码及其效果图 saliency region detection
- Verilog实现同步整形电路的原理及代码解析
- 一个简单有趣的皮肤检测代码
- 收藏下一个适合用来做宣传页背景的色调和CSS代码
- OpenCV人脸检测代码分析
- PHP制作登录异常ip检测功能的实例代码
- jQuery检测某个元素是否存在代码分享
- jQuery检测某个元素是否存在代码分享
- 肤色检测代码示例
- DirectX9.0中用来进行设备检测的函数汇总