Freescale单片机实验指导书2.doc_第1页
Freescale单片机实验指导书2.doc_第2页
Freescale单片机实验指导书2.doc_第3页
Freescale单片机实验指导书2.doc_第4页
Freescale单片机实验指导书2.doc_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

一般性实验实验一 普通I/O口操作实验实验目的:1、熟悉SDIDE开发环境,熟悉GP32基本程序结构2、理解Freescale MCU的编程框架 3、熟悉编程调试环境,编译、调试、下载运行第一个程序 4、掌握I/O的基本编程方法 范例程序: A01_简单IO及程序框架 FrmMain.ASM C01_简单IO及程序框架纯Cprgframe.prj C01_简单IO及程序框架C&ASM混编prgframe.prj 实验要求:1、参看教材6.4节,熟悉实验板结构2、理解并运行下列关于I/O口操作的LED灯控制程序/*-*工 程 名:Prgframe.prj *硬件连接:PTA.1接指示灯 *程序描述:指示灯PTA.1闪烁 *目 的:第一个freescale(Motorola) HC08系列MCU程序框架*说 明:提供Motorola MCU的编程框架,供教学入门使用 *注 意:如果延时不够长的话,会发觉灯不会闪烁,而是一 * 直亮,这是由于人的视觉的引起的。 *-嵌入式应用技术基础教程教学实例-*/*头文件*/#include GP32C.h /映像寄存器地址头文件/*指示灯所接引脚定义*/#define Light_P PTA /灯(Light)接在PTA口#define Light_D DDRA /相应的方向寄存器#define Light_Pin 1 /灯所在的引脚/*全局变量声明*/unsigned char I1;/*延时子函数声明*/void Delay1000(void);/*主函数*/void main() /I/O初始化 Light_D|=1Light_Pin; /令指示灯引脚为输出 Light_P|=1Light_Pin; /初始时,指示灯暗 /程序总循环入口 while(1) /指示灯(Light)“亮” Light_P&=(1Light_Pin); /延时 for(I1=0;I1=250;I1+) Delay1000(); /指示灯(Light)暗” Light_P|=1Light_Pin; /延时 for(I1=0;I1=250;I1+) Delay1000(); /*内部子程序存放处/*Delay1000:延时1000个时钟周期-* *功 能:延时函数(约1000个时钟周期) *参 数:无 *返 回:无 *-*/ void Delay1000(void) unsigned char u; for(u=0;u=110;u+); 3、在理解上述程序的基础上,按下列要求新建一程序:根据PC口低2位(PTC1和PTC0)的状态输出四种不同的LED显示效果,要求用最简洁的语句实现以下各效果。(1)PTC1=0,PTC0=0时,效果为:8个LED中只有一个灯亮,亮灯顺序是从左到右,再从右到左,一个周期时间长度约4秒。(效果1)(2)PTC1=0,PTC0=1时,效果为:8个LED中只有两个连在一起的灯亮,亮灯顺序是从左到右,再从右到左,一个周期时间长度约4秒。(效果2)(3)PTC1=1,PTC0=0时,效果为:8个LED中只有一个灯亮,亮灯顺序是从左到右,再从右到左,一个周期时间长度约8秒。(效果3)(4)PTC1=1,PTC0=1时,效果自定。(效果4)实验二 串行通信实验实验目的:1、理解串行通信基本原理,掌握MCU串行通信基本编程方法2、理解串行通信的查询方式和中断方式原理及其编程范例程序: 1、C02_1串行通信查询方式 H08SCI_1.prj 2、C02_2串行通信中断方式 H08SCI_2.prj 3、A02_1串行通信查询方式 SCIMain1.asm 4、A02_2串行通信中断方式 SCIMain2.asm 5、以上四目录都有VB_SCI目录,该目录是对应Visual Basic6.0程序,运行在PC方,用来接收和发送数据。实验要求:1、理解下列范例程序,使用PC机程序与单片机进行通信。了解程序流图。Main.c文件/*-*工 程 名:H08SCI_1 *硬件连接:无 *程序描述:把收到的数据发送回去 *目 的:初步掌握利用查询方式进行串行通信的基本知识 *-嵌入式应用技术基础教程教学实例-*/头文件#include GP32C.H /包含头文件#include SCI.h /串行通信子程序头文件/函数声明extern void SCIInit(void); /串行口初始化子程序/内存变量声明unsigned char SerialBuff; /存放接收数据的数组/主程序void main() unsigned char i; SCIInit(); /调串行口初始化子程序 while(1) i=SCIReN(1,SerialBuff); /等待接收1个数据 if(i=0) SCISendN(1,SerialBuff); /发送接到的数据 SCIinit.c文件#include GP32C.Hvoid SCIInit(void) /总线频率fBUS2.4576MHz,定义波特率Bt=9600 SCBR=0b00000010; /设置允许SCI,正常码输出、8位数据、无校验 SCC1=0b01000000; /设置允许发送、允许接收,查询方式收发 SCC2=0b00001100; SCI.c文件/*-*文件描述:本文件包含了串行通信的4子程序,分别为: * *(1)SCISend1:串行发送1字节 *(2)SCISendN:串行发送n字节 *(3)SCIRe1:串行接收1字节 *(4)SCIReN:串行接收n字节 *-嵌入式应用技术基础教程-*/以下为子程序源代码/包含头文件#include SCI.h/*SCISend1:串行发送1个字节-*功 能:串行发送1个字节 *参 数:要发送的数据 *返 回:无 *-*/void SCISend1(unsigned char o) /判断ReStatusR的第SendTestBit位是否为1,是1可以发送 while(1) if (ReSendStatusR & (1SendTestBit) != 0) ReSendDataR=o; break; /*SCISendN:串行发送N个字节-*功 能:发送数组中的N个字节数据 *参 数:待发送的数据字节数及其要存放的数组首地址 * *返 回:无 *-*/void SCISendN(unsigned char n,unsigned char ch) int i; for(i=0;in;i+) SCISend1(chi); /*SCIRe1:串行收一个字节数据-*功 能:从串行口接收1个字节的数据 * *参 数:标志指针p *返 回:接收到的数据(若接收失败,返回0xff) * *说 明:参数*p带回接收标志=0收到数据,=1未收到数据 * *-*/unsigned char SCIRe1(unsigned char *p) unsigned int k; unsigned char i; /ReStatusR第ReTestBit位为1表示可接收数据 for(k=0;k0xfbbb;k+) if (ReSendStatusR & (1=0xfbbb) i=0xff; *p=0x01; return i; /返回接收到的数据 /*SCIReN:HC08串行接收N个字节-*功 能:接收N个字节数据,并存放在ch数组中 * *参 数:待接收的数据字节数及其存放的数组首地址 * *返 回:接收标志=0收到数据,=1未收到数据 * *-*/unsigned char SCIReN(unsigned char n,unsigned char ch) int m; unsigned char fp; m=0; while (m“程序”“附件”“通讯”“超级终端”,弹出如下窗口:在“名称”栏内随意输入一个名称,如“cm1”。然后单击“确定”。弹出如下窗口:在上图“连接时使用”栏中选择“COM1”,然后单击“确定”按钮。弹出如下窗口:确保此窗口各栏中参数都如上图所示设置好。提示:只要单击“还原为默认值”,即可设置为上述参数。然后单击“确定”。接下来就可在超级终端的窗口中输入数据,所有输入的数据将通过计算机串口发送给单片机,计算机串口收到的数据也将在此超级终端窗口中显示。注意:此时,用户在超级终端中输入的数据不会显示出来,而是直接通过串口发送出去了。如果要显示用户输入的数据,需要更改设置:单击“超级终端”菜单“文件”“属性”,在弹出的窗口单击“设置”选项卡“ASCII码设置”,在“本地回显键入的字符”前打“”,然后确定,这样设置完后才能在超级终端中显示用户输入的字符。3、运行上述范例程序,查看并分析程序执行效果。4、在理解上述程序基础上,按下列要求新建一程序:将从串行口收到的数据原样发送到串行口。根据从串行口收到的数据控制四种不同的LED显示效果,收到字符1:LED灯的效果为实验一中的效果1,并向串行口发送字符串“LED效果1”;收到字符2:LED灯的效果为实验一中的效果2,并向串行口发送字符串“LED效果2”;收到字符3:LED灯的效果为实验一中的效果3,并向串行口发送字符串“LED效果3”;收到字符4:LED灯的效果为实验一中的效果4,并向串行口发送字符串“LED效果4”;收到其他字符:LED灯全部一起闪烁(同时亮同时熄,周期1秒),并向串行口发送字符串“输入错误!”实验三 键盘中断实验实验目的:1、理解键盘扫描的基本原理,掌握键盘电路基本接法与键值计算方法2、编制键盘查询、键盘中断、键值识别程序范例程序: 1、C03_键盘中断编程keyboard.asm 2、C03_键盘中断编程keyboard.prj 实验要求:1、理解如下范例程序Main.c文件/*-键盘实验-*文 件 名:Keyboard.c *硬件连接:PTA.7-4接键盘4根列线,PTA.3-0接键盘4根行线 *程序描述:按下键盘按键,串口发送对应的键值 *目 的:键盘扫描,键盘中断,键值识别,键盘编码 *注 意:如果键盘插在实验板上排插孔,无须连线,若插在下 * 排插孔,需手工接线 *-嵌入式应用技术基础教程教学实例-*/*头文件*/#include GP32C.H#include KB.h /键盘中断头文件/*主程序*/void main() asm(SEI); /关总中断 KB_Init(); INTKBSCR&= (1IntBit); /开放键盘中断(IMASKk=1) asm(CLI); /开总中断 /主循环 while(1); KBsub.c文件/*-*文件描述:本文件包含了H08C键盘中断子函数,分别为: * *(1)KB_Init:键盘初始化函数 * void KB_Init(void) *(2)KB_Scan:扫描读取键值函数 * unsigned char KB_Scan(void) *(3)KB_Def:键值转为定义值函数 * unsigned char KB_Def(unsigned char KB_valve) *-*/*以下为子程序源代码*/*头文件*/#include GP32C.H#include KB.h/*KB_Init:键盘初始化函数-*功 能:初始化键盘中断的引脚,但未开放键盘中断 *参 数:无 *返 回:无 *-*/ void KB_Init(void) KB_P=0x00; /复位KB_P KB_D=0b00001111; /定定义7-4为输入,3-0为输出 KB_PUE=0b11110000; /定义输入引脚有内部上拉电阻 INTKBSCR|= (1IntBit);/屏蔽键盘中断(IMASKk=1) INTKBIER=0b11110000; /允许输入引脚的中断可进入 INTKBSCR|= (1*p * 若无按键,*p为0xff *参 数:无 *返 回:扫描到的键值 *-*/ unsigned char KB_Scan(void) unsigned char line,i,tmp; line=0b11111110; /使第一根行线为0(低电平) for(i=1;itmp tmp|=0b00001111; /KB_P.7-4保留,KB_P.3-0为1 KB_P=tmp&line; /令KB_P.n=0,n=0、1、2、3 asm(NOP); /等待,消除按键抖动 asm(NOP); tmp=KB_P; tmp&=0b11110000; /看第n行是否有键按下 if(tmp!=0xf0) /本行有键按下 tmp=KB_P; break; else /本行无键按下,扫描下一行 line=(line1)|0x01; if(i=5) tmp=0xff; return(tmp); /*KB_Def:键值转为定义值函数-*功 能:键值转为定义值 *参 数:键值 *返 回:键定义值 *-*/键盘定义表const unsigned char KB_Table= 0xEE,1,0xDE,2,0xBE,3,0x7E,A, 0xED,4,0xDD,5,0xBD,6,0x7D,B, 0xEB,7,0xDB,8,0xBB,9,0x7B,C, 0xE7,*,0xD7,0,0xB7,#,0x77,D, 0x00;unsigned char KB_Def(unsigned char KB_valve) unsigned char KeyPress; unsigned char i; unsigned char j; i=0; while(1) j=KB_Tablei; /与0(定义表结束标志)相比较 if (j=0) /=0,即表中无次定义值 KeyPress=0xff; break; /返回0xff else /与键值相比较 if (j=KB_valve) /找到 KeyPress=KB_Tablei+1;break; /取键定义值 else i+=2; /指向下一个键值,继续判断 ; return KeyPress; Vectors08.c文件/*-*文件名:vectors08.c *功 能:用于定义中断矢量表 *-*/*头文件*/#include GP32C.H #include KB.h #include SCI.h /*键盘中断处理函数-*/#pragma interrupt_handler isrKBIvoid isrKBI(void) unsigned char KB_valve; asm(SEI); /关总中断 INTKBSCR|= (1IntBit); /屏蔽键盘中断(IMASKK=1) KB_valve=KB_Scan(); /扫描键值 SCISend1(KB_valve); KB_valve=KB_Def(KB_valve); /键值转化为定义值 SCISend1(KB_valve); KB_Init(); /重新初始化键盘 INTKBSCR&= (1IntBit); /打开键盘中断(IMASKK=0) asm(CLI); /开总中断/未定义的中断处理函数,本函数不能删除#pragma interrupt_handler isrDummy void isrDummy(void) /中断矢量表,需定义中断函数,可修改下表中的相应项目/(interrupt service routine,isr 中断处理程序)#pragma abs_address:0xffdc /中断向量表起始地址void (* const _vectab)(void) = isrDummy, /时基中断 isrDummy,/AD转换中断 isrKBI, /键盘中断 isrDummy,/SCI TC/TE isrDummy, /SCI RF/IDLE isrDummy,/SCI PE/FE/NF/ORisrDummy,/SPI TE isrDummy,/SPI MOD/OVR/RFisrDummy,/TIM2溢出中断 isrDummy,/TIM2通道1isrDummy,/TIM2通道0isrDummy,/TIM1溢出中断 isrDummy,/TIM1通道1isrDummy,/TIM1通道0isrDummy,/CGM isrDummy,/IRQ isrDummy/SWI /RESET也是中断,定义在 crt08.o中 ;#pragma end_abs_address 2、在实验箱上44行列式键盘的位置有上下两排插座,如果将键盘插在上排插座,则电路如下所示:如果将键盘搬在下排插座,则连接键盘所需的8根线可以自定义连接方法。本实验中,先将键盘插在上排插座。3、打开实验源程序目录下的“VB_KB“子目录,运行keyboard.exe文件,运行窗口如下:此窗口将显示单片机实验箱上当前按下的键的键号和键值。4、运行范例程序,观察并分析实验结果5、在理解上述程序基础上,更改44键盘与单片机的电路连接,使键盘的符号定义不变,将键盘的行线和列线对换,即单片机的PTA0-PTA3做列线,PTA4-PTA7做行线,重新进行硬件接线、键值计算、程序设计。并算出各字符对应键的键值。提示:需在第2步中将键盘插在下排插座。实验四 A/D转换实验实验目的:1、握MC68HC908GP32的A/D转换编程方法2、学会基本的综合应用,串行和A/D转换的综合应用。范例程序: 1、A04_AD模数转换 AD_Main.asm 2、C04_AD模数转换 AD.prj 3、Visual Basic6.0程序: VB_Sci目录下SCI_AD工程 实验要求:1、理解如下范例程序Main.c文件/*-*工 程 名:AD.prj *硬件连接:PTB0/AD0 接模拟量输入端 *程序描述:获取1路A/D转换结果,并滤波,通过串口发送出去 *目 的:掌握AD转换的基本编程方法 *注 意:用SD-1实验板测试时,把液晶拔出,否则可能影响结果*-嵌入式应用技术基础教程教学实例-*/*头文件*/#include GP32C.H/*函数声明*/extern void SCIInit(void); /串行口函数声明extern void SCISend1(unsigned char o);/有关A/D转换函数声明extern unsigned char adave(unsigned char n,unsigned char channel); extern unsigned char advalue(unsigned char channel);extern unsigned char admid(unsigned char channel);/*主程序*/void main(void) SCIInit(); /串行口初始化 ADCLK=0b00110000; /A/D用内部总线时钟,2分频while(1) SCISend1(adave(20,0); /采集、滤波并发送 ADsub.c文件/*-*文件描述:本文件包含了A/D转换的3个子函数,分别为: * *(1)advalue:获取1路A/D转换结果 * unsigned char advalue(unsigned char channel) *(2)admid:获取中值滤波后的A/D转换结果 * unsigned char admid(unsigned char channel) *(3)adave:获取均值滤波后的A/D转换结果 * unsigned char adave(unsigned char n, * unsigned char channel) *-嵌入式应用技术基础教程-*/以下为子程序源代码/包含头文件#include GP32C.H#define COCOBit 7 /转换完成标志位/*advalue:1路A/D转换函数-*功能:获取通道channel的A/D转换结果 *参数:channel=通道号 *返回:该通道的A/D转换结果 *-*/ unsigned char advalue(unsigned char channel) /选取通道号ADCH4-ADCH0=00000-00111unsigned char tmp;channel&=0b00011111;tmp=ADSCR&0b11100000;tmp=tmp|channel;ADSCR=tmp;/取A/D转换结果 while(1) if(ADSCR&(1j) tmp=i; i=j; j=tmp; if (k=j) tmp=j; else if (k=i) tmp=k; else tmp=i; return tmp; /*adave:1路A/D转换函数(均值滤波)-*功能:对通道channel的A/D转换结果求n次平均值 *参数:n=平均次数,channel=通道号 *返回:该通道均值滤波后的A/D转换结果 *-*/ unsigned char adave(unsigned char n,unsigned char channel) /求n次A/D转换的平均值 unsigned char i; unsigned int j; j=0; for (i=0;in;i+) j+=admid(channel); j=j/n; return (unsigned char)j; 2、将实验箱上单片机PTB0引脚连接到蓝色的电位器,旋转电位器上的旋钮,即可调节PTB0引脚的输入电压。3、打开源程序目录下的VB_SCI目录,运行SCI

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论