基于可编程定时计数器8253的波形发生器
首先,在proteus里选择相关器件并连接电路如图所示:
电路如图所示,单片机通过总线方式和8253接口。
P0口数据总线和8253的数据总线连接,P0口经过74LS373地址锁存器锁存低8位地址,其中低两位地址线A0和A1与8253的A0、A1连接,单片机的地址锁存信号ALE作74LS373的锁存信号,单片机的读控制/RD和写控制/WR分别与8253的/RD和/WR信号相连。
8253的片选信号/CS由单片机最高位地址P2.7控制,由图可知8253的三个计数器数据口和命令口地址为0x7ff8~0x7ffb。计数通道0的时钟信号频率fclk0=1.19318MHz,GATE0信号由单片机P1.0控制。P1.1、P1.2口控制脉宽。
仿真结果如图:
该方法基于查询方式,对于还没有学到中断小伙伴有借鉴意义,若已学过中断则可采用外部中断来检测按键按下处理,效果更好。
#include<reg51.h> //51单片机特殊功能寄存器定义
#include<absacc.h> //包含XBYTE宏定义,写外部数据
//端口定义
#define CMD_ADDR XBYTE[0X7FFB] //写命令寄存器
#define TIMERO_ADDR0 XBYTE[0X7FF8] //计数器0初值寄存器
#define TIMER1_ADDR0 XBYTE[0X7FF9] //计数器1初值寄存器
#define TIMER2_ADDR0 XBYTE[0X7FFA]