版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第一章【实例1】使用累加器进行简单加法运算:MOVA,#02H;A2ADD A,#06H;AA+06H【实例2】使用B寄存器进行简单乘法运算:MOVA,#02H; A2MOVB,#06H;B6MUL AB;BAA*B=6*2【实例3】通过设置RS1,RS0选择工作寄存器区1:CLR ;0SETB;1【实例4】使用数据指针DPTR访问外部数据数据存储器:MOV DPTR, #data16;DPTRdata16MOVXA, DPTR;A(DPTR)MOVXDPTR,A;(DPTR)A【实例5】使用程序计数器PC查表:MOV , #data ;dataMOVCA, A+DPTR;PC(PC)+1,A
2、(A)+(PC)【实例6】if语句实例:void main()int a,b,c,min;printf("n please input three number:");scanf("%d%d%d ",&a,&b,&c);if(a<b&&a<c) printf("min=%dn",a );else if(b<a&&b<c) printf("min=%dn",b);else if(c<a&&c<c) printf
3、("min=%dn",c);elseprintf("There at least two numbers are equaln");【实例7】switch-case语句实例:void main()int num;printf("input one number:");scanf("%d",&num);switch(num)case 1:printf("num =%dn",num);break;case 2:printf("num =%dn",num);break;ca
4、se 3:printf("num =%dn",num);break;case 4:printf("num =%dn",num);break; default:printf("The number is out of the rangen",num);【实例8】for语句实例:void main()for(int a=10;n>0;a -)printf("%d",a);【实例9】while语句实例:void main()int i=0;while(i<=10)i+;【实例10】dowhile语句实例:vo
5、id main()int i=0;doi+;while(i<=10);【实例11】语句形式调用实例:void main()int i=0;while(i<=10)i+;Sum(); /*函数调用*/【实例12】表达式形式调用实例:void main()int a,b,i=0;while(i<=10)i+;i=4*Sum(a,b); /*函数调用*/【实例13】以函数的参数形式调用实例:void main()int a,b,c,i=0;while(i<=10)i+;i=max(c,Sum(a,b); /*函数调用*/【实例14】函数的声明实例:void main()int
6、 max(int x,int y); /*函数的声明*/int a,b,c,i=0;while(i<=10)i+;i=max(c,Sum(a,b); /*函数调用*/【实例15】函数递归调用的简单实例:void fun()int a=1, result,i;for(i=0;i<10;) i=a+I;result =fun(); /*函数调用*/ return result;【实例16】数组的实例:void main()char num33=,#,,#,#,,#,; /*定义多维数组*/int i=0,j=0; for(;i<3;i+) for(;j<3;j+) prin
7、tf(“%c”,numij);printf(“/n”);【实例17】指针的实例:void main()int a=3,*p;p=&a;/*将变量a的地址赋值给指针变量p*/printf(“%d,%d”,a,*p); /*输出二者的数值进行对比*/【实例18】数组与指针实例:void main()int i=3,num3=1,2,3,*p; p=num;/*将数组num的地址赋值给指针变量p*/result =max(p,3); /*函数调用,计算数组的最大值*/【实例19】P1口控制直流电动机实例sfr p1=0x90;sbit p10=p10;sbit p11=p11;void ma
8、in ()int i, m;int j=100;int k=20;/ 正快转for (i=0; i<100; i+)P10=1;for (j=0; j<50; j+) m=0; P10=0;for (j=0; j<10; j+) m=0 /正慢转for (i=0; i<100; i+)P10=1;for (j=0; j<10; j+) m=0 p10=0;for (j=0; j<50; j+) m=0/ 负快转for (i=0; i<100; i+)p11=1;for (j=0; j<50; j+) m=0; p11=0;for (j=0; j&
9、lt;10; j+) m=0; / 负慢转for (i=0; i<100; i+)p11=1;for (j=0;j<10;j+) m=0; p11=0for (j=0; j<50; j+) m=0; 第二章【实例20】用74LS165实现串口扩展并行输入口(1)函数声明管脚定义/-库函数声明,管脚定义-#include<reg52.h>sbit LOAD=P17;/用P17控制SH/ 管脚(2)串口初始化函数UART_init()/-/ 函数名称:UART_init()/ 功能说明:串口初始化,设定串口工作在方式0/-void UART_init(void) SC
10、ON=0x10; /设串行口方式0,允许接收,启动接收过程 ES=0; /禁止串口中断(3)数据接收函数PA()/-/ 函数名称:PA()/ 输入参数:无/ 输出参数:返回由并口输入的数据/ 功能说明:接收八位串行数据/-unsigned char PA(void) unsigned char PA_data; LOAD=0; /当P1.7输出低电平,74LS165将并行数据装入寄存器/当中 LOAD=1; /当P1.7输出高电平,74LS165在时钟信号下进行移位 UART_init(); /74LS165工作在时钟控制下的串行移位状态 while(RI=0); /循环等待 RI=0; PA
11、_data=SBUF; return PA_data; /返回并行输入的数据(1)函数声明管脚定义/-库函数声明,管脚定义-#include<reg52.h>sbit a7=ACC7;sbit simuseri_CLK=P16;/用P16模拟串口时钟sbit simuseri_DATA=P15;/用P15模拟串口数据sbit drive74165_LD=P17;/用P17控制SH/ 管脚(2)数据输入函数in_simuseri()/-/ 函数名称:in_simuseri()/ 输入参数:无/ 输出参数:data_buf/ 功能说明:8位同位移位寄存器,将simuseri_DATA串
12、行输入的数据按从低位到/ 高位/ 保存到data_buf/-unsigned char in_simuseri(void) unsigned char i; unsigned char data_buf; i=8; do ACC=ACC>>1; for(;simuseri_CLK=0;); a7= simuseri_DATA; for(;simuseri_CLK=1;); while(-i!=0); simuseri_CLK=0; data_buf=ACC; return(data_buf);(3)数据输出函数PAs()/-/ 函数名称:PAs()/ 输入参数:无/ 输出参数:PA
13、s _buf,返回并行输入74LS165的数据/ 功能说明:直接调用,即可读取并行输入74LS165的数据,不需要考虑74LS165的/ 工作原理/-unsigned char PAs(void) unsigned char PAs_buf; drive74165_LD=0; drive74165_LD=1; PAs_buf= in_simuseri(); return(PAs_buf);【实例21】用74LS164实现串口扩展并行输出口单片机串口驱动74LS164的程序主要包括函数声明管脚定义部分、串口初始化函数以及数据发送函数。(1)函数声明管脚定义/-库函数声明,管脚定义-#includ
14、e <reg52.h>sbit CLR=P17;/用P17控制CLR(2)串口初始化函数UART_init()/-/ 函数名称:UART_init()/ 功能说明:串口初始化,设定串口工作在方式0/-void UART_init(void) SCON =0x00; /没串行口方式0,允许发送,启动发送过程 ES=0; / 禁止串口中断(3)数据发送函数PA_out()/-/ 函数名称:PA_out()/ 输入参数:PA_data,需要从74LS164并行口输出的数据/ 输出参数:无/ 功能说明:发送八位串行数据至并口/-void PA_out(unsigned char PA_da
15、ta) CLR=0; /并口输出清零 CLR=1; /开始串行移位 UART_init(); /74LS165工作在时钟控制下的串行移位状态 while(TI=0); /循环等待 TI=0; SBUF=PA_data;单片机I/O端口驱动74LS164主要包括函数声明管脚定义部分、数据输入函数以及数据输出函数。(1)函数声明管脚定义/-库函数声明,管脚定义-#include <reg52.h>sbit simuseri_CLK=P16;/用P16模拟串口时钟sbit simuseri_DATA=P15;/用P15模拟串口数据sbit drive74164_CLR=P17;/用P17
16、控制CLRsbit a0=ACC0;(2)数据输入函数out_simuseri ()/-/ 函数名称:out_simuseri/ 输入参数:data_buf/ 输出参数:无/ 功能说明:8位同步移位寄存器,将data_buf的数据逐位输出到simuseri_DATA/-void out_simuseri(char data_buf) char i; i=8; ACC=data_buf; do simuseri_CLK=0; simuseri_DATA=a0; simuseri_CLK=1; ACC=ACC>>1; while(-i!=0); simuseri_CLK=0;(3)数据
17、输出函数PA_out ()/-/ 函数名称:PA_out/ 输入参数:Pseri_out,需要输出的8位数据/ 输出参数:无/ 功能说明:将Pseri_out中的数据送到74165并行口A-G输出/-void PA_out (char Pseri_out ) drive74164_CLR =0; /并口输出清零 drive74164_CLR =1; /开始串行移位 out_simuseri(Pseri_out);【实例22】P0 I/O扩展并行输入口I/O口对应的地址为:1111 1110 1111 1111 B=FEFFHCPU操作指令为:#define 244_addr xbyte0XFEFFunsigned char I/O_DATA;I/O_DATA=244_addr;【实例23】P0 I/O扩展并行输出口I/O端口对应的地址为:1111 1101 1111 1111 B=FDFFHCPU操作指令为:#define 273_addr xbyte0XFDFFunsigned char I/O_DATA;244_addr =I/O_DATA;【实例24】用8243扩展I/O端口#include<reg52.h>sbit ContrBit0=P10;sbit ContrBit1=P11;sbit ContrBit2=P12
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年度技术转让合同:生物制药专利技术转让协议
- 2024至2030年中国负离子陶瓷数据监测研究报告
- 2024年发泡门板项目可行性研究报告
- 2024至2030年中国盐渍片装蘑菇数据监测研究报告
- 2024年度多功能智能家居系统开发合作协议
- 2024年中国简易放线架市场调查研究报告
- 2024年度玻璃隔断市场推广与销售代理合同
- 二零二四年度建筑工程施工承包合同协议书
- 项目临时合作协议合同范本
- 二零二四年度内蒙古自治区奶业发展基金设立合同
- 2024年羽毛球项目建设方案
- 船舶大学生职业生涯规划
- 年度销售额增长分析
- 针灸教学演示课件
- 宿舍管理行业的人际沟通与冲突解决
- 保密管理的组织架构与职责分工
- 《青蛙弗洛格的成长故事》阅读测试题
- AutoCAD 2020中文版从入门到精通(标准版)
- 八年级《中学生如何正确看待手机》主题班会课件
- 2023届中职语文专题复习《现代文阅读答题技巧》课件
- 乳腺结节课件
评论
0/150
提交评论