• 647.00 KB
  • 54页

单片微型计算机课件 第7章(第三版)徐惠民.ppt

  • 54页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档共5页,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
  4. 文档侵权举报电话:19940600175。
第七章并行接口7.1内部I/O口及其应用51的I/O口一般作为如下用途:P0口:低8位地址,数据P1口:I/O口P2口:高8位地址P3口:第二功能 通道位第二功能说明P3.0RTD串行口输入P3.1TXD串行口输出P3.2INT0外中断0输入P3.3INT1外中断1输入P3.4T0计数器0输入P3.5T1计数器1输入P3.6WR外部数据存储器的写选通信号P3.7RD外部数据存储器的读选通信号表3.4通道3的第二功能 7.1.1I/O口直接用于输入和输出1.输出:MOVP0,AMOVP1,R1MOVP2,@R0锁存器QQDCP读锁存器内部总线写入读引脚P1.XVcc1101 锁存器QQDCP读锁存器内部总线写入读引脚P1.XVcc1101001输入引脚数据:MOVP0,#0FFHMOVA,P0MOVR1,P0MOV@R0,P0 3.读-修改-写操作:先将端口数据读出,再运算,然后再写回端口ORLP0,#0F0HANLP2,A锁存器QQDCP读锁存器内部总线写入读引脚P1.XVcc 图7.1例7.1附图P1.0P1.1P1.3+P1.2+5V8031片外P1.31P1.3=1YP1.01P1.11读P1.0P1.1运算输出N P1.31P1.3=1YP1.01P1.11读P1.0P1.1运算输出NLOOP1:ORLP1,#08HLOOP2:MOVC,P1.3JCLOOP2ORLP1,#03HMOVE,P1.0MOVF,P1.1MOVC,EANLC,FMOVD,CMOVC,EORLC,FANLC,/DMOVP1.2,CSJMPLOOP1 图7.88155内部结构和引脚示意图ABC定时器256×8静态RAMPA0~PA7PB0~PB7PC0~PC5IO/MAD0~AD7CERDWRALERESETTINTOUT7.2.381551.8155引脚和方框图 7.2.381552.8155I/O口工作方式AB口的工作方式:输入方式无条件传送方式输出方式选通(中断)方式C口工作方式:BSTBPC5BBFPC4BINTR输出方式PC3ASTBASTBPC2ABFABFPC1AINTRAINTR输出方式输入方式PC0ALT4ALT3ALT2ALT1口中断口换缓冲器满口选通 输入51外设8155INTRBFSTBRDSTBBFINTRRD数据写入8155发中断51响应数据写入51,8155可以接受新数据 输出51外设8155INTRBFSTBWR外设数据处理完8155发中断51响应数据写入外设8155可以接受新数据STBBFINTRWR数据写入8155外设接受数据 7.2.381553.8155I/O口控制定时器高8位xxxxx101定时器低8位xxxxx100端口Cxxxxx011端口Bxxxxx010端口Axxxxx001命令/状态寄存器xxxxx000端口名称AD7AD6AD5AD4AD3AD2AD1AD08155端口地址分配表 8155工作方式控制字XXXXX000写D0D1D2D3D4D5D6D70输入1输出A口方式B口方式0禁止1允许A口中断B口中断00:ALT101:ALT210:ALT311:ALT4C口方式00无操作01停止计数10计满后停止11开始计数定时器方式 8155工作方式状态字XXXXX000读D0D1D2D3D4D5D6XB口中断请求B口缓冲器满A口中断请求A口缓冲器满A口中断允许B口中断允许定时器中断读出后清0 4.8155和51的连接(仅作为地址分析用)图7.118155和8031连接图+RESETALERDWRRESETALERDWRIO/M81558031P0.7...P0.0AD7...AD0EACE688PC5~PC0PB7~PB0PA7~PA0100000 定时器高8位00000101定时器低8位00000100端口C00000011端口B00000010端口A00000001命令/状态寄存器00000000端口名称AD7AD6AD5AD4AD3AD2AD1AD08155端口地址分配表8155端口地址00H~07H8155内部RAM地址08H~FFH 4.8155和51的连接RESETALERDWRIO/M81558031P0.7...P0.0AD7...AD0EACE688PC5~PC0PB7~PB0PA7~PA0RESETALERDWRP2.7P2.601/0基本地址:0000H~00FFH4000H~4007H 图8.98155内部结构和引脚示意图ABC定时器256×8静态RAMPA0~PA7PB0~PB7PC0~PC5IO/MAD0~AD7CERDWRALERESETTINTOUT8.2.381555.8155内部定时器的使用 定时器高8位XXXXX101定时器低8位XXXXX100端口C端口B端口A命令/状态寄存器XXXXX000端口名称AD7AD6AD5AD4AD3AD2AD1AD014位减计数器用3个控制字 8155工作方式控制字XXXXX000写D0D1D2D3D4D5D6D700无操作,不影响计数器操作01停止计数,若原来停,则无操作10计满后停止启动。若原来停,则装人长度后开始计数;若原来动,则当前计数满后,立即按新装长度开始计数; T0T1T2T3T4T5T6T7T8T9T10T11T12T13M1M200TIN单个方波01连续方波10单个脉冲11连续脉冲T13~T0计数初值(4)开始计数终止计数 00TIN单个方波01连续方波10单个脉冲11连续脉冲T13~T0计数初值(3)终止计数开始计数计数范围:0002~3FFFH21 例5.16共阳LEDDPd.gfecbaVccDPgfedcba10110000B0HC0H,F9H,A4H,B0H,99H,92H,82H,F8H,80H,98H0123456789 7.351显示/键盘系统 7.3.1共阴LED的控制与编程序DPd.gfecba3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,67H0123456789C0H,F9H,A4H,B0H,99H,92H,82H,F8H,80H,98HDPgfedcba0100111104FH=B0H 图7.138155和LED显示器的接口01001111PA7...PA0PC5...PC08155110111001000位码10110000段码(共阳)0902030508087AH7FH 设置8155设置显示缓冲器首地址设置起始位码从C口送新位码从A口送新段码修改数据指针和位码6LED都显示一遍NRETY?找段码?如何判断 DISP:MOVA,#05H;8155方式字MOVDPTR,#8000H;8155命令口地址MOVX@DPTR,A;写入方式控制字MOVR0,#7AH;送数据块首地址MOVR3,#01;位码,最右一位先亮MOVA,R3LD0:MOVDPTR,#8003H;8155C口地址MOVX@DPTR,A;位码从C口输出MOVDPTR,#8001H;8155A口地址MOVA,@R0;待显示数据送AADDA,#13;查表修正量MOVGA,@A+PC;查表取段码MOVX@DPTR,A;A口输出段码p.214程序 ACALLDL1;延时1msINCR0;修改数据指针MOVA,R3JBACC.5,LD1;6位数都显示则结束RLA;没显示完,位码左移MOVR3,A;位码暂存AJMPLD0;转回,显示下一个数码LD1:RETDTAB:DBC0H,F9H,A4H,B0H,99H 图8.156×5非编码键盘及其接口PC5PC4PC3PC2PC1PC0PB4...PB08155543210432100147F258E369DCBAF7BDE11011111101001000行坐标08H列信号1DH送行坐标读列信号行坐标变成行号取列信号特征值合成键特征值3D转换成键值A??8.3.3非编码键盘和51接口 关LED送行坐标,读列信号全盘有键按下准备下行扫描RET扫描完成NY存行坐标和列信号NRETN全盘有2键按下Y延时20msY调用KCODEY存行坐标和列信号NN该行有键按下键盘扫描程序NEXT1NEXT2NEXT3NEXT4NEXT4LOOP SCAN:MOVA,#0FFHMOVDPTR,#8001H;A口地址MOVX@DPTR,A;关显示器MOVA,#3FH;使行信号全为0MOVDPTR,#8003H;C口地址MOVX@DPTR,A;C口输出MOVDPTR,#8002H;B口地址MOVXA,@DPTR;读列信号到B口ANLA,#1FHCJNEA,#1FH,NEXT1;列信号不为全1,则转移SJMPNEXT4;无键按下,结束NEXT1:ACALLD20ms;调20ms延迟子程序,消抖动CLRCMOVR1,#01H;准备行扫描MOVR2,#00H;设窜键标志LOOP:INCDPTR;C口地址p.217程序 MOVA,R1MOVX@DPTR,A;检测某一行是否按键MOVDPTR,#8002H;B口地址MOVXA,@DPTR;输入列信号值ANLA,#1FHCJNEA,#1FH,NEXT2;列信号不为全1,该行有键按下NEXT2:INCR2;R2加1表示查到一处按键CJNER2,#01H,NEXT4;R2不等于1即表示窜键MOVR4,A;存按键的列坐标MOVA,R1MOVR3,A;存按键的行坐标NEXT3:MOVA,R1RLCA;准备扫描检测下一行MOVR1,A;暂存CJNEA,#40H,LOOP;未到最后一行则循环AJMPKCODE;转至键码子程序RETCLRA;A=0表示这次扫描无效NEXT4:RET 送行坐标读列信号行坐标变成行号取列信号特征值合成键特征值3D转换成键值AKCODE(R3)=行坐标(R4)=列信号行坐标右移次数变成行号,暂存R1高4位取列信号低4位和R1高4位合并成为键特征值放人A倒查表得到键值放人ARET KCODE:MOVR1,#0;行坐标初值为0MOVA,R3;SCAN中的行坐标码送ACLRC;准备移位LOOP:RRCA;右移一位JZNEXT1;为0则移位结束INCR1;行坐标值加1SJMPLOOP;NEXT1:MOVA,R1;SWAPA;行坐标值移到高4位MOVR1,A;行坐标值暂时存放R1MOVA,R4;SCAN中的列坐标码送AANLA,#0FH;取低4位ORLA,R1;形成键特征值MOVB,A;暂时存放Bp.218程序 KCODE:MOVDPTR,#KTAB;准备倒查表MOVR0,#0;倒查表次数计数器CLRA;从0查起REPE:MOVCA,@A+DPTR;CJNEA,B,NEXT2;与键特征码不等则转移SJMPRESU;相等则结束查表NEXT2:INCR0;计数值加1MOVA,R0;准备检查下一个数SJMPREPE;RESU:MOVA,R0;存放键顺序值RETKTAB:DB:0FH,1FH,17H,1BH,2FH,27H,2BHDB:3FH,37H,3BH,3DH,2DH,1DHDB:0DH,0BH, 7.3.3显示/键盘系统(硬件)80318155键盘显示LED驱动器C口B口A口驱动器 7.3.3显示/键盘系统(软件)8155初始化显示一遍数据扫描键盘有键按下数字键处理是数字键命令键处理K1KmNNYY…… START:MOVDPTR,#8000HMOVA,#05HMOVX@DPTR,AACALLDISPACALLSCANJZSTARTACALLKCODECJNEA,#10H,CONTCONT:JCNUMMOVDPTR,#JTABSUBBA,#10HRLAJMP@A+DPTRJTAB:AJMPK1AJMPK2…………NUM:………… 7.451内部定时/计数器及其应用特点:(1)多种工作方式,用于计数和定时;(2)加计数,模值可变;(3)全1变成全0后,可以发出中断申请;(4)TX=THX+TLX7.4.1工作方式T0分为两个8位计数器方式38位计数,自动再装入方式方式216位计数器方式113位计数器方式0功能工作方式 7.4.1工作方式1.方式0:13位计数器THxTLx0074计数输入TFx计数1000,装入213-1000=1110,0000,1,1000THx=E0HTLx=18H装数、加计数、全1变全0、发中断申请 7.4.1工作方式2.方式1:16位计数器THxTLx0077计数输入TFx计数1000,装入216-1000=1111,1100,0001,1000THx=FCHTLx=18H装数、加计数、全1变全0、发中断申请 7.4.1工作方式3.方式2:8位计数,自动再装入方式计数200,装入28-200=0011,1000THx=38HTLx=38HTHx和TLx装数、TLx加计数、全1变全0、发中断申请(THx)TLxTLx重新计数,THx内容不变THxTLx0077计数输入TFx 7.4.1工作方式4.方式3:T0分为两个8位计数器TH0TL00077计数输入TF0内部脉冲定时输入TF1TH1TL10077内部脉冲定时输入TF1X 7.4.2控制1.定时器方式控制寄存器TMOD(89H)00方式001方式110方式211方式3计数方式定时方式10与INTX有关1与INTX无关0M0M1GATEM0M1GATEC/TC/T控制T0控制T1 图7.17计数方式的控制逻辑(以T1为例)+中断开放ET1TR1GATE1TNT1晶振÷12计数器TF1中断T1C/T=0C/T=111011开始计数1 2.定时/计数器的启动和中断控制TR0TF0TR1TF1TCON8C8D8E8F88H1:开始计数T10:停止计数T01:溢出中断T10:未溢出T0ET0EAIEA9AFA8HABET11:允许中断T10:禁止中断T0 初始化(1)写TMOD,确定工作方式;(不能位寻址)(2)确定计数初值,写入TH1,TL1,TH0,TL0(3)写IE,开放定时器中断;(4)写TCON的TR1或者TR0,开启定时器。M0M1GATEM0M1GATEC/TC/TTR0TF0TR1TF1TCON8C8D8E8F88HET0EAIEA9AFA8HABET1 计数初值的计算:M:计数最大值,28,213,216X:初值计数方式:X=M-计数模值例如:计数模值1000,X=216-1000=1111,1100,0001,1000THx=FCHTLx=18HX=213-1000=1110,0000,1,1000THx=E0HTLx=18HX=28-1000<0??? 计数初值的计算:M:计数最大值,28,213,216X:初值定时方式:X=M–计数模值=M–(定时值/计数周期T)例如:定时值1ms(1)Fsc=12M,T=12*Tsc=1us计数模值=1000,可以用方式0,1(2)Fsc=6M,T=12*Tsc=2us计数模值=500,可以用方式0,1晶振÷12计数器TF1中断T1C/T=0C/T=1TTsc=1/Fsc 7.4.3应用举例例7.4输出周期为2ms的方波,Fsc=12M1ms1ms1msX=213–计数值=213-(1ms/1us)=8192-1000(方式0、1皆可)=7192=1110000011000B MOVTMOD,#00HMOVTH0,#0E0HMOVTL0,#18HSETBEASETBET0SETBTR0SJMP$ORG000BHAJMPBRT0…………BRT0:MOVTH0,#0E0HMOVTL0,#18HCPLP1.0RETI MOVTMOD,#00HSETBTR0LOOP:MOVTH0,#0E0HMOVTL0,#18HJNBTF0,$CPLP1.0CLRTF0SJMPLOOP例7.5输出周期为2ms的方波,Fsc=12M(检询方式)1ms1ms1ms 7.4.3应用举例计数值=2s/1us=106方式1:计数初值=216–106<0最大计数模值216计数初值=216–216=01s=20ms*50=50ms*20=100ms*10例76输出周期为2s的方波,Fsc=12M1s1s1s ORG000BHAJMPBRT5…………ORG2000HSTART:MOVTMOD,#01HMOVTH0,#0B1HMOVTL0,#0E0HMOVIE,#82HSETBTR0MOVR0,#50SJMP$…………BRT5:DJNZR0,NEXTCPLP1.0MOVR0,#50NEXT:MOVTH0,#0B1HMOVTL0,#0E0HRETI