找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 2467|回復(fù): 14
收起左側(cè)

關(guān)于DS1302與51系列單片機(jī)IO口的問題,你們遇到過嗎

[復(fù)制鏈接]
ID:641483 發(fā)表于 2023-9-11 16:15 | 顯示全部樓層 |閱讀模式
51系統(tǒng):stc12c5a60s2單片機(jī)最小系統(tǒng)
晶振:12M
時(shí)間模塊:DS1203 連接端口:P1.5 、P1.6、P1.7
顯示模塊MAX7219 連接端口:P2.0、P2.1、 P2.2
按鍵4個(gè) P3.2-P3.3、P3.4、P3.5
串行輸入:P3.0\P3.1

用上面的連接DS1203時(shí)間模 P1.5 -1.7口作為數(shù)據(jù)輸入口,所有功能正常。把P1.0-4端口設(shè)置成AD轉(zhuǎn)換后,ad轉(zhuǎn)換正常,除時(shí)間模塊無法通訊外,其他功能都正常。

把時(shí)間模塊換到P2的5-7端也是無法數(shù)據(jù)通訊的,同時(shí)刷回之前正常顯示的程序也無顯示(當(dāng)然修改了對(duì)應(yīng)的IO口)
奇怪的是換到P3和P0加上拉電阻后也一樣,時(shí)間模塊無法通訊 就好像沒連接上一樣。
疑問一:難道DS1302 與其他輸出輸入共用Px端口就不能通訊?如何解?
疑問二:我看了好多DS1302的例子 都是接的P1口,是這個(gè)模塊接只能接這個(gè)IO嗎?
回復(fù)

使用道具 舉報(bào)

ID:161164 發(fā)表于 2023-9-11 17:56 | 顯示全部樓層
代碼呢?
回復(fù)

使用道具 舉報(bào)

ID:94031 發(fā)表于 2023-9-11 18:10 | 顯示全部樓層
肯定DS1302可以接P1以外的其他口,但I(xiàn)O要初始化正確,不能與其它功能沖突。
回復(fù)

使用道具 舉報(bào)

ID:641483 發(fā)表于 2023-9-11 18:36 | 顯示全部樓層
xuyaqi 發(fā)表于 2023-9-11 18:10
肯定DS1302可以接P1以外的其他口,但I(xiàn)O要初始化正確,不能與其它功能沖突。

是都定義了IO口 并且都設(shè)置了推挽輸出 但還是不行 P0 口啥都沒接  上拉4.7k電阻都還是沒有數(shù)據(jù)通訊 當(dāng)然端口定義和連線都檢測(cè)過,難道是單片IC問題?
回復(fù)

使用道具 舉報(bào)

ID:213173 發(fā)表于 2023-9-11 19:25 | 顯示全部樓層
Q__Q 發(fā)表于 2023-9-11 18:36
是都定義了IO口 并且都設(shè)置了推挽輸出 但還是不行 P0 口啥都沒接  上拉4.7k電阻都還是沒有數(shù)據(jù)通訊 當(dāng)然 ...

與DS1302連接的端口設(shè)置為準(zhǔn)雙向模式為宜,只要不與其它功能沖突,隨便哪個(gè)IO口都可以正常使用。
回復(fù)

使用道具 舉報(bào)

ID:1085441 發(fā)表于 2023-9-12 02:02 | 顯示全部樓層
DS1302我用過幾次,可以肯定P0~P4都是可以的,我都是設(shè)置為準(zhǔn)雙向IO口,SDIO引腳必須上拉電阻,其它就沒有問題了。
我估計(jì)可能還是你的初始化有問題,會(huì)不會(huì)沒有把DS1302的3個(gè)引腳沒有設(shè)置為準(zhǔn)雙向口?
回復(fù)

使用道具 舉報(bào)

ID:965189 發(fā)表于 2023-9-12 07:33 | 顯示全部樓層
P0-P5端口隨便配,估計(jì)你是端口設(shè)置的問題。
回復(fù)

使用道具 舉報(bào)

ID:1065084 發(fā)表于 2023-9-12 10:01 | 顯示全部樓層
教你一個(gè)debug神技能,裁剪法 把無用代碼裁剪掉,并使用比如一個(gè)led作為標(biāo)志位,不斷修改標(biāo)志led亮起的位置,從而檢查代碼哪里出錯(cuò)了。就這么說吧,新手遇到的99.99%錯(cuò)誤都是自己?jiǎn)栴},和別人無關(guān)。一般我裁剪到只有某個(gè)模塊核心代碼位置才能找到問題。所謂的10%的時(shí)間寫bug 90%時(shí)間找bug 不夸張的。
回復(fù)

使用道具 舉報(bào)

ID:641483 發(fā)表于 2023-9-12 10:09 | 顯示全部樓層
cnfloatleaf 發(fā)表于 2023-9-12 02:02
DS1302我用過幾次,可以肯定P0~P4都是可以的,我都是設(shè)置為準(zhǔn)雙向IO口,SDIO引腳必須上拉電阻,其它就沒有 ...

謝謝,我設(shè)置過雙向輸出,但是還是故障依舊  我懷疑是不是我電路搭建問題,
在運(yùn)行過程中,特別是顯示刷新比較多的時(shí)候,會(huì)聽到有細(xì)微的“吱”高頻聲,目前沒聽出是7219發(fā)出的還是 搭建的最小板發(fā)出了,我準(zhǔn)備重新搭下電路試試
回復(fù)

使用道具 舉報(bào)

ID:641483 發(fā)表于 2023-9-12 10:14 | 顯示全部樓層
cnfloatleaf 發(fā)表于 2023-9-12 02:02
DS1302我用過幾次,可以肯定P0~P4都是可以的,我都是設(shè)置為準(zhǔn)雙向IO口,SDIO引腳必須上拉電阻,其它就沒有 ...

其實(shí)我也想 所有端口應(yīng)該是隨便用都可以的,但是,試過MAX7219使用P2口 后1302也用回P2的IO口就沒數(shù)據(jù), 懷疑是電路干擾的問題,回去我貼程序出來給大家看看
回復(fù)

使用道具 舉報(bào)

ID:641483 發(fā)表于 2023-9-12 10:16 | 顯示全部樓層
yuxuesuixing 發(fā)表于 2023-9-12 10:01
教你一個(gè)debug神技能,裁剪法 把無用代碼裁剪掉,并使用比如一個(gè)led作為標(biāo)志位,不斷修改標(biāo)志led亮起的位置 ...

嗯 這個(gè)方法應(yīng)該很好,我回去再試試,感覺修改來修改去 越搞越糊涂了
回復(fù)

使用道具 舉報(bào)

ID:641483 發(fā)表于 2023-9-12 23:05 | 顯示全部樓層

程序如下


#include "STC12C5A60S2.H"
#include "intrins.h"
#include "Max7219.h"


uchar code shuzi_1[][8]={
{0x3C,0x66,0x66,0x66,0x66,0x66,0x66,0x3C},//0
{0x18,0x38,0x18,0x18,0x18,0x18,0x18,0x7E},//1
{0x3C,0x66,0x46,0x0C,0x18,0x20,0x66,0x7E},//2
{0x3C,0x66,0x06,0x18,0x0C,0x06,0x46,0x3C},//3
{0x0C,0x1C,0x2C,0x6C,0x6C,0x7E,0x0C,0x0C},//4
{0x7E,0x60,0x60,0x7C,0x06,0x46,0x66,0x3C},//5
{0x3C,0x62,0x60,0x7C,0x66,0x66,0x66,0x3C},//6
{0x7E,0x46,0x04,0x0C,0x08,0x18,0x18,0x18},//7
{0x3C,0x66,0x66,0x3C,0x66,0x66,0x66,0x3C},//8
{0x3C,0x66,0x66,0x66,0x1E,0x06,0x46,0x3C},//9
{0x00,0x18,0x18,0x00,0x00,0x18,0x18,0x00},//:
{0x00,0x00,0x00,0x7E,0x00,0x00,0x00,0x00},//-
{0x3C,0x42,0x91,0x91,0x9D,0x81,0x42,0x3C},//time
{0x20,0x7E,0x08,0x3C,0x28,0x7E,0x08,0x00},//年
{0x3E,0x22,0x3E,0x22,0x3E,0x22,0x42,0x00},//月
{0x3E,0x22,0x22,0x3E,0x22,0x22,0x3E,0x00},//日
{0x10,0x18,0x1C,0x1E,0x1C,0x18,0x10,0x00},//箭頭
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},//空
};


//----------------------------------------
/*聲明ADC相關(guān)寄存器 */
//sfr ADC_CONTR   =   0xBC;           //ADC 控制寄存器
//sfr ADC_RES     =   0xBD;           //ADC 高8位結(jié)果寄存器
//sfr ADC_LOW2    =   0xBE;           //ADC 低2位結(jié)果寄存器
//sfr P1ASF       =   0x9D;           //P1 輔助控制寄存器

/*ADC操作的一些宏定義*/
#define ADC_POWER   0x80            //ADC power control bit
#define ADC_FLAG    0x10            //ADC complete flag
#define ADC_START   0x08            //ADC start control bit
#define ADC_SPEEDLL 0x00            //420 clocks
#define ADC_SPEEDL  0x20            //280 clocks
#define ADC_SPEEDH  0x40            //140 clocks
#define ADC_SPEEDHH 0x60            //70 clocks



//校時(shí)按鍵與C51的引腳連接定義
sbit key1=P3^2;  //設(shè)置鍵
sbit key2=P3^3;  //加鍵
sbit key3=P3^4;  //減鍵
sbit key4=P3^5;  //減鍵

sbit SCLK=P2^6;          //1302引腳位變量定義
sbit IO=P2^7;
sbit RST=P2^5;

uchar a,h,ms,sec,min,shi,nian,yue,ri,xingqi,key4n,v1,tt,tt1;
uchar second,minute,hour,week,day,month,year;    //定義年,月,日,星期,時(shí),分,秒計(jì)數(shù)變量

sbit ACC0=ACC^0;
sbit ACC7=ACC^7;

void delay(uint xms)//延時(shí)函數(shù),有參函數(shù)
{
        uint x,y;
        for(x=xms;x>0;x--)
         for(y=110;y>0;y--);
}


//--------1302----//
void write_byte(uchar dat)//1302寫一個(gè)字節(jié)
{
        ACC=dat;
        RST=1;
        for(a=8;a>0;a--)
        {
                IO=ACC0;
                SCLK=0;
                SCLK=1;
                ACC=ACC>>1;
        }
}

uchar read_byte()//1302讀一個(gè)字節(jié)
{
        RST=1;
        for(a=8;a>0;a--)
        {
                ACC7=IO;
                SCLK=1;
                SCLK=0;
                ACC=ACC>>1;

        }
        return (ACC);
}

void write_1302(uchar add,uchar dat)//向1302芯片寫函數(shù)
{

        RST=0;
        SCLK=0;
        RST=1;
        write_byte(add);
        write_byte(dat);
        SCLK=1;
        RST=0;
}


uchar read_1302(uchar add)//從1302讀數(shù)據(jù)函數(shù)
{
        uchar temp;
        RST=0;
        SCLK=0;
        RST=1;
        write_byte(add);
        temp=read_byte();
        SCLK=1;
        RST=0;
        return(temp);
}

void ds1302_init()
回復(fù)

使用道具 舉報(bào)

ID:235200 發(fā)表于 2023-9-13 08:26 | 顯示全部樓層
一是P26 P27需接上拉電阻,二是讀寫程序的時(shí)序必須嚴(yán)格,滿足這兩個(gè)條件后就沒有問題了
回復(fù)

使用道具 舉報(bào)

ID:641483 發(fā)表于 2023-9-13 10:44 | 顯示全部樓層
csmyldl 發(fā)表于 2023-9-13 08:26
一是P26 P27需接上拉電阻,二是讀寫程序的時(shí)序必須嚴(yán)格,滿足這兩個(gè)條件后就沒有問題了

之前單獨(dú)用時(shí)鐘程序的時(shí)候,有顯示不完整情況,http://www.torrancerestoration.com/bbs/dpj-231413-1.html有在壇里請(qǐng)教過,后來只是在IO引腳P27上拉電阻就顯示完整了,但在p25、p26腳上拉電阻就又顯示不正常
回復(fù)

使用道具 舉報(bào)

ID:641483 發(fā)表于 2023-9-15 10:03 | 顯示全部樓層
終于找到問題了 是keil的版本問題,同樣的程序拷貝到keil4編譯后燒錄就正常了,但是在keil5能正常編譯,燒錄后就出現(xiàn)上述問題。感謝各位的熱情回答
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表