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

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 3989|回復(fù): 14
打印 上一主題 下一主題
收起左側(cè)

請(qǐng)問(wèn)C51單片機(jī)串轉(zhuǎn)并74HC595的串行輸入引腳的電平是怎么輸入的?

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
          小弟我遇到一個(gè)單片機(jī)問(wèn)題,其實(shí)本可以忽略掉繼續(xù)開(kāi)開(kāi)心心碼程序的,但秉著想沖硬件工程師這個(gè)物以稀為貴的職業(yè)的念頭,打算鉆一鉆牛角尖。          void Hc595SendByte(u8 dat){
        u8 a;

        SRCLK = 1;
        RCLK = 1;

        for(a=0;a<8;a++)                 //發(fā)送8位數(shù)
        {
                SER = dat >> 7;                 //從最高位開(kāi)始發(fā)送
                dat <<= 1;

                SRCLK = 0;                         //發(fā)送時(shí)序
                _nop_();
                _nop_();
                SRCLK = 1;        
        }
        RCLK = 0;
        _nop_();
        _nop_();
        RCLK = 1;
}
          這一個(gè)是例程中進(jìn)行74HC595移位并輸出的自定義函數(shù),假設(shè)

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:752974 發(fā)表于 2021-1-18 08:53 | 只看該作者
595相應(yīng)的口線和單片機(jī)相連,單片機(jī)用軟件模擬串行IO口,比較靈活方便。因串口輸出,不能按字節(jié)操作。
供參考:
for(i=0;i<8;i++)
    {
                SCLK = 0;       
                _nop_();               
                SDI = (bit)(dat&0x80);               
                _nop_();       
                dat = dat << 1;
                _nop_();
                  SCLK = 1;       
                  _nop_();               
    }

評(píng)分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

板凳
ID:390416 發(fā)表于 2021-1-18 09:13 | 只看該作者
你好 你可以看看我這個(gè)貼子 http://www.torrancerestoration.com/bbs/dpj-201201-1.html 最好把資料也下載
回復(fù)

使用道具 舉報(bào)

地板
ID:332444 發(fā)表于 2021-1-18 09:51 | 只看該作者
數(shù)據(jù)電平由移位脈沖存儲(chǔ)到芯片內(nèi)這在芯片說(shuō)明書(shū)上都是有文字描述和時(shí)序圖示意的.
回復(fù)

使用道具 舉報(bào)

5#
ID:332444 發(fā)表于 2021-1-18 09:57 | 只看該作者
下圖單獨(dú)寫(xiě)一個(gè)驅(qū)動(dòng)595函數(shù),數(shù)據(jù)為1時(shí)的時(shí)序:


之下是發(fā)送4這個(gè)值的時(shí)序圖:其實(shí)看這樣的時(shí)序圖更容易明白,不像找到的時(shí)序圖對(duì)得太整齊了,有時(shí)還真分別不出對(duì)齊的部分到底是看成低電平還是高電平;從下圖的時(shí)序可明顯清晰地看出發(fā)送給595一個(gè)4這個(gè)值所處的高低電平00100000,當(dāng)然如果使用十六進(jìn)制數(shù)據(jù)和移位函數(shù)發(fā)送看到的也是一樣的時(shí)序。


配合仿真圖可看到Q0-Q7的輸出:


程序運(yùn)行的時(shí)序圖與網(wǎng)絡(luò)上找到的時(shí)序圖不同的地方是發(fā)送八位后鎖存輸出與發(fā)送1位就鎖存輸出的區(qū)別.

評(píng)分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

6#
ID:609281 發(fā)表于 2021-1-18 20:02 | 只看該作者
munuc_w 發(fā)表于 2021-1-18 08:53
595相應(yīng)的口線和單片機(jī)相連,單片機(jī)用軟件模擬串行IO口,比較靈活方便。因串口輸出,不能按字節(jié)操作。
供 ...

您好,請(qǐng)問(wèn)為什么SDI = (bit)(dat&0x80);  會(huì)放在SCLK = 1的前面?SDI是串行輸入口吧?移位寄存器不是應(yīng)該在上升沿才有效嗎?S小弟覺(jué)得 SDI = (bit)(dat&0x80); 應(yīng)該放在SCLK = 1的后面?
回復(fù)

使用道具 舉報(bào)

7#
ID:609281 發(fā)表于 2021-1-18 20:10 | 只看該作者
xianfajushi 發(fā)表于 2021-1-18 09:57
下圖單獨(dú)寫(xiě)一個(gè)驅(qū)動(dòng)595函數(shù),數(shù)據(jù)為1時(shí)的時(shí)序:

您好,其實(shí)我想問(wèn)的是,C51不是8位單片機(jī)么?我是理解成一個(gè)IO口比如P0^0,一次性可以輸出八位二進(jìn)制數(shù),可是74HC595芯片的串行輸入端是按位輸出的,一個(gè)字節(jié)為八位,一個(gè)IO口輸出8位怎么送進(jìn)595的串行輸入端。
回復(fù)

使用道具 舉報(bào)

8#
ID:609281 發(fā)表于 2021-1-18 20:33 | 只看該作者
本帖最后由 15119014737 于 2021-1-18 20:50 編輯

我的問(wèn)題沒(méi)有敲完,假設(shè)我想通過(guò)51傳1011 1001給74HC595,首先是1011 1001右移七位,變?yōu)?000 0001,然后595的串行口接收0000 0001,然后移位寄存器來(lái)一個(gè)上升沿,LQA = 0,LQB = 1,LQC =。。。LQH=0,緊接著1011 1001左移一位,變?yōu)?111 0010,然后0111 0010右移七位變成0000 0000傳給595的串行輸入口,此時(shí)LQA=LQB=。。。。=LQH=0,這樣不就相當(dāng)于原來(lái)移位寄存器的值被清除掉了嗎?我這種想法是認(rèn)為595按字節(jié)串行輸入,但其實(shí)串行輸入都是按位輸入的,可C51不是8位單片機(jī)嗎?它的IO口不應(yīng)該可以輸出一個(gè)字節(jié)的數(shù)據(jù)嗎?而且dat<<7本身也是一個(gè)字節(jié)的數(shù),然后通過(guò)單片機(jī)引腳輸入進(jìn)595中,為啥595只會(huì)接收一個(gè)字節(jié)中的最低位?
回復(fù)

使用道具 舉報(bào)

9#
ID:609281 發(fā)表于 2021-1-18 20:35 | 只看該作者
我的問(wèn)題沒(méi)有敲完,假設(shè)我想通過(guò)51傳10111001給74hc595,首先
回復(fù)

使用道具 舉報(bào)

10#
ID:609281 發(fā)表于 2021-1-18 20:48 | 只看該作者
我的問(wèn)題沒(méi)有敲完,假設(shè)我想通過(guò)51傳1011 1001給74hc595,,首先將1011 1001右移七位,變?yōu)?000 0001并送進(jìn)串行輸入口,移位寄存器來(lái)一個(gè)上升沿,這時(shí)QA=0,QB=1,QC=QD=...=QH=0,然后將1011 1001左移一位變?yōu)?111 0010,同樣的方法將0111 0010右移七位成0000 0000,并送進(jìn)串行輸入口,移位寄存器來(lái)一個(gè)上升沿,這時(shí)QA=...=QH=0,那么之間的QB = 1跑到哪里去了?我這種想法是認(rèn)為595的串行輸入口是按字節(jié)輸入的,但其實(shí)串行輸入口是按位輸入的,可C51不是8位單片機(jī)嗎?它的IO口不應(yīng)該可以輸出一個(gè)字節(jié)的數(shù)據(jù)嗎?而且dat<<7本身也是一個(gè)字節(jié)的數(shù),然后通過(guò)單片機(jī)引腳輸入進(jìn)595中,為啥595只會(huì)接收一個(gè)字節(jié)中的最低位?
回復(fù)

使用道具 舉報(bào)

11#
ID:332444 發(fā)表于 2021-1-18 21:03 | 只看該作者
送一個(gè)電平移入再送一個(gè)電平移入進(jìn)行八次所以才是串口不是并行
回復(fù)

使用道具 舉報(bào)

12#
ID:213173 發(fā)表于 2021-1-18 21:06 | 只看該作者
15119014737 發(fā)表于 2021-1-18 20:35
我的問(wèn)題沒(méi)有敲完,假設(shè)我想通過(guò)51傳10111001給74hc595,首先

這里解釋的很詳細(xì):
https://baike.baidu.com/item/74HC595/9886491?fr=aladdin
回復(fù)

使用道具 舉報(bào)

13#
ID:332444 發(fā)表于 2021-1-19 07:56 | 只看該作者
至于數(shù)據(jù)是要移動(dòng)7位或1位看電路需求而定,電路可以順序或逆序連接。
回復(fù)

使用道具 舉報(bào)

14#
ID:609281 發(fā)表于 2021-1-19 22:26 | 只看該作者
xianfajushi 發(fā)表于 2021-1-18 21:03
送一個(gè)電平移入再送一個(gè)電平移入進(jìn)行八次所以才是串口不是并行

感謝,我弄懂了
回復(fù)

使用道具 舉報(bào)

15#
ID:332444 發(fā)表于 2021-1-20 12:42 | 只看該作者
我的例子傳送十進(jìn)制值,可以取反,也可以位移.比如把00000001移位為10000000都可以通過(guò)十進(jìn)制完成的.
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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