推荐阅读最新更新时间:2024-03-16 16:06
Keil C51处理可重入函数问题的探讨
在程序设计中,变量具体可以分为四种类型:全局变量、静态全局变量、局部变量、静态局部变量。这几种变量类型对函数的可重入产生的重大的影响,因为不同的编译器采用不同的策略。 针对51的存储区有限,keil c51因此有了覆盖和共享的处理方法。 共享:共享是针对全局变量或静态变量而言的,对全局变量定义后就对其分配了内存,其他变量不会覆盖这一地址,在任何函数或者程序中都可以共享该变量的内存。 覆盖:如果一个程序不再被调用,也不由其他的程序调用,在其他的程序运行之前程序也不在运行,那么这个程序的局部变量可以放在与其他的程序完全相同的RAM空间,这就是覆盖。 所以说C51编译器并不是真正的C编译器。 先说一下keil
[单片机]
Keil C51 工程的建立
Keil软件使用的时候,是在软件建立的工程里面,于是建立工程: 开始程序开发的的旅途: 1.打开Keil软件,点击Project---new project 2.在弹出的对话框里选择合适的文件夹,对工程取一个名字--可以使任何名字,当然为了管理你的文档,工程的名字最好和项目有关! 3.完成后点击确定,弹出如下对话框: 4.在上图中的左边框里面选择Atmel--At89C52,选择完后如下: 5.确定后,在弹出的对话框里面选择 否 ,这样以后,一个工程的外壳就建立好了!! 6.添加必须文件,点击file---new,或者直接使用快捷键Ctrl+N,然后点击保存,使其保存在刚才所见工程下面,并且以 **.C 命名 7.向工程
[单片机]
C51单片机学习笔记之串口通信
简介 串口通信就是单片机和pc之间的一种通信方式。 通信方式:并行,串行,同步,异步(最常用的) 传输方向:单工,半双工(不同时间),全双工 基本结构 相关寄存器 SCON串口控制寄存器(主要用方式1) TB8——在方式2和方式3中,TB8是要作为数据帧第9位被发送出去的,在多机通信中,可用于判断当前数据帧的数据是地址还是数据,TB8=0为数据,TB8=1为地址 RB8——当单片机已经接收一帧数据帧时,会把数据帧中的第9位放到 RB8中。方式0不使用RB8,在方式2和方式3中,RB8为接收到的数据帧的第9位数据位。 TI——方式1、2、3中。当发送数据完毕,硬件会将其置1,当 TI 被置1,会向C
[单片机]
基于Keil C的AT24C02串行E2PROM的编程
AT24C02是美国Atmel公司的低功耗CMOS型E2PROM,内含256×8位存储空间,具有工作电压宽(2。5~5。5V)、擦写次数多(大于10000次)、写入速度快(小于10ms)、抗干扰能力强、数据不易丢失、体积小等特点。而且他是采用了I2C总线式进行数据读写的串行器件,占用很少的资源和I/O线,并且支持在线编程,进行数据实时的存取十分方便。 1AT24C02的引脚功能 AT24C02引脚如图1所示。 他的的1、2、3脚是3根地址线,用于确定芯片的硬件地址。第8脚和第4脚分别为正、负电源。第5脚SDA为串行数据输入/输出,数据通过这根双向I2C总线串行传送。第6脚SCL为串行时钟,SDA和SCL为漏极开路端,在实
[单片机]
Keil C51 总线外设操作问题的深入分析
阅读了《单片机与嵌入式系统应用》2005年第10期杂志《经验交流》栏目的一篇文章《Keil C5l对同一端口的连续读取方法》(原文)后,笔者认为该文并未就此问题进行深入准确的分析。文章中提到的两种解决方法并不直接和简单。笔者认为这并非是Keil C51中不能处理对一个端口进行连续读写的问题,而是对Keil C51的使用不够熟悉和设计不够细致的问题,因此特撰写本文。
本文中对原文提到的问题,提出了三种不同于原文的解决方法。每种方法都比原文中提到的方法更直接和简单,设计也更规范。(无意批评,请原文作者见谅)
1 问题回顾和分析
原文中提到:在实际工作中遇到对同一端口反复连续读取,Keil C5l编译并未达到预期的结果。原文作
[单片机]
C51液晶显示(LMC1602A)实验2
因为在protues上没有找到这款液晶屏幕,所以就不截图了,经过验证是对的。 程序一:在液晶屏上显示一个1 //在液晶屏上显示一个字符 #include reg52.h #define uchar unsigned char #define uint unsigned int //端口设置 sbit lcden=P3^4; sbit lcdrs=P3^5; //延迟函数,大约1秒 void delay(uint z) { uint x,y; for(x=z;x 0;x--) for(y=110;y 0;y--); } //写命令 void write_com(uchar com) { lcdrs=0; //写命令 P0
[单片机]
单片机技术C51串口输出输入函数
*---------------------------------------- ComFun.c C51串口输出输入函数 外部声明 ComFun.h ----------------------------------------*/ #include //串口初始化 晶振为11.0592M 方式1 波特率300-57600 void InitCom(unsigned char BaudRate) { unsigned char THTL; switch (BaudRate) { case 1: THTL = 64; break; //波特率300 case 2: THTL = 160; break; //600 case
[单片机]
Keil C51重定向printf到串口
概述 进行C/C++开发的时候我们都会需要打印调试信息,打印调试信息时我们习惯使用printf函数,但是在Keil C51环境下,由于我们的程序是下载到单片机里,使用printf函数时不能直接打印到串口上,这个时候就需要我们对printf函数输出重定向。 重定向 重定向printf很简单,我们知道,printf函数是调用putchar实现字符数据传送的。我们只要 重写putchar函数 ,就可以对printf进输出重定向。 代码清单 下面是自己在Keil 5环境下,使用单片机STC12测试printf重定向功能的代码清单 #include STC12C5A60S2.H #include stdio.h //UART1 初
[单片机]