[计算机软件及应用]例  子  讲  解_第1页
[计算机软件及应用]例  子  讲  解_第2页
[计算机软件及应用]例  子  讲  解_第3页
[计算机软件及应用]例  子  讲  解_第4页
[计算机软件及应用]例  子  讲  解_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

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

文档简介

例 子 讲 解,如右图所示,将P1口的P1.4P1.7作为输入位, P1.0P1.3作为输出位。要求利用8031将开关所设的数据读入单片机,并依次通过P1.0P1.3输出,驱动发光二极管,以检查P1.4P1.7输入的电平情况(高电平LED亮)。现要求采用中断触发方式, 每中断一次完成一次操作。,程序如下: ORG 0000H AJMP MAIN ORG 0003H AJMP INTER ORG 0030HMAIN:SETB EX0 SETB IT0 SETB EAHERE:SJMP HERE,中断服务子程序:(输入、显示) ORG 0200HINTER:MOV P1,#0F0H MOV A,P1 SWAP A MOV P1,A RETI END,如右图所示的中断电路可实现系统的故障显示。当系统的各部分正常工作时,4个故障源的输入均为低电平,显示灯全不亮。当有某个部分出现故障时,则相应的输入线由低电平变为高电平,相应的发光二极管点亮。,程序如下: ORG 0000H AJMP MAIN ORG 0003H AJMP INTER ORG 0030HMAIN:SETB EX0 SETB IT0 SETB EAHERE:SJMP HERE,中断服务子程序: ORG 0100HINTER:JNB P1.0, L1 SETB P1.1L1: JNB P1.2, L2 SETB P1.3L2: JNB P1.4, L3 SETB P1.5L3: JNB P1.6, L4 SETB P1.7L4: RETI END,某工业监控系统具有温度、压力、pH值等多路监控功能。在pH值7时将向CPU申请中断,CPU响应后令P3.0引脚输出高电平,经驱动使加碱管道电磁阀接通1秒,以调整pH值。一、电路及分析: 中断请求输入相当于“四输入的与或门”,外电路上升沿有效。 P1.0P1.3用于查询中断源。 P1.4P1.7用于清除中断请求。,主程序及中断程序入口部分: ORG 0000H LJMP MAIN LJMP INTX0 ORG 0030HMAIN:MOV SP,#5FH SETB EX0 SETB IT0 ;下降沿触发 SETB EA SJMP $,查询部分:INTX0:CLR EA PUSH PSW PUSH A SETB EA JB P1.0, DV1 JB P1.1, DV2 JB P1.2, DV3 JB P1.3, DV4EXIT: CLR EA POP A POP PSW SETB EA RETI,各装置的中断服务程序部分:DV1: (装置1的中断服务程序) : LJMP EXITDV2: (装置2的中断服务程序) : LJMP EXITDV4: (装置4的中断服务程序) : LJMP EXIT,装置3的中断服务程序:DV3:SETB P3.0 LCALL DELAY CLR P3.0 CLR P1.6 SETB P1.6 LJMP EXIT延时时间计算:8+(2+(2+4*249+2)*100 +2)*10+8=1000056S1S,延时1秒的子程序: (设晶振为12MHz)DELAY:PUSH 30H PUSH 31H PUSH 32H MOV 32H,#10DY1: MOV 31H,#100DY2: MOV 30H,#249LY3: NOP NOP DJNZ 30H,DY3 DJNZ 31H,LY2 DJNZ 32H,LY1 POP 32H POP 31H POP 30H RET,应用举例设定时器T0选择工作模式0,定时时间为1ms, osc=6MHz。试确定T0初值,计算最大定时时间T。 解: (1)求T0的初值X由公式:t=(213-T0初值)*机器周期Tcy t=1ms=1000s 机器周期Tcy=12/osc=12/6000000s=2s得 1000=( 213 -X)*2所以初值 X=8192-500=7692=1111000001100BT0的低5位:01100B=0CHT0的高8位:11110000B=F0H(2)最大定时时间T 当T0的初值=0时为最大定时时间 T=(213 -0)*2=8192*2s =16384 s =16.384ms,7692 32商为高8位,余数为低5,设T1以模式0定时,定时时间为1ms, osc=6MHz,编程实现其定时功能。解: (1)计算初值(同上,略) F0HTH0,0CHTL0(2)程序清单 ORG 0000HRESET:AJMP MAIN ORG 000BH AJMP IT0P;主程序 ORG 0100HMAIN: MOV SP,#5FH,MOV TL0,#0CHMOV TH0,#0F0HSETB TR0SETB ET0SETB EASJMP $,;中断服务程序 ORG 0120HIT0P:MOV TL0,#0CH MOV TH0,#0F0H CPL P1.0 RETI,利用T0的工作模式0产生1ms的定时,编程实现在P1.0引脚上输出周期为2ms的方波。设单片机的晶振频率osc=12MHz。解: 方法:定时1ms,对P1.0取反,然后继续定时(1)设置模式字 TMOD= * 0000B =00000000B=00H (2)计算初值由公式:t=(213-T0初值)*机器周期 t=1ms=1000s,机器周期Tcy=12/osc=12/12000000s=1s得 1000=( 213 -X)*1=(8192-X)*1所以初值 X=7192=1110000011000BT0的低5位:11000B=18HT0的高8位:11100000B=E0H,7192 32商为高8位,余数为低5位,(3)程序清单方法一:中断方式 ORG 0000HRESET:LJMP MAIN ORG 000BH LJMP CTC0;主程序 ORG 0030HMAIN: MOV SP,#5FH MOV TMOD,#0 MOV TL0,#18H MOV TH0,#0E0H SETB EA SETB ET0 SETB TR0 SJMP $,;中断服务程序 ORG 0100HCTC0:MOV TL0,#18H MOV TH0,#0E0H CPL P1.0 RETI,方法二:查询方式 ORG 0000HSTART:MOV SP,#5FH MOV TMOD,#0 MOV TL0,#18H MOV TH0,#0E0H SETB TR0LOOP: JBC TF0,NEXT SJMP LOOPNEXT: MOV TL0,#18H MOV TH0,#0E0H CPL P1.0 SJMP LOOP,可替换为:LOOP:JNB TF0,$ CLR TF0 MOV TL0,#18H :,用定时器T1产生一个50Hz的方波,由P1.1输出。使用程序查询方式,设osc=12MHz。解: (1)计算初值方波周期T为:T=1/50s=0.02s=20ms定时时间为:t=T/2=10ms=10000s 由公式: t=(216-X)*机器周期Tcy因Tcy=1s,得10000= (216-X)*1, 10000=65536-XX=55536=D8F0H,55536 256商为高8位,余数为低8位,(2)模式字TMODTMOD=0001*B=10H (3)源程序 ORG 0000H MOV TMOD,#10H SETB TR1LP: MOV TH1,#0D8H MOV TL1,#0F0H JNB TF1,$ CLR TF1 CPL P1.1 SJMP LP,当P3.4引脚上输入的电平发生负跳变时,从P1.0输出一个500s的同步脉冲,请编程实现该功能。 设osc=6MHz。解题思路: 先令T0以模式2计数,其初值设为FFH,当P3.4引脚上输入的电平发生负跳变时,计数器加1使溢出标志置1;然后令T0以模式2定时,使P1.0输出一个500s的同步负脉冲。,解:1、 T0以模式2计数 (1)计数初值 X=0FFH (2)模式字 TMOD=*0110B=06H 2、 T0以模式2定时 (1)定时初值X计算 t=500 s , Tcy=2 s由公式: t=(28-X)*机器周期Tcy得 500=(256-X)*2 X=6 (2)模式字 TMOD=*0010B=02H,3、程序清单: ORG 0000HSTART:MOV TMOD,#6 ; T0以模式2计数 MOV TH0,#0FFH MOV TL0,#0FFH SETB TR0 JNB TF0,$ CLR TF0 CLR TR0 MOV TMOD,#2 ; T0以模式2定时,MOV TH0,#06 MOV TL0,#06 CLR P1.0 SETB TR0 JNB TF0,$ SETB P1.0 CLR TF0 CLR TR0 SJMP START,利用定时器T1的模式2对外部信号计数,要求每计满100次对P1.0端取反。解:(1)计算计数初值X 100=28-X X=256-100=156=9CH (2)模式字 TMOD=0110*B=60H (3)程序清单 ;用中断方式 ORG 0000HMAIN:MOV TMOD,#60H MOV TL1,#156 MOV TH1,#156 MOV IE,#88H SETB TR1 SJMP $,;中断服务程序ORG 001BHCPL P1.0RETI,设某单片机系统中已经使用了两个外部中断源,并置定时器T1为模式2,作串行口波特率发生器用。现要求再增加一个外部中断源,并由P1.0引脚输出一个5kHz的方波。 osc=12MHz。解:1、确定定时器的工作方式 将T0设置为模式3计数,T0的引脚接外部中断源,TL0的计数初值设为FFH,下降沿产生中断;T0的TH0为8位定时器,可产生方波,用中断方式;T1设为模式2定时,作串行口的波特率发生器。2、计算各个初值 (1)TL0的初值 为0FFH (2)TH0的初值产生5kHz的方波的周期为:T=1/5000s=0.2ms=200 s,因此TH0的定时时间为:t=T/2=100 s , Tcy=1 s得 100=(256-X)*Tcy X=256-100=156 TH1=TL1,由波特率值确定3、TMOD值: 00100111B=27H TCON值: 01010101B=55H4、程序清单: (1)中断入口部分: ORG 0000HSTART:LJMP MAIN LJMP E0INT ORG 000BH LJMP TL0INT,ORG 0013HLJMP E1INTORG 001BHLJMP TH0INT,(2)主程序部分:MAIN:MOV SP,#5FH MOV TMOD,#27H MOV TL0,#0FFH MOV TH0,#156 MOV TH1,#data MOV TL1,#data MOV IE,#9FH ;开中断 :,(3)中断处理程序部分: TL0溢出中断服务程序:TL0INT:MOV TL0,#0FFH (外部中断处理) RETI TH0溢出中断服务程序:TH0INT:MOV TH0,#156 CPL P1.0 ERTI (其它外部中断服务程序略),设某单片机系统的晶振频率为6MHz,试编写利用T0产生1s定时的程序。解: 1、确定定时器T0的工作模式 Tcy=2 s模式0最长可定时:2s*8192=16.384ms模式1最长可定时:2s*65536=131.072ms模式2最长可定时:2s*256=512s 选模式1,每隔100ms中断一次,中断10次为1s。2、计算初值X 100000 s=(65536-X)*2 s X=65536-50000=15536=3CB0H3、实现的方法:(1)计数器法;(2)中断循环程序法,15536 256商为高8位,余数为低8位,4、程序清单:(1)中断入口和主程序部分: ORG 0000HSTART:LJMP MAIN ORH 000BH LJMP SERVE ORG 0030HMAIN:MOV SP,#5FH MOV B,#10 MOV TMOD,#01H MOV TL0,#0B0H MOV TH0,#3CH SETB TR0 ;开运行 SETB ET0 ;开中断 SETB EA SJMP $,(2)中断服务程序部分:SERVE: MOV TL0,#0B0H MOV TH0,#3CH DJNZ B,LOOP CLR TR0LOOP:RETI END,8031与8155的连接方法,设置8155,使用I/O口和定时器:使A口为基本输入方式,B口为基本输出方式;定时器作方波发生器,对输入的脉冲进行24分频。试编程实现之。 思路:先对定时器赋初值和设定输出波形,向定时器/计数器寄存器中写;再设定A、B口的工作方式和传输方向,并启动定时器工作,向命令寄存器中写。 程序段如下:,(1)对定时器赋初值和设定输出波形: 定时器/计数器寄存器地址:7F04H、7F05HMOV DPTR,#7F04HMOV A,#24MOVX DPTR,A INC DPTRMOV A,#01000000BMOVX DPTR,A(2)设定A、B口的工作方式并启动定时器工作: 命令寄存器地址:7F00HMOV DPTR,#7F00HMOV A,#11000010BMOVX DPTR,A,8051单片机的时钟振荡频率为11.0592MHz,选用定时器T1工作于模式2作为波特率发生器,波特率为2400b/s。求T1的初值X,并编写初始化程序段。解:设波特率加倍位SMOD=0 X=256-11.0592 106 (0+1)/(3842400) =244 =F4H,初始化程序段: :MOV TMOD,#20HMOV TH1,#0F4HMOV TL1,#0F4HSETB TR1 :,用8051串行口外接CD4049或74LS164串入-并出移位寄存器,扩展8位并行口。8位并行口的每位都接一个发光二极管,要求发光二极管从左到右他延迟的轮流显示,并且不断循环。设发光二极管为共阴极接法,如下图所示。 STB为高电平时允许并行输出,解:采用中断方式发送;逐位输出高电平使二极管轮流发光;显示延时通过调用延时子程序实现。 程序如下:,用8051的串行口以方式1发送ASCII数据块,要求波特率为1200b/s,进行校验。试编写采用查询方式发送的程序。设数据在片内RAM的20H3FH单元, osc=11.0592MHz。解:(1)最高位作校验位,采用奇校验,P最高位 (2)用定时器/计数器1以模式2定时,作为波特率 发生器;计算初值,由初值X= 2N - osc(SMOD+1)/(384波特率值)这里 N=8, osc=11.0592MHz 波特率为1200b/s, 取 SMOD=0 PCON=00H得 初值X=232D=0E8H。 (3)TMOD=00100000B=20H (4)SCON=01000000B=40H,(5)程序清单: 主程序,用8051的串行口以方式1接收带奇偶校验位的数据块(与上题配合)。试编写采用查询方式的程序,接收的数据放在片内RAM的20H3FH单元。 osc=11.0592MHz。解:(1)最高位为校验位(采用奇校验),应去掉 (2)用定时器/计数器1以模式2定时,作为波特率 发生器;计算初值,由初值X= 2N - osc(SMOD+1)/(384波特率值)这里 N=8, osc=11.0592MHz 波特率为1200b/s, 取 SMOD=0 PCON=00H得 初值X=232D=0E8H。 (3)TMOD=00100000B=20H (4)SCON=01010000B=50H,(5)程序清单: 主程序,8031串行口按双工方式收发ASCII字符,最高位用来作奇偶校验位,采用奇校验,要求传送的波特率为1200b/s,用

温馨提示

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

评论

0/150

提交评论