51单片机:P3.3口输入/P 1口输出实验
一、实验内容
1 P3.3口做输入口,外接一脉冲,每输入一个脉冲, P1口按十六进制除2(乘2)。
2. P1口做输出口,P1口接的8个发光二极管L1—L8按十六进制除2(乘2)方式点亮。
二、仿真图
三、代码实现
C语言实现:
#include<reg52.h>
#include<intrins.h>
sbit KEY=P3^3;
void delay10ms(void);
void main()
{
char num=0xfe;
KEY=1;
while(1)
{
if(KEY==0)
{
delay10ms(); //消抖
if(KEY==0)
{
P1=num;
//num=_crol_(num,1); //_crol_循环左移(乘2)
num=_cror_(num,1); //_cror_循环右移(除2)
}
while(!KEY); //消抖 刚刚松开始
}
}
}
void delay10ms(void) //误差 0us
{
unsigned char a,b,c;
for(c=1;c>0;c--)
for(b=38;b>0;b--)
for(a=130;a>0;a--);
}
汇编实现:
ORG 0000H
LJMP START
ORG 0030H
START: MOV SP, #60H
J100: MOV A,#0feH
J101: JB P3.3,J101
LCALL DELAY10MS ;消抖
JB P3.3,J101 ;P3.3电平为低吗?
RL A ;左移(乘法)
; RR A ;右移(除法)
MOV P1,A ;驱动发光二极管
J102 : JNB P3.3,J102 ;P3.3电平高?
AJMP J101 ;循环
DELAY10MS: ;误差 0us
MOV R7,#01H
DL1:
MOV R6,#26H
DL0:
MOV R5,#82H
DJNZ R5,$
DJNZ R6,DL0
DJNZ R7,DL1
RET
END