实验一
验证性试验
#include
int flag;
void DCmotor(int p)
{
switch(p)
{
case 0:
//停转
{
}
P1OUT &=~ BIT0;
P1OUT &=~ BIT6;
P1OUT &=~ BIT7;
break;
case 1:
//正转
{
}
P1OUT |= BIT0;
P1OUT |= BIT6;
P1OUT &=~ BIT7;
break;
case 2:
{
P1OUT |= BIT0;
P1OUT &=~ BIT6;
P1OUT |= BIT7;
break;
//反转
}
}
}
int main(void) {
// Stop watchdog timer
// 上下拉电阻使能
//设置为上拉电阻
WDTCTL = WDTPW | WDTHOLD;
P4REN |=BIT0+BIT1+BIT2+BIT3+BIT4;
P4OUT |=BIT0+BIT1+BIT2+BIT3+BIT4;
P4DIR |=BIT5+BIT6+BIT7;
P5DIR |=BIT7;
P8DIR |=BIT0;
P1DIR |= BIT0+BIT6+BIT7;
while(1)
{
//LED 管脚设置
if((P4IN&BIT0)==0){
//按键 S7
__delay_cycles(160000);
if((P4IN&BIT0)==0) {
flag=2;}}
if((P4IN&BIT4)==0){
//按键 S3
__delay_cycles(160000);
if((P4IN&BIT4)==0) {
flag=1;}}
DCmotor(flag);
}
}
设计性试验
#include
int main(void)
{ WDTCTL = WDTPW +WDTHOLD;
P4REN |=BIT0+BIT2+BIT4;
P4OUT |=BIT0+BIT2+BIT4;
P1DIR |=BIT0+BIT6+BIT7;
while(1)
{
if((P4IN&BIT0)==0)
{
__delay_cycles(160000);
if((P4IN&BIT0)==0)
{
P1OUT |=BIT0;
P1OUT |=BIT6;
P1OUT &=~BIT7;
}
}
if((P4IN&BIT4)==0)
{
__delay_cycles(160000);
if((P4IN&BIT4)==0)
P1OUT |=BIT0;
{
P1OUT &=~BIT6;
P1OUT |=BIT7;
}
}
if((P4IN&BIT2)==0)
{
__delay_cycles(160000);
if((P4IN&BIT2)==0)
{
P1OUT &=~BIT0;
}
}
}
}
1、验证性实验:
利用 MSP430F6638 开发板上的拨盘电位器,控制改变AD 转换的输入电压值,转换后
的数字量显示在段式液晶上面。使用万用表测得当前输入电压,通过计算得到转换后的理想
的数字量与液晶显示的数字量进行比较。
/*
* main.c
*/
#include
#include
#include
#include
#include "dr_lcdseg.h"
//调用段式液晶驱动头文件
#define XT2_FREQ
4000000
#define MCLK_FREQ 16000000
#define SMCLK_FREQ 4000000
void initAdc()
{
ADC12CTL0 |= ADC12MSC;//自动循环采样转换
ADC12CTL0 |= ADC12ON;//启动 ADC12 模块
ADC12CTL1 |= ADC12CONSEQ1 ;//选择单通道循环采样转换
ADC12CTL1 |= ADC12SHP;//采样保持模式
ADC12MCTL0 |= ADC12INCH_15; //选择通道 15,连接拨码电位器
ADC12CTL0 |= ADC12ENC;
}
void initClock()
{
while(BAKCTL & LOCKIO) //解锁 XT1 引脚操作
BAKCTL &= ~(LOCKIO);
UCSCTL6 &= ~XT1OFF; //启动 XT1,选择内部时钟源
P7SEL |= BIT2 + BIT3; //XT2 引脚功能选择
UCSCTL6 &= ~XT2OFF; //启动 XT2
while (SFRIFG1 & OFIFG) //等待 XT1、XT2 与 DCO 稳定
{
UCSCTL7 &= ~(DCOFFG+XT1LFOFFG+XT2OFFG);
SFRIFG1 &= ~OFIFG;
}
UCSCTL4 = SELA__XT1CLK + SELS__XT2CLK + SELM__XT2CLK; //避免 DCO 调整中
跑飞
UCSCTL1 = DCORSEL_5; //6000kHz~23.7MHz
UCSCTL2 = MCLK_FREQ / (XT2_FREQ / 16); //XT2 频率较高,分频后作为基准可获得更
高的精度
UCSCTL3 = SELREF__XT2CLK + FLLREFDIV__16; //XT2 进行 16 分频后作为基准
while (SFRIFG1 & OFIFG) //等待 XT1、XT2 与 DCO 稳定
{
UCSCTL7 &= ~(DCOFFG+XT1LFOFFG+XT2OFFG);
SFRIFG1 &= ~OFIFG;
}
UCSCTL5 = DIVA__1 + DIVS__1 + DIVM__1; //设定几个 CLK 的分频
UCSCTL4 = SELA__XT1CLK + SELS__XT2CLK + SELM__DCOCLK; //设定几个 CLK 的
时钟源
}
void main(void)
{
WDTCTL = WDTPW | WDTHOLD;
initClock();
initLcdSeg();
initAdc();
//配置系统时钟
//初始化段式液晶
//初始化 ADC
// 停止看门狗
volatile unsigned int value = 0;//设置判断变量
while(1)
//进入程序主循环
{
ADC12CTL0 |= ADC12SC;//开始采样转换
value = ADC12MEM0;//把结果赋给变量
LCDSEG_DisplayNumber(value,0);
__delay_cycles(MCLK_FREQ/2); //延时 500ms
//显示六位数,从 111111-999999
}
}
2、设计性实验:
AD 转换结束会产生中断,编写AD 中断服务程序。利用信号发生器输出信号(例如正
弦波、三角波信号)作为AD 转换的输入,根据输入电压的大小控制LED 灯的亮灭(例如随
着输入电压值的增大,LED1 到LED5 按顺序点亮;随着输入电压值减小,LED 灯按顺序
熄
灭),LED 和单片机 IO 口连接如下图所示。
#include
int main(void)
{ WDTCTL = WDTPW +WDTHOLD;
P4DIR|=BIT5+BIT6+BIT7;
P5DIR|=BIT7;
P8DIR|=BIT0;
ADC12CTL0=ADC12MSC+ADC12ON+ADC12SHT1_8;
ADC12CTL1=ADC12CONSEQ1+ADC12SHP;
ADC12MCTL0=ADC12INCH_7;
ADC12CTL0|=ADC12ENC;
ADC12IE|=BIT0;
ADC12CTL0|=ADC12SC;
_EINT();
}
#pragma vector=ADC12_VECTOR
__interrupt void ADC12ISR(void)
{
if(ADC12MEM0>=3413)
{
P4OUT|=BIT5+BIT6+BIT7;
P5OUT|=BIT7;
P8OUT|=BIT0;
}
if(ADC12MEM0>=2730)
{
P4OUT&=~BIT5;
P4OUT|=BIT7+BIT6;
P5OUT|=BIT7;
P8OUT|=BIT0;
}
if(ADC12MEM0>=2048)
{
P4OUT&=~(BIT6+BIT5);
P4OUT|=BIT7;
P5OUT|=BIT7;
P8OUT|=BIT0;
}
if(ADC12MEM0>=1365)
{
P4OUT&=~(BIT5+BIT6+BIT7);
P5OUT|=BIT7;
P8OUT|=BIT0;
}
if(ADC12MEM0>=683)
{
P4OUT&=~(BIT5+BIT6+BIT7);
P5OUT&=~BIT7;
P8OUT|=BIT0;
}
if(ADC12MEM0>0)
{
P4OUT&=~(BIT5+BIT6+BIT7);
P5OUT&=~BIT7;
P8OUT&=~BIT0;
}
}
实验四 Zigbee 无线通信及 RS232 串口通信实验
1、验证性实验
利用两个 Zigbee 模块通信,一个模块作发射,一个作接收。发射模块所在实验箱按下按键
控制接收模块所在实验箱上 LED1 的亮灭,从而实现无线点灯的功能。
#include
typedef unsigned char
typedef signed
char
typedef unsigned short
typedef signed
short
typedef unsigned long
typedef signed
long
量
typedef float
位长度)
typedef double
长度)
uint8;
int8;
uint16;
int16;
uint32;
int32;
fp32;
fp64;
// 无符号8位整型变量
// 有符号8位整型变量
//无符号16位整型变量
//有符号16位整型变量
// 无符号32位整型变量
// 有符号32位整型变
// 单精度浮点数(32
//双精度浮点数(64位
1
0
0
TRUE
FALSE
NULL
#define
#define
#define
//----------------------------------CC2520引脚定义
------------------------------
#define RESET_ON()
#define RESET_OFF()
#define SCLK_ON()
#define SCLK_OFF()
#define MOSI_ON()
#define MOSI_OFF()
#define CSN_ON()
#define CSN_OFF()
#define VREG_EN_ON()
#define VREG_EN_OFF()
P4OUT |= BIT1
P4OUT &=~BIT1
P2OUT |= BIT4
P2OUT &=~BIT4
P2OUT |= BIT5
P2OUT &=~BIT5
P3OUT |= BIT5
P3OUT &=~BIT5
P4OUT |= BIT4
P4OUT &=~BIT4
#define MISO_IN
//#define GPIO4_IN
//#define GPIO5_IN
(P2IN&BIT6)
//P2.6
(P2IN&0x40)
(P2IN&0x20)
#define GPIO0_IN
(P4IN&BIT0)
//P4.0
#define GPIO1_IN
(P4IN&BIT2)
//P4.2
//-----------------------------------LED-----------------------------
-----------
#define
#define
#define
P8OUT &=~BIT0
P8OUT |= BIT0
LED1_0
LED1_1
LED1_10
//输出0
//输出1
P8OUT ^= BIT0
//输出1/0
#define
#define
#define
LED2_0
LED2_1
LED2_10
P5OUT &=~BIT7
P5OUT |= BIT7
P5OUT ^= BIT7
//输出0
//输出1
//输出1/0
BELL_0
BELL_1
//输出0
//输出1
P6OUT &=~BIT3
P6OUT |= BIT3
//----------------------------------BELL-----------------------------
-----------
#define
#define
//-------------------------------射频芯片相关定义
-------------------------------
#define
#define
#define
#define
#define
#define
//-------------------------------- CC2520 命令字定义
----------------------------
#define CMD_SNOP
#define CMD_IBUFLD
#define CMD_SIBUFEX
#define CMD_SSAMPLECCA
#define CMD_SRES
REG_READ
REG_WRITE
MEM_READ
MEM_WRITE
RXFIFO_READ
TXFIFO_WRITE
(0x80)
(0xC0)
(0x10)
(0x20)
(0x30)
(0x3A)
(0x03)
(0x04)
(0x00)
(0x02)
(0x09)
#define CMD_SXOSCON
#define CMD_SRXON
#define CMD_STXON
#define CMD_SRFOFF
(0x40)
(0x42)
(0x43)
(0x45)
#define CMD_SFLUSHRX
#define CMD_SFLUSHTX
(0x48)
//------------------ CC2520 配置寄存器
-----------------------------------
(0x47)
#define FRMFILT0
#define FRMFILT1
#define SRCMATCH
#define SRCSHORTEN0
#define SRCSHORTEN1
#define SRCSHORTEN2
#define SRCEXTEN0
#define SRCEXTEN1
#define SRCEXTEN2
#define FRMCTRL0
#define FRMCTRL1
#define RXENABLE0
#define RXENABLE1
#define EXCFLAG0
#define EXCFLAG1
#define EXCFLAG2
#define EXCMASKA0
#define EXCMASKA1
#define EXCMASKA2
#define EXCMASKB0
#define EXCMASKB1
#define EXCMASKB2
#define EXCBINDX0
#define EXCBINDX1
#define EXCBINDY0
#define EXCBINDY1
#define GPIOCTRL0
#define GPIOCTRL1
#define GPIOCTRL2
#define GPIOCTRL3
#define GPIOCTRL4
#define GPIOCTRL5
#define GPIOPOLARITY
#define GPIOCTRL
#define DPUCON
#define DPUSTAT
#define FREQCTRL
#define FREQTUNE
#define TXPOWER
#define FSMSTAT0
#define FSMSTAT1
#define FIFOPCTRL
#define FSMCTRL
#define CCACTRL0
(0x00)
(0x01)
(0x02)
(0x04)
(0x05)
(0x06)
(0x08)
(0x09)
(0x0A)
(0x0C)
(0x0D)
(0x0E)
(0x0F)
(0x10)
(0x11)
(0x12)
(0x14)
(0x15)
(0x16)
(0x18)
(0x19)
(0x1A)
(0x1C)
(0x1D)
(0x1E)
(0x1F)
(0x20)
(0x21)
(0x22)
(0x23)
(0x24)
(0x25)
(0x26)
(0x28)
(0x2A)
(0x2C)
(0x2E)
(0x2F)
(0x30)
(0x32)
(0x33)
(0x34)
(0x35)
(0x36)