智能车选修课讲义1

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
for(i=0;i<=30000;i++);
PORTB=~0x40;
for(i=0;i<=30000;i++);
PORTB=~0x80;
for(i=0;i<=30000;i++);
}
}
思考题
1.使用数组实现以上程序功能。
2.使用移位操作实现以上程序功能。
修改以上程序,实现发光二极管从两边点亮并延伸点亮至中间
A口、B口、E口、K口公用一个上拉电阻控制寄存器PUCR:
BKPUE:上拉电阻使能,1启用上拉电阻,0不使用上拉电阻。
PUPKE:K口上拉电阻使能,1启用,0不启用。
PUPEE:E口上拉电阻使能,1启用,0不启用。
PUPBE:B口上拉电阻使能,1启用,0不启用。
PUPAE:A口上拉电阻使能,1启用,0不启用。
PPSM&=0XF0;
H口、J口、P口、S口和T口的拉电阻使能寄存器和上下拉选择寄存器分别为
H口:PERH和PPSH;
J口:PERJ和PPSJ;
P口:PERP和PPSP;
S口:PERS和PPSS;
T口:PERT和PPST;
实验目的
使用I/O实现跑马灯功能。在实验过程中掌握一般I/O口的寄存器设置,并了解I/O口控制LED的原理。
2
每个I/O也都有自己的数据寄存器。数据寄存器用于输出时的数据发送和输入时的数据读取。
以A口为例,A口的数据寄存器为PORTA,该寄存器共8bit分别为:
PA7
PA6
PA5
PA4
PA3
PA2
PA1
PA0
这8个bit分别对应A口的8个引脚,在输出模式下,对该寄存器进行写操作可把对应引脚的输出电平设置为高或者低。
{
PORTB=0XAA;
delay();
PORTB=0X55;
delay();
_FEED_COP(); /* feeds the dog */
} /* loop forever */
/* please make sure that you never leave main */
}
7.如上图所示,单击工具栏上make按钮完成编译和链接的工作,如果出现错误和警告,则会在右侧工具栏下方显示。
PORTB=~0x02;//11111101
for(i=0;i<=30000;i++);
PORTB=~0x04;
for(i=0;i<=30000;i++);
PORTB=~0x08;
for(i=0;i<=30000;i++);
PORTB=~0x10;
for(i=0;i<=30000;i++);
PORTB=~0x20;
1
每个I/O口都有自己的数据方向寄存器,通过设置方向寄存器,我们可以根据需要把I/O口的某个引脚定义为输入或者输出。MC9S12单片机中的I/O接口除了PORTAD只可作为输入口外,一般都是双向并行口,可通过方向寄存器DDRx设置。
以A口为例,A口的数据方向寄存器为DDRA,该寄存器共8bit分别为:
例,启用A口和B口上拉电阻可用如下语句实现
PUCR|=0X03;//
也可以用如下语句实现
PUCR_PUPBE=1;
PUCR_PUPAE=1;
H口、J口、M口、P口、S口和T口不但可以使用上拉电阻,也可以使用下拉电阻,这几个口的拉电阻设置寄存器有两个。一个是上拉下拉使能寄存器,一个是上拉下拉选择寄存器。
以M口为例,M口的拉电阻使能寄存器为PERM。
PERM7~0用于设置M口的各个引脚是否启用拉电阻,1启用,0不启用。
M口的拉电阻选择寄存器为PPSM
PPSM7~0用于设置M口的各个引脚是使用上拉电阻还是下拉电阻,0上拉电阻,1下拉电阻。
例,把M口的0~3引脚设置为上拉电阻,使用如下语句
PERM|=0X0F;
PAx=1,PORTAx引脚输出高电平;
PAx=0,PORTAx引脚输出低电平。
在输入模式下,读取该寄存器的值,可得知外部输入的电平是高或者低。
PAx==1,对应引脚输入高电平;
PAx==0,对应引脚输入低电平。
例DDRA=0XFF;//A口8个引脚都设置为输出
PORTA=0XFF;//A口8个引脚都设置为输出高电平
8.如图所示,连接BDM烧录器。
BDM烧录器可给主板供电,只要正常连接,主板电源灯会亮起,若BDM接反,电源灯则不亮。
正常连接蓝灯亮,如蓝灯不亮,可拔下USB端重新插入。如下图所示。
9.单击红色指示框所示下载按钮。注意蓝色指示框处应选择TBDML。
10.点击下载后出现如下画面,单击确定。
11.在下图画面中单击OK,如希望以后不再弹出该对话框,则可在蓝色指示框处打勾。
12.开始下载,并等待完成。在调试环境中,可以进行程序的调试。如运行,单步执行,断点等。
13.单击全速运行按钮,如下图所示。红色为全速运行,蓝色为单步调试功能区,绿色为暂停,黑色为复位。该程序运行结果为B口控制的8个发光二极管,奇数等和偶数等交替闪烁。
实验二
准备知识
I/O接口,即输入/输出接口。I/O口是MCU与外围电路进行交互的重要通道,如按键,显示器,传感器,电机驱动等。
实验步骤
1.双击CodeWarrior图标 ,出现下图界面
2.单击红框所示按钮,新建工程。
3.选择使用的单片机型号和默认的连接类型。按红色指示框选择后,单击下一步继续。
4.在红色指示框内可更改工程名称和保存位置。在蓝色知识框内选择编程使用的语言(默认为C语言)。选择完毕后可单击下一步进入更详细的设置,也可直接单击完成。
或DDRA=0X00;//A口8个引脚都设置为输入
val=PORTA;//读取A口状态
switch(val)
{
case0:
//……………………………..
//判断A口输入的状态并作出相应处理
//……………………………..
}
其它I/百度文库口的数据寄存器分别为
B口:PORTB;
E口:PORTE;
K口:PORTK;
MC9S12单片机内部集成了PORTA、PORTB、PORTE、PROTAD、PROTK、PORTT、PORTP、PORTS、PORTM、PORTJ、PORTH等I/O端口。在本实验系统中使用的是80引脚的MC9S12XS128 MAA80引脚的芯片,该芯片主要的I/O口有A口,B口,AD口,S口,M口,T口,E口和P口。虽然比112引脚的MAL芯片少了J口,H口和其他若干引脚,但在智能车的应用中,这么多的I/O口还是足够用的。在这些I/O口中,大部分都具有双重功能,如P口的PWM功能,AD口的A/D转换功能等。在智能车应用中,我们主要使用的I/O口有A口,B口,T口,AD口,P口等。基于光电管的智能车使用的I/O口要多些,而基于摄像头的智能车使用的I/O则较少。我们首先介绍作为普通端口的编程方法。
或者
DDRE=DDRE|0X7C;//
在上面的语句中,使用或运算可以不改变E口其它引脚的状态。
数据方向寄存器的每一位也可以单独进行操作,如液晶接口的设置也可使用如下语句设置:
DDRE_DDRE2=1;
DDRE_DDRE3=1;
DDRE_DDRE4=1;
DDRE_DDRE5=1;
DDRE_DDRE6=1;
void delay(void)
{
unsigned int i,j;
for(i=0;i<=5;i++)
{
for(j=0;j<=30000;j++);
}
}
void main(void) {
/* put your own code here */
DDRB=0XFF;
EnableInterrupts;
for(;;)
DDRA7
DDRA6
DDRA5
DDRA4
DDRA3
DDRA2
DDRA1
DDRA0
这8位分别用于设置A口的8个引脚PORT A0~PORT A7是做为输入引脚还是输出引脚。
DDRAx=0,PORT Ax为输入;DDRAx=1,PORT Ax为输出。
例DDRA=0X00;//A口8个引脚都设置为输入
DDRA=0XF0;//A口的高4位为输出,低4位为输入。
P口:PTP;
H口:PTH;
J口:PTJ;
M口:PTM;
S口:PTS;
T口:PTT;
例如如下图所示,A0~A3为按键输入

DDRA&=0XF0;//A口低四位设置为输入
使用与运算是为了不影响A口的其它引脚
keycode=PORTA&0X0F;//读取A口键值00001111
数据寄存器的每一位也可以单独进行操作。
实验一
准备知识
CodeWarrior for HCS12是Freescale专门面向Freescale HCS12、HCS12X等嵌入式应用开发的软件工具。在该软件中,我们可以编写程序并通过BDM下载到单片机运行,且通过该软件可进行程序的调试。
实验目的
学习并掌握在CodeWarrior中新建工程的方法。并学会下载器的使用和下载调试的环境,初步熟悉各种调试方法。
如在输出状态下
PORTA_PA0=1;//A0引脚设置为输出高电平
PORTA_PA1=0;//A1引脚设置为输出低电平
3
MC9S12单片机的各个I/O接口内置了拉电阻,可以通过编程来设置是否使用拉电阻。拉电阻的主要作用是当电路驱动器关闭时给线路(节点)一个固定电平,可以提高总线的抗电磁干扰能力。拉电阻控制寄存器的相应位为1,则使用拉电阻,反之则不使用。
电路如下图所示,由B口控制发光二极管点亮。
参考程序
void main(void) {
unsignedint i;
DDRB=0xff; //B口8个引脚都设置为输出
for(;;)
{
PORTB=~0x01;//11111110,PB0为低电平,点亮PB0控制的发光二极管
for(i=0;i<=30000;i++);//延时
5.单击完成后如下图所示。单击左边窗口红色指示框中的main.c文件,开始编程。
6.输入如下代码(注意大小写不要写错)
#include <hidef.h> /* common defines and macros */
#include "derivative.h" /* derivative-specific definitions */
其它I/O口的方向寄存器分别为
B口:DDRB;
E口:DDRE;
K口:DDRK;
P口:DDRP;
H口:DDRH;
J口:DDRJ;
M口:DDRM;
S口:DDRS;
T口:DDRT;
例如,在智能车教学实验系统中,液晶接口如下图所示:
其中E口的2、3、4、5、6引脚作为MCU到液晶的输出,我们可以这样设置
DDRE|=0X7C;//二进制01111100
某引脚为输入引脚,当启动上拉电阻时,该引脚悬空时为高电平,当启动下拉电阻时,该引脚悬空时为低电平,当没有启动拉电阻时,该引脚的电平状态是不确定的。注意,PORTA、PORTB、PORTK和PORTE只能使用上拉电阻。拉电阻一般只在I/O口设置为输入的时候才会用到。
如在图中,电阻R12~R15充当的就是上拉电阻的角色,在按键没有按下的情况下,上拉电阻维持一个固定的高电平输入,如果A口设置了内部上拉电阻的话,则电路中R12~R15则可省略,同理若输入电路已经设计了外部的上拉电阻或下拉电阻,则拉电阻寄存器也可以不必设置。
相关文档
最新文档