导航:首页 > 源码编译 > 51单片机c语言教程编写与编译

51单片机c语言教程编写与编译

发布时间:2023-11-01 07:02:56

Ⅰ 51单片机编程问题

1:C51编译器如何区分位地址和字节地址
是靠预定义实现的,比如:sfr P0 = 0x80; sbit P0_0 = 0x80;前者声明了P0端口地址位于0x80,后者说明了P0端口的bit0,即P0.0位于位地址空间0x80处。这2个0x80具有完全不同的含义,靠关键字sfr和sbit来区别。这样当程序被编译时,编译器会依此编译成相应的汇编语言。例如:

C51语句: P0 = 1;

P0声明为sfr,因此编译成:mov 80h,01h,将把0x01数据送入0x80单元,由于0x80单元物理上对应P0端口,因此,P0.0脚将输出高电平(其实是呈现高阻态,P0口独有的),其他.1-.7脚输出低电平。

C51语句: P0_0 = 1;

P0_0声明为sbit,因此编译成:setb 80h,这将把位地址空间的0x80地址的bit的值置1。这个位正是P0口的bit0,执行后,P0.0将输出高阻态。而P0.1-.7不会变化。

2:C51为什么要嵌套汇编
51单片机一个显着优点就是指令执行时间固定,因此可以适应时序要求严格的场合。例如符合ISO7816协议的cpu卡的读写,对时序要求比较严格。其实就是用io脚做出来的同步半双工串口。支持cpu卡的程序一般比较庞大,需要用c51来组织,但是由于c编译的不确定性,必须把底层程序封装成汇编语言模块嵌入到工程中。这就带来几个问题:如何声明函数、参数如何传递等。限于篇幅,不能说得很细。下面举例:

汇编程序单独保存一个文件,加入到工程中,函数如下:

_proc_a:

mov a, r7

inc a

mov r7, a

ret

用c语言在.h文件中声明: extern unsigned char proc_a(unsigned char val);

调用时形如: retvalue = proc_a(0x11);

说明:

a:汇编程序如果带参数,则需要在汇编程序前多加一个下划线。而声明它的地方不用加(伟福编译器这么要求的)。

b:函数的形参中第一参数用R7传递,函数返回值用R7返回,这是C51的通用规范。其他参数都有相应规定。函数可以返回一个位,用psw的c位返回。c:上面的语句,执行顺序是把0x11给R7,然后跳转子程序,子程序将它加1后送回。

d:函数跳转到汇编程序时,本区的R0-R7,A,B,PSW,DPTR等寄存器可以供子程序使用,不必考虑调用后是否要恢复这些常规资源。上例中,A的值被函数使用了,编程者不必恢复调用前的值。

Ⅱ 51单片机 C语言编程

首先要明确单片机的端口名称一般都是规定好了的(参考该单片机的datasheet);
其次,要给某个端口赋值(1或0),还是给端口组(8位单片机一个组八个脚)赋值,这就是按位操作还是按字节操作的问题。例如:单片机有PA口,PB口,其中PA口有PA0~PA7八个脚,拉高PA口(PA = 0XFF;),拉高PA0脚(PA &=0X01;或者PA0 = 1; )。当然有些单片机是通过读写IO口输入输出寄存器来实现的。
再者,RTX,TDX两个脚应该是通信的脚,与通用IO口为复用的脚,要怎么用,怎么发送数据、接收数据就涉及到通信协议了,不同通信方式,工作方式就不一样了,具体(参考该单片机的datasheet)。

建议先仔细阅读单片机的datasheet和该单片机的编程指南(如果有的话)

希望能解决你的疑问

Ⅲ 51单片机C语言开发与实例的目录

第1章MCS-51单片机与C语言
1.1MCS-51单片机的特点
1.1.1MCS-51单片机简介
1.1.2MCS-51单片机的内部结构
1.1.3MCS-51单片机的存储器组织
1.2汇编语言
1.3C语言
1.4单片机汇编语言与C语言程序设计对照
1.5汇编语言和C语言混合编程
1.5.1在C51中嵌入汇编
1.5.2C程序中调用汇编功能程序
1.5.3汇编程序调用C程序
第2章KeilC51的数据结构
2.1KeilC51
2.2数据类型
2.3存储种类及存储区
2.3.1整型常量
2.3.2字符型常量
2.3.3字符串常量
2.3.4位标量
2.4变量
2.4.1变量的定义
2.4.2存储器类型
2.4.3存储器模式
2.4.4重新定义数据类型
2.5数组
2.6指针
2.7结构
2.8联合
2.9枚举
第3章KeilC51程序设计
3.1预处理
3.2运算符与表达式
3.3控制流语句
3.3.1条件语句
3.3.2while循环
3.3.3do-while循环
3.3.4for循环
3.3.5goto语句
3.3.6switch语句
3.3.7Break语句和continue语句
3.3.8返回语句return
3.4函数
3.4.1定义函数
3.4.2调用函数
3.4.3中断服务函数
3.4.4函数的递归调用与再入函数
第4章KeilC51集成开发环境
4.1KeilC51安装
4.2μVision3集成开发环境
4.3μVision3的栏目和窗口
4.4创建项目
4.5简单的程序调试
4.6含有多个文件的项目
4.7代码优化
4.8技巧和窍门
4.9KeilC编译器常见警告与错误信息的解决方法
第5章用KeilC51开发8051单片机内部资源
5.1用KeilC51开发输入/输出端口
5.1.1输入/输出端口简介
5.1.2输出端口应用实例
5.1.3输入端口实例
5.2用KeilC51开发定时器/计数器
5.2.1定时器/计数器简介
5.2.2控制和状态寄存器
5.2.3定时器/计数器设置实例
5.2.4定时器/计数器2
5.2.5编程实例
5.3中断系统编程
5.3.1中断系统
5.3.2中断系统的控制寄存器
5.3.3中断的响应过程
5.3.4中断实例
5.4用KeilC51开发串行口
5.4.1数据通信的基本概念
5.4.2MCS-51的串行口控制寄存器
5.4.3工作方式
5.4.4数据传输率的确定
5.4.5串行通信实例
第6章单片机的资源扩展
第7章8051单片机的系统设计
第8章8051单片机程序固化方法
第9章单片机的断电保护
第10章单片机与PC机通信
第11章在系统编程和在应用中编程
第12章单片机之间的通信
第13章I2C总线接口技术
第14章用C51开发线切割机床控制器
第15章步进电机驱动
第16章红外器件应用
附录AMCS-51指令表
附录BKeilC51的库函数

Ⅳ 51单片机c语言编程

对端口输出操作,直接适用赋值语句即可。 比如 P1 = 0x03;
对端口读取操作,直接赋值给局部变量即可。
对数码管操作,需要先定义 对应的 码表, Tab[16] = {, }分别对应 0~F 的端口输出值、点亮相应的LED位; 然后直接 操作端口输出对应字符即可,比如P1=Tab[3] 数码管输出显示3

Ⅳ (1小时学会C语言51单片机)C语言入门教程

51作为学习入门,确实是最最基础的了,不过至少它可以让一个新手明白控制是怎么回事,反馈是怎么回事,程序是怎么下载进去运行,又是怎么控制到io输入输出的,如何去访问寄存器,掌握一套在嵌入式领悟最最基本的开发方法和学习思路。这部分如果有兴趣,建议学习时间不要超过两个月。
1.c语言,及部分汇编代码
2.用一个月时间看完做完郭天祥的十天学会51单片机
3.买一块开发板
4.学习能够看懂看会原理图
5.掌握搜集资料,datasheet查找阅读英文手册的能力
6.自己动手动手动手做一个简单的功能
最后,我其实不建议51入门,可以直接stm32,虽然他还是单片机。不过十年前我当初也是51入门的,乐此不疲。至于忽悠你什么协议,内核,我觉得让一个大一嵌入式新手学这些,无疑没有基础就想建高楼,所以踏踏实实从基础开始,大学就是注重基础,学习能力!

Ⅵ at89c51单片机 如何用c语言编程啊

随着单片机硬件性能的提高,编写应用程序更着重于程序本身的效率。

Franklin或KEII.C51交叉编译器是专为51系列单片机设计的一种高效的C语言编译器,用其开发的应用程序易于维护,可移植性好,是目前较流行的51系列单片机的开发工具。

一、C51语言程序设计的基本技巧

首先,C51语言程序设计要尽可能采用结构化的设计方法。可将整个程序按功能分成若干个模块,不同的模块完成不同的功能。对于不同的功能模块,分别指定相应的入口参数和出口参数,而经常使用的一些程序最好编成函数,这样既不会引起整个程序管理的混乱,还可使程序的可读性、移植性增强。

C51语言的主程序结构:

#include

main0{while(1);}

这是最小的C程序,包括头部文件和程序主体。头部文件为引用的外部资源文件,包括硬件信息和外部模块提供的可使用的函数和变量的说明。

语句定义后,就可以在C语言程序中像汇编一样使用这些硬件设备。

在C5l中常用项目来管理,项目一般分为C文件块和头部文件块,常把不同的功能写在不同的C文件中,依靠项目的管理,最后把所有文件连接起来,这样就可以得到烧录的HEX文件或BIN文件。没有在头部文件中列出的文件,可以算是该C文件的内部函数和变量,外部C不能使用。另外,在程序设计过程中要充分利用C51语言的预处理命令

对于一些常用的常数,如TRUE、FAlSE、PI,以及各种特殊功能寄存器,或程序中一些重要的依据外界条件可变的常量,可采用宏定义(#de-fine)或集中起来放在一个头文件中进行定义,再采用文件包含命令(#in-elude)将其加入到程序中,这样当需要修改某个参量时,只需修改相应的包含文件或宏定义,而不必对使用它们的每个程序文件都进行修改,有利于文件的维护和更新。

举例:利用宏定义和条件编译,源程序不作任何修改就可适用于不同时钟频率的单片机系统,并可根据情况的不同取不同的delay值,完成不同的目的。程序如下:

#define flag 1#ifdef flag==l#define fose 6Mdelay=10;#elif flag==0#define fose 8Mdelay=12;#else#define fosc 12Mdelay=20;#endiFMain0{ for(I=O;l

阅读全文

与51单片机c语言教程编写与编译相关的资料

热点内容
分段函数怎么编程 浏览:555
思科加密功能 浏览:213
如何用手机反编译软件 浏览:588
剪映app剪辑教学视频怎么剪声音 浏览:946
linux的文件复制到本地 浏览:194
安卓手机怎么修改企业微信 浏览:710
pdf如何转word文档 浏览:818
使用app充值气费然后怎么操作 浏览:833
名程序员坠楼事件 浏览:592
酷狗音效下载哪个文件夹 浏览:378
编译小主机 浏览:497
暗访网吧程序员视频 浏览:806
最优化问题的下降算法描述 浏览:924
ccs编译器操作系统 浏览:842
服务器里的dn是什么 浏览:46
西安程序员买房 浏览:393
天翼云服务器怎么关闭 浏览:403
为什么代理服务器没有响应新私域 浏览:143
安卓锁屏后如何直接进入屏幕 浏览:178
混凝土加密封固化剂 浏览:755