版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
单片机高级语言C程序设计第1页/共105页2本章目录1一.C51语言的特点及其程序结构1.C51特点2.C51程序结构二.C51语言的标识符和关键字1.C51扩展的标识符2.C51扩展的关键字三.C51的数据类型及运算符1.基本数据类型的长度2.C51语言的扩展3.特殊功能寄存器的数据类型4.DATA存储类型5.BDATA存储类型6.IDATA存储类型7.PDATA和XDATA存储类型8.PDATA和XDATA比较第2页/共105页39.CODE存储类型10.存储模式11.指针11.1.通用指针11.2.存储器指针11.3.存储器指针和通用指针的比较四.编译预处理命令1.C51的STDIO.H2.C51的REG51.H(1)五.C51语言的程序流程控制1.IF语句2.SWITCHCASE语句3.While和dowhile循环语句4.For循环语句本章目录2第3页/共105页4六.函数1.函数格式2.重入函数3.中断服务函数七.C51程序设计举例1.例1---求数学式2.例2---简单控制3.例3---延时4.例4---使用定时器0定时---查询方式5.例5---使用定时器0定时---中断方式6.例6---利用定时器1计数7.C51开发环境7.1.伟福模拟软件
7.2.uVision3集成开发环境7.3.C51编译练习程序TEXT.C本章目录3第4页/共105页5本章目录4八.C51的应用1.8051串行口扩展LED显示器接口与应用2.DAC转换的接口与应用3.ADC0809应用举例九.课本例题简介
1.例8-22.例8-53.例8-74.例8-8十.加一减一综合实践C51程序设计第5页/共105页6一.C51语言的特点及其程序结构第6页/共105页71.C51特点第7页/共105页82.C51程序结构第8页/共105页93.C51与汇编语言chardataa,b,c,d;main(){a=2;b=a;等效b=(a)c=a+b;等效c=(a+b)}C51程序经WAVE6000编译后,点窗口---CPU窗口产生的界面:a/08Hb/09Hc/0AH变量a,b,c分别对应于内部数据存储器地址08H,09H,0AH.第9页/共105页10二.C51语言的标识符和关键字第10页/共105页11C51扩展的关键字第11页/共105页12三.C51的数据类型及运算符第12页/共105页131.基本数据类型的长度第13页/共105页142.C51语言的扩展第14页/共105页153.特殊功能寄存器的数据类型第15页/共105页164.DATA存储类型第16页/共105页175.BDATA存储类型第17页/共105页186.IDATA存储类型第18页/共105页197.PDATA和XDATA存储类型第19页/共105页208.PDATA和XDATA比较第20页/共105页219.CODE存储类型第21页/共105页2210.存储模式第22页/共105页2311.指针第23页/共105页2411.1.通用指针第24页/共105页2511.2.存储器指针第25页/共105页2611.3.存储器指针和通用指针的比较第26页/共105页2712.绝对地址的访问1.绝对宏#include<absacc.h>//加进包含文件#defineADC0809XBYTE[0X7FF8]//定义一个绝对地址rval=CBYTE[0X006];//对一个绝对地址(字节)进行读rval=XWORD[0X002];//对一个绝对地址(字)进行读DBYTE[0X0002]=5;//对一个绝对地址(字节)进行写PWORD[0X002]=57;//对一个绝对地址(字)进行写第27页/共105页282._at_关键字charxdataADC0809;//定义一个变量ADC0809_at_0xFFF8;//将某变量固定在某地址上第28页/共105页29四.编译预处理命令第29页/共105页301.C51的STDIO.H(1)第30页/共105页311.C51的STDIO.H(2)第31页/共105页322.C51的REG51.H(1)第32页/共105页332.C51的REG51.H(2)第33页/共105页342.C51的REG51.H(3)第34页/共105页352.C51的REG51.H(4)第35页/共105页362.C51的REG51.H(5)第36页/共105页372.C51的REG51.H(6)第37页/共105页382.C51的REG51.H(7)第38页/共105页39五.C51语言的程序流程控制第39页/共105页401.IF语句第40页/共105页412.SWITCHCASE语句第41页/共105页423.While和dowhile循环语句第42页/共105页434.For循环语句第43页/共105页44六.函数第44页/共105页451.函数格式格式:[Alien][返回类型]函数名(参数表)[编译属性][重入属性][中断属性][寄存器组属性]Alien---用Alien,指示该函数按PL/M51函数的方式进行参数传递;缺省按C51方式进行。返回类型---增加了bit型,缺省,函数返回int(不是void)。函数名---大小写敏感,最多256字符。一般使用字母、数字、下划线,但数字不能打头。参数表
---最多32个参数。编译属性
---small、compact、large三种。重入属性
---用reertrant说明该函数按可重入函数进行处理,缺省则说明该函数为不可重入函数。中断属性
---用“interrupt中断编号”说明该函数是中断函数,缺省则说明该函数为非中断函数。寄存器组属性---用“using工作寄存器组编号“说明所用的寄存器组号,缺省则说明使用寄存器组0。第45页/共105页462.重入函数第46页/共105页473.中断服务函数第47页/共105页48七.C51程序设计举例1.例1---求数学式第48页/共105页49例3---延时
voidmain(){delay(10);}第49页/共105页50例4---使用定时器0定时(查询方式)(1)第50页/共105页51使用定时器0定时---查询方式(2)第51页/共105页52例5---使用定时器0定时(中断方式)第52页/共105页53例6---利用定时器1计数(1)第53页/共105页54利用定时器1计数(2)第54页/共105页557.C51开发环境7.1.C51开发环境:伟福模拟软件第55页/共105页56伟福模拟软件C51开发操作步骤运行WAVE6000软件(要先装KEIL编译器);新建一.C源程序并保存;新建一项目(文件-新建项目),然后自动分三步进行:A)、加入模块文件。选择.C文件再打开。B)、加入包含文件。如果没有包含文件(源程序#INCLUDE所包含的所有文件)。C)、保存项目。在打开的窗口中输入项目名称(名称可自定,扩展名.PRJ可不加,软件会自动添加)。编译调试。(其它的设置同汇编程序)第56页/共105页577.2.uVision3集成开发环境第57页/共105页58uVision3集成开发环境操作步骤运行KEIL51软件;新建一.C的源程序并保存;新建一项目(文件-新建-新建过程),接着选择所要的单片机(如AT89C51);然后加入一.C的源程序(如右图);第58页/共105页59操作步骤(续)做必要的设置,编译后生成.HEX文件(如右图,下方图中应选中产生.HEX文件);编译调试。第59页/共105页60uVision3设置观察窗口voidmain(void){unsignedchara;unsignedintb;b=100*4;a=b;while(1);}第60页/共105页61第61页/共105页62串口调试助手借助串口调试助手,完成一个关系运算符相关的实例程序。#include<AT89X51.H>#include<stdio.h>voidmain(void){intx,y;SCON=0x50;//串口方式1,允许接收
TMOD=0x20;//定时器1定时方式2TH1=0xE8;//11.0592MHz1200波特率
TL1=0xE8;TI=1;TR1=1;//启动定时器
while(1){第62页/共105页63printf("您好!我叫Robot!我是一个会做算术的机器人!\n");//显示
printf("请您输入两个int,X和Y\n");//显示
scanf("%d%d",&x,&y);//输入
if(x<y)printf("X<Y\n");//当X小于Y时
else//当X不小于Y时再作判断
{if(x==y)printf("X=Y\n");//当X等于Y时
elseprintf("X>Y\n");//当X大于Y时
}}}
要注意的是,在连接PC串口调试时。发送数字时,发送完一个数字后还要发送一个回车符,以使scanf函数确认有数据输入。第63页/共105页64第64页/共105页657.3C51编译练习程序TEXT.C1.单片机和微机串口通信,完成发送程序的编写,每发送一串字符“HELLO”后,延迟一段时间再发送。2.系统用P1口控制8个LED灯,低电平驱动,需要完成轮流控制LED灯亮。3.设主频为12MHZ,使用T1定时器在方式0下,编程实现P1.0产生周期为2ms的方波。第65页/共105页66
#include<AT89x51.h> #include<stdio.h>voidmain(void){SCON=0x50;//串口方式1,允许接收
TMOD=0x20;//定时器1定时方式2TCON=0x40;//设定时器1开始计数
TH1=0xE8;//11.0592MHz1200波特率
TL1=0xE8;TI=1;TR1=1;//启动定时器
while(1){printf("Hello!\n");//显示Hello}}第66页/共105页67#include<reg51.h>#include<intrins.h>voiddelayms(unsignedcharms){ unsignedchari; while(ms--) { for(i=0;i<120;i++); }} main(){ unsignedcharLED; LED=0xfe; P1=LED; while(1) { delayms(250); LED=_crol_(LED,1);//循环右移1位,点亮下一个LED P1=LED; }}第67页/共105页68#include<AT89X51.H>#include<stdio.h>voidmain(void){TMOD=0x00;//定时器1定时方式0TH1=0xE0;TL1=0x18;EA=1;TR1=1;//启动定时器
while(1);}voidtime1interrupt3using2{TH1=0xE0;TL1=0x18;P1.0=!P1.0;}第68页/共105页69八.C51的应用第69页/共105页70按钮判断(1)第70页/共105页71按钮判断(2)org0000hstart:movp1,#00hmovp0,#0ffhstl:jbp0.0,$jnbp0.0,$cplp1.0sjmpstlend第71页/共105页72按钮判断(3)#include<reg51.h>sbitP00=P0^0;sbitP10=P1^0;voiddelay(unsignedcharn){unsignedchari,j;for(i=0;i<n;i++)for(j=0;j<125;j++);}voidmain(){P1=0X00;while(1){if(P00==0){delay(10);if(P00==0) while(!P00); P10=!P10;}}}第72页/共105页731.8051串行口扩展LED显示器接口与应用第73页/共105页74LED显示器接口与应用程序(1)第74页/共105页75LED显示器接口与应用程序(2)第75页/共105页76
2.DAC转换的接口与应用第76页/共105页77DAC0832产生锯齿波程序(1)第77页/共105页78DAC0832产生锯齿波程序(2)第78页/共105页79DAC0832产生梯形波程序(1)第79页/共105页80DAC0832产生梯形波程序(2)第80页/共105页813.ADC转换的接口与应用(1)地址有锁存第81页/共105页82ADC0809应用举例第82页/共105页83ADC0809应用C51程序(1)第83页/共105页84ADC0809应用C51程序(2)第84页/共105页85中断服务软件设计第85页/共105页86九.课本例题选介第86页/共105页87例8-2第87页/共105页88例8-5第88页/共105页89例8-7(1)按课本图7-14输出正弦波第89页/共105页90例8-7(2)第90页/共105页91例8-8(1)第91页/共105页92例8-8(2)第92页/共105页93例8-8(3)第93页/共105页94例8-8(4)第94页/共105页95十.加一减一综合实践C51程序设计用如下的电路图,实现:按“加一”按钮显示加“1”,按“加二”按钮显示加“2”,按“减一”按钮显示减“1”,按“减二”按钮显示减“2”;计数的最大值为19,最小值为0;按“清0”按钮显示“0”(清0)。第95页/共105页96电路图第96页/共105页97程序(1)#include"reg51.h"//头文件#include"math.h"//头文件unsignedcharcodedisp_code[10]={ 0x3F,//"0"0x06,//"1"0x5B,//"2"0x4F,//"3"0x66,//"4"0x6D,//"5"0x7D,//"6"0x07,//"7"0x7F,//"8"0x6F,//"9"};第97页/共105页98程序(2)//定义sbit P20=P2^0;sbit P21=P2^1;sbit P22=P2^2;sbit P23=P2^3;sbit P36=P3^6;unsignedintcount; //定义计数变量voiddelay(unsignedcharn)//延时子程序{ unsignedchari,j; for(i=0;i<n;i++) for(j=0;i<125;i++);}第98页/共105页99程序(3)voidinitial()//初始化程序{ EA=1; EX0=1; EX1=1; IT1=1;//选择INT1为脉冲触发方式
IT0=1; TMOD=0x66;//T1模式2,自动重装
TH1=TL1=TH0=TL0=0xff;//计数一次中断
ET1=ET0=1; TR1=TR0=1;}第99页/共105页100程序(4)display() //显示子程序{unsignedinttemp; unsignedchardisp_c[4],i; temp=count; for(i=0;i<4;i++) { //拆字程序
disp_c[i]=temp%10; temp=temp/10; } P0=disp_code[disp_c[0]];P23=0;delay(2);P23=1;P0=disp_code[disp_c[1]];P22=0;delay(2);P22=1;P0=disp_code[disp_c[2]];P21=0;de
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年市政院路桥岗笔试真题及逐题答案解析
- 2026年福建泉州丰泽区人力资源和社会保障局招聘工作人员考试备考试题及答案解析
- 2026福建宁德师范学院招聘博士高层次人才42人笔试模拟试题及答案解析
- 煤厂装卸工责任制度
- 煤矿提升机安全责任制度
- 燃气瓶使用安全责任制度
- 物流退货责任制度
- 环卫工人管理责任制度
- 球馆卫生责任制度
- 生产组安全生产责任制度
- 智能医学应用基础- 课件全套 娄岩 第1-13章 智能医学基础理论 -智能医学的伦理、法律与社会问题
- 拖轮安全意识培训课件
- 2026年宁夏单招装备制造大类普高生职业适应性题库含答案
- 引产补偿协议书
- 2026年江苏单招语数英冲刺密卷含答案省考试院命题组同源题
- 2025年绵阳市中考英语试题(附答案)
- 2025年学校领导干部民主生活会“五个带头”对照检查发言材料
- 高清无人机迷你简易推广方案
- 劳动课《做贺卡》课件
- 2026年人教版新教材数学一年级下册教学计划(含进度表)
- (2026年)《国家基层慢性阻塞性肺疾病防治及管理实施指南(2025)》课件大纲课件
评论
0/150
提交评论