Keil C51中直接使用二进制数方法
Keil C51 中直接使用二进制数方法
在Keil C51 中数不能直接以二进制形式赋值,虽然在8051 的汇编中是可以的。
二进制数虽然书写长,易出错,但是由于是一位位写的,所以程序设计者能够很明确的看到每一位的状态,看得比较直观。
于是很多人怀念了8051 的汇编,很想在C51 中使用二进制。
没猜错的话搜到本篇日志的人很可能就是来找这种解决办法的,下面两种办法都是不错的选择。
方法一:
建立一个头文件,将所有的二进制数宏定义列举出来,用的时候直接使用宏定义,头文件定义:binary(右键目标另存为下载)。
方法二:
做一个带参数宏定义,将输入的类二进制数变换为对应的16 进制数,
整个定义和使用实例请见下文,可以直接使用,如果想研究原理又看不懂带参宏定义的朋友们请参考谭浩强的《C 程序设计》预处理命令一章内容(第三版在P204-P211)。
#define LongToBin(n)
(
((n 21) 0x80) |
((n 18) 0x40) |
((n 15) 0x20) |
((n 12) 0x10) |
((n 9) 0x08) |
((n 6) 0x04) |
((n 3) 0x02) |。
[计算机软件及应用]Keil C51软件使用说明
* ——表示是指针类型,此处*不含取内容之意;
数据类型——声明指针所指变量的类型;
[存储器类型1]——声明指针所指变量的存储类型,若默认则定义
为一般指针;
[存储器类型2]——声明该指针变量本身的存储类型;
标识符——声明指针变量本身的数据类型和名称.
22
MCS-51单片机原理、接口及应用
第6章 单片机的C51语言编程
6
MCS-51单片机原理、接口及应用
第6章 单片机的C51语言编程
6.1.2 C51中常用的头文件
reg51.h、reg52.h、math.h、ctype.h、stdio.h、stdlib.h、 absacc.h和intrins.h. 〔1〕reg51.h和reg52.h
〔定义51或52子系列单片机特殊功能寄存器和特殊位〕 reg52.h比reg51.h多了几行定义T2寄存器的内容.
第6章 单片机的C51语言编程
汇编语言:
优点:面向机器、目标代码短、占用存储器空间少、运行
快. 缺点:指令助记符多、编程灵活性差.
C语言: 优点:具有面向机器和面向用户的特点,良好的可读性﹑易
维护性和可移植性,对硬件的控制能力也很强, C语言的数据类 型及运算符丰富,具有良好的程序结构.
缺点:代码效率稍低〔同汇编语言相比〕,占用存储空间较 大. 解决方法:单片机内部都嵌入了大容量的Flash ROM,有效的 弥补了这个缺陷.
{
局部变量说明
执行语句〔包括子函数的调用语句〕
}
4
MCS-51单片机原理、接口及应用
第6章 单片机的C51语言编程
func1<形式参数及说明>
//子函数1
{ 局部变量说明
习题_C51语言答案
习题_C51语⾔答案⼀、填空1.KeiL C51软件中,⼯程⽂件的扩展名是___UV2_______,编译连接后⽣成可烧写的⽂件扩展名是___HEX_________。
2.C51⽀持的指针有⼀般指针和存储器指针。
3.C51中,没有专门的循环语句,我们可以⽤函数____ crol _____完成⼀个字节的循环左移,⽤__ _irol_ ___完成⼆个字节的循环左移。
4.C51的基本数据类型有位型、字符型、整型、长整型、浮点型、双精度浮点型。
5.C51的存储类型有data 、bdata 、idata 、pdata 、xdata 、code 。
6.C51的存储模式有SMALL 、COMPACT 和LARGE 。
7.C51程序与其他语⾔程序⼀样,程序结构也分为顺序结构、选择结构、循环结构三种。
8.C51中int型变量的长度为 4位,其值域为0~65535 。
9.C51中关键字sfr的作⽤定义8位特殊功能寄存器,sbit的作⽤定义可位寻址对象,⽤于位寻址,从位寻址字节中定义位变量。
10.函数定义由函数⾸部和函数体两部分组成。
11.C51中“!”运算符的作⽤是逻辑运算结果值取反。
12.若函数⽆返回值,⽤void 关键字指定。
13.若局部变量未初始化,其初值为0 。
⼆、单项选择题:1.89S51的内部程序存储器与数据存储器容量各为多少?( C )(A)64KB、 128B ( B)4KB、64KB(C)4KB、128B (D)8KB、256B2.在8x51芯⽚⾥,哪个引脚⽤于控制使⽤内部程序存储器还是外部程序存储器?( B) P17 (A)XTAL1 (B)/EA (C)/PSEN(D)ALE3.下列哪个不是KeilC的预处理命令?(C) (A)#include(B)#define(C)#exit(D)#if4.下列哪个不是KeilC的数据类型?( B) (A)void(B)string(C)char(D)float5.在KeilC的程序⾥,若要指定P0⼝的bit3,如何编写?(C )(A)P0.3 (B)Port0.3 (C)P0^3 (D)Port^36.在8x51⾥,若要扩展外部存储器时,数据总线连接哪个输⼊/输出端⼝?(A )(A)P0 (B)P1 (C)P2 (D)P37.在KeilC⾥,判读开关状态时,使⽤if_else if语句与使⽤switch语句有何差异?(B )(A)if-else if 语句较快(B)if-else if语句有优先级(C)switch语句可判读较多开关状态(D)switch语句有优先级8.在KeilC⾥,中断⼦程序与函数有何不同?(A )(A)中断⼦程序不必声明(B)函数不必声明(C)中断⼦程序必须有形式参数(D)中断⼦程序⼀定会有返回值9.利⽤下列( A )关键字可以改变⼯作寄存器组A、interruptB、sfrC、whileD、using10.C51中⼀般指针变量占⽤( C )字节存储。
Keil C51的使用
编辑课件
16
5、移除文件
要把某个文件从工程中移除,可在此文件上单击右键, 然后单击“Remove File ’ ’ ”。
移除不是删除,文件依然存在。
编辑课件
17
我来演示
1、打开一个已有的工程项目(不是默认项目)。 2、打开一个已有的工程项目,修改单片机型号。
3、打开一个已有的工程项目,删除原有的文件,装 入一个已有的C语言文件。
此时光标在编辑窗口里闪烁,就可以输入用户的应 用程序了。
或者把已有的程序从其他地方直接复制到程序编辑 窗口内。
文件的建立也可以用Windows环境的附件中的记 事本或写字板等纯文本编辑软件完成。
参见教材《单片机的C5编1辑应课件用程序设计》第 309 页 27
新建文件时,建议首先保存空白文件。
编辑课件
11
如果在选择了目标器件后,想更改器件,可选择 Project菜单中的Select Device for Target‘Tartet 1’。
由于不同厂家的许多型号性能相近,因此,如果找不 到用户要求的芯片信号,可以选择其他公司的相近型 号。
参见教材《单片机的C5编1辑应课件用程序设计》第 308 页 12
uVision2支持的所有CPU器件的型号根据生产厂家 形成器件组。
用户可根据需要选择相应的器件组并选择相应的器 件型号。
编辑课件
10
通过滚动条,选择生产厂商、目标CPU。
如:Atmel器件组内的AT89C51单片机。首先找到 Atmel公司,然后单击左边的“+”号展开该组。选择 AT89C51之后,单击“确定”。
程序输入完毕后别忘了再次保存。
参见教材《单片机的C5编1辑应课件用程序设计》第 309 页 28
Keil C51使用详解
Keil C51使用详解keilc51使用详解v1.0电子设计世界!版权所有,热烈欢迎贴文,切勿修正并标明原文。
留存一切权利。
第一章keilc51开发系统基本知识 (6)1第一节系统概述 (6)第二节keilc51单片机软件开发系统的整体结构...6第三节keilc51工具包的加装...71.c51fordos72.c51forwindows的安装及注意事项:...7第四节keilc51工具包各部分功能及使用简介...71.c51与a51.72.l51和bl51.83.dscope51,tscope51及monitor51.84.ishell及uvision.9第二章keilc51软件使用详解 (10)第一节keilc51编译器的控制指令...101.源文件掌控类 (10)2.目标文件(object)控制类:...103.列表文件(listing)控制类:...10第二节dscope51的使用...111.dscope51fordos112.dscopeforwindows12第三节monitor51及其使用...131.monitor51对硬件的要求...132.mon51的使用...133.mon51的配置...134.串口连接图:...135.mon51命令及使用...14第四节集成开发环境(ide)的使用...141.ishellfordos的使用 (14)22.uvisionforwindows的使用 (15)第三章keilc51vs标准c..15第一节keilc51扩展关键字...15第二节内存区域(memoryareas):...161.pragramarea:...162.internaldatamemory:163.externaldatam emory.162.可位串行区表明20h-2fh..18第七节keilc51指针...181.通常指针...182.存储器指针...183.指针切换...18第八节keilc51函数...191.中断函数声明:...192.通用型存储工作区 (19)3.选通用存储工作区由usingx声明,见上例。
Keil-C51单片机实验指导.5.4
Keil C51实验项目Keil C51实验项目 (1)一、单片机的IO编程 (3)实验1 IO开关量输入实验 (3)实验2 IO输出驱动继电器(或光电隔离器)实验 (4)实验3 IO输入/输出---半导体温度传感器DS18B20实验 (5)二、单片机的中断系统 (6)实验 1 外部中断----脉冲计数实验 (6)实验 2 外部中断----故障报警实验 (7)三、单片机的定时器/计数器 (8)实验1 计数器实验 (8)实验2 秒时钟发生器实验 (10)四、单片机的串口特点和编程 (11)实验1 PC机串口通讯实验 (11)实验2 RS485通讯实验 (13)五、存储器 (14)实验1 RAM存储器读写实验 (14)六、PWM发生器 (15)实验1 PWM发生器(模拟)实验 (15)实验2 蜂鸣器实验 (16)七、WDG看门狗 (17)实验1 外扩WDG(MAX705)实验 (17)实验2 WDG(内部)实验 (18)八、SPI总线 (19)实验1 SPI(模拟)实验-----TLC2543 AD转换实验 (19)实验2 SPI(模拟)实验-----TLV5616 DA转换实验 (20)九、I2C总线 (21)实验1 I2C(模拟)实验-----IC卡(AT24C01)读写实验 (21)十、综合实验 (23)实验1 HD7279LED数码管显示实验 (23)实验2 HD7279键盘实验 (23)实验3 电机转速实验 (24)十一、步进电机实验 (26)实验1 步进电机正反转实验 (26)十二、TFT液晶显示实验 (26)实验1 TFT液晶显示彩色条纹实验 (26)十三、16X16LED点阵显示汉字实验 (27)实验1 16X16LED点阵显示汉字实验 (27)一、单片机的IO编程实验1 IO开关量输入实验目的:学习单片机读取IO引脚状态的的方法。
内容:编程读取IO引脚状态。
设备:EL-EMCU-I试验箱、EXP-89S51/52/53 CPU板。
keil 进制数表示
在Keil中,进制数表示方式与C语言中的表示方式相似,通常有以下几种形式:
十进制表示法:
c
Copy code
int decimalNumber = 10; // 十进制表示法
十六进制表示法:
c
Copy code
int hexNumber = 0xA; // 十六进制表示法
八进制表示法:
c
Copy code
int octalNumber = 012; // 八进制表示法
二进制表示法:
c
Copy code
int binaryNumber = 0b1010; // 二进制表示法(C++14及以上支持)
在Keil中,你可以在C语言中使用这些表示法来初始化变量或进行其他的数值操作。
请注意,C语言中的整数默认以十进制表示,但你可以使用上述不同的进制表示法来指定其他进制。
在Keil中使用不同进制的常数值可能会方便你在嵌入式系统开发中进行位操作或配置寄存器的值。
例如,在设置某个寄存器的配置时,通常使用位掩码并设置相应的位,这时候使用十六进制或二进制表示法可能更为直观。
51单片机进制转换程序
51单片机进制转换程序
本程序可以在51单片机上实现十进制、二进制、十六进制之间的相互转换。
以下是各个功能的详细说明:
1. 十进制到二进制:将输入的十进制数转换成二进制数,以字符串的形式输出。
2. 十进制到十六进制:将输入的十进制数转换成十六进制数,以字符串的形式输出。
3. 二进制到十进制:将输入的二进制数转换成十进制数,以整数的形式输出。
4. 十六进制到十进制:将输入的十六进制数转换成十进制数,以整数的形式输出。
5. 二进制到十六进制:将输入的二进制数转换成十六进制数,以字符串的形式输出。
6. 十六进制到二进制:将输入的十六进制数转换成二进制数,以字符串的形式输出。
程序流程图:
(1) 十进制到二进制:
输入:十进制数(整数)
输出:二进制数(字符串)
流程:将十进制数除以2,取余数,然后将商继续除以2,直到商为0,将所有余数逆序排列,得到二进制数。
(2) 十进制到十六进制:
输入:十进制数(整数)
输出:十六进制数(字符串)
流程:将十进制数除以16,取余数,然后将商继续除以16,直到商为0,将所有余数逆序排列,得到十六进制数。
(3) 二进制到十进制:
输入:二进制数(字符串)
输出:十进制数(整数)
流程:将二进制数从右向左遍历,每个数字乘以2的幂次方(0次方到n-1次方),其中n为二进制数的长度,然后将所有结果相加得到十进制数。
(4) 十六进制到十进制:
输入:十六进制数(字符串)
输出:十进制数(整数)
流程:将十六进制数从右向左遍历,每个数字乘以16的幂次方(0次方到n-1次方),其中n为十六进制数的长度,然后将所有结果相加得到十进制数。
关于在 KEIL C51 中直接嵌入汇编
我找到了一些资料希望对你有用下周就要做实验了,由于听老师说机房位子可能比较少,对我这种蹭课的学生来说也就不敢奢望同选这门课的同学一样能够正常的在机房调试程序了,因此,我决定提前先在自己的工作室里把实验内容给过一遍。
第一个实验是关于嵌入式编程的,这个实验目的一方面是为了让我们熟悉ARM下编程的编译环境ADS和调试器ATX,另一方面是让我们掌握如何将c语言和汇编语言在实际编程中相互调用。
经过这两天靠自己不断的摸索,终于掌握了如何在编译环境中进行ARM编程,另外,还学会了在c中调用汇编程序的方法,以及如何通过linux自带的gcc编译嵌有汇编的c程序,总之,收获还是蛮多的哦,下面就总结一下吧。
1、c嵌汇编首先说一下关于GCC编译嵌有汇编语言的c语言吧,GCC编译的汇编语言不是我们上课时学的Intel x86汇编,而是AT&T汇编,两者的区别可以查看《Gcc使用的内嵌汇编语法格式小教程》。
下面是内嵌汇编的几种格式:语法__asm__(“instruction. ……instruction”); //Linux gcc中支持(注意asm的下划线均为两个否则GCC将会无法编译)__asm{instruction…instruction}; //ADS中支持(注意asm的下划线均为两个否则GCC将会无法编译)asm(“instruction [; instruction]”); //ARM C++中使用例1是我在linux环境下,编的嵌有汇编程序的c语言,并通过了GCC的编译:例1:#includeint plus(int a,int b){__asm__(“add %1,%0\n\t”:”+r”(a):”r”(b));return (c);}int main(){int a,b,c;a=2;b=1;c=plus(a,b);printf(“c=%d\n”,c);}这个程序应该是很简单的,但关键是子函数中嵌入的那段汇编程序,具体的写法可以参看其他文章。
Keil C51使用详解
Keil C51使用详解第一章Keil C51开发系统基本知识 (6)第一节系统概述 (6)第二节Keil C51单片机软件开发系统的整体结构 (6)第三节Keil C51工具包的安装 (7)1. C51 for Dos 72. C51 for Windows的安装及注意事项: (7)第四节Keil C51工具包各部分功能及使用简介 (7)1. C51与A51. 72. L51和BL51. 83. DScope51,Tscope51及Monitor51. 84. Ishell及uVision. 9第二章Keil C51软件使用详解 (10)第一节Keil C51编译器的控制指令 (10)1. 源文件控制类 (10)2. 目标文件(Object)控制类: (10)3. 列表文件(listing)控制类: (10)第二节dScope51的使用 (11)1. dScope51 for Dos 112. dScope for Windows 12第三节Monitor51及其使用 (13)1. Monitor51对硬件的要求 (13)2. Mon51的使用 (13)3. MON51的配置 (13)4. 串口连接图: (13)5. MON51命令及使用 (14)第四节集成开发环境(IDE)的使用 (14)1. Ishell for Dos的使用 (14)2. uVision for windows的使用 (15)第三章Keil C51 vs 标准C.. 15第一节Keil C51扩展关键字 (15)第二节内存区域(Memory Areas): (16)1. Pragram Area: (16)2. Internal Data Memory: 163. External Data Memory. 164. Speciac Function Register Memory. 16第三节存储模式 (16)1. Small模式 (16)2. Compact模式 (17)3. large模式 (17)第四节存储类型声明 (17)第五节变量或数据类型 (17)第六节位变量与声明 (17)1. bit型变量 (17)2. 可位寻址区说明20H-2FH.. 18第七节Keil C51指针 (18)1. 一般指针 (18)2. 存储器指针 (18)3. 指针转换 (18)第八节Keil C51函数 (19)1. 中断函数声明: (19)2. 通用存储工作区 (19)3. 选通用存储工作区由using x声明,见上例。
KEIL C51二进制数输入宏
#define B10001011 0x8B
#define B10001100 0x8C
#define B10001101 0x8D
#define B10001110 0x8E
#define B10001111 0x8F
#define B10010000 0x90
KEIL C51二进制数输入宏
在C语言中有十进制,十六进制,八进制;没有二进制的定义,在C51中使用十六进制表示有时不太直观,下面介绍几种方法表示二进制[均来自网络]
方法一
#define _BIN(a,b,c,d,e,f,g,h) ((a<<7)+(b<<6)+(c<<5)+(d<<4)+(e<<3)+(f<<2)+(g<<1)+(h<<0))
#define B10100110 0xA6
#define B10100111 0xA7
#define B10101000 0xA8
#define B10101001 0xA9
#define B10101010 0xAA
#define B10101011 0xAB
#define B10101100 0xAC
#define B01100000 0x60
#define B01100001 0x61
#define B01100010 0x62
#define B01100011 0x63
#define B01100100 0x64
#define B01100101 0x65
