8255A仿真实例:
如果对8255A还不了解,请转到51单片机的系统扩展之8255A(点击转到该文章)。
本实例要求:
开始运行时,按钮S可以控制D1点亮。按下【方波】按钮,S不能控制灯点亮,PC0能输出方波。
按[灯控制]按钮,PC0停止输出方波,按钮S能控制D1点亮。【方波】和【灯控制】的功能通过中断服务程序实现。
1.仿真测试:
2.实验源程序:
/*要求:1.按下'灯控制'键,按下S键LED可以点亮
2.按下'方波'键,S键不起作用,产生方波
*/
#include <reg51.h>
#include <absacc.h>
sbit k1=P3^2;
sbit k2=P3^3;
#define PA XBYTE[0xff20]//A
#define PB XBYTE[0xff21]//B
#define PC XBYTE[0xff22]//C
#define PK XBYTE[0xff23]//控制
typedef unsigned char u8;
typedef unsigned int u16;
/*Function:延时函数*/
void delay(u16 i)
{
while(i--);
}
void Init(){
EA=1;//开中断
EX0=1;//允许INT0中断
EX1=1;//允许INT1中断
IT0=1;//跳沿触发
IT1=1;//跳沿触发
}
/*Function:主函数*/
void main()
{
Init();
PK=0x82;//初始化
PA=PB;
}
/*Function:S键按下,led点亮*/
void led()
{
while(1)
{
PA=PB;
if(k1==0)
{
return ;
}
}
}
/*Function:方波产生函数*/
void squareSignal()
{
while(1)
{
PC=0xfe;
delay(1000);
PC=0xff;
delay(1000);
if(k2==0)
{
return ;
}
}
}
/*Function:外部中断0服务程序*/
void IntW0() interrupt 0
{
squareSignal();
}
/*Function:外部中断1服务程序*/
void IntW1() interrupt 2
{
led();
}
3.实验电路图: