8253计数器c语言程序,AT89C51与8253A计数器连接,不知问题出在哪?

上面那个8253A的3个计数器全用,下面的那个8253只用计数器0。每个计数器的gate脚通过脉冲信号选中,就会对时钟脉冲进行计数。仿真使用虚拟串口通信时,串口助手得到的数据不变是怎么回事,这是做实验要用的一个电路,纠结老长时间了,实在不知道错在哪,编译没错,求高手指导8253的使用或者给出以前做过的项目的例子,小弟在此谢过!程序如下:

电路图

e39ad826f2c368277fecab68b7696700.png

#include

#include

#include

#include

#include

#include

#define uchar unsigned char

#define uint unsigned int

uint dat,dat1,data1,data2,data3,data4;

sbit P32=P3^2 ;

void Init_com()

{

TMOD=0x21;    //设定计数器1为模式2,定时器T0工作模式1

SCON=0x50;

PCON=0x80;        //波特率加倍

TH1=0xE8;

TL1=0xE8;   //设定波特率为4800,定时器T1自动重新装载定时初值

TR1=1;       //启动计数器

ES=0;

TH0=47104/256;

TL0=47104%256;

EA=1;

ET0=1;

TR0=1;        //上面是定时器T0的初始化程序

}

void send(dat)

{

SBUF=dat/256;

while(!TI);

TI=0; //RI 清零。

SBUF=dat;

while(!TI);

TI=0; //RI 清零。

}

void main()

{

P32=0;

XBYTE[0x7FFF]=0x32;             //对计数器1写入控制字并赋初值

XBYTE[0x7FFC]=65535;

XBYTE[0x7FFF]=0x72;             //对计数器2写入控制字并赋初值

XBYTE[0x7FFD]=65535;

XBYTE[0x7FFF]=0xB2;             //对计数器3写入控制字并赋初值

XBYTE[0x7FFE]=65535;

XBYTE[0xBFF7]=0x32;             //对计数器4写入控制字并赋初值

XBYTE[0xBFF3]=65535;

P32=1;

Init_com();              //串口初始化

while(1)

{}

}

void timer0() interrupt 1

{

P32=0;                                      //输出信号控制晶体管的开断,实现对各计数器的复位

data1=65535-XBYTE[0x7FFC];

data2=65535-XBYTE[0x7FFD];

data3=65535-XBYTE[0x7FFE];

data4=65535-XBYTE[0xBFF3];                        //XBYTE[0xAFF3]

send(data1);                          //发送计数数据

send(data2);

send(data3);

send(data4);

TH0=55536/256;

TL0= 55536%256;

P32=1;                         //开通各计数器

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值