-----------------点亮led
创建iar工程
打开iar-->project--->creadtnew project--->创建空的8051工程(LED)--->添加LED.c文件
File--->save workspace as --->取名为LED
工程右击-->options配置界面
配置cpu:
配置编译输出的文件格式
首先看原理图
可认看到LED1和LED2分别接的是p1-0和p1-1
再查看用户手册
Register Name SFR Address Module Description
P1SEL 0xF4 IOC Port 1 function select
可以看出当p1有0-7位,当把某一位设为设为0时, 为输入输出功能
如果将p1-0和p1-1设为输入输出功能,即将最后两位设为0
0xF4转换为二进制为 1111 0100
P1SEL &=~0x03;
0x03转换为二进制为0000 0011 取返为1111 1100
然后再与上1111 0100得到1111 0100
位运算的知识
按位与运算全1为1
按位或运算全0为0
异或运算相同为0,不同为1
取反运算
左移<< 相当于*2
右移>> 相当于/2
以上可以看出p1DIR是用来定义方向(0是输入,1是输出)
配置完成,编写代码:
/******************************************************************************
版权所有 (C), 2013-2020
******************************************************************************
文 件 名 : LED.c
版 本 号 : V1.0
作 者 : retacn
生成日期 : 2014年9月2日
功能描述 : 点亮一个LED
函数列表 :
main
修改历史 :
1.日 期 : 2014年9月2日
作 者 : retacn
修改内容 : 创建文件
******************************************************************************/
/*----------------------------------------------*
* 包含头文件 *
*----------------------------------------------*/
#include <ioCC2540.h>
/*****************************************************************************
函 数 名 : main
功能描述 : 主函数,C程序入口
输入参数 : void
输出参数 : 无
返 回 值 :
修改历史 :
1.日 期 : 2014年9月2日
作 者 : retacn
修改内容 : 创建
*****************************************************************************/
int main(void)
{
P1SEL &= ~0X03; // 将P1.1、0设置为IO功能
P1DIR |= 0X03; // 设置P1.1、0为输出功能
P1 &= ~0X03; // 清除原始值
P1 |= 0X03; // 设置P1.1、0输出高电平
while(1); // 无限等待
return 0;
}
/*end file*/
编译下载到开发板
注:程序中导入的iocc2540.h位于以下目录中
C:\Program Files (x86)\IAR Systems\EmbeddedWorkbench 6.5\8051\inc
内容如下:
/**************************************************************************************************
* -ioCC2540.h -
*
* Header file with definitions for the TexasInstruments CC2540 low-power System-on-Chip:
* an 8051-based MCU with 2.4 GHz Bluetooth lowenergy RF transceiver, and up to 256 kB FLASH.
*
* This file supports the IAR EmbeddedWorkbench for 8051.
*
**************************************************************************************************
*/
#ifndef IOCC2540_H
#define IOCC2540_H
/*------------------------------------------------------------------------------------------------
* CompilerAbstraction
*------------------------------------------------------------------------------------------------
*/
#ifdef__IAR_SYSTEMS_ICC__
#pragmalanguage=save
#pragmalanguage=extended
#defineSFR(name,addr) __sfr __no_init volatile unsigned char name @ addr;
#defineSFRBIT(name, addr, bit7, bit6, bit5, bit4, bit3, bit2, bit1, bit0) \
__sfr __no_initvolatile union \
{ \
unsigned char name; \
struct { \
unsigned char bit0 : 1; \
unsigned char bit1 : 1; \
unsigned char bit2 : 1; \
unsigned char bit3 : 1; \
unsigned char bit4 : 1; \
unsigned char bit5 : 1; \
unsigned char bit6 : 1; \
unsigned char bit7 : 1; \
}; \
} @ addr;
#defineSBIT(name,addr) /* not in use for IAR C Compiler */
#defineXREG(addr) ((unsigned char volatile__xdata *) 0)[addr]
#definePXREG(addr) ((unsigned char volatile__xdata *) addr)
#defineVECT(num,addr) addr
#elif defined__IAR_SYSTEMS_ASM__
#defineSFR(name,addr) name DEFINE addr
SFRBITMACRO MACROt, addr, bit7 , bit6, bit5, bit4, bit3, bit2, bit1, bit0
t DEFINE addr
bit7 DEFINE addr.7
bit6 DEFINE addr.6
bit5 DEFINE addr.5
bit4 DEFINEaddr.4 ;; NB: do not modifyindentation of this macro
bit3 DEFINE addr.3
bit2 DEFINE addr.2
bit1 DEFINE addr.1
bit0 DEFINE addr.0
ENDM
#defineSFRBIT(name, addr, bit7, bit6, bit5, bit4, bit3, bit2, bit1, bit0) \
SFRBITMACRO <name>, <addr>,<bit7>, <bit6>, <bit5>, <bit4>, <bit3>,<bit2>, <bit1>, <bit0>
#defineSBIT(name,addr) name DEFINE addr
#defineXREG(addr) addr
#definePXREG(addr) addr
#defineVECT(num,addr) addr
/* IAR assembleruses some predefined registers. The following prevents name collisions. */
#define SP SPx
#define ACC ACCx
#define B Bx
#define PSW PSWx
#define CY CYx
#define AC ACx
#define F0 F0x
#define RS1 RS1x
#define RS0 RS0x
#define OV OVx
#define P Px
#else
#error"Unrecognized compiler."
#endif
/*------------------------------------------------------------------------------------------------
* 中断导航 Interrupt Vectors
*------------------------------------------------------------------------------------------------
*/
#define RFERR_VECTOR VECT( 0, 0x03 ) /* RFTX FIFO Underflow and RX FIFO Overflow */
#define ADC_VECTOR VECT( 1, 0x0B ) /* ADC End of Conversion */
#define URX0_VECTOR VECT( 2, 0x13 ) /* USART0 RX Complete */
#define URX1_VECTOR VECT( 3, 0x1B ) /* USART1 RX Complete */
#define ENC_VECTOR VECT( 4, 0x23 ) /* AES Encryption/Decryption Complete */
#define ST_VECTOR VECT( 5, 0x2B ) /* Sleep Timer Compare */
#define P2INT_VECTOR VECT( 6, 0x33 ) /* Port 2 Inputs and USB */
#define UTX0_VECTOR VECT( 7, 0x3B ) /* USART0 TX Complete */
#define DMA_VECTOR VECT( 8, 0x43 ) /* DMA Transfer Complete */
#define T1_VECTOR VECT( 9, 0x4B ) /* Timer 1 (16-bit) Capture/Compare/Overflow */
#define T2_VECTOR VECT( 10, 0x53 ) /* Timer 2 (MAC Timer) */
#define T3_VECTOR VECT( 11, 0x5B ) /* Timer 3 (8-bit) Capture/Compare/Overflow */
#define T4_VECTOR VECT( 12, 0x63 ) /* Timer 4 (8-bit) Capture/Compare/Overflow */
#define P0INT_VECTOR VECT( 13, 0x6B ) /* Port 0 Inputs */
#define UTX1_VECTOR VECT( 14, 0x73 ) /* USART1 TX Complete */
#define P1INT_VECTOR VECT( 15, 0x7B ) /* Port 1 Inputs */
#define RF_VECTOR VECT( 16, 0x83 ) /* RF General Interrupts */
#define WDT_VECTOR VECT( 17, 0x8B ) /* Watchdog Overflow in Timer Mode */
/*------------------------------------------------------------------------------------------------
* InterruptAlias
* ------------------------------------------------------------------------------------------------
*/
#define USB_VECTOR P2INT_VECTOR /* USB Interruptvector, alias for P2INT_VECTOR */
/*------------------------------------------------------------------------------------------------
* SFR BitAlias
*------------------------------------------------------------------------------------------------
*/
#define USBIF P2IF /* USB Interrupt Flag */
/* USBIE P2IE , not in a bit addressable register */
/*------------------------------------------------------------------------------------------------
* SFRs
*------------------------------------------------------------------------------------------------
*/
/*
* SFRswith an address ending with 0 or 8 are bit accessible.
* Theyare defined with the SFRBIT() macro that sets the name of each bit.
*/
/* Port 0 */
SFRBIT( P0 , 0x80, P0_7, P0_6, P0_5, P0_4,P0_3, P0_2, P0_1, P0_0 )
SFR( SP , 0x81 ) /* Stack Pointer */
SFR( DPL0 , 0x82 ) /* Data Pointer 0 Low Byte */
SFR( DPH0 , 0x83 ) /* Data Pointer 0 High Byte */
SFR( DPL1 , 0x84 ) /* Data Pointer 1 Low Byte */