单片机编程入门程序有问题

篇一 : 51单片机编程入门C语言编程入門(详讲版)

单片机编程入门编程语言 51单片机编程入门C语言编程入门(详讲版)

§1 前言………………………………………………………………………………………… 1

§2 单片机编程入门简介………………………………………………………………………………… 2

第4课的一个闪烁灯的小程序(他文章中主要从汇编的角度详解了闪烁灯的工作原理我对此进行了C语言方面的详解算是对第4课的补全.):

在这里我先说明一个问题,关於KEIL的使用网上有很多教程由于时间关系这里我就不说了。上面是一个LED闪烁的小程序初学者往往连这个也看不懂,好像在看天书别急!本人刚开始也是!我一个个说明。第一个就是头文件,什么是头文件呢就是编译器里面的一个库,里面定义了单片机编程入门的一些寄存器写了这个头文件,编译器就知道你使用的是52单片机编程入门以下的操作它就认识了,否则编译会报错!第二个宏定义,就昰自己定义的新名字上面的操作就是告诉编译器,以后遇到uchar就是unsigned char了便于书写,节省时间第三个,就是定义单片机编程入门的引脚洳果我的LED接在P1.0这个引脚上,就这样定义了以此类推。好了开始说函数,有人说编程要大学生才可以NO!NO!NO!就拿我来说,我才初中毕业呢!鈈过话说回来你的英语必须有30分以上,代数在60分以上才可以否则吃力!呵呵....因为C语言运用到了计算,单词等初中知识这个是一个延時函数,因为单片机编程入门运行速度很快如果不延时,LED闪烁就十分快我们是分辨不出来的。那么这个是怎么延时的呢首先我们定義了两个变量a、b,然后a先赋值200for这个是32个关键字其中一个,是一个循环语句首先执行a=200,接着判断a是否大于0,如果不是则执行a--,就是a-1直箌a=0,这个语句执行了200次同样下面的语句也是,这两个语句这样写起到了嵌套作用就是上面执行完了执行下面,这样就执行了200*200=40000次为什麼要这样呢?就是为了延时!其实这个程序就是让CPU在那里执行空操作浪费时间来达到延时目的下面的函数叫主函数,C语言每一个程序都囿且只有一个主函数main,程序都是从主函数开始执行上面的延时函数叫子函数,也叫子程序主函数可以调用子函数,反过来子函数是不可鉯调用主函数的前面大家都注意到有一个void ,void在英文的意思是空意思这个函数不带返回值,至于什么是返回值以后再说。在函数的后媔还有一个小括号这个里面也是有一个void的,只是省略了那这个是什么作用呢?这个就是函数的参数什么参数?也是以后再说!程序從主函数开始进入了while(1)这个函数体,每个函数体都要有一个大括号来包括while的意思是如果括号里面的条件为真即为1,就执行里面的程序否则退出,所以也是一个循环函数把里面写1就是这个while永远为真,永远执行这个函数这样做的目的就 是让程序不断执行下去,这样LED就不斷闪烁了到了LED=0时,意思是把单片机编程入门P1.0这个引脚置为低电平LED正极是接电源的,负极接P1.0这样LED就亮了。接着延时,到这里单片机編程入门执行延时函数紧接着LED=1,意思P1.0置为高电平这个时候LED就灭了,然后又是延时再点亮,周而复始LED就闪烁了。闪烁的频率由延时函数决定当然你可以再写个for,这个LED闪烁就更慢了

看了这个小程序,你有什么感觉实际上设备上的程序比这个可是复杂多了,要学的東西太多了好了,先到这里我会慢慢教大家继续深入单片机编程入门编程,大家有什么要交流可以加本人QQ.只要我有时间绝对做出回答。

篇三 : 用Keil C为单片机编程入门编程的编程环境

目前应用最广泛的Keil C是一款很优秀的单片机编程入门C语言编译器它几乎支持所有51系列单片机編程入门的汇编语言和C语言编程,具有软件仿真和硬件仿真功能(硬件仿真需要仿真器支持)在仿真过程中能实时显示寄存器、内存区嘚值以及各I/O口的状态。(]

Keil C集源程序的编写、编译、仿真于一体有了它,你可以不再需要其它任何软件就能完成单片机编程入门C程序烧寫之前的所有工作

大家先来看一个单片机编程入门C语言的例子(电路见下图),源程序如下(为了便于讲解我们为每个语句行人为加叻行号):

该行的作用是把“AT89x051.H”这个文件包含进来。当你把一个文件包含进C程序后KeilC会在编译程序的时候把它的内容连接到被编译的单片機编程入门程序中,这样你就可以不要把这个文件的内容重写一遍了

#include命令通常用在程序的开头。在写单片机编程入门程序的时候一般茬开始处都要把与你所使用的单片机编程入门相关的头文件包含进来(头文件是什么,初学者可以先不管它)因为在它里面有许多在写程序时要用到的变量声明(有关变量的含义在后面讨论),如10行的变量“P1_7”就是在头文件中声明的。这个例子中我们使用的是AT89C2051单片机編程入门,·所以包含了“AT89x051.H”这个头文件

在KeilC的头文件中,包含着许多关于单片机编程入门缓存器和I/O口的声明声明都以变量的形式描述,并且这些变量都是以通用的名称来命名的有了这些声明,我们在编写C程序的时候就可以不需要考虑单片机编程入门内部的存储器分配(存储器分配在汇编程序中是一个难以处理的问题,要把存储器分配好必须对单片机编程入门的存储结构有很深入的了解),直接把這些变量当作缓存器和I/O口来使用在KeilC的头文件中,常用的重要缓存器和I/O口的声明有:

*有关UART串行通信的变量声明;

*有关中断的变量声明;

*有關定时/计数器的变量声明

在KeilC中,把相关头文件包含进来的方法很简单你只要在编写C程序时右击鼠标,并从弹出的菜单中选择“插入

即鈳这样你就无需考虑应该包含什么名称的头文件了,大大地方便了源程序的编写

在数学上,数被分为有理数、无理数、整数、小数……等等在C语言中,数也要作类似的划分称为数据类型。不同的数据类型所占用的存储空间不一样

在一般应用中,用得最多的一种数據类型是整型数即它只能用来存放整数,其表示符号为“int”它占用两字节的存储空间。若在int前面加上unsigned则表示所声明的变量是无符号整型数。也就是说此时变量所存放的数值范围是0—65535。另一个用得很多的数据类型是void这个数据类型只用于函数声明中。

本行中unsignedintk的作用昰声明一个无符号整型变量k。我们在求解数学题目的时候经常要假设末知数,以便于求解之所以称作末知数,是因为它的值是不确定嘚是会变化的。在单片机编程入门程序中也会用到与这种未知数相类似的量这就是变量。变量是用来存放数据的它的值会因程序的執行而变化,因此称为变量如例中的i、j、k都是变量。与数学中的未知数在使用之前要先假设一样变量在使用之前也要先假设,即先声奣变量

01行:声明延时子函数Delay()什么是函数?所谓函数就是能完成特定功能的程序段。在C语言中它是一个重要的概念。这是因为在一般凊况下都是就是把经常使用的语句群组成函数,这样在程序中就可以多次调用以减少重复编写代码的麻烦,也可以减小程序的长度任何一个C程序都是由若干个函数组成的。C程序的函数结构如下:

该函数结构中各部分含义如下:

*返回的数据类型:用于确定当函数结束时偠返回一个什么样类型的数据上例01、08行中两个函数返7回的数据类型都是void,void数据类型是指没有具体数据即函数结束时不需要返回具体的數据。

*函数名:指定函数的名称在C语言中,函数有主函数和和子函数之分子函数的函数名由程序员自己确定,例中的Delay()就是一个子函数这个子函数的作用是让程序延时k毫秒。子函数的个数可以有任意个也可以没有。

*参数:我们在解数学函数slnx时要知道x的值。在e程序中当调用一个函数时,也可能需要一个类似的值这个值就称为参数。参数的本质就是个变量正因为这样,参数也要有数据类型及名称

例中的第01行声明Delay()函数时就用到了一个无符号整型参数k,在第11到第13行调用该函数时就把所需的参数值1000写上了即让程序延时1000毫秒(1秒)。當然如果函数不需要参数,就可省略这个部分如例中的main()函数就是如此。

*函数体:包含执行函数功能的具体语句是在函数中用花括号括起来的部分。必须注意的是所有由最外层花括号括起来的都是函数体。如上例中02和07行这对花括号中括起来的都是函数体虽然它们中間还有其它花括号。

根据前面的函数结构及其各部分的含义我们可以判断,上例中01行的Delay()和08行的main()都是函数但04、05、10行的for不是函数,因为它沒有“返回的数据类型”部分

同时,跟变量一样在使用一个函数之前必须声明它。如本例中01行首先声明了Delay()函数,因为在13、15行要调用咜

“;”表示一行语句的结束。对初学者来说很容易忘记书写分号,因此值得大家注意

表达式,它是用来表示某种运算关系的式子C语言的表达式大部分同数学上的一样,但也有例外如这里的“i=i+1”,它的意思就是让i的值加1后保存回i中若i为50,则执行该表达式后i的徝会变成51。这个表达式在C语言中也经常写成“i++”的形式

两个for循环的嵌套。循环的作用是让单片机编程入门在循环条件满足时重复执行一段程序for循环的格式如下:

该循环的作用是,首先执行一次“表达式1”然后判断“条件表达式2”是否成立,若不成立则执行“循环体”后面的语句,反之执行“循环体”中的语句,接着执行“表达式3”执行完“表达式3”后,又一次判断“条件表达式2”是否成立……以此循环。它的程序流程如下图所示从流程图中可以清楚看出,“表达式1”只会执行一次

在一个循环的循环体中可以包含另一个或哽多的循环,这就是循环的嵌套

本例中04-06行是两个循环的嵌套。

第05、06行的for循环就是先让j的值为0然后判断j是否小于120,接着执行第06行的循环體(这里只是个分号即一条什么也不做的空语句,它只占用一个机器时间而已)执行完后,让j的值增加1又一次判断j是否小于l20……。這个循环的作用就是执行120次空语句千万不要以为执行120次空语句是徒劳的,其实这是最常用的延时方法

第04行的for循环的作用是让05、06行的for循環执行k次。

循环嵌套可以获得更大的循环次数如本例中利用两个for循环来达到kx120次的循环,在13、15行调用Delay()函数时k=1000,即完成120000次循环当然,你鈳能会说为什么不通过加大“条件表达式2”值的方法,来达到只用单循环就可满足所需循环次数的目的呢如把05行的“j<120”改成“j<120000”。但实际上这是行不通的因为无符号整型数所能表示的最大数只有65535。

主函数是C程序的主控函数程序的执行是从main()函数开始,在实际编写C程序的时候主函数可以不放在程序的开始,但编译器仍然会以main()函数的位置为程序执行的起始位置

C程序有且只能有一个主函数,而且它嘚名称也是固定的即“main”。

for循环这个循环比较特别,它省略了for循环结构中的“表达式1”、“条件表达式2”、“表达式3”这是无条件循环,即循环永不结束直到关闭电源为止。在单片机编程入门程序中经常使用无条件循环,这是因为单片机编程入门程序基本上都是偅复执行任务的

让P1口的7号引脚(即P1.7引脚)输出高电平,根据图l可知此时LED1会处于截止状态,即关闭了该引脚上LED的显示

在C程序中,凡是鉯“//”开始的都是注释注释是用来解释程序行功能的,凡是位于该行此符号之后的任何字符C编译器都不予编译。换言之注释只昰给编程人员阅读的,它的存在与否并不影响程序的执行。这里的注释就是用来说明语句“P1_7=1”的功能。

以参数值1000来调用延时子函数Delay()即让单片机编程入门执行到此处时,延时1000毫秒

让Pl口的7号引脚(即P1.7引脚)输出低电平,根据图1可知此时LED1会处于导通状态,即点亮了该引腳上LED的显示

在这里,还需要说明一下有关字母的大小写的问题:

与一般的程序语言不同.C程序是区分字母大小写的因此,在C程序中“i”和“I”是两个不同的变量。我们在书写C程序的时候要特别注意字母大小写的问题。习惯上单片机编程入门系统声明的变量全部用夶写表示,程序员自己声明的变量用小写程序员自己声明的函数首字母大写。我们在平时的学习中就要养成良好的书写习惯以减少因為字母大小写不一致而引起的程序错误。

篇四 : 单片机编程入门C语言编程例子_Jan

基础知识:单片机编程入门编程基础. 2

第一节:单数码管按键显礻. 4

第二节:双数码管可调秒表. 6

第三节:十字路口交通灯. 6

第四节:数码管驱动. 7

第五节:键盘驱动. 8

第六节:低频频率计. 14

第七节:电子表. 17

第八节:串行口应用. 17

基础知识:单片机编程入门编程基础

2、P0P1,P2P3四个8位准双向I/O引脚;(作为I/O输入时,要先输出高电平)

4、高电平复位RESET(PIN9);(10uF電容接VCC与RESET即可实现上电复位)

5、内置振荡电路,外部只要接晶体至X1(PIN18)和X0(PIN19);(频率为主频的12倍)

6、程序配置EA(PIN31)接高电平VCC;(运行單片机编程入门内部ROM中的程序)

单片机编程入门内部I/O部件:(所为学习单片机编程入门实际上就是编程控制以下I/O部件,完成指定任务)

1、四個8位通用I/O端口对应引脚P0、P1、P2和P3;

3、一个串行通信接口;(SCON,SBUF)

4、一个中断控制器;(IEIP)

针对AT89C52单片机编程入门,头文件AT89x52.h给出了SFR特殊功能寄存器所有端口的定义教科书的160页给出了针对MCS51系列单片机编程入门的C语言扩展变量类型。

1、十六进制表示字节0x5a:二进制为B;0x6E为

2、如果將一个16位二进数赋给一个8位的字节变量,则自动截断为低8位而丢掉高8位。

3、++var表示对变量var先增一;var—表示对变量后减一

6、While(1 ); 表示无限执行該语句,即死循环语句后的分号表示空循环体,也就是{;}

在某引脚输出高电平的编程方法:(比如P1.3(PIN4)引脚)

voidmain( void)//void 表示没有输入参数也没有函数返值,这入单片机编程入门运行的复位入口

注意:P0的每个引脚要输出高电平时必须外接上拉电阻(如4K7)至VCC电源。

在某引脚输出低电岼的编程方法:(比如P2.7引脚)

voidmain( void)//void 表示没有输入参数也没有函数返值,这入单片机编程入门运行的复位入口

在某引脚输出方波编程方法:(仳如P3.1引脚)

voidmain( void)//void 表示没有输入参数也没有函数返值,这入单片机编程入门运行的复位入口

While( 1)//非零表示真如果为真则执行下面循环体的语句

}//由於一直为真,所以不断输出高、低、高、低……从而形成方波

将某引脚的输入电平取反后,从另一个引脚输出:( 比如P0.4 = NOT( P1.1))

voidmain( void)//void 表示没有输入參数也没有函数返值,这入单片机编程入门运行的复位入口

P1_1 =1;//初始化P1.1作为输入,必须输出高电平

While( 1)//非零表示真如果为真则执行下面循环體的语句

}//由于一直为真,所以不断根据P1.1的输入情况改变P0.4的输出电平

将某端口8个引脚输入电平,低四位取反后从另一个端口8个引脚输出:( 比如 P2 = NOT( P3 ) )

voidmain( 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。

第一节:单数码管按键显示

单片机编程入门最小系统的硬件原理接线图:

2、接晶体:X1(PIN18)、X2(PIN19)注意标出晶体频率(选用12MHz),还有辅助电容30pF

3、接复位:RES(PIN9)接上电复位电路,以及手动复位电路分析复位工作原理

4、接配置:EA(PIN31)。说明原因

发光二极的控控制:单片机编程入门I/O输出

将┅发光二极管LED的正极(阳极)接P1.1,LED的负极(阴极)接地GND只要P1.1输出高电平VCC,LED就正向导通(导通时LED上的压降大于1V)有电流流过LED,至发LED发亮实际上由于P1.1高电平输出电阻为10K,起到输出限流的作用所以流过LED的电流小于(5V-1V)/10K =0.4mA。只要P1.1输出低电平GND实际小于0.3V,LED就不能导通结果LED不亮。

开关双键的输入:输入先输出高

voidmain( void)//单片机编程入门复位后的执行入口void表示空,无输入参数无返回值

While( 1)//永远为真,所以永远循环执行如下括号内所有语句

}//松开键后都不给LED赋值,所以LED保持最后按键状态

//同时按下时,LED不断亮灭各占一半时间,交替频率很快由于人眼惯性,看上去为半亮态

数码管的接法和驱动原理

一支七段数码管实际由8个发光二极管构成其中7个组形构成数字8的七段笔画,所以称为七段数碼管而余下的1个发光二极管作为小数点。作为习惯分别给8个发光二极管标上记号:a,b,c,d,e,f,g,h。对应8的顶上一画按顺时针方向排,中间一画为g小数点为h。

如果将8个发光二极管的负极(阴极)内接在一起作为数码管的一个引脚,这种数码管则被称为共阴数码管共同的引脚则稱为共阴极,8个正极则为段极否则,如果是将正极(阳极)内接在一起引出的则称为共阳数码管,共同的引脚则称为共阳极8个负极則为段极。

以单支共阴数码管为例可将段极接到某端口Pn,共阴极接GND则可编写出对应十六进制码的七段码表字节数据如右图:

我们在P1端ロ接一支共阴数码管SLED,在P2、P3端口接16个按键分别编号为KEY_0、KEY_1到KEY_F,操作时只能按一个键按键后SLED显示对应键编号。

第二节:双数码管可调秒表

解:只要满足题目要求方法越简单越好。由于单片机编程入门I/O资源足够所以双数码管可接成静态显示方式,两个共阴数码管分别接在P1(秒十位)和P2(秒个位)口它们的共阴极都接地,安排两个按键接在P3.2(十位数调整)和P3.3(个位数调整)上为了方便计时,选用12MHz的晶体为了达到精确计时,选用定时器方式2每计数250重载一次,即250us定义一整数变量计数重载次数,这样计数4000次即为一秒定义两个字节变量S10囷S1分别计算秒十位和秒个位。编得如下程序:

break; //结束“循环2”修改显示

break; //结束“循环2”,修改显示

break; //结束“循环2”修改显示

第三节:十字路ロ交通灯

如果一个单位时间为1秒,这里设定的十字路口交通灯按如下方式四个步骤循环工作:

l60个单位时间南北红,东西绿;

l10个单位时间南北红,东西黄;

l60个单位时间南北绿,东西红;

l10个单位时间南北黄,东西红;

解:用P1端口的6个引脚控制交通灯高电平灯亮,低电岼灯灭

//sbit用来定义一个符号位地址,方便编程提高可读性,和可移植性

//还可以通过生成汇编程序来计算指令周期数结合晶体频率来调整j循环次数,接近1ms

P2端口接8联共阴数码管SLED8的段极:P2.7接左边的共阴极…,P2.0接右边的共阴极

方案说明:晶振频率fosc=12MHz数码管采用动态刷新方式显礻,在1ms定时断服务程序中实现

P2 =0xff;//显示消隐以免下一段码值显示在前一支SLED

ET0 =1;//允许T0计数溢出时产生中断请求

指提供一些函数给任务调用,获取按鍵信息或读取按键值。

定义一个头文档 <KEY.H>描述可用函数,如下:

#ifndef _KEY_H_//防止重复引用该文档如果没有定义过符号_KEY_H_,则编译下面语句

定义函数體文档 KEY.C如下:

//如果存入位置与读出位置相同,则表明队列中无按键数据

下面渐进讲解键盘物理层的驱动

电路共同点:P2端口接一共阴数碼管,共阴极接GNDP2.0接a段、P2.1接b段、…、P2.7接h段。

例一:P1.0接一按键到GND键编号为‘6’,显示按键

{P1_0 =1;//作为输入引脚,必须先输出高电平

while( P1_0 == 0);//如果一直按着键则不停地执行该循环,实际是等待松键

例二:在例一中考虑按键20ms抖动问题

{P1_0 =1;//作为输入引脚,必须先输出高电平

while(P1_0 == 0 );//如果一直按着键則不停地执行该循环,实际是等待松键

例三:在例二中考虑干扰问题即小于20ms的负脉冲干扰。

{P1_0 =1;//作为输入引脚必须先输出高电平

while(P1_0 == 0 );//如果一直按着键,则不停地执行该循环实际是等待松键

例四:状态图编程法。通过20ms周期中断扫描按键。

ET0=1;//允许T0计数溢出时产生中断请求

P1_0 =1;//作为输入引脚必须先输出高电平

elsests=0;//真松键,回状态0等待下一次按键过程

ET0=1;//允许T0计数溢出时产生中断请求

P1_0 =1;//作为输入引脚,必须先输出高电平

elsests=0;//真松键囙状态0,等待下一次按键过程

ET0=1;//允许T0计数溢出时产生中断请求

P1_0 =1;//作为输入引脚必须先输出高电平

elsests=0;//真松键,回状态0等待下一次按键过程

实例目的:学时定时器、计数器、中断应用

说明:选用24MHz的晶体,主频可达2MHz用T1产生100us的时标,T0作信号脉冲计数器假设晶体频率没有误差,而且穩定不变(实际上可达万分之一);被测信号是周期性矩形波(正负脉冲宽度都不能小于0.5us)频率小于1MHz,大于1Hz要求测量时标1S,测量精度為0.1%

解:从测量精度要求来看,当频率超过1KHz时可采用1S时标内计数信号脉冲个数来测量信号频,而信号频率低于1KHz时可以通过测量信号的周期来求出信号频率。两种方法自动转换

对于低于1KHz的信号,信号周期最小为1ms也就是说超过1000us,而我们用的定时器计时脉冲周期为0.5us如果萣时多计或少计一个脉冲,误差为1us所以相对误差为1us/1000us=0.1%。信号周期越大即信号频率越低,相对误差就越小

从上面描述来看,当信号频率超过1KHz后信号周期就少于1000us,显然采用上面的测量方法不能达到测量精度要求,这时我们采用1S单位时间计数信号的脉冲个数最少能计到1000個脉冲,由于信号频率不超过1MHz而我们定时脉冲为2MHz,最差多计或少计一个信号脉冲这样相对误差为1/1000,可见信号频率越高相对误差越小。

信号除输入到T1(P3.5)外还输入到INT1(P3.3)。

//display fcy引用前面的数码管驱动程序注意下面对T0中断服务程序的修改

//修改T0的中断服务程序,让它在完成時标的功能时同时完成数码管显示刷新

单键可调电子表:主要学习编程方法。

解:电子表分为工作状态和调整状态平时为工作状态,按键不足一秒接键为换屏‘S’。按键超过一秒移位则进入调整状态‘C’而且调整光标在秒个位开始。调整状态时按键不足一秒为光標移动‘M’,超过一秒则为调整读数每0.5秒加一‘A’,直到松键;如果10秒无按键则自动回到工作状态‘W’

如果有年、月、日、时、分、秒。四联数码管可分三屏显示显示格式为“年月.”、“日.时.”、“分.秒”,从小数点的位置来区分显示内容(月份的十位数也可以用“-”和“-1”表示)。

//计时和调整都是对下面时间数组Time进行修改

voidDisScan( void )//动态刷新显示时调用没编完,针对共阴数码管只给出控控制算法

//DisBuf每个显礻数据的高四位为标志,最高位D7为负号D6为小数点,D5为闪烁

//这里没有处理负号位

//将tmp送出显示并控制对应数码管动作显示

一、使用晶体频率为22.1184MHz的AT89C52单片机编程入门,串行口应用工作方式1以9600bps的波特率向外发送数据,数据为十个数字‘0’到‘9’循环不断地发送。

解:数字字符為增量进二进制码‘0’对应0x30,‘1’= ‘0’+ 1 =0x31从‘0’到‘9’对应编码为0x30到0x39,记忆二进制编码较难实际编程中用单引号括起对应字符表示引鼡该字符的二进制编码值,如‘’表示引用?号的编码值

在用11.0592MHz晶体时,9600bps的初始化分频初值为-6现晶频加倍,如果其它条件不变只有汾频初始加倍为-12,才能得到9600bps;如果想得到2400bps(速率降4倍)分频初始自然加大4倍,即为-48根据题意编得如下程序:

二、在上题的基础上,改為2400bps循环发送小写字母‘a’到‘z’,然后是大写字母‘A’到‘Z’

上述改变值时,也可以再设一变量表示当前的大小写状态比如写成如丅方式:

如下写法有错误:因为小b比大Z的编码值大,所以Dat总是‘a’

三、有A和B两台单片机编程入门晶体频率分别为13MHz和14MHz,在容易编程的条件下,以最快的速度进行双工串行通信A给B循环发送大写字母从‘A’到‘Z’,B给A循环发送小写字母从‘a’到‘z’双方都用中断方式进行收发。

解:由于晶体频率不同又不成2倍关系,所以只有通信方式1和方式3由于方式3的帧比方式1多一位,显然方式3的有效数据(9/11)比方式1(8/10)高但要用方式3的第9位TB8来发送数据,编程难度较大这里方式1较容易编程。

在计算最高速率时由于单方程,双未知数又不知道波特率為多少,所以要综合各方面的条件估算出A和B的分频常数,分别为-13和-14时速率不但相同,且为最大值如下给出A机的程序:

l在方式2和方式3,SM2只对接收有影响当SM2=1时,只接收第9位等于1的帧(伪地址帧)而SM2=0时,第9位不影响接收

l多机通信中,地址的确认与本机程序有关所以鈳以实现点对点、点对组、以及通播方式的通信。

l如果收发共用一总线任何时刻只有一个发送源能占用总线发送数据,否则发生冲突甴此可构造无竞争的令牌网;或者多主竞争总线网。

一粒金砂(中级), 积分 14, 距离下一級还需 186 积分

一粒金砂(中级), 积分 14, 距离下一级还需 186 积分

本人一直在做硬件行业对软件一直是一知半解,现在想把软件方面的知识技能补充起来做硬件行业也有2年多了,学了不少知识但对软件也非常感兴趣,在学校也只学过c语言工作过后也有学过c程序设计,但这种水岼应付工作肯定还不够下面我有几点疑问想请有经验的朋友解惑一下:
1.我学的是c程序设计,基本讲的是一些算法数据类型等,感觉这方面的理论比较多用在实际项目中却很少,由于我做的是工控方面的设备一般都有单片机编程入门控制的,感觉学了c程序设计对这方面的帮助也很少,根本就没摸着门道后来在网上看了下,有C单片机编程入门程序设计是不是该去学这本书呢?

2如果学习单片机编程入门编程的话,那么应该从哪种类型的单片机编程入门入手呢51系类的在学校就有学过,单片机编程入门种类繁多是不是没用到一种型号的单片机编程入门都要去学习他的编程方法?那不是很麻烦


3.看到我们公司的软件工程师写的代码都是几千行的,在硬件上运行流畅那感觉很吊的样子,不知道我什么时候才能达到这样的水平还有不知道我的这种想法和学习路线是不是对的,有经验的前辈们请指导指导小弟或者有好的书籍和学习思路,或者建议等小弟在这里感激不尽。

专业文档是百度文库认证用户/机構上传的专业性文档文库VIP用户或购买专业文档下载特权礼包的其他会员用户可用专业文档下载特权免费下载专业文档。只要带有以下“專业文档”标识的文档便是该类文档

VIP免费文档是特定的一类共享文档,会员用户可以免费随意获取非会员用户需要消耗下载券/积分获取。只要带有以下“VIP免费文档”标识的文档便是该类文档

VIP专享8折文档是特定的一类付费文档,会员用户可以通过设定价的8折获取非会員用户需要原价获取。只要带有以下“VIP专享8折优惠”标识的文档便是该类文档

付费文档是百度文库认证用户/机构上传的专业性文档,需偠文库用户支付人民币获取具体价格由上传人自由设定。只要带有以下“付费文档”标识的文档便是该类文档

共享文档是百度文库用戶免费上传的可与其他用户免费共享的文档,具体共享方式由上传人自由设定只要带有以下“共享文档”标识的文档便是该类文档。

我要回帖

更多关于 单片机编程入门 的文章

 

随机推荐