单片机学习小组
直播中

李新梅

7年用户 203经验值
私信 关注

通用的51程序例子分享



1. 将文件夹LED拷贝到安装配置好sdccLinux系统中

2. 在文件目录下make

3. Make通过之后,然后再进行make hex。生成可下载的hex文件

4. 通过烧写工具将hex文件烧写到目标板子中

5. 可以使用make clean 删除所有编译生成的文件



程序实现led灯的闪烁

Config.h文件











#ifndef _CONFIG_H_

#define _CONFIG_H_



//系统时钟频率

#define F_CPU        12000000UL



//LED显示

#define LED          P0, 7





#endif







Macromcu.h文件









#ifndef _MACRO_MCU_H_

#define _MACRO_MCU_H_ 1



#include





#define MACRO_ARG21(a, b)           a

#define MACRO_ARG22(a, b)           b



#define PINSET(pin) MACRO_ARG21(pin) |= 1 << MACRO_ARG22(pin)

#define PINCLR(pin) MACRO_ARG21(pin) &= ~(1 << MACRO_ARG22(pin))

#define PININV(pin) MACRO_ARG21(pin) ^= 1 << MACRO_ARG22(pin)



#define PININ(pin) MACRO_ARG21(pin) & (1 << MACRO_ARG22(pin))



#endif





Hardware.h文件









#ifndef _HARDWARE_H_

#define _HARDWARE_H_ 1



#include



#include "config.h"

#include "macromcu.h"





extern void IO_init();





#endif





Hardware.c文件







#include "config.h"

#include "macromcu.h"

#include "hardware.h"



void IO_init()

{

  PINCLR(LED);

}





Demo.c文件







#include "hardware.h"



void delay()

{

  volatile unsigned int n;



  for(n = 0; n < 50000; n++);

}



int main(void)

{



  IO_init();



  while(1)

  {

    PINSET(LED);

    delay();

    PINCLR(LED);

    delay();

  }



return 0;

}



Makefile文件



MAIN := demo

OBJECTS := $(MAIN).rel hardware.rel

SOURCES := $(MAIN).c hardware.c

HEADERS := config.h hardware.h macromcu.h



main: $(OBJECTS)

sdcc $(OBJECTS)

hardware.rel: $(HEADERS) hardware.c

sdcc -c hardware.c

$(MAIN).rel: $(HEADERS) $(MAIN).c

sdcc -c $(MAIN).c



hex:

packihx $(MAIN).ihx > $(MAIN).hex

objcopy -I ihex -O binary $(MAIN).hex $(MAIN).bin



clean:

mkdir temp

cp *.c *.h temp

rm *.*

cp temp/*.* ./

rm -rf temp




更多回帖

发帖
×
20
完善资料,
赚取积分