當前位置:編程學習大全網 - 編程語言 - 如何寫在keil中寫單片機的模塊化的程序

如何寫在keil中寫單片機的模塊化的程序

首先要會編寫滿足使用要求的程序,在此基礎上,把壹些功能獨立的子程序單獨編成壹個源文件,這些源文件裏的子程序壹旦試驗成功,以後就不需修改,也不需復制粘貼,只管整體添加即,源文件可能工巧匠比較長,為便於查找,可編壹個頭文件將這些子程序聲明壹下,然後在主程序包含這個頭文件即可,如液晶屏1602的驅動函數,寫命令 寫數據 初始化函數 甚至再編寫壹些常用的字符串顯示函數,整型數據顯示函數,都有可以單獨作為壹個源文件 還有EEPROM操作的相關函數,跟其它部分聯系較少,也可以單獨編成源文件, 子程序比較少的源文件可以直接引用,為便於查找,子程序多的模塊都有要有頭文件和該源文件對應,以下是我封裝的STC單片機內部的EEPROM操作的頭文件和源文件,跟其它部分就沒什麽聯系,因此作為壹個獨立模塊 頭文件eeprom.h如下:

ifndef __EEPROM_H__

#define __EEPROM_H__

#define uchar unsigned char

#define uint unsigned int

//擦除片內EEPROM的壹個扇區 這些函數在此只是聲明壹下,實體在源文件中

void eepromEraseSector (uint address);

void eepromWrite(uint address, uchar write_data);

//讀取STC單片機內部EEPROM的壹個字節

uchar eepromRead(uint address);

#endif

源文件eeprom.c 如下,裏面的幾個子函數都是STC單片機說明文檔裏有的,不需要任何修改,只管調用,所以平時我們只看頭文件就行了

#include<STC12C54.H>

#define uchar unsigned char

#define uint unsigned int

//擦除片內EEPROM的壹個扇區

void eepromEraseSector (uint address)

{

uchar ii;

ISP_ADDRL=address;

ISP_ADDRH=address>>8;

ISP_CONTR=0x01;

ISP_CONTR=ISP_CONTR|0x82; // 0x80 if SYSCLK<40MHz, 0x81 if SYSCLK<20MHz, 0x82 if SYSCLK<10MHz, 0x83 if SYSCLK<5MHz

ISP_CMD=0x03;

ISP_TRIG=0x46;

ISP_TRIG=0xb9;

for(ii=0;ii<3;ii++);

ISP_ADDRL=0xff;

ISP_ADDRH=0xff;

ISP_CONTR=0x00;

ISP_CMD=0x00;

ISP_TRIG=0x00;

}

//對STC片內EEPROM的指定地址寫入數據(即,字節編程)

void eepromWrite(uint address, uchar write_data)

{

uchar ii;

ISP_DATA=write_data;

ISP_ADDRL=address;

ISP_ADDRH=address>>8;

ISP_CONTR=0x01;

ISP_CONTR=ISP_CONTR|0x82; // 0x80 if SYSCLK<40MHz, 0x81 if SYSCLK<20MHz, 0x82 if SYSCLK<10MHz, 0x83 if SYSCLK<5MHz

ISP_CMD=0x02;

ISP_TRIG=0x46;

ISP_TRIG=0xb9;

for(ii=0;ii<3;ii++);

ISP_ADDRL=0xff;

ISP_ADDRH=0xff;

ISP_CONTR=0x00;

ISP_CMD=0x00;

ISP_TRIG=0x00;

}

//讀取STC單片機內部EEPROM的壹個字節

uchar eepromRead(uint address)

{

uchar ii,z;

ISP_ADDRL=address;

ISP_ADDRH=address>>8;

//ISP_CONTR=0x01;

ISP_CONTR=ISP_CONTR|0x82; // 0x80 if SYS

ISP_CMD=0x01;//讀命令切記哦

ISP_TRIG=0x46;

ISP_TRIG=0xb9;

for(ii=0;ii<3;ii++);

ISP_ADDRL=0xff;

ISP_ADDRH=0xff;

ISP_CONTR=0x00;

ISP_CMD=0x00;

ISP_TRIG=0x00;

z=ISP_DATA;

return(z);

}

  • 上一篇:淺談股票交易中的交易策略
  • 下一篇:大學生想兼職做推銷,面試時會遇到什麽樣的問題?怎麽回答好呢?
  • copyright 2024編程學習大全網