矿大飞思卡尔实验指导书及程序Word格式.docx
《矿大飞思卡尔实验指导书及程序Word格式.docx》由会员分享,可在线阅读,更多相关《矿大飞思卡尔实验指导书及程序Word格式.docx(42页珍藏版)》请在冰点文库上搜索。
1.掌握MCU串行通信基本编程方法
2.学会MCU与微机的串行通信编程
1.轮询方式串口通信
2.中断方式串口通信
3.程序修改与调试
四、验证方式
1.连接上位机,从串口以不同波特率发送字符,并得到下位机的反馈
实验四(4学时)
串口控制LED实验
1.熟练应用三色LED控制
2.熟练应用串口通信
1.利用串口控制LED显示赤橙黄绿青蓝紫七色
1.演示,要求三色LED能从赤逐渐显示到紫
实验五(8学时)
加速度传感器读取
1.认识I2C通信协议
2.利用I2C协议与传感器进行通信
3.熟练应用三色LED控制
1.读取加速度传感器三轴加速度和根据不同加速度改变LED颜色
1.从加速度传感器读取数据,并在串口打印输出
2.根据加速度传感器不同状态改变三色LED的颜色
实验六(4学时)
打飞机小游戏设计
1.加速度传感器熟练应用
2.熟练运用串口
1.综合利用多个构件读取加速度传感器数据控制游戏中的飞机运动
完成游戏获得5000分
实验七(4学时)
简单计步器
2.计步算法理解
1.综合利用多个构件读取加速度传感器数据完成简单人体计数
1.走10步、20步、30步,LED成不同颜色
实验程序
实验一实验硬件与软件认识
intmain(void)
{
#ifdefCMSIS//IfweareconformingtoCMSIS,weneedtocallstarthere
start();
#endif
printf("
\n\rRunningtheGGGGGGproject.\n\r"
);
SIM_SCGC5|=SIM_SCGC5_PORTB_MASK;
SIM_SCGC5|=SIM_SCGC5_PORTD_MASK;
PORTB_PCR19=PORT_PCR_MUX
(1);
PORTB_PCR18=PORT_PCR_MUX
(1);
PORTD_PCR1=PORT_PCR_MUX
(1);
GPIOB_PDDR|=1<
<
19;
18;
GPIOD_PDDR|=1<
1;
GPIOB_PDOR|=(1<
19);
GPIOD_PDOR|=(1<
1);
while
(1)
{
GPIOB_PDOR&
=~(1<
18);
for(uint32i=0;
i<
0x4fffff;
i++);
}
}
\n\rRunningthe2222222project.\n\r"
GPIOB_PDOR&
GPIOD_PDOR&
实验二LED发光与变色实验
voidUART_Init(uint16baud_rate)
{
uint16uart0_clk_khz=24000;
uint16sbr;
PORTA_PCR1=PORT_PCR_MUX(0x02);
PORTA_PCR2=PORT_PCR_MUX(0x02);
SIM_SCGC4|=SIM_SCGC4_UART0_MASK;
SIM_BASE_PTR->
SOPT2|=SIM_SOPT2_UART0SRC
(1);
UART0_C2&
=~(UART0_C2_TE_MASK|UART0_C2_RE_MASK);
sbr=(uint16)((uart0_clk_khz*1000)/(baud_rate*16));
UART0_BDH=UART0_BDH&
(~UART0_BDH_SBR_MASK);
UART0_BDL=(uint8)(sbr&
UART0_BDL_SBR_MASK);
UART0_C4=UART0_C4_OSR(15);
UART0_C1=0x00;
UART0_S1|=0x1F;
UART0_S2|=(UART0_S2_LBKDE_MASK|UART0_S2_RXEDGIF_MASK);
UART0_C2|=(UART_C2_TE_MASK|UART_C2_RE_MASK);
charch;
#endif
UART_Init(9600);
\n\rRunningthesixianghuibaoproject.\n\r"
while(!
(UART0_S1&
UART0_S1_RDRF_MASK));
ch=UART0_D;
while(!
UART0_S1_TDRE_MASK));
UART0_D=ch;
voidUART_Init(uint32baud_rate)
SIM_SCGC4|=SIM_SCGC4_UART0_MASK;
SIM_SOPT2|=SIM_SOPT2_UART0SRC
(1);
sbr=(uint16)((uart0_clk_khz*1000)/(baud_rate*16));
UART0_BDH=0x00;
UART0_BDL=0x0D;
UART0_C4=UART0_C4_OSR(15);
UART0_S1|=0x1f;
UART0_C2|=(UART_C2_TE_MASK|UART_C2_RE_MASK);
}
voidUART_irq_enable()
UART0_C2|=UART0_C2_RIE_MASK;
enable_irq(12);
voiduart0_isr()
charch;
(UART0_S1&
UART0_S1_TDRE_MASK));
intmain(void)
#ifdefCMSIS
UART_Init(115200);
UART_irq_enable();
\n\rhollomoto\n\r"
{
/********************************************************************/
Isr.h
#ifndef__ISR_H
#define__ISR_H1
/*Example*/
/*
#undefVECTOR_101
#defineVECTOR_101lpt_isr
//ISR(s)aredefinedinyourprojectdirectory.
externvoidlpt_isr(void);
*/
#undefVECTOR_028
#defineVECTOR_028uart0_isr
externvoiduart0_isr(void);
#endif//__ISR_H
实验三串行通信实验
*File:
i2c_accel.c
*Purpose:
Mainprocess
*
*/
#include"
common.h"
start.h"
#defineSENSOR_I2C_ADDRESS0x1D
#defineIICWRITE(iicaddress)((iicaddress<
1)&
0xFE)
#defineIICREAD(iicaddress)((iicaddress<
1)|0x01)
#defineSENSOR_I2C_ADDRESS_WIICWRITE(SENSOR_I2C_ADDRESS)
#defineSENSOR_I2C_ADDRESS_RIICREAD(SENSOR_I2C_ADDRESS)
voidi2c_Init()
SIM_SCGC4|=SIM_SCGC4_I2C0_MASK;
SIM_SCGC5|=SIM_SCGC5_PORTC_MASK;
PORTE_PCR24=PORT_PCR_MUX(5)|PORT_PCR_PE_MASK|PORT_PCR_PS_MASK;
PORTE_PCR25=PORT_PCR_MUX(5)|PORT_PCR_PE_MASK|PORT_PCR_PS_MASK;
I2C0_F=0x00;
I2C0_C1=I2C_C1_IICEN_MASK;
I2C0_FLT|=I2C_FLT_FLT(16);
uint8i2c_read_byte(uint8reg)
uint16ch;
uint8c;
I2C0_C1|=I2C_C1_TX_MASK;
I2C0_C1&
=~I2C_C1_TXAK_MASK;
I2C0_S|=I2C_S_IICIF_MASK;
I2C0_C1|=I2C_C1_MST_MASK;
I2C0_D=SENSOR_I2C_ADDRESS_W;
while((I2C0_S&
I2C_S_IICIF_MASK)==0);
I2C_S_RXAK_MASK)==1);
I2C0_D=reg;
I2C0_S|=I2C_S_IICIF_MASK;
I2C0_C1|=I2C_C1_RSTA_MASK;
for(ch=0;
ch<
100;
ch++)
asm("
nop"
I2C0_D=SENSOR_I2C_ADDRESS_R;
=~I2C_C1_TX_MASK;
I2C0_C1|=I2C_C1_TXAK_MASK;
c=I2C0_D;
=~I2C_C1_MST_MASK;
500;
returnc;
voidi2c_write_byte(uint8reg,uint8m)
I2C0_D=m;
uint16uart0_clk_khz=24000;
PORTA_PCR1=PORT_PCR_MUX(0x02);
PORTA_PCR2=PORT_PCR_MUX(0x02);
SIM_SCGC4|=SIM_SCGC4_UART0_MASK;
SIM_SOPT2|=SIM_SOPT2_UART0SRC
(1);
=~(UART0_C2_TE_MASK|UART0_C2_RE_MASK);
UART0_BDH=UART0_BDH&
(~UART0_BDH_SBR_MASK);
UART0_BDL=(uint8)(sbr&
UART0_C4=UART0_C4_OSR(15);
UART0_C1=0x00;
UART0_S1|=0x1F;
UART0_C2|=(UART_C2_TE_MASK|UART_C2_RE_MASK);
voidpwm_Init(uint16period,uint16duty)
//SIM_SOPT2=SIM_SOPT2_PLLFLLSEL_MASK;
SIM_SOPT2|=SIM_SOPT2_TPMSRC
(1);
SIM_SCGC6|=SIM_SCGC6_TPM0_MASK
|SIM_SCGC6_TPM2_MASK;
PORTD_PCR1|=PORT_PCR_MUX(4);
TPM0_BASE_PTR->
SC=0|TPM_SC_CMOD(0);
CNT=0;
MOD=period;
TPM0_C1SC=0|TPM_CnSC_MSB_MASK
|TPM_CnSC_ELSB_MASK;
TPM0_C1V=duty;
SC=0|TPM_SC_CMOD
(1)
|TPM_SC_PS(4);
PORTB_PCR18|=PORT_PCR_MUX(3);
PORTB_PCR19|=PORT_PCR_MUX(3);
TPM2_BASE_PTR->
TPM2_C0SC=0|TPM_CnSC_MSB_MASK
TPM2_C0V=duty;
TPM2_C1SC=0|TPM_CnSC_MSB_MASK
TPM2_C1V=duty;
voidpwm_Set(uint8ch,uint16duty)
switch(ch)
case1:
break;
case2:
case3:
uint8x;
uint8XH,XL,YH,YL,ZH,ZL;
int8xh,yh,zh;
uint8temp;
#ifdefCMSIS//IfweareconformingtoCMSIS,weneedtocallstarthere
printf("
\n\rRunningtheexperiment_5project.\n\r"
i2c_Init();
pwm_Init(100,50);
x=i2c_read_byte(0x0D);
if(x==0x1A)
i2c_write_byte(0x2A,0x19);
i2c_write_byte(0x0E,0x01);
else
\n\rPleasecheckoutyourMMA81451!
\n\r"
x=i2c_read_byte(0x00);
if(x&
0x08==0x08)
XH=i2c_read_byte(0x01);
XL=i2c_read_byte(0x02);
YH=i2c_read_byte(0x03);
YL=i2c_read_byte(0x04);
ZH=i2c_read_byte(0x05);
ZL=i2c_read_byte(0x06);
uart0_putchar(UART0_BASE_PTR,0xFF);
uart0_putchar(UART0_BASE_PTR,XH-1);
uart0_putchar(UART0_BASE_PTR,XL);
uart0_putchar(UART0_BASE_PTR,YH-1);
uart0_putchar(UART0_BASE_PTR,YL);
uart0_putchar(UART0_BASE_PTR,ZH-1);
uart0_putchar(UART0_BASE_PTR,ZL);
xh=i2c_read_byte(0x01);
yh=i2c_read_byte(0x03);
zh=i2c_read_byte(0x05);
temp=(uint8)((128+xh)/256.0*100.0);
pwm_Set(1,temp);
temp