导航:首页 > 操作系统 > 单片机模块化

单片机模块化

发布时间:2022-04-21 18:47:23

1. 如何写在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);
}

2. 单片机设计技巧:如何实现8051模块化编程

最佳答案第一阶段:是先浏览教科书里的硬件部分,大至了解单片机的硬件结构。如ROM、RAM、地址、I/O口等,以及看一些厂家的MCU资料(Data Sheet),来加强MCU所提供各项资源的印象。呵呵,还是得先看书。看不懂的就问老师,问知道的人。可以理解,我以前在学校也是对单片机一点儿也不理解,其实简单点的说单片机就是一块集成芯片,但是不同的地方就是可以通过编程来改变其引脚的电平高低。大二学了数电没有?学过数点你就会理解高低电平的含义。另外,大一的时候学过计算机基础了吧。你可以用计算机的原理来理解单片机。比如说 ROM 其实就像计算机的硬盘一样,是用来装东西的,装你运行的程序。

第二阶段:就是了解二进位数字、十六进位数和软件方面的内容。尽管有很多高级语言可用于单片机的编程,但我觉得初学还是以汇编语言为好,更有利于和硬件结合,掌握硬件结构。知道汇编语言、机器语言、指令、 程序等概念后,从MOV指令开始,学习汇编语言和编程,在此如51的MCU汇编语言系统有11条指令,简单又好理解它们怎样和硬件联系,更有助于一般学习单片机的指令整合与运用.因此其方法可先了 解几条基本的MOV指令和它的机器语言,大致建立起单片机的硬件和软件概念,来知道单片机的硬件是由指令控制指挥的。

第三阶段按照编程环境的使用手册,熟悉使用编程环境。现在的编程环境一般都和电脑相连,只要具备基本电脑知识的人都可很快掌握操作步骤。

第四阶段是依靠实验板,学习掌握单片机的汇编语言指令系统和简单编程。同时和前面所学硬件知识结合组装,起到主学软件,巩固硬件的双重作用。

开始 时可用别人编的简单程式在实验板上进行验证、分析,主要是熟悉该学习方法,在应用方面主要针对单片机I/O各项接口的使用,如A/D,D/A,PWM输出的应用,LCD与VFD的控制,以及如何规范各项串行输出入口的通讯协定等,对其所控制的各项元器件须先分析驱动能力,如电流电压问题等。

汇编语言熟悉后,建议尽快学习C语言的编程,毕竟C语言有功能丰富的库函数、运算速度快、编译效率高、有良好的可移植性,而且可以直接实现对系统硬件的控制。C语言是一种结构化程序设计语言,它支持当前程序设计中广泛采用的由顶向下结构化程序设计技术。此外,C语言程序具有完善的模块程序结构,从而为软件开发中采用模块化 程序设计方法提供了有力的保障。因此,使用C语言进行程序设计已成为软件 开发的一个主流。用C语言来编写目标系统软件,会大大缩短开发周期,且明显地增加软件的可读性,便于改进和扩充,从而研制出规模更大、性能更完备的系统。

另外,我觉得一开始很多的概念可能你都不怎么理解的,光看书也难理解,还得多问人,还有找一样好的仿真软件,一定要会用。在学指令的时候一条一条的验证,那样才会理解。
就比如一个非常简单的 REG 0000H
AJMP 30H
MOV 20H #05H
END
看看仿真软件的寄存器,内部数据存储器里面的数据有什么改变。当你看到20H单元上的值变成了5,你就知道 MOV 20H #05H 的含义。但是光看书,可能就理解不出来。

3. 关于单片机 模块化编程的 问题

可以,但是加了头文件有几点好处:首先模块化更清晰;通过头文件申明需要对外提供调用的函数,比你在其他C文件里面用extern 申明要方便。举个例子,现在有main.c,a.c,b.c三个C文件,当你在main.c需要用到的a.c里的函数,且函数很多,好几十个,你需要在main.c写好几十个extern申明的函数语句。如果你还需要在b.c调用的话,还要在b.c里面写几十个申明语句。当你还需要在其他C文件里面调用的话,那工作量就太大了。如果我们写个h文件,然后在里面去extern申明需要对外提供的函数,其他C文件里面调用只需要写个#include "a.h"即可,方便且快捷。

4. 我单片机模块化编程出现的问题

首先,我不知道,你的.h文件里面的内容是什么,因该是:外部函数引用的语句,比如:
extern void XXX(unsigned int XXX); 这样才能对外部函数进行引用。
其次,我看你的每一个.C文件中都有#include<reg52.h>语句,这是不对的,编译都会出错,
你可以用#ifndef 和#endif进行编译预处理,这样可以防止出错。
注意以上两点就应该没有什么错误了。

5. 用单片机C语言模块化设计,使用全局变量太多,data不够用怎么办

首先,你用的什么单片机?
现在的很多单片机,已经集成了外部RAM,没有必要你自己再扩RAM了,你查一下你使用的单片机手册,应该已经外扩RAM了。
据我所知道的51系列单片机,STC的最少外扩256B,通常外扩1024B,现在又出来外扩4096B的
中颖的、华帮的,最少也是一样256B- 1024B。
但是有一种例外,就是AT89S51,只有这种原始的单片机才没有外扩RAM。
从AT89S52时候,就开始外扩256B了。
你可以查一下你的手册,也可以在Keil里,新建工程选择芯片时,看一下芯片的介绍。

6. 求大神关于51单片机模块化编程问题

你好:
你只要在iic的.
c文件
中包含iic的.h文件就可以了。
另,如果iic的.c文件涉及操作到51中的寄存器,还要包含reg51.h。
且,.c和.h文件都要放到
编译器
所在文件的include下。
先试试吧。
希望我的回答能帮助到你。

7. 单片机是什么

单片机是一种集成电路芯片。

单片机是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能集成到一块硅片上构成的一个小而完善的微型计算机系统。

在工业控制领域广泛应用。从上世纪80年代,由当时的4位、8位单片机,发展到如今的300M的高速单片机。

单片机的特征:

1、单片机的体积比较小, 内部芯片作为计算机系统,其结构简单,但是功能完善,使用起来十分方便,可以模块化应用。

2、单片机有着较高的集成度,可靠性比较强,即使单片机处于长时间的工作也不会存在故障问题。

3、单片机在应用时低电压、低能耗,是人们在日常生活中的首要选择, 为生产与研发提供便利。

4、单片机对数据的处理能力和运算能力较强,可以在各种环境中应用,且有着较强的控制能力。

8. 单片机C程序模块化的写法,用sbit定义位变量的时候写在写哪个位置全局变量写在哪局部变量写在哪

这个应该根据程序的情况来定,你只有一个源文件的话,当然写在C里就可以了。全局变量一般写在程序的最前面,局部变量写在每个函数里。比如这个例子:
#include <stdio.h>
#include <math.h>
#include <intrins.h>
#include <absacc.h>
#include <string.h>
#include "LCD_12864.h"
sbit RESET = P3^3;
uchar code LCD_WIDTH = 16;
uchar code LCD_HEIGHT = 64;
uchar gCurRow,gCurCol;
uchar tCurRow,tCurCol;
uchar ShowModeSW;
uint txthome,grhome;
uchar Status_BIT_01();
uchar Status_BIT_3();
uchar LCD_Write_Command(uchar cmd);
uchar LCD_Write_Command_P1(uchar cmd,uchar para1);
uchar LCD_Write_Command_P2(uchar cmd,uchar para1,uchar para2);
uchar LCD_Write_Data(uchar dat);
void cls();
uchar LCD_Initialise();
void Set_LCD_POS(uchar row,uchar col);
uchar Status_BIT_01()
{
uchar i;
for(i=5;i>0;i--)
{
if((LCMCW & 0x03)==0x03)
break;
}
return i;
}
uchar Status_BIT_3()
{
uchar i;
for(i=5;i>0;i--)
{

9. 单片机c语言模块化编程,如何定义全局变量。

1.使用关键字extern修饰申明。
例如:
主文件中定义 int g_ival = 0;
别的文件里面用 extern int g_ival;申明一下就可以用了。

2.模块化编程是指将一个庞大的程序划分为若干个功能独立的模块,对各个模块进行独立开发,然后再将这些模块统一合并为一个完整的程序。这是C语言面向过程的编程方法,可以缩短开发周期,提高程序的可读性和可维护性。

3.在单片机程序里,程序比较小或者功能比较简单的时候,我们不需要采用模块化编程,但是,当程序功能复杂、涉及的资源较多的时候,模块化编程就能体现它的优越性了。如前面我们写过的HT1380驱动程序、独立按键扫描程序和12864程序,每一个程序都是只用一个源文件编写就能完成,但是,当您制作一个12864液晶日历的时候,需要用到HT1380驱动程序、独立按键扫描程序和12864显示程序,如果把这三个程序全部集中在一个源文件里,将导致主体程序臃肿且杂乱,这样做并非不可取,只是降低了程序可读性、可维护性和代码的重用率。如果把这三个程序当做三个独立的模块放到你的主体工程进行模块化编程,效果就不一样了。实际上,模块化编程就是模块合并的过程,就是建立每个模块的头文件和源文件并将其加入到主体程序的过程。主体程序调用模块的函数是通过包含模块的头文件来实现,模块的头文件和源文件是模块密不可分的两个部分,缺一不可。所以,模块化编程必须提供每个模块的头文件和源文件。

阅读全文

与单片机模块化相关的资料

热点内容
php论坛实训报告 浏览:401
java日期字符串转换成日期 浏览:129
linuxsftp连接 浏览:934
光伏日发电量算法 浏览:125
小肚皮app怎么才有vip 浏览:616
php全角转换半角 浏览:927
java字符序列 浏览:539
杭州编译分布式存储区块链 浏览:575
材料压缩曲线 浏览:247
linux命令排序 浏览:151
手机热点加密为啥连接不上电脑 浏览:979
编译器合并计算 浏览:959
android音频曲线 浏览:343
linuxftp自动登录 浏览:802
运行编译后网页 浏览:70
阅读app怎么使用 浏览:319
centos防火墙命令 浏览:432
命令行变更 浏览:332
linux设备和驱动 浏览:207
加密货币骗局破案 浏览:345