单片机C语言编程
单片机c语言比起普通C语言增加了一些基本的指令,变量的赋值是16进制,当然单片机c语言只牵涉到普通c语言的基础部分。具体体现在:
1、单片机中C的语法一般都对 ANSI C有些扩展,及一些特殊写法 如C51扩展的 data xdata bit sbit 一类的,还有一些中断程序写法 void int() interrput 1 一类的。
2、C是一门语言,由对应平台的编译器编译成对应平台汇编的程序,各平台的汇编不一样,当然编译器也不一样 DOS上的TC2 TC3 WINDOWS上的VC 8051的C51都有自已的编译器 。具体区别是由编译器决的,只能参考对应的编译手册,即使同种平台不同的编译器对C的扩展也有不同。
3、单片机c语言编程是基于C语言的单片机编程。单片机的C语言采用C51编译器(简称C51)。由C51产生的目标代码短,运行速度高,存储空间小,符合C语言的ANSI标准,生成的代码遵循Intel目标文件格式,而且可与A51汇编语言PL/M51语言目标代码混合使用。
C51本质就是C,是为在单片机上使用C而出来的,如果C不牢固,还是多掌握一点C再学C51,不过新增的知识也不少,而且基本上跟C无关。
4、C只是一种高级语言。它除具有一般高级语言的功能特性外,它可以很好的操作底层的硬件接口。在C语言的基础上,如果你把一些单片机的端口或特殊功能寄存器加于定义,使之方便于在 写语句的时候,直接直观的编写。这样就差不多是单片机C语言。
C语言的特性差不多都可以用于单片机C语言,因为它们的编译机理都是一样的。
扩展资料:
C语言:
C语言是一门通用计算机编程语言,广泛应用于底层开发。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。
尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU)以及超级电脑等作业平台。
C语言是一门面向过程的计算机编程语言,与C++,Java等面向对象的编程语言有所不同。
其编译器主要有Clang、GCC、WIN-TC、SUBLIME、MSVC、Turbo C等。
单片机的C语言:
单片机软件设计使用C语言作为编程开发软件,采用模块化的程序结构,设计了按键模块程序、RFID模块程序、日历时钟模块程序、GPRS模块程序、显示存储模块程序等,并编写系统主程序,将五个程序模块组合在一起,实现单片机控制系统的整体功能。
51单片机支持三种高级语言,即PL/M,C和BASIC。C语言是一种通用的程序设计语言,其代码率高,数据类型及运算符丰富,并具有良好的程序结构,适用于各种应用的程序设计,是目前使用较广的单片机编程语言。
单片机的C语言采用C51编译器(简称C51)。有C51产生的目标代码短,运行速度高,所需存储空间小,符合C语言的ANSI标准,生成的代码遵循Intel目标文件格式,而且可与A51汇编语言或PL/M51语言目标代码混合使用
参考资料:
C语言-百度百科
单片机C语言-百度百科
单片机的外部结构:
DIP40双列直插;
P0,P1,P2,P3四个8位准双向I/O引脚;(作为I/O输入时,要先输出高电平)
电源VCC(PIN40)和地线GND(PIN20);
高电平复位RESET(PIN9);(10uF电容接VCC与RESET,即可实现上电复位)
内置振荡电路,外部只要接晶体至X1(PIN18)和X0(PIN19);(频率为主频的12倍)
程序配置EA(PIN31)接高电平VCC;(运行单片机内部ROM中的程序)
P3支持第二功能:RXD、TXD、INT0、INT1、T0、T1
单片机内部I/O部件:(所为学习单片机,实际上就是编程控制以下I/O部件,完成指定任务)
四个8位通用I/O端口,对应引脚P0、P1、P2和P3;
两个16位定时计数器;(TMOD,TCON,TL0,TH0,TL1,TH1)
一个串行通信接口;(SCON,SBUF)
一个中断控制器;(IE,IP)
针对AT89C52单片机,头文件AT89x52.h给出了SFR特殊功能寄存器所有端口的定义。教科书的160页给出了针对MCS51系列单片机的C语言扩展变量类型。
C语言编程基础:
十六进制表示字节0x5a:二进制为01011010B;0x6E为01101110。
如果将一个16位二进数赋给一个8位的字节变量,则自动截断为低8位,而丢掉高8位。
++var表示对变量var先增一;var—表示对变量后减一。
x |= 0x0f;表示为 x = x | 0x0f;
TMOD = ( TMOD & 0xf0 ) | 0x05;表示给变量TMOD的低四位赋值0x5,而不改变TMOD的高四位。
While( 1 ); 表示无限执行该语句,即死循环。语句后的分号表示空循环体,也就是{;}
在某引脚输出高电平的编程方法:(比如P1.3(PIN4)引脚)
#include //该头文档中有单片机内部资源的符号化定义,其中包含P1.3
void main( void ) //void 表示没有输入参数,也没有函数返值,这入单片机运行的复位入口
{
P1_3 = 1; //给P1_3赋值1,引脚P1.3就能输出高电平VCC
While( 1 ); //死循环,相当 LOOP: goto LOOP;
}
注意:P0的每个引脚要输出高电平时,必须外接上拉电阻(如4K7)至VCC电源。
在某引脚输出低电平的编程方法:(比如P2.7引脚)
#include //该头文档中有单片机内部资源的符号化定义,其中包含P2.7
void main( void ) //void 表示没有输入参数,也没有函数返值,这入单片机运行的复位入口。
{
P2_7 = 0; //给P2_7赋值0,引脚P2.7就能输出低电平GND
While( 1 ); //死循环,相当 LOOP: goto LOOP;
}
在某引脚输出方波编程方法:(比如P3.1引脚)
#include //该头文档中有单片机内部资源的符号化定义,其中包含P3.1
void main( void ) //void 表示没有输入参数,也没有函数返值,这入单片机运行的复位入口
{
While( 1 ) //非零表示真,如果为真则执行下面循环体的语句
{
P3_1 = 1; //给P3_1赋值1,引脚P3.1就能输出高电平VCC
P3_1 = 0; //给P3_1赋值0,引脚P3.1就能输出低电平GND
} //由于一直为真,所以不断输出高、低、高、低……,从而形成方波
}
将某引脚的输入电平取反后,从另一个引脚输出:( 比如 P0.4 = NOT( P1.1) )
#include //该头文档中有单片机内部资源的符号化定义,其中包含P0.4和P1.1
void main( void ) //void 表示没有输入参数,也没有函数返值,这入单片机运行的复位入口
{
P1_1 = 1; //初始化。P1.1作为输入,必须输出高电平
While( 1 ) //非零表示真,如果为真则执行下面循环体的语句
{
if( P1_1 == 1 ) //读取P1.1,就是认为P1.1为输入,如果P1.1输入高电平VCC
{ P0_4 = 0; } //给P0_4赋值0,引脚P0.4就能输出低电平GND
else //否则P1.1输入为低电平GND
//{ P0_4 = 0; } //给P0_4赋值0,引脚P0.4就能输出低电平GND
{ P0_4 = 1; } //给P0_4赋值1,引脚P0.4就能输出高电平VCC
} //由于一直为真,所以不断根据P1.1的输入情况,改变P0.4的输出电平
}
将某端口8个引脚输入电平,低四位取反后,从另一个端口8个引脚输出:( 比如 P2 = NOT( P3 ) )
#include //该头文档中有单片机内部资源的符号化定义,其中包含P2和P3
void main( void ) //void 表示没有输入参数,也没有函数返值,这入单片机运行的复位入口
{
P3 = 0xff; //初始化。P3作为输入,必须输出高电平,同时给P3口的8个引脚输出高电平
While( 1 ) //非零表示真,如果为真则执行下面循环体的语句
{ //取反的方法是异或1,而不取反的方法则是异或0
P2 = P3^0x0f //读取P3,就是认为P3为输入,低四位异或者1,即取反,然后输出
} //由于一直为真,所以不断将P3取反输出到P2
}
注意:一个字节的8位D7、D6至D0,分别输出到P3.7、P3.6至P3.0,比如P3=0x0f,则P3.7、P3.6、P3.5、P3.4四个引脚都输出低电平,而P3.3、P3.2、P3.1、P3.0四个引脚都输出高电平。同样,输入一个端口P2,即是将P2.7、P2.6至P2.0,读入到一个字节的8位D7、D6至D0。
设置10ms定时器,在此时间内判断x、y值,然后判断x*x是否大于y即可。
另外没有硬件电路图是没法帮你编程的,比如你的脉冲宽度?脉冲接入管脚,电机控制管脚,等待。
#include<reg51.h>
#include <intrins.h>
int motor_a,motor_dir,i,j,n;
/************************** end 电机 声明 *******************************/
/************************** 电机 语句 *******************************/
void motor_init(void)
{
IE=0x82;
TMOD=0x01;
TH0=0x4c;
TL0=0x00;
TR0=1;
}
void motor_inter() interrupt 1
{
i++;
if (i==n)
{
if(motor_dir)
{
motor_a = _crol_(motor_a,1);
//循环左移1位,逆时针旋转
P1 = (motor_a&0x1e)|(P1&0xe1);
}
else
{
motor_a = _cror_(motor_a,1);
//循环右移1位,顺时针旋转
P1 = (motor_a&0x1e)|(P1&0xe1);
}
i=0;
j--;
}
if(j==0)TR0=0;
TH0=0xe0;
TL0=0x00;
}
motor(int a,int b,int c)
{
motor_dir=a;
n=b;
j=c/1.8;
motor_a = 0x11;
i=0;
motor_init();
}
main()
{
motor(1,1,720);
while(1)
{
PCON=PCON|0x01;
}
}
这是一个简单的电机程序,你可以参考参考。。。
无能为力,俺
怎样用2个按键让51弹片机P1 P2口输出高电平和低电平,用C语言怎样编?
P1,P2口都有8条线哦,假定按键1在 P10口 按键2在 P11口 两个输出口分别为 P20 P21 我写个主循环的一部分。while(1){ if(P10==0) P20=0;else P20=1;if(P11==0) P21=0;else P21=1;}
单片机编程语言一般有哪几种
2.单片机的C语言 单片机的C语言是一种编译型程序设计语言,它兼顾了多种高级语言的特点,并具备汇编语言的功能。C语言具有功能丰富的库函数,运算谏磨快,编译效率高,有良好的可移植性,而且可以实现直接对系统硬件的控制。此外,C语言程序具有完整的程序模块结构,从而为软件开发中栗用模块化程序设计方...
求c语言,电影院售票管理系统的设计与实现的代码
include <stdio.h>#include <stdlib.h>struct cell{char* name;int time;int seat;int saled;} a,b,c,d;int sel=0;void title();void saleproc();int saleThread(struct cell* ce,int dd);void tiupiaoproc();int tiupiaoThread(struct cell* ce);void count();int init(struct cell*...
学习单片机是用汇编语言好呢?还是用c语言好呢?
C相对容易读写。对于新手,相对来说,C容易上手和理解,在算法上也有自己的函数,而汇编必须自己编写各种函数。所以各有优劣,有时候优点也是缺点。编程主要还是思路,也就是流程,语言只是个工具,用熟了都好用。
C语言与单片机C语言的区别 急求
1、单片机中C的语法一般都对 ANSI C有些扩展,及一些特殊写法 如C51扩展的 data xdata bit sbit 一类的,还有一些中断程序写法 void int() interrput 1 一类的。2、C是一门语言,由对应平台的编译器编译成对应平台汇编的程序,各平台的汇编不一样,当然编译器也不一样 DOS上的TC2 TC3 WINDOWS上...
单片机与PLC的区别
区别:1、PLC是建立在单片机之上的产品,单片机是一种可编程的集成芯片。2、plc就是由单片机加上外围电路做成的 ,单片机开发式底层开发,程序编写用汇编或者c语言比如延时用单片机做程序,要从晶振来计算,而plc就不一样,厂家都提供一个编程软件,可以用梯形图编程。3、价格不同。单片机开发成本低...
单片机是什么?单片机和C语言有什么关系?请解答
单片机是讲构成计算机基本部件集成在一块芯片上(mcu).单片机拿到手里是不能够工作的,必须往里面烧进指定功能的程序。而这种指定的程序可以通过c语言来表达出来。c语言是一种机器语言,可以让单片机听你的话,呵呵,当然这种机器语言不止只有c语言还有vb,汇编等等 ...
单片机c语言编程?
单片机入门编程主要是学习C语言,其次是电路和编程语言。单片机C语言程序设计学习中必读的模拟电、数字电、电路三本书,为接下来的学习做铺垫。看书的目的是因为网上教程太多,容易出现偏差。其实只要能懂电路原理,就能开发单片机软件。简介单片机又称单片微控制器,不是执行某种逻辑功能的芯片,而是将一个...
在pic中如何用C语言编写程序?
如果你用的是PIC10、PIC12、PIC16等这些系列的单片机,就要去Microchip的网站下HT-PICC for PIC12\/16的C编译器。如果是PIC18的话,就要下MCC18,如果是PIC24和dsPIC系列的,就要用C30编译器。还有,所用的PIC单片机不同系列,C程序编写方式也不同。你光要个程序代码,谁也拿不出你要的来! 已赞过 已踩过< ...
用C语言编写一个单片机控制LED灯闪烁变化的编程 急用!!!
C语言实现LED灯闪烁控制配套51单片机开发板。include \/\/包含单片机寄存器的头文件 \/***函数功能:延时一段时间 \/ void delay(void) \/\/两个void意思分别为无需返回值,没有参数传递。{ unsigned int i; \/\/定义无符号整数,最大取值范围65535。for(i=0;i<20000;i++) \/\/做20000次空...
晨翁舒伊: 1、单片机c语言编程是基于C语言的单片机编程.2、单片机的C语言采用C51编译器(简称C51).3、由C51产生的目标代码短,运行速度高,存储空间小,符合C语言的ANSI标准,生成的代码遵循Intel目标文件格式,而且可与A51汇编语言PL/M51语言目标代码混合使用.
北海市18777677171: 单片机C语言怎么编程`?
晨翁舒伊: 每一种单片机都有一套自己的C编译器,你可以直接用,也可以挂载到其他的编译环境中 比如 Wave6000 等 51系列的 推荐用keilV8 Microchip系列的推荐用HT-PICC 编译环境用MPLAB 然后编程代码部分你写好之后,编译,此时会生成一些文件,如*.hex ,*.bin …… 然后把.hex 文件 利用烧写器烧写到单片机里面 这样单片机就可以按照编译的程序执行了 单片机的种类不一样,程序代码也略有区别
北海市18777677171: 用C语言编写单片机程序 - ?
晨翁舒伊: #include sbit csb_SAT= P1^0; //定义超声波发生脚 void delay(void) //延时25微秒,12T芯片用12M误差 0us { unsigned char a; for(a=11;a>0;a--); } void csb_fs(int dat) {while(dat--){csb_SAT=1;delay();csb_SAT=0;delay();}} //发射 void main() { ...
北海市18777677171: 单片机怎么用 C语言编程 - ?
晨翁舒伊: keil是比较好的C编译程序.和一般C语言应该没有区别.你看看我这个例子: #include...
北海市18777677171: 单片机C语言编程?
晨翁舒伊:因为C语言中的变量名称只能是字母、数字、下划线,而ACC^0和P1^0中的^不合乎规则,所以无法编译.可以在主函数前用 sbit ACC0=ACC^0; sbit P1_0=P1^0; 进行定义, 然后在函数中写入ACC0=P1_0; 就可以正常编译了.
北海市18777677171: 单片机的C语言编程 - ?
晨翁舒伊: #include <AT89X51.h> //包含头文件 unsigned char code dispbit[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //定义数码管位选码 unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40};//定义数码管段选码...
北海市18777677171: 现代单片机用C语言怎样编程 - ?
晨翁舒伊: 如果是用汇编语言编写程序,使用那些RAM单元,是由编程者自己安排的;那么占用的RAM空间,编程者就可以很容易的计算出来.如果是用C语言编写程序,使用那些RAM单元,编程者就不知道了;不同的编译软件、不同的编译条件,很复杂.必须由编译软件给出报告才能知道.
北海市18777677171: 什么是c语言单片机编程??
晨翁舒伊: 1.我们常说编程就是编写软件在操作系统平台上运行2.单片机就是一种类似于控制的芯片 你写好了程序写入单片机然后进行运行说白了 一个就是 软件编程 一个硬件编程
北海市18777677171: 单片机c语言编程 - ?
晨翁舒伊: 看你的单片机型号了,51单片机要求读之前写1,但如果该端口一直就作为输入的话,只要你没有特意给它赋值0,它默认就是1,可直接读. AVR单片机就要配置有关寄存器