资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单片机的性能优劣在很大程度上取决于,I/O,端口功能的强弱,,PIC16F877 PDIP,型单片机共有,40,个管脚,,其中有,33,个是,I/O,引脚。,33,个,I/O,引脚归属于,5,个端口,分别为,PORTA,(,6,)、,PORTB,(,8,)、,PORTC,(,8,)、,PORTD,(,8,)、,PORTE,(,3,),,其中括号内的数字为该端口的位数。,第,7,章,I/O,端口,PIC16,F877,单片机有,5,个,I/O,端口,它们的设计思想和内部结构都是不同的,即使同一个端口各个引脚的内部结构也存在差异。但就其通用的输入,/,输出功能,基本具有类同的线路结构。,7.1 I/O,端口功能的通用结构,基本端口内部结构,3,个锁存器,,2,个三态门控制电路,与门和或门,场效应管。,7.1.1,设置端口的输入,/,输出状态,定义输入端线,输入“,1”,方向锁存器,D,2,Q=1,或门、与门封闭,P,、,N,截止数据输出通道封锁,数据只能输入,定义输出端线,输入“,0”,方向锁存器,D,2,Q=0,或门、与门开放,P,或,N,导通,数据输出通道打开,数据输出,7.1.2,查询端口的输入,/,输出状态,RD TRIS,:读取方向寄存器的内容,7.1.3,从端口输入数据,I/O,端口输入数据,TRIS“1”P,、,N,截止,输出截止,外部,I/O,引脚数据输入锁存器,D,3,读信号数据输入,7.1.4,从端口输出数据,I/O,端口输出数据,TRIS“0”P,或,N,导通,输出数据,输出数据“,1”,内部数据线“,1”,输出锁存器,D,1,写信号,CK,D,1,锁存,Q=0 P,导通、,N,截止,I/O,引脚“,1”,2.,输出数据“,0”,内部数据线“,0”,输出锁存器,D,1,写信号,CK,D,1,锁存,Q=1 P,截至、,N,导通,I/O,引脚“,0”,7.1.5 I/O,端口分析,1.,端口寄存器刷新,“读入”,-“,修改,”,-“,写入”操作,2.,端口驱动能力,PIC,单片机端口引脚可以直接驱动,LED,显示器和小型继电器。,3.,端口其他功能,PIC16F877,的,33,个,I/O,引脚多数都有多重复用功能。,特殊:,RB3,、,RB6,、,RB7 MPLAB-ICD,是串行编程专线。,例题,7-1 PIC,单片机直接驱动多位数码管显示,将,20H,、,21H,、,22H,数据存储器中的数(,0,9,)在,3,位数码管中显示,其中的数据会不断更新。请编写动态扫描程序。,八段显示数值(,0-9,)编码,00000000,XXXXXXXX,查表实例,b,e,g,a,f,d,c,RB0,RB1,RB2,RB3,RB4,RB5,RB6,b,c,d,e,f,g,W,寄存器,I/O B,口,01101101,00000101,01101101,g,a,f,d,c,b,e,a,;,;,数码管显示子程序,;,SHUBWEQU23H;,定义百位变量,SHUSWEQU24H;,定义十位变量,SHUGWEQU25H;,定义个位变量,CUONTEREQU26H,XSHMOVF20H,W ;,调用查表子程序,CALLCHABIAO ;,调用动态扫描子程序,MOVWFSHUBW,CALLSAOMIAO,MOVF21H,W,CALLCHABIAO,MOVWFSHUSW,CALLSAOMIAO,MOVF22H,W,CALLCHABIAO,MOVWFSHUGW,CALLSAOMIAO,RETURN,;,动态扫描显示子程序,SAOMIAO,;,SAOMIAOINCFCOUNTER ;,计数器加一,MOVFCOUNTER,W,MOVLW03H,ANDWFCOUNTER,W;,屏蔽高,6,位,低,2,位有效,ADDWFPCL,F;,循环显示指针,GOTOBACK;,不显示,GOTOLBWEI;,转向显示百位,GOTOLSWEI;,转向显示十位,GOTOLGWEI;,转向显示个位,LBWEIMOVLW04H,MOVWFPORTA;,选通百位,MOVFSHUBW,W,MOVWFPORTC;,从,C,口显示百位内容,GOTOBACK,LSWEIMOVLW02H,MOVWFPORTA;,选通十位,MOVFSHUSW,W,MOVWFPORTC;,从,C,口显示十位内容,GOTOBACK,LGWEIMOVLW01H,MOVWFPORTA;,选通个位,MOVFSHUGW,W,MOVWFPORTC;,从,C,口显示个位内容,BACKRETURN,;,查表子程序,CHABIAO,;,CHABIAOADDWFPCL,F;,查表,字形码,RETLW02H;0,RETLW0CEH;1,RETLW0A0H;2,RETLW88H;3,RETLW4CH;4,RETLW09H;5,RETLW01H;6,RETLW8EH;7,RETLW00H;8,RETLW08H;9,;,END,PIC16,F877,单片机共有六个专用功能模块,几乎每一个或多或少都与,I/O,端口有关系,有些涉及到控制引脚,有些作为数据输入输出通道。,I/O,端口寄存器:数据寄存器和方向寄存器。,基本,I/O,端口功能的设置非常方便,只要对,I/O,端口的,方向寄存器,TRIS,进行定义即可。某个引脚对应位:,设置为,1,定义为输入状态,设置为,0,定义为输出状态。,7.2 I/O,端口寄存器及其初始化,数据寄存器:,PORTA,(,05H,)、,PORTB,(,06H,)、,PORTC,(,07H,)、,PORTD,(,08H,)、,PORTE,(,09H,)。,方向寄存器:,TRISA,(,85H,)、,TRISB,(,86H,)、,TRISC,(,87H,)、,TRISD,(,88H,)、,TRISE,(,89H,)。,【,例题,7-2】,将,RC,端口的高四位和低四位分别设置为输入和输出端,而把,RB,端口全部定义为输出接口。,;,片段子程序如下:,;,ORG1000H,BANKSELTRISC;,选择数据存储器体,1,MOVLWB11110000 ;,确定,C,口方向寄存器,MOVWFTRISC;,设置,C,方向寄存器,MOVLW00H;,确定,B,口方向寄存器,MOVWFTRISB;,设置,B,方向寄存器,;,END,【,例题,7-3】,接上例,将,RC,端口的高四位和低四位分别设置为输入和输出端后,高四位引脚分别与四个输入按钮相连,低四位引脚分别与四个,LED,发光管相连,如图,7-3,所示。编程要求:当,K1,按下,,LED1,亮,1,秒;当,K2,按下,,LED2,亮,2,秒;当,K3,按下,,LED3,亮,3,秒;当,K4,按下,,LED4,亮,4,秒。,7.3,基本,I/O,应用实例,TRISCEQU87H,PORTCEQU07H,STATUSEQU03H,;,;,主程序,;,ORG0000H,NOP,BANKSELTRISC;,选择体,1,MOVLWB11110000;,定义,RC,口的高,4,位为输入,低,4,位为输出,MOVWFTRISC,BANKSELPORTC;,返回体,0,TEST1MOVLW0F0H,ANDFWPORTC,W;,屏蔽,PORTC,的低,4,位,BTFSCSTATUS,Z;,测试高,4,位是否有键输入,GOTOTEST1;,无键输入继续测试,CALLDEL10MS;,有键输入延时,10ms,MOVLW0F0H;,延时后再次判断是否仍有键输入,ANDFWPORTC,W,BTFSCSTATUS,Z,GOTOTEST1;,原有键输入为虚假信息继续测试,MOVFPORTC,W;,将原键盘输入信息保存至,25H,单元,MOVWF25H,TEST2MOVLW0F0H;,测试键释放,ANDFWPORTC,W,BTFSCSTATUS,Z;,测试高,4,位是否键释放,GOTOTEST2;,键没有释放,CALLDEL10MS;,键释放延时,10ms,MOVLW0F0H,ANDFWPORTC,W,BTFSSSTATUS,Z;,延时后再次判断键是否仍为释放,GOTOTEST2;,键没有释放继续测试键释放,FXBTFSC25H,4;,键已完全释放进入显示程序测试,SW1,键是否按下,GOTOXSH1;,键,SW1,按下转入,LED1,显示,BTFSC25H,5;,测试,SW2,键是否按下,GOTOXSH2;,键,SW2,按下转入,LED2,显示,BTFSC25H,6;,测试,SW3,键是否按下,GOTOXSH3;,键,SW3,按下转入,LED3,显示,GOTOXSH3;,键,SW4,按下转入,LED4,显示,;,点亮,LED1,;,XSH1MOVLW01H,MOVWFPORTC,CALLDELAY1S;,延时,1s,GOTOEEP,;,;,点亮,LED2,;,XSH2MOVLW02H,MOVWFPORTC,CALLDELAY1S;,延时,2s,CALLDELAY1S,GOTOEEP,;,;,点亮,LED3,;,XSH3MOVLW04H,MOVWFPORTC,CALLDELAY1S;,延时,3s,CALLDELAY1S,CALLDELAY1S,GOTOEEP,;,;,点亮,LED4,;,XSH3MOVLW08H,MOVWFPORTC,CALLDELAY1S;,延时,4s,CALLDELAY1S,CALLDELAY1S,CALLDELAY1S,EEPMOVLW00H;LED,显示全灭,MOVWFPORTC,GOTOTEST1;,返回继续测试是否有键输入,;1s,延时子程序,;,DELAY1SMOVLW06H,MOVWF20H,LOOP1MOVLW0EBH,MOVWF21H,LOOP2MOVLW0ECH,MOVWF22H,LOOP3DECFSZ22H,GOTOLOOP3,DECFSZ21H,GOTOLOOP2,DECFSZ20H,GOTOLOOP1,RETURN;,子程序返回,;,DEL10MS;10s,延时子程序(略),;,END,【,例题,7-4】,已知,RC,口连接八个,LED,显示器,以作为自动加,1,计数器的显示窗口,间隔时间为,1,秒。请编写相应的控制程序。,;,主程序,;,INCLUDEP16F877.INC,;,ORG0000H,NOP,BSFSTATUS,RP0;,选择数据存储器体,1,MOVLW00H,MOVWFTRISC;,定义,RC,端口为输出,BCFSTATUS,RP0;,选择数据存储器体,0,MOVLW00H;RC,口初始化为,0,MOVWFPORTC;,从,RC,口输出,0,LOOPINCFPORTC;PORTC,增,1,CALLDELAY1S;,调用,1s,延时程序,GOTOLOOP;,继续加,1,循环,;,调用,1S,延时子程序,;,DELAY1SMOVLW06H;,外循环常数,MOVWF20H;,外循环寄存器,LOOP1MOVLW0EBH;,中循环常数,MOVWF21H;,中循环寄存器,LOOP2MOVLW0ECH;,内循环常数,MOVWF22H;,内循环寄存器,LOOP3DECFSZ22H;,内循环寄存器递减,GOTOLOOP3;,继续内循环,DECFSZ21H;,中循环寄存器递减,GOTOLOOP2;,继续中循环,DECFSZ20H;,外循环寄存器递减,GOTOLOOP1;,继续外循环,RETURN;,子程序返回,;,END,
展开阅读全文