找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1861|回复: 7
打印 上一主题 下一主题
收起左侧

单片机P1扩展端口的问题

[复制链接]
跳转到指定楼层
楼主
ID:242464 发表于 2018-11-6 10:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  请教论坛的高手 ,我用74hc373给P1扩展了一个端口,EN接地LE接P3.1。程序运行控制外设都正常,就是在上电的时候373的总是有数据输出,造成外设误动。我在程序的初始化及相关的子函数里做了屏蔽但都没有效果。不知各位是否遇到过。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:97554 发表于 2018-11-6 12:13 | 只看该作者
没有程序,不知道是不是在开关机的时候该对373的11脚进行一下操作,将373的输出端锁存的数据清空
回复

使用道具 举报

板凳
ID:242464 发表于 2018-11-6 15:37 | 只看该作者
程序比较长所以没有上。不过我在程序的初始化及相关的子函数里已经对373的11进行过操作了。
#define ADC0809_bus P1      // DB0-DB7 :8位数据线
sbit cdxk=P3^1;              //电池充电许可(373的11脚)
sbit QDA=P1^3;
sbit QDB=P1^4;
sbit QDC=P1^5;
sbit dcsd=P1^6;
.......
lcd_showfull(0);                                           //清屏
        init6963(); //初始化
        m=ReadSet1302(0xdf);//读取ARM谖甯龅绯中的数据
        if(m!=7)     //查看ARM中的数据是否为7
        Init_DS1302();       //初始化1302

        lcd_defcharacter8x16(0,0,1,2,tab2);//显示    2-固定显示
        lcd_defcharacter8x16(1,0,1,0,tab2);//显示    0-固定显示  
        lcd_defcharacter16x16(4,0,1,0,tab1);//显示   年-固定显示
        lcd_defcharacter16x16(8,0,1,1,tab1);//显示   月-固定显示
        lcd_defcharacter16x16(12,0,1,2,tab1);//显示 日-固定显示
        lcd_defcharacter16x16(15,0,1,3,tab1);//显示 星-固定显示
        lcd_defcharacter16x16(17,0,1,4,tab1);//显示 期-固定显示
        lcd_defcharacter16x16(21,0,1,20,tab1);//显示 -固定显示温度计图片
        lcd_defcharacter8x16(26,0,1,10,tab2);//显示        -固定显示小数点.
        lcd_defcharacter16x16(28,0,1,21,tab1);//显示 -固定显示摄氏度图片         
        lcd_defcharacter8x48(6,16,1,0,tab4);//显示-固定显示:(前两点)
        lcd_defcharacter8x48(13,16,1,0,tab4);//显示-固定显示:(后两点)
        lcd_defcharacter16x16(21,16,2,17,tab1);//显示农历两个字
       // lcd_defcharacter16x16(25,16,1,10,tab6);//显示狗字
        lcd_defcharacter16x16(27,16,1,19,tab1);//显示年字
              QDA=1;           //J5动作给电池组充电
              QDB=1;
              QDC=1;
              dcsd=1;              //12伏送电关闭(单充送电关闭)
              delay1(20);
              cdxk=1;
              delay1(20);
              cdxk=0;
........
//模式选择按键(进入菜单程序)
//**************************
void Setkey()
{
                Set=1;
                if(Set==0)                  //菜单键按set为零
            {
                delay(30);
                if(Set==0)
                                {
                  count=count+1;         //Setkey按一次,count就加1
                          done=1;                         //进入调整模式
                  while(!Set);      //等待Set为1
                                }
            }
              QDA=1;           //J5动作给电池组充电
              QDB=1;
              QDC=1;
              dcsd=1;              //12伏送电关闭(单充送电关闭)
              delay1(20);
              cdxk=1;
              delay1(20);
              cdxk=0;

}

//**************************
//进入充电模式选择按键
//**************************
void jrcd()
{
                CDMS=1;
                if(CDMS==0)
            {
                delay(30);
                if(CDMS==0)
                                {
               
                          done1=1;                         //进入充电模式
                  while(!CDMS);
                                }
            }
              QDA=1;           //J5动作给电池组充电
              QDB=1;
              QDC=1;
              dcsd=1;              //12伏送电关闭(单充送电关闭)
              delay1(20);
              cdxk=1;
              delay1(20);
              cdxk=0;
}
这种形式的也用过:
ADC0809_bus =0XFF
delay1(20);
              cdxk=1;
              delay1(20);
              cdxk=0;
回复

使用道具 举报

地板
ID:94031 发表于 2018-11-6 15:43 | 只看该作者
上电可以马上初始化74hc373,防止误动作。
回复

使用道具 举报

5#
ID:242464 发表于 2018-11-6 15:48 | 只看该作者
我在程序的初始化及相关的子函数里做了操作。
回复

使用道具 举报

6#
ID:242464 发表于 2018-11-6 15:56 | 只看该作者
杨雪飞 发表于 2018-11-6 12:13
没有程序,不知道是不是在开关机的时候该对373的11脚进行一下操作,将373的输出端锁存的数据清空

我在程序的初始化及相关的子函数里做了操作,这是我做的操作的部分内容:
sbit cdxk=P3^1;              //电池充电许可(373的11脚)
sbit QDA=P1^3;
sbit QDB=P1^4;
sbit QDC=P1^5;
sbit dcsd=P1^6;
#define ADC0809_bus P1      // DB0-DB7 :8位数据线
............
//**************************
//模式选择按键(进入菜单程序)
//**************************
void Setkey()
{
                Set=1;
                if(Set==0)                  //菜单键按set为零
            {
                delay(30);
                if(Set==0)
                                {
                  count=count+1;         //Setkey按一次,count就加1
                          done=1;                         //进入调整模式
                  while(!Set);      //等待Set为1
                                }
            }
              QDA=1;           //J5动作给电池组充电
              QDB=1;
              QDC=1;
              dcsd=1;              //12伏送电关闭(单充送电关闭)
              delay1(20);
              cdxk=1;
              delay1(20);
              cdxk=0;

}

//**************************
//进入充电模式选择按键
//**************************
void jrcd()
{
                CDMS=1;
                if(CDMS==0)
            {
                delay(30);
                if(CDMS==0)
                                {
               
                          done1=1;                         //进入充电模式
                  while(!CDMS);
                                }
            }
              QDA=1;           //J5动作给电池组充电
              QDB=1;
              QDC=1;
              dcsd=1;              //12伏送电关闭(单充送电关闭)
              delay1(20);
              cdxk=1;
              delay1(20);
              cdxk=0;
}
.........
main()
{
        lcd_showfull(0);                                           //清屏
        init6963(); //初始化
        m=ReadSet1302(0xdf);//读取ARM谖甯龅绯中的数据
        if(m!=7)     //查看ARM中的数据是否为7
        Init_DS1302();       //初始化1302

        lcd_defcharacter8x16(0,0,1,2,tab2);//显示    2-固定显示
        lcd_defcharacter8x16(1,0,1,0,tab2);//显示    0-固定显示  
        lcd_defcharacter16x16(4,0,1,0,tab1);//显示   年-固定显示
        lcd_defcharacter16x16(8,0,1,1,tab1);//显示   月-固定显示
        lcd_defcharacter16x16(12,0,1,2,tab1);//显示 日-固定显示
        lcd_defcharacter16x16(15,0,1,3,tab1);//显示 星-固定显示
        lcd_defcharacter16x16(17,0,1,4,tab1);//显示 期-固定显示
        lcd_defcharacter16x16(21,0,1,20,tab1);//显示 -固定显示温度计图片
        lcd_defcharacter8x16(26,0,1,10,tab2);//显示        -固定显示小数点.
        lcd_defcharacter16x16(28,0,1,21,tab1);//显示 -固定显示摄氏度图片         
        lcd_defcharacter8x48(6,16,1,0,tab4);//显示-固定显示:(前两点)
        lcd_defcharacter8x48(13,16,1,0,tab4);//显示-固定显示:(后两点)
        lcd_defcharacter16x16(21,16,2,17,tab1);//显示农历两个字
       // lcd_defcharacter16x16(25,16,1,10,tab6);//显示狗字
        lcd_defcharacter16x16(27,16,1,19,tab1);//显示年字
              QDA=1;           //J5动作给电池组充电
              QDB=1;
              QDC=1;
              dcsd=1;              //12伏送电关闭(单充送电关闭)
              delay1(20);
              cdxk=1;
              delay1(20);
              cdxk=0;
这种模式也用过:
ADC0809_bus=0xff;
delay1(20);
              cdxk=1;
              delay1(20);
              cdxk=0;
回复

使用道具 举报

7#
ID:387733 发表于 2018-11-6 19:10 | 只看该作者
OE引脚为输出三态控制端,当OE为高电平时,输出O0-O7呈高阻态,因此可以在该引脚接一个阻容,使上电时保持高电平,确保初始化完成前没有输出
回复

使用道具 举报

8#
ID:94031 发表于 2018-11-7 09:16 | 只看该作者
本帖最后由 xuyaqi 于 2018-11-7 10:38 编辑
LWB2005_2 发表于 2018-11-6 15:48
我在程序的初始化及相关的子函数里做了操作。

可以在硬件74hc373有关脚上加电容,延迟响应一段时间,避过上电瞬间。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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