搜索
bottom↓
回复: 9

一个老芯片 INTEL 8253,读数据问题

[复制链接]

出0入0汤圆

发表于 2012-5-29 10:23:21 | 显示全部楼层 |阅读模式
本帖最后由 max0147 于 2012-5-29 11:23 编辑

INTEL 8253,可以正常写入控制字,并输出正确波形;想要读出计数值,但一写入锁存命令,即RL0,RL1都=0时,正常波形也没有了,读出数值始终为0;
调整时序;在读之前加入控制判断GATE都无效,遂请教,多谢。

#include <reg52.h>     //包括一个52标准内核的头文件
#include <intrins.h>
#include <stdio.h>

sbit A0 = P0^0;
sbit A1 = P0^1;
sbit nWR = P0^2;
sbit nRD = P0^3;
sbit nCS = P0^4;

sbit gate = P2^4;

void init_82c54(void)
{
        A0 = 1;
        A1 = 1;
        nWR = 1;
        nRD = 1;
        nCS = 1;

        gate = 1;
}

void write_cntl_82c54(unsigned char cnt_no,unsigned char mode)
{
        unsigned char cntl_byte;
        cntl_byte = 0;
        A0 = 1;
        A1 = 1;
        //SC位
        if(cnt_no==0) {cntl_byte &= 0x3f;}
        else if(cnt_no==1) {cntl_byte &= 0x3f; cntl_byte |= 0x40;}
        else if(cnt_no==2) {cntl_byte &= 0x3f; cntl_byte |= 0x80;}
        //RW位
        cntl_byte &= 0xcf;
        cntl_byte |= 0x10;
        //MODE位
        if(mode==2) {cntl_byte &= 0xf9; cntl_byte |= 0x04;}
        else if(mode==3) {cntl_byte &= 0xf9; cntl_byte |= 0x06;}
        //BCD位
        cntl_byte &= 0xfe;
        //写入
        P1 = cntl_byte;
        nCS = 0;
        nWR = 0;
        _nop_();
        nWR = 1;
        nCS = 1;
}

void write_data_82c54(unsigned char cnt_no,unsigned char indata)
{
    //选择counter
        if(cnt_no==0) {A0 = 0; A1 = 0;}
        else if(cnt_no==1) {A0 = 1; A1 = 0;}
        else if(cnt_no==2) {A0 = 0; A1 = 1;}
        //写入
        P1 = indata;
        nCS = 0;
        nWR = 0;
        _nop_();
        nWR = 1;
        nCS = 1;
        A0 = 1;
        A1 = 1;
}


unsigned char read_data_82c54(unsigned char cnt_no)
{
        unsigned char cntl_byte;
        unsigned char read_byte;
        cntl_byte = 0;
        A0 = 1;
        A1 = 1;
    //gate = 0;
//counter latch模式
        //SC位
        if(cnt_no==0) {cntl_byte &= 0x3f;}
        else if(cnt_no==1) {cntl_byte &= 0x3f; cntl_byte |= 0x40;}
        else if(cnt_no==2) {cntl_byte &= 0x3f; cntl_byte |= 0x80;}
        //D5,D4位
        cntl_byte &= 0xcf;
        //写入
        P1 = cntl_byte;
        nCS = 0;
        nWR = 0;
        _nop_();
        nWR = 1;
        nCS = 1;
此处写锁在命令,一执行后,正常输出波形就没有了。

        //while(1);
//读总线
        _nop_();
        _nop_();
    //选择counter
        if(cnt_no==0) {A0 = 0; A1 = 0;}
        else if(cnt_no==1) {A0 = 1; A1 = 0;}
        else if(cnt_no==2) {A0 = 0; A1 = 1;}
        nCS = 0;
        nRD = 0;
        _nop_();
        _nop_();
        //读出
        read_byte = P1;
        _nop_();
        nRD = 1;
        nCS = 1;
        return read_byte;        
}



void main(void)        // 主程序
{
        uchar c1,c2;

    //system_init(); //系统初始化

        init_82c54();

        write_cntl_82c54(0,3);
        write_data_82c54(0,0x55);
                //write_cntl_82c54(0,3);
                //write_data_82c54(0,0x55);

        Delay400Ms();

        P3 = read_data_82c54(0);
}

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2012-5-29 11:23:42 | 显示全部楼层
up..............

出0入0汤圆

 楼主| 发表于 2012-5-30 12:38:53 | 显示全部楼层
up..............

出0入0汤圆

发表于 2013-5-1 20:45:11 | 显示全部楼层
行的吗?

出0入0汤圆

发表于 2013-5-1 21:03:56 来自手机 | 显示全部楼层
以前用82c53出pwm,想不起细节了,邦顶

出0入0汤圆

发表于 2013-5-1 21:34:35 | 显示全部楼层
谢谢楼主

出0入0汤圆

发表于 2018-1-4 15:00:56 | 显示全部楼层
虽然时间有点久了,还是想弱弱的问一句:楼主的问题解决了吗,我最近也碰到跟你一样的问题了,一读8253芯片,输出就没有了

出0入0汤圆

发表于 2018-1-5 11:32:31 | 显示全部楼层
我的调试好了,把计数初值设置为16位的,然后读的时候读两次,就正常了,但是前面是把计数初值设置为8位的,读一次,就不正常,暂时还没想通为什么

出0入0汤圆

发表于 2019-3-31 10:23:32 | 显示全部楼层
纯忆之年 发表于 2018-1-5 11:32
我的调试好了,把计数初值设置为16位的,然后读的时候读两次,就正常了,但是前面是把计数初值设置为8位的 ...

芯片资料上面说 读俩次

出10入18汤圆

发表于 2019-3-31 11:56:31 来自手机 | 显示全部楼层
靠,还有人玩这个,我被这个坑货好多次
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-19 11:33

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表