书签 分享 收藏 举报 版权申诉 / 21
上传文档赚钱

类型C-51程序设计知识.ppt

  • 上传人(卖家):三亚风情
  • 文档编号:3376303
  • 上传时间:2022-08-25
  • 格式:PPT
  • 页数:21
  • 大小:162KB
  • 【下载声明】
    1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
    2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
    3. 本页资料《C-51程序设计知识.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
    4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
    5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
    配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    51 程序设计 知识
    资源描述:

    1、第六讲:C-51程序设计本讲重点:本讲重点:C-51C-51的数据类型和存储类型;的数据类型和存储类型;指针和中断的使用;指针和中断的使用;通过实例消化理解通过实例消化理解C-51C-51的编程方法;的编程方法;尝试将实验课中的尝试将实验课中的ASM-51ASM-51程序转为程序转为C-51C-51程序程序.C C语言作为一种非常方便的语言而得到广泛的支持,语言作为一种非常方便的语言而得到广泛的支持,C C语言程序本身不依赖于机器硬件系统,基本上不语言程序本身不依赖于机器硬件系统,基本上不作修改就可将程序从不同的单片机中移植过来。作修改就可将程序从不同的单片机中移植过来。C C提供了很多数学函

    2、数并支持浮点运算,开发效率提供了很多数学函数并支持浮点运算,开发效率高,故可缩短开发时间,增加程序可读性和可维护高,故可缩短开发时间,增加程序可读性和可维护性。性。C-51C-51简介简介C-51C-51与与ASM-51ASM-51相比,有如下优点:相比,有如下优点:1.1.对单片机的指令系统不要求了解,仅要求对对单片机的指令系统不要求了解,仅要求对8051 8051 的存贮器结构有初步了解;的存贮器结构有初步了解;2.2.寄存器分配、不同存贮器的寻址及数据类型寄存器分配、不同存贮器的寻址及数据类型等细节可由编译器管理;等细节可由编译器管理;3.3.程序有规范的结构,可分成不同的函数,这程序有

    3、规范的结构,可分成不同的函数,这种方式可使程序结构化;种方式可使程序结构化;4.4.具有将可变的选择与特殊操作组合在一起的具有将可变的选择与特殊操作组合在一起的能力,改善了程序的可读性;能力,改善了程序的可读性;5.5.提供的库包含许多标准子程序,具有较强的提供的库包含许多标准子程序,具有较强的数据处理能力;数据处理能力;6.6.由于具有方便的模块化编程技术,使已编好由于具有方便的模块化编程技术,使已编好程序可容量地植入新程序;程序可容量地植入新程序;C C5151的数据类型的数据类型 常用的数据类型有:常用的数据类型有:C C5151的程序结构的程序结构 与一般与一般C C语言的结构相同,以

    4、语言的结构相同,以main()main()函数为程序人函数为程序人口,程序体中包含若干语句还可以包含若干函数。口,程序体中包含若干语句还可以包含若干函数。位型位型 字符型字符型 整型整型 长整型长整型 浮点型浮点型bit bit charchar intint long intlong int floatfloat1 1位位 1 1字节字节 2 2字节字节 4 4字节字节 4 4字节字节数组型数组型 指针型指针型 C-51C-51数据的存储类型数据的存储类型名名 存储空间位置存储空间位置 长度长度 数据范围数据范围 data data 直接寻址片内直接寻址片内RAM 8RAM 8位位 0 02

    5、55 255 bdatabdata 可位寻址片内可位寻址片内RAM 1RAM 1位位 0/10/1idataidata 间接寻址片内间接寻址片内RAM 8RAM 8位位 0 0255255xdataxdata 片外片外RAM 16RAM 16位位 0 06553565535 C-51C-51的包含的头文件的包含的头文件通常有:reg51.h math.h ctype.h stdio.h stdlib.h absacc.h常用有:reg51.h (定义特殊功能寄存器和位寄存器);math.h (定义常用数学运算);C-51C-51的运算符的运算符与与C C语言基本相同:语言基本相同:+-+-*/

    6、(加(加 减减 乘乘 除)除)=(位右移(位右移 位左移)位左移)&|&|(按位与按位与 按位或按位或)(按位异或按位异或 按位取反按位取反)C-51C-51的基本语句的基本语句与标准与标准C C语言基本相同:语言基本相同:if if 选择语言选择语言 switch/caseswitch/case 多分支选择语言多分支选择语言 whilewhile 循环语言循环语言 do-while do-while 循环语言循环语言 for for 循环语言循环语言 实例实例ORG 0000HORG 0000HMOV R0,#0DCH;MOV R0,#0DCH;指向字形口指向字形口MOV A,#80HMOV

    7、 A,#80H;确定字形代码确定字形代码MOVX MOVX R0,A R0,A ;输出字形代码输出字形代码MOV R1,#0DDH;MOV R1,#0DDH;指向字位口指向字位口MOV A,#20HMOV A,#20H;从最高位开始从最高位开始LEDO:LEDO:MOVX MOVX R1,AR1,A;输出字位代码输出字位代码MOV R2,#18HMOV R2,#18H;确定延时常数确定延时常数ACALL ACALL DEYSDEYS;调延时子程序调延时子程序RL ARL A;右移一位右移一位SJMP SJMP LEDOLEDO;循环演示循环演示;延时子程序延时子程序DEYSDEYS:PUSH

    8、02H:PUSH 02HDEY0:PUSH 02HDEY0:PUSH 02HDEY1:PUSH 02HDEY1:PUSH 02H DJNZ R2,$DJNZ R2,$POP 02H POP 02H DJNZ R2,DEY1 DJNZ R2,DEY1 POP 02H POP 02H DJNZ R2,DEY0 DJNZ R2,DEY0 POP 02H POP 02H DJNZ R2,DEYS DJNZ R2,DEYS RET RET END END例例1.“8”1.“8”字符循环演示字符循环演示 (字形口为(字形口为DCH;DCH;字位口为字位口为DDHDDH)汇编语言程序汇编语言程序#inclu

    9、de#include#include absacc.h#include#define uchar#define uchar unsigned char unsigned char /*字形口字形口 */#define PORTA XBYTE0 xffdc#define PORTA XBYTE0 xffdc /*字位口字位口 */#define PORTB XBYTE0 xffdd#define PORTB XBYTE0 xffdd /*延时延时 1MS1MS子程序子程序 */void msce(unsigned intvoid msce(unsigned int x)x)unsigned ch

    10、ar j;unsigned char j;while(x-)!=0)while(x-)!=0)for(j=0;j60;j+);for(j=0;j60;j+);main()main()uchar rr,i uchar rr,i;for(;)for(;)rr rr=0 x01;/=0 x01;/*从最右一位开始从最右一位开始 */for(i=0;i6;i+)for(i=0;i6;i+)PORTA=0 x80;/PORTA=0 x80;/*输出字形代码输出字形代码*/PORTB=rr PORTB=rr;/;/*输出字位代码输出字位代码*/msce(150);/msce(150);/*调延时子程序调延

    11、时子程序*/rr=rr rr=rr1;/1;/*循环左移一位循环左移一位*/“8”“8”字符循环演示字符循环演示的的C C5151程序程序 C C5151程序程序#include#include main()main()int int i;i;unsigned char xdata unsigned char xdata *p=0 x2000;/p=0 x2000;/*指针指向指针指向2000H2000H单元单元 */for(i=0;i256;i+)/for(i=0;i256;i+)/*清零清零2000H-20FFH2000H-20FFH单元单元*/*p=0;p+;p=0;p+;例例2.2.清

    12、零程序清零程序 (将将2000H2000H20FFH20FFH的内容清零的内容清零)汇编语言程序汇编语言程序 ORG 0000HORG 0000HSE01:MOV R0,#00H SE01:MOV R0,#00H MOV DPTR,#2000H ;(0000H)MOV DPTR,#2000H ;(0000H)送送DPTRDPTRLOO1:CLR ALOO1:CLR A MOVX MOVX DPTR,A ;0DPTR,A ;0送送(DPTR)(DPTR)INC DPTR ;DPTR+1 INC DPTR ;DPTR+1 INC R0 ;INC R0 ;字节数加字节数加1 1 CJNE R0,#0

    13、0H,LOO1 ;CJNE R0,#00H,LOO1 ;不到不到FFFF个字节再清个字节再清LOOP:SJMP LOOPLOOP:SJMP LOOP例例3.3.拆字程序拆字程序(将(将2000H2000H的内容拆开,高位送的内容拆开,高位送2001H2001H低位,低位送低位,低位送2002H2002H低位)低位)汇编语言程序汇编语言程序 ORG 0000HORG 0000HSE02:MOV DPTR,#2000HSE02:MOV DPTR,#2000H MOVX A,MOVX A,DPTRDPTR MOV B,A ;(2000)AB MOV B,A ;(2000)AB SWAP A ;SWA

    14、P A ;交换交换 ANL A,#0FH ;ANL A,#0FH ;屏敝高位屏敝高位 INC DPTRINC DPTR MOVX MOVX DPTR,A ;DPTR,A ;送送2001H2001H INC DPTR INC DPTR MOV A,B MOV A,B ANL A,#0FH ;(2000)ANL A,#0FH ;(2000)内容屏敝高位内容屏敝高位 MOVX MOVX DPTR,A ;DPTR,A ;送送2002H2002H SJMP$SJMP$拆字拆字C C5151程序程序#include#include main()main()unsigned char xdataunsign

    15、ed char xdata *p=0 x2000;/p=0 x2000;/*指针指向指针指向2000H2000H单元单元*/*2002H 2002H单元高单元高4 4位清零,低位清零,低4 4位装位装2000H2000H单元低单元低4 4位位 */*(p+2)=(p+2)=(*p)&0 x0f;p)&0 x0f;/*2001H 2001H单元高单元高4 4位清零,低位清零,低4 4位装位装2000H2000H单元高单元高4 4位位 */*(p+1)=(p+1)=(*p)4;p)4;汇编语言程序汇编语言程序 ORG 0000HORG 0000HL00:MOV R0,#10H ;L00:MOV R

    16、0,#10H ;查找查找1616个字节个字节 MOV R1,#00HMOV R1,#00H MOV DPTR,#2000H MOV DPTR,#2000HL11:MOVX A,DPTRL11:MOVX A,DPTR CJNE A,#00H,L16 ;CJNE A,#00H,L16 ;取出内容与取出内容与00H00H相等吗相等吗?INC R1 ;INC R1 ;取出个数加取出个数加1 1L16:INC DPTRL16:INC DPTR DJNZ R0,L11 ;DJNZ R0,L11 ;未完继续未完继续 MOV DPTR,#2100HMOV DPTR,#2100H MOV A,R1 MOV A,

    17、R1 MOVX DPTR,A ;MOVX DPTR,A ;相同数个数送相同数个数送2100H2100HL1E:SJMP L1EL1E:SJMP L1E例例4.4.查找零的个数查找零的个数(在(在2000H-200FH2000H-200FH中查出有几个中查出有几个字字 节是零,把个数放在节是零,把个数放在2100H2100H单元中)单元中)查找零的个数查找零的个数C C5151程序程序#include#include main()main()unsigned char xdata unsigned char xdata *p=0 x2000;/p=0 x2000;/*指针指针p p指向指向200

    18、0H2000H单元单元*/int int n=0,i;n=0,i;for(i=0;i16;i+)for(i=0;i16;i+)if(if(*p=0)n+;/p=0)n+;/*若该单元内容为零,则若该单元内容为零,则n+1 n+1*/p+;/p+;/*指针指向下一单元指针指向下一单元 */p=0 x2100;/p=0 x2100;/*指针指针p p指向指向2100H2100H单元单元 */*p=n;/p=n;/*把个数放在把个数放在2100H2100H单元中单元中 */汇编程序汇编程序 ORG 0000HORG 0000H MOV A,R3 MOV A,R3 MOV B,R7 MOV B,R7

    19、MUL AB ;R3 MUL AB ;R3*R7R7 XCH A,R7 ;R7=(R3 XCH A,R7 ;R7=(R3*R7)R7)低字节低字节 MOV R5,B ;R5=(R3MOV R5,B ;R5=(R3*R7)R7)高字节高字节 MOV B,R2MOV B,R2 MUL AB ;R2 MUL AB ;R2*R7R7 ADD A,R5 ADD A,R5 MOV R4,A MOV R4,A CLR A CLR A ADDC A,B ADDC A,B MOV R5,A ;R5=(R2 MOV R5,A ;R5=(R2*R7)R7)高字节高字节 MOV A,R6MOV A,R6 MOV B,

    20、R3 MOV B,R3 MUL AB ;R3 MUL AB ;R3*R6R6 ADD A,R4ADD A,R4 XCH A,B XCH A,B ADDC A,R5 ADDC A,R5 MOV R5,A MOV R5,A MOV PSW.5,C ;MOV PSW.5,C ;存存CYCY MOV A,R2 MOV A,R2 MUL AB ;R2 MUL AB ;R2*R6R6 ADD A,R5 ADD A,R5 MOV R5,A MOV R5,A CLR A CLR A MOV ACC.0,C MOV ACC.0,C MOV C,PSW.5 ;MOV C,PSW.5 ;加上次加法的位加上次加法的位

    21、 ADDC A,BADDC A,B MOV R4,A MOV R4,A JMP$JMP$例例5.5.双字节无符号整数快速乘法双字节无符号整数快速乘法 C C5151程序程序#include#include main()main()unsigned int xdataunsigned int xdata *p1=0 x2000;p1=0 x2000;/*双字节被乘数在双字节被乘数在2000H2000H单元单元*/unsigned int xdata unsigned int xdata *p2=0 x2002;p2=0 x2002;/*双字节乘数在双字节乘数在2002H2002H单元单元 */u

    22、nsigned long xdata unsigned long xdata *p3=0 x2010;p3=0 x2010;/*4 4字节乘积放在字节乘积放在2010H2010H单元单元*/*p3=(p3=(*p1)p1)*(*p2);p2);例例6.6.工业顺序控制工业顺序控制C-51C-51程序程序#include#include sbitsbit P1_7=0 x97;/P1_7=0 x97;/*定义定义P1.7P1.7口地址口地址 */unsigned char TT;unsigned char TT;void Delay(unsigned intvoid Delay(unsigned

    23、 int value)/value)/*延时子程序延时子程序*/while(value!=0)value-;while(value!=0)value-;void Serint1()interrupt 2 /void Serint1()interrupt 2 /*中断服务程序中断服务程序-暂停并报警暂停并报警*/int int i;i;TT=P1;/TT=P1;/*保护现场保护现场 */P1=0 x7f;/P1=0 x7f;/*关输出关输出 */while(!INT1)/while(!INT1)/*若故障未消除若故障未消除,则报警则报警 */for(i=0;i0 xa0;i+)/for(i=0;

    24、i0 xa0;i+)/*给蜂鸣器发震荡脉冲给蜂鸣器发震荡脉冲 */P1_7=1;Delay(50);P1_7=0;Delay(50);P1_7=1;Delay(50);P1_7=0;Delay(50);P1_7=0;Delay(6550);P1_7=0;Delay(6550);P1=TT;/P1=TT;/*恢复现场恢复现场 */main()main()IE=0 x84;/IE=0 x84;/*CPU CPU开中断开中断,INT1,INT1开中断开中断 */while(T0=0);/while(T0=0);/*等待等待P3.4P3.4变高变高 */for(;)for(;)P1=0 xfe;Del

    25、ay(60000);/P1=0 xfe;Delay(60000);/*工序工序1 1*/P1=0 xfd;Delay(60000);/P1=0 xfd;Delay(60000);/*工序工序2 2*/P1=0 xfb;Delay(60000);/P1=0 xfb;Delay(60000);/*工序工序3 3*/P1=0 xf7;Delay(60000);/P1=0 xf7;Delay(60000);/*工序工序4 4*/P1=0 xef;Delay(60000);/P1=0 xef;Delay(60000);/*工序工序5 5*/P1=0 xdf;Delay(60000);/P1=0 xdf;

    26、Delay(60000);/*工序工序6 6*/P1=0 x8f;Delay(60000);/P1=0 x8f;Delay(60000);/*工序工序7 7*/(续前)(续前)例例7.7.电脑时钟电脑时钟(用定时器产生用定时器产生0.10.1秒定时中断,对时钟计数器计数并送数码管显示)秒定时中断,对时钟计数器计数并送数码管显示)C C5151程序程序#include#include#include absacc.h#include#define uchar#define uchar unsigned char unsigned char#define LEDwp#define LEDwp XB

    27、YTE0 xffdc XBYTE0 xffdc#define LEDwb#define LEDwb XBYTE0 xffdd XBYTE0 xffdducharuchar code code table10=0 xc0,0 xf9,0 xa4,0 xb0,0 x99,0 x92,0 x82,0 xf8,0 x80,0 x90;table10=0 xc0,0 xf9,0 xa4,0 xb0,0 x99,0 x92,0 x82,0 xf8,0 x80,0 x90;ucharuchar hour=1,min=23,sec=45,m=0,n,i;/hour=1,min=23,sec=45,m=0,n,

    28、i;/*给时钟赋初值给时钟赋初值 */uchar xdatauchar xdata *p;p;void Delay(unsigned intvoid Delay(unsigned int value)/value)/*延时子程序延时子程序*/while(value!=0)value-;while(value!=0)value-;void Trans(void)/void Trans(void)/*时间数据转换子程序时间数据转换子程序*/if(sec=60)min+;sec=0;if(sec=60)min+;sec=0;if(min=60)hour+;min=0;if(min=60)hour+;

    29、min=0;if(hour=24)hour=0;if(hour=24)hour=0;*(p+0)=hour/10;/(p+0)=hour/10;/*时的十分位时的十分位 */*(p+1)=hour%10;/(p+1)=hour%10;/*时的个位时的个位*/*(p+2)=min/10;/(p+2)=min/10;/*分的十分位分的十分位 */*(p+3)=min%10;/(p+3)=min%10;/*分的个位分的个位 */*(p+4)=sec/10;/(p+4)=sec/10;/*秒的十分位秒的十分位 */*(p+5)=sec%10;/(p+5)=sec%10;/*秒的个位秒的个位 */voi

    30、d Show(void)/void Show(void)/*循环显示子程序循环显示子程序*/for(;)for(;)Trans();Trans();LEDwb LEDwb=n=0 x20;=n=0 x20;for(i=0;i6;i+)for(i=0;i1;=n;Delay(100);n=n1;/*中断服务子程序(中断服务子程序(0.10.1秒中断一次)秒中断一次)*/void time()interrupt 1 void time()interrupt 1 m+;m+;TH0=0 x3c;TL0=0 xb7;/TH0=0 x3c;TL0=0 xb7;/*给给 T0 T0 赋计数初值赋计数初值

    31、*/if(m=10)sec=sec+1;m=0;if(m=10)sec=sec+1;m=0;main()main()p=0 x2000;p=0 x2000;TMOD=0X01;/TMOD=0X01;/*T/C0 T/C0工作在定时器方式工作在定时器方式1 1*/TH0=0 x3c;TH0=0 x3c;TL0=0 xb7;/TL0=0 xb7;/*给给 T0 T0 赋计数初值赋计数初值 */EA=1;/EA=1;/*CPU CPU开中断开中断 */TR0=1;/TR0=1;/*启动启动T/C0T/C0开始定时开始定时 */ET0=1;/ET0=1;/*T/C0 T/C0开中断开中断 */Show();Show();

    展开阅读全文
    提示  163文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    关于本文
    本文标题:C-51程序设计知识.ppt
    链接地址:https://www.163wenku.com/p-3376303.html

    Copyright@ 2017-2037 Www.163WenKu.Com  网站版权所有  |  资源地图   
    IPC备案号:蜀ICP备2021032737号  | 川公网安备 51099002000191号


    侵权投诉QQ:3464097650  资料上传QQ:3464097650
       


    【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。

    163文库