单片机原理与应用技术6课件.ppt

上传人(卖家):晟晟文业 文档编号:4842404 上传时间:2023-01-17 格式:PPT 页数:22 大小:128KB
下载 相关 举报
单片机原理与应用技术6课件.ppt_第1页
第1页 / 共22页
单片机原理与应用技术6课件.ppt_第2页
第2页 / 共22页
单片机原理与应用技术6课件.ppt_第3页
第3页 / 共22页
单片机原理与应用技术6课件.ppt_第4页
第4页 / 共22页
单片机原理与应用技术6课件.ppt_第5页
第5页 / 共22页
点击查看更多>>
资源描述

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();OVER!

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文(单片机原理与应用技术6课件.ppt)为本站会员(晟晟文业)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

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


163文库-Www.163Wenku.Com |网站地图|