飞思卡尔智能车 串口测试程序

以前一直用飞思卡尔,现在搞ARM和FPGA了,没玩过MC9S12XS128,不过飞思卡尔的片子都差不多,有点建议,一是DATASHEET,那是个好东西,把串口那一点看一下,然后再去官网找一些专业的文档,就是对串口操作的文档,确定是有的。而且写得是很通用的程序,看了串口手册之后修改一下他给的能用程序就能用了,自已动手丰衣足食。

没有 随机 送一些 文档、资料?

包括 例程、源码什么的?

急求飞思卡尔智能车电磁组程序~

我去给你看看吧 我大三的时候也参加过 看看有没有?

/*

***********************************************************************************

* Test.c

* Description: This file includes I/ O function for test, the PWM outputs function for test, function

* testing sensors.

* (c) Copyright 2006,Zhao Cheng

* All Rights Reserved

*

* By : Zhao Cheng

* Note : Don't change this file if possible.

**********************************************************************************/

#include

#include

#define HIGHSPEED 8000

#define LOWSPEED 11000 /* 速度变量,0-24000 数值越大,速度越慢 */

void PWMout(int, int);

/* 24000-20000 */

void IOtest(void)

{

static unsigned char i=0,j=0x01,k;

DDRB = DDRA = 0xFF;

PORTB = 0xf0;

for(;;)

{

k=(~j)&0x7f;

PORTA = PORTB = k;

while (TCNT != 0x0000);

while (TCNT == 0x0000)

{

if(i>9)

{

j=j<<1;

i=0;

}

i++;

}

if(j>=0x80)

j=0x01;

}

}

void PWMtest(void)

{

int counter=-4500;

DDRB = 0xff;

PORTB = 0xff;

TSCR1 = 0x80; /* enable timer TCNT */

TSCR2 = 0x00; /* TCNT prescaler setup */

for(;;)

{

while (TCNT != 0x0000);

while (TCNT == 0x0000);

counter=counter+30;

if(counter >= 3000)

{

counter = 0;

PWMout(4500, LOWSPEED);

}

if(counter == 1500)

{

PWMout(-4500, LOWSPEED);

}

PORTB = (char)(counter/100);

}

}

void SignalTest(void)

{

unsigned char signal;

int Direction, Velocity;

Direction = 0;

Velocity = LOWSPEED;

DDRA = 0x00;

DDRB = 0xff;

signal = PORTA;

PORTB = ~signal;

switch(signal)

{

case 0x08: /* 0001 1000 */

case 0x10:

Direction = 800;

Velocity = HIGHSPEED;

break;

case 0x04: /* 0010 0100 */

case 0x20:

Direction = 1500;

Velocity = HIGHSPEED;

break;

case 0x02: /* 0100 0010 */

case 0x40:

Direction = 2800;

Velocity = HIGHSPEED;

break;

case 0x01: /* 1000 0001 */

case 0x80:

Direction = 4000;

Velocity = LOWSPEED;

break;

case 0x3c: /* 0011 1100 over start line */

case 0xff: /* 1111 1111 over crossing line */

case 0x00: /* 0000 0000 go straight not need changed state */

default:

break;

}

if(signal > 0x0f)

Direction = -Direction;

PWMout(Direction, LOWSPEED);

}

/*

***********************************************************************************

* LCD1620.c

* ICC-AVR application builder : 2006-1-8 21:43:48

* Target : M8

* Crystal: 4.0000Mhz

*

* Note : Don't change this file if possible.

**********************************************************************************/

#define CMD_CLEAR 0x01

#define CMD_RESET 0x02

#include

#include

#define LCD_DATA 0xff

#define LCD_EN 0x01 //PORTC 0

#define LCD_RS 0x02 //PORTC 1

#define LCD_RW 0x04 //PORTC 2

#define LCD_DATAPORT PORTB

#define LCD_ENPORT PORTA

#define LCD_RSPORT PORTA

#define LCD_RWPORT PORTA

void lcd_init(void);

void lcd_write_cmd(unsigned cmd,unsigned data);

void lcd_setxy(unsigned char x,unsigned char y);

void lcd_write_string(unsigned char X,unsigned char Y,unsigned char *str);

void delay_nus(unsigned int n);

void delay_nms(unsigned int n);

void lcd_init(void)

{

DDRB |= LCD_DATA;

DDRA |= LCD_EN | LCD_RS | LCD_RW;

LCD_RWPORT&=~LCD_RW;

LCD_DATAPORT=0x30; //控制字规则:5:8bit,4:16x2,3:5x7

LCD_ENPORT|=LCD_EN;

delay_nus(1);

LCD_ENPORT&=~LCD_EN;

delay_nus(40);

lcd_write_cmd(0,0x38); //8bit test

lcd_write_cmd(0,0x0c); //显示开

lcd_write_cmd(0,0x01); //显示清屏

lcd_write_cmd(0,0x06); //显示光标移动设置

}

void lcd_write_cmd(unsigned cmd,unsigned data)

{

if(cmd==0)

LCD_RSPORT&=~LCD_RS;

else

LCD_RSPORT|=LCD_RS;

LCD_DATAPORT&=0x00;

LCD_DATAPORT=data;

LCD_ENPORT|=LCD_EN;

delay_nus(10);

LCD_ENPORT&=~LCD_EN;

delay_nus(10);

}

void lcd_setxy(unsigned char x,unsigned char y)

{

unsigned char addr;

if(y==0)

addr=x+0x80;

else

addr=x+0xc0;

lcd_write_cmd(0,addr);

}

void lcd_write_string(unsigned char X,unsigned char Y,unsigned char *str)

{

lcd_setxy(X,Y);

while(*str)

{

lcd_write_cmd(1,*str);

str++;

}

}

void delay_1us(void) //1us延时函数

{

asm("nop");

}

void delay_nus(unsigned int n) //N us延时函数

{

unsigned int i=0;

for (i=0;i<n;i++)

delay_1us();

}

void delay_1ms(void) //1ms延时函数

{

unsigned int i;

for (i=0;i<1140;i++);

}

void delay_nms(unsigned int n) //N ms延时函数

{

unsigned int i=0;

for (i=0;i<n;i++)

delay_1ms();

}

//call this routine to initialize all peripherals

void main(void)

{

lcd_init();

while(1)

{

lcd_write_cmd(0,0x01); //清屏

delay_nms(2);

lcd_write_string(0,0,"happy new year");

delay_nms(100);

lcd_write_string(0,1,"LCD successful!");

delay_nms(100);

}

}

/******************************* 程序结束 *********************************/


怎样?

#19365201178# 我是飞思卡尔智能车初学者 不知道怎么入门 那位大侠能告诉我 - ******
#那包# 硬件方面,也就是电路设计,关于比赛用到的电路不是特别复杂,需要具备一定的电路基础,模拟电路,数字电路和一些EDA设计的能力,主要还是多看前人的东西,看懂了再发展自己的,想创新的空间存在但是不是很大. 软件方面,首先要...

#19365201178# 飞思卡尔智能车光电组硬件需要了解哪些内容 - ******
#那包# 大方向上:光电管的点亮,舵机的控制,借鉴上届电磁车模的电机驱动,车模改装方法等 小细节处:飞思卡尔内部资源的各个配置(如IO口的控制,AD转换,定时器,PWM输出,输入捕捉,串口通信) 有时间的话可以研究研究SD卡,CAN总线技术,以及uC/OS-II(或者Linux)操作系统,这些要比单线程的流水程序要科学要快,而且稳定,多多益善

#19365201178# 请问”飞思卡尔“智能车的制作主要要求那方面的知识或技能? - ******
#那包# 如果搞软件一定要有一定的编程基础,至少要能熟练使用C语言,然后对单片机的要求也比较高,一般我们在学校学的都是51系列单片机,飞思卡尔比赛用的是S12单片机,但他们的基本原理是相通的.之后要有控制理论的基础,真正比赛要想快而且稳,一定要有好的算法,这样相关的经典控制理论,现代控制理论,计算机控制技术等都应该有所了解. 当然在硬件上,三电是基础,模电很重要,电力电子技术也应该知道,最好还要懂Protel绘制电路板. 由于我不是搞机械的,所以机械方面不便多说!到youku,土豆上有很多视频的. 比赛每年一次,分四个赛区,最后总决赛.

#19365201178# 飞思卡尔电磁智能寻迹小车编程用的什么软件 - ******
#那包# keil,CodeWarrior,还有苏大老师编的环境都可以用的

#19365201178# 用什么软件可以模拟飞思卡尔智能车的循迹路线,求各位高手指导啊,谢谢啊 - ******
#那包# 有的,清华大学的plastic是专门用来设计智能车比赛程序的仿真软件.希望对你有帮助,如果帮到你了请采纳.

#19365201178# 初学者学习飞思卡尔智能车 - ******
#那包# 最近接触了一些飞思卡尔单片机,也算是初学吧,……你会c语言就可以了,首先你得看明白芯片的资料,学习这款芯片的最基本的东西,比如系统时钟该怎么设定,IO口怎么用,以及里面的寄存器该如何设定等等,这些都得弄明白.另外,就是学习模块,如:pwm模块,ECT模块等等,学习时可以看别人的程序,做到看的懂,会用就行.最后,祝你学习快乐.

#19365201178# 求教 求教 第一次做飞思卡尔智能车, PID究竟怎么设置参数? 根据什么现象调节参数? - ******
#那包# 参数整定找最佳,从小到大顺序查 先是比例后积分,最后再把微分加 曲线振荡很频繁,比例度盘要放大 曲线漂浮绕大湾,比例度盘往小扳 曲线偏离回复慢,积分时间往下降 曲线波动周期长,积分时间再加长 曲线振荡频率快,先把微分降下来 动差大来波动慢,微分时间应加长 理想曲线两个波,前高后低四比一 一看二调多分析,调节质量不会低

#19365201178# 参加飞思卡尔智能车比赛光电组需要学会单片机的哪些功 - ******
#那包# DMA, AD,IO(液晶,按键,灯),中断,输入捕获(或正交解码),pwm调制,串口.(最最基础的)还有一些知识,pid, 图像处理, 开放性思维 等等

#19365201178# 飞思卡尔智能车怎么用蓝牙改变量值 - ******
#那包# 首先能用蓝牙传输数据,再者在单片机程序里,加入根据接受到的数据重新给变量赋值 OK

#19365201178# 飞思卡尔智能车光电测速传感器怎么连接stm32 - ******
#那包# 你说的是光电编码器把,看你是多少相的,单相的话,任意接一个定时器的tim通道就可以了,你可以设置外部中断、捕获、计数等方式来测速. 要是是两相的话,AB相需要接STM32任意通用定时器的CH1和CH2通道,设置为正交解码的方式,可以计算得到更精确的速度、位置.也就是说你反转,计数器递减,正转自动递加,在配合溢出中断,可以准确的知道编码器转了多少转(带方向).

为传递更多家电数码信息,若有事情请联系
数码大全网