51单片机 C语言编程

作者&投稿:纵虾 (若有异议请与网页底部的电邮联系)
51单片机编程时汇编和C语言如何结合~

在keil工程栏中右键.c文件 选择Options for File
然后把这2个勾上

就能在C语言中嵌入汇编了。

格式是这样的

或者

//你原来的b2,b2都是死循环,这是不行的,只有主函数才可以死循环。
//你的主函数结构也有问题。
//为你增加了一个按键检测的函数。
//下列程序通过了实验测试。
//b1输出的周期大约0.9s。
//b2输出的周期大约0.6s。

//K为触动开关,reg为红灯,bice为绿灯,b1、b2 各为一个方波,
//按第一次触动开关时红灯亮、b1输出,
//按第二次绿灯亮、为b2输出,
//按第三次都关闭.

#include
#define uint unsigned int
#define uchar unsigned char
uint a;
void b1();
void b2();
sbit t = P1^0;
sbit k = P3^5;
sbit reg = P3^3;
sbit bice = P3^2;

void delay(uchar z)
{
uint x,y;
for(x = z; x > 0; x--) for(y = 110; y > 0; y--);
}

bit key()
{
bit kkk;
kkk = k; //读入按键.
if(kkk == 1) return 0;//没有按下.
delay(5); //延时.
if(k == kkk) return 1;//两次相等.
return 0;
}

void main()
{
while(1) {
P3 = 0xff;
while(!key()); //静等按下第一次.
reg = 0;
bice = 1;
while(!key()) b1(); //没有按下第二次就循环等待.
reg = 1;
bice = 0;
while(!key()) b2(); //没有按下第三次就循环等待.
}
}

void b1()
{
P1 = 0xfe; a = 50000; while(a--);
P1 = 0xff; a = 50000; while(a--);
}
void b2()
{
P1 = 0xfe; a = 30000; while(a--);
P1 = 0xff; a = 30000; while(a--);
}

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

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

希望能解决你的疑问

P1^1在编译预处理的头文件里都给定的,同为初学者。

默认端口已经在编译环境内定义好了,在编译的时候软件会将基于单片机的端口设置头文件链接进来的.
RTX TDX应该是串口吧.你可以查找一下51串口收发的程序

I9010的回答已经OK了


滨海县18082062366: 单片机c语言编程(关于单片机c语言编程的基本详情介绍)
爱梵硫酸: 1、单片机c语言编程是基于C语言的单片机编程.2、单片机的C语言采用C51编译器(简称C51).3、由C51产生的目标代码短,运行速度高,存储空间小,符合C语言的ANSI标准,生成的代码遵循Intel目标文件格式,而且可与A51汇编语言PL/M51语言目标代码混合使用.

滨海县18082062366: 51单片机c语言编程是否用到指令系统 -
爱梵硫酸: 单纯的c语言编程时用不到系统指令的,但是c和汇编的混合编程时用的到指令系统的,然后就是你要对系统的存储有深刻的认识比如块存储,存储结构等之类的,因为c会用到很多内存操作的,这样可以提高代码运行质量

滨海县18082062366: 51单片机用C语言
爱梵硫酸: 如果你不急,我明天晚上可以帮你写一下,给你一点提示,OX02H.THO=(65536-400)\256.TLO=(65536-400)%256,

滨海县18082062366: 51单片机编程练习 请使用C语言完成 -
爱梵硫酸: #include#include #define uchar unsigned char uchar tt=0; void t1isr() interrupt 3 { TH1=(65536-50000)/256; TL1=(65536-50000)%256; tt++; if(tt>20) { tt=0; P1=_crol_(P1,1); } } main() { TMOD=0x10; TH1=(65536-50000)/256; TL1=(65536-50000)%256; TR1=1; ET1=1; EA=1; while(1); }

滨海县18082062366: 51单片机c程序 -
爱梵硫酸: 如果前面程序定义了MONITOR51,则编译后面一句,即在地址0X23开始定义只读数组reserve[3].相反,如果前面程序没有定义MONITOR51,则后面一句不编译.

滨海县18082062366: 单片机C语言怎么编程`
爱梵硫酸: 每一种单片机都有一套自己的C编译器,你可以直接用,也可以挂载到其他的编译环境中 比如 Wave6000 等 51系列的 推荐用keilV8 Microchip系列的推荐用HT-PICC 编译环境用MPLAB 然后编程代码部分你写好之后,编译,此时会生成一些文件,如*.hex ,*.bin …… 然后把.hex 文件 利用烧写器烧写到单片机里面 这样单片机就可以按照编译的程序执行了 单片机的种类不一样,程序代码也略有区别

滨海县18082062366: 51单片机串口通信c语言编程 -
爱梵硫酸: 这只是个模板,参考一下/*----------------------------------------------- 名称:串口通信 网站:www.doflye.net 编写:shifang 日期:2009.5 修改:无 内容:连接好串口或者usb转串口至电脑,下载该程序,打开电源 打开串口调试程序,将波特率设置为...

滨海县18082062366: 51单片机如何学习C语言编程,求视频和书籍推荐,我要学会单片机编程 -
爱梵硫酸: 建议自己买一个小的开发板 最好是最简单的那种只有基本电路只有引脚留出来 然后买个面包板 自己搭点简单的灯泡 传感器的电路用下 视频可以看郭天祥的十天学会单片机或者杜洋工作室(适合刚开始学的同学很基础) 学了一段时间可以回去头看下C语言(找本稍微详细点的就行) 再回来调程序 主要是多看别人的程序 养成好的编程习惯

滨海县18082062366: 单片机怎么用 C语言编程 -
爱梵硫酸: keil是比较好的C编译程序.和一般C语言应该没有区别.你看看我这个例子: #include...

滨海县18082062366: 51单片机编程,用C语言. -
爱梵硫酸: 给你一个矩阵键盘的参考程序 行列扫描:通过高四位全部输出低电平,低四位输出高电平.当接收到的数据,低四位不全为高电平时,说明有按键按下,然后通过接收的数据值,判断是哪一列有按键按下,然后再反过来,高四位输出高电平,低...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网