【大学】单片机原理及应用_第1页
【大学】单片机原理及应用_第2页
【大学】单片机原理及应用_第3页
【大学】单片机原理及应用_第4页
【大学】单片机原理及应用_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

单片机原理及应用2023/4/141编辑ppt总结第一章

51系列第二章

I/O口,CPU,存储器第三章寻址方式,各类指令的格式、功能字节数、周期数第四章子程序,查表程序,分支程序,循环程序2023/4/142编辑ppt第五章

1、中断TCON、SCON、IE、IP

各中断源的入口地址、请求标志、撤消中断服务程序

2、定时器/计数器

TCON、TMODT0、T1的定时、计数初值,启动,溢出

4种工作方式2023/4/143编辑ppt第六章

1、SCON、PCON

发送、接收的SBUF,指令,完成标志

4种工作方式的帧数据、波特率2、存储器的扩展:地址3、I/O口扩展:81554、LED显示,键盘5、A/D、D/A2023/4/144编辑ppt指令应用实例

【例1】

在程序存储器中有一平方表,从2000H单元开始存放,如图所示,试通过查表指令查找出6的平方。解:采用DPTR作为基址寄存器的查表程序比较简单,查表范围大,也容易理解。只要预先使用一条16位数据传送指令,把表的首地址2000H送入DPTR,然后进行查表就可以了。相应的程序如下:

MOVA,#6 ;设定备查的表项

MOVDPTR,#2000H;设置DPTR为表始址

MOVCA,@A+DPTR

;将A的平方值查表后送A

如果需要查找其他数的平方,只需要将累加器A的内容(变址)改一下即可。2000H02001H12002H42003H92004H162005H252006H362007H492008H642009H812023/4/145编辑ppt指令应用实例

【例2】

试编程计算5678H~1234H的值,结果保存在R6、R5中。解:减数和被减数都是16位二进制数,计算时要先进行低8位的减法,然后再进行高8位的减法,在进行低8位减法时,不需要考虑借位,所以要在减法指令之前将借位标志清0。程序如下:

MOVA,#78H ;被减数低8位送累加器

CLR C ;清进位标志位CY

SUBBA,#34H ;减去减数

MOVR5,A ;保存低8位

MOVA,#56H ;被减数高8位送累加器

SUBBA,#12H ;减去减数

MOVR6,A ;保存高8位2023/4/146编辑ppt指令应用实例

【例3】

拆字程序:在内部RAM40H单元保存有以压缩BCD码表示的2位十进制数,编程将它们拆开,分别保存在内部RAM的41H、42H单元。解:程序如下:

MOVA,40H ;压缩BCD码送累加器

ANLA,#0FH ;高4位清0,保留低4位

MOV41H,A ;保存低4位BCD码

MOVA,40H ;取数据

MOVA,#0F0H ;低4位清0,保留高4位

SWAPA ;高低位交换

MOV42H,A ;保存高4位BCD码2023/4/147编辑ppt指令应用实例

【例4】

设(SP)=30H,符号地址PROG1指向程序存储器的5678H单元,当前PC值为0123H。从0123H处执行指令“LCALLPROG1”,分析执行后PC、SP的值和相关存储器的内容。解:执行过程为:

(PC)+3=0123H+3=0126H。将PC内容压入堆栈:向(SP)+1=31H中压入26H,向(SP)+1=32H中压入01H,(SP)=33H。将PROG1=5678H送入PC,即(PC)=5678H。程序转向以5678H为首地址的子程序执行。最终执行结果是:(PC)=5678H、(SP)=33H、(31H)=26H、(32H)=01H。2023/4/148编辑ppt指令应用实例

【例5】

比较内部RAM中40H、41H两个单元中的数据大小,将大的数送至42H单元。解:程序如下:

MOVA,40H ;取第一个数

CJNEA,41H,NEQU ;比较,不相等转移至NEQU处

MOV42H,40H;相等,(40H)→42H

SJMPTOOFF ;完成,转移至结尾退出

NEQU:JCLESS ;若CY=1,说明(40H)<(41H)转移

MOV42H,40H ;(40H)>(41H),(40H)→40H

SJMPTOOFF ;完成,转移至结尾退出

LESS:MOV42H,41H ;(40H)<(41H),(41H)→40HTOOFF:RET2023/4/149编辑ppt程序设计实例【例1】

P1口做输出口,控制8盏灯(P1口输出低电平时灯被点亮),编程使灯按以下规律显示:同一时间只有两盏灯点亮,从P1.7、P1.6控制的灯开始,每盏灯闪烁5次,再移向下两盏灯,同样闪烁5次,循环往复,延时时间1s。晶振频率6MHz。

解:主程序是双重循环程序,循环移位是外循环,灯闪烁5次是内循环,内循环程序不能与外循环程序交叉。延时1S采用三重循环程序。晶振频率为6MHz时,机器周期为2s,延时程序的延时时间计算方法如下:

{1+[1+(1+(1+1+2)×125+2)×200+2]×5+2}×2s=1006036s=1.006036s

2023/4/1410编辑ppt4.3.2循环程序设计实例地址机器码程序注释ORG0000H0000H020030LJMPMAINORG0030H0030H745FMAIN:MOVA,#5FH;灯点亮初始状态0032H7905LP1:MOVR1,#5;循环闪烁次数0034HF590LP2:MOVP1,A0036H120100LCALLDELAY;延时1s0039H7590FFMOVP1,#0FFH003CH120100LCALLDELAY;延时1s003FHD9F3DJNZR1,LP2;循环闪烁次数不够5次,继续0041H03RRA;右移一位0042H03RRA;再右移一位0043H80EDSJMPLP1主程序:2023/4/1411编辑ppt地址机器码程序注释ORG0100H0100H7B05DELAY:MOVR3,#5;延时1s的循环次数0102H7CC8DEL3:MOVR4,#200;延时200ms的循环次数0104H7D7DDEL2:MOVR5,#125;延时1ms的循环次数0106H00DEL1:NOP0107H00NOP0108HDDFEDJNZR5,DEL1010AHDCF9DJNZR4,DEL2010CHDBF5DJNZR3,DEL3010EH22RET;子程序返回END延时子程序:2023/4/1412编辑ppt中断的应用实例

【例1】P1口做输出口,控制八只灯(P1口输出低电平时灯被点亮),利用手控单脉冲信号作为外部中断信号,控制八只灯按一定的规律循环点亮。解:手控单脉冲信号作为外部中断信号由INT0(P3.2)管脚输入,设置中断允许寄存器IE中的EA、EX0位为1;只有一个中断源可不设置优先级别;中断触发方式设为边沿触发,控制位IT0应设置为1。2023/4/1413编辑pptORG0000H;程序入口0000H020050LJMPMAIN;转向主程序ORG0003H;外部中断0的入口地址0003H020100LJMPINT;转向中断服务程序ORG0050H0050HD2AFMAIN:SETBEA0052HD2A8SETBEX00054HD288SETBIT0;中断触发方式为边沿触发0056H74FEMOVA,#0FEH0058HF590MOVP1,A005AH80FESJMP$ORG0100H0100H23INT:RLA;中断服务程序0101HF590MOVP1,A0103H32RETIEND参考程序:2023/4/1414编辑pptT及应用实例【例2】

在P1.0输出周期为1ms(频率1kHz)的方波,采用定时器1方式0设计程序,晶振频率为12MHz。解:根据题意,只要使P1.0每隔500s取反一次即可得到周期1ms的方波,因而T1的定时时间为500s。用定时器1方式0时,定时器/计数器方式寄存器TMOD高4位中的M1M0应取00;可设定为软件启动定时器,故GATE取0;因为用定时功能,C/T取0;定时器方式寄存器TMOD低4位为无关位,一般都取0,所以TMOD应为00H。晶振频率为12MHz,T机=12/fosc=12/(12106)=1s

定时初值X=213-T/T机=213-500/1=8192-500=7692=1E0CH=1111000001100B

因TL1的高3位未用,对计算出的定时初值X要进行修正,即在低5位前插入3个0,修正后的定时初值

X=1111000000001100B=F00CH2023/4/1415编辑ppt6.3.2方式0及应用实例地址机器码程序注释ORG0000H0000H020050LJMPMAINORG0050H0050HD290MAIN:SETBP1.0;置P1.0初始状态0052H758900MOVTMOD,#00H;置定时器1为工作方式00055H758DF1MOVTH1,#0F0H;置500s定时初值0058H758B0CMOVTL1,#0CH005BHD28ESETBTR1;启动定时器1005DH108F02LP1:JBCTF1,LP2;查询计数溢出0060H80FBSJMPLP1;未到500s继续计数0062H758DF1LP2:MOVTH1,#0F0H;重新置500s定时初值0065H758B0CMOVTL1,#0CH0068HB290CPLP1.0;输出取反006AH80E4SJMPLP1;重复循环END参考程序:2023/4/1416编辑ppt串行口应用举例【例3】设甲乙机以串行方式1进行数据传送,fosc=11.0592MHz,波特率为1200b/s。甲机发送的16个数据存在内RAM40H~4FH单元中,乙机接收后存在内RAM50H为首地址的区域中。

T1初值=256-×=232=E8H3212×1200解: 串行方式1波特率取决于T1溢出率(设SMOD=0), 计算T1定时初值: 11059200202023/4/1417编辑ppt甲机发送子程序:

MOVTMOD,#20H ;置T1定时器工作方式2 MOVTL1,#0E8H ;置T1计数初值

MOVTH1,#0E8H ;置T1计数重装值

CLRET1 ;禁止T1中断

SETBTR1 ;T1启动

MOVSCON,#40H ;置串行方式1,禁止接收

MOVPCON,#00H ;置SMOD=0(SMOD不能位操作)

CLRES ;禁止串行中断

MOVR0,#40H ;置发送数据区首地址

MOVR2,#16 ;置发送数据长度

MOV A,@R0 ;读一个数据

MOV SBUF,A ;发送

JNB TI,$ ;等待一帧数据发送完毕

CLR TI ;清发送中断标志

INC R0 ;指向下一字节单元

DJNZ R2,TRSA ;判16个数据发完否?未完继续

RET ;TXDA:

TRSA:2023/4/1418编辑ppt

MOVTMOD,#20H ;置T1定时器工作方式2 MOVTL1,#0E8H ;置T1计数初值

MOVTH1,#0E8H ;置T1计数重装值

CLRET1 ;禁止T1中断

SETBTR1 ;T1启动

MOVSCON,#40H ;置串行方式1,禁止接收

MOVPCON,#00H ;置SMOD=0(SMOD不能位操作) CLRES ;禁止串行中断

MOVR0,#50H ;置接收数据区首地址

MOVR2,#16 ;置接收数据长度

SETBREN

;启动接收

JNB RI,$ ;等待一帧数据接收完毕

CLR RI ;清接收中断标志

MOV A,SBUF ;读接收数据

MOV @R0,A ;存接收数据

INC R0 ;指向下一数据存储单元

DJNZ R2,RDSB ;判16个数据接收完否?未完继续

RET;乙机接收子

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论