標題: 關于芯片74HC595的IO口(ser口)賦值問題 [打印本頁]
作者: 89C52RC單片機 時間: 2024-3-21 15:54
標題: 關于芯片74HC595的IO口(ser口)賦值問題
如代碼中IO數據入口也就是ser直接賦值0或1行不行,我看別人都是用位操作賦值,ser本身只接收高電平或低電平,直接等于0或1是不是可以?
我看其他寄存器可位尋址,中也是可以單個“”位"直接賦值的,比如定時器中,EA0=0; TX0=1,這跟SER=0是不是一個道理?
函數之前 已經聲明了 sbit ser=P3^5 請教
不考慮語法錯誤。
單片機源程序如下:
int main()
{
_1sck=P3^6;
_8rck=P3^4;
sbit ser=P3^5//定義ser為位操作地址
{
void _74HC595write()
{
ser=0;
_8sck=0;
_1rck=0;
ser=1;//io口輸入一位
_1rck=1;//上升沿1移位
_1rck=0;//復位
ser=0;//io口輸入一位
_1rck=1;//上升沿1移位
_1rck=0;//復位
ser=1;//io口輸入一位
_1rck=1;//上升沿1移位
_1rck=0;//復位
ser=0;//io口輸入一位
_1rck=0;//上升沿1移位
_1rck=0;//復位
ser=1;//io口輸入一位
_1rck=1;//上升沿1移位
_1rck=0;//復位
ser=0;//io口輸入一位
_1rck=1;//上升沿1移位
_1rck=0;//復位
ser=0;//io口輸入一位
_1rck=1;//上升沿1移位
_1rck=0;//復位
ser=0;//io口輸入一位
_1rck=1;//上升沿1移位
_1rck=0;//復位
_8sck=1;//移滿8位觸發并行輸出
_1rck=0;
}
whle(1)
{
_74HC595write();
}
}
作者: Hephaestus 時間: 2024-3-21 16:46
對于595來說,SER直接賦值是沒有意義的,必須加CLK把SER的值移位到595的內部。
作者: xiaobendan001 時間: 2024-3-21 18:05
參考一下,大概就是數據變化后要有點延時才行
- void dqd(uchar da){ //êä3öÇy¶ˉ£¬°Ñ¶ÎÂë′óÄ£ÄaμÄ′®DDÏßêä3ö
- uchar i;
- for(i=8;i>0;i--){
- MC = 0;
- if((da&0x01) == 1){
- MD = 1;
- }else{
- MD = 0;
- }
- da>>=1;
- MC = 1;
- }
- MC = 0;
- delay_us(20);
- MC = 1;
- }
復制代碼
作者: xiaobendan001 時間: 2024-3-21 18:10
這段是用了庫存的595代替了164的代碼
作者: 89C52RC單片機 時間: 2024-3-21 18:27
Hephaestus 發表于 2024-3-21 16:46
對于595來說,SER直接賦值是沒有意義的,必須加CLK把SER的值移位到595的內部。
賦值后移位了,ser作為IO口,不是給0就是給1,直接賦值不可行么,為啥要執行位操作,執行位操作也是給高低電平
作者: 89C52RC單片機 時間: 2024-3-21 18:30
xiaobendan001 發表于 2024-3-21 18:05
參考一下,大概就是數據變化后要有點延時才行
意思就是可以給ser直接賦值,不用通過位操作也是可以的?
我認為ser口不管如何操作,反正底層就是給高低電平信號,應該是可行的
作者: zhuls 時間: 2024-3-21 21:29
595是8級串入轉并出的3態鎖存器,其本質上是D觸發器(陣列):就是在CK的上升沿(某些D觸發器是下降沿),將D口的狀態復制到Q。
在595上,一個D觸發器相當于一個bit,595中有8個D串聯組成了一組8bit的移位寄存器,
在SHCP的上升沿,將DS上的電平依次移入內部緩存(0-7),一個上升沿移入一位,共8級需8個上升沿,內部緩存外部不可讀不可見,只有在第9個上升沿時,才能將第一級(0)移出到Q7S端口上。
也可以在STCP的上升沿,把內部緩存移到輸出鎖存上,這里是8個bit一次性移動,外部依然不可見不可讀;
只有在OE的低電平時,才把輸出鎖存的電平一次性全輸出到Q0-Q7的端口上。
以上就595的工作原理。所以,你單獨賦值給SER是沒有任何意義的。
作者: cedtek 時間: 2024-3-22 10:43
使用74HC595目的是節省IO口,那么它是如何做到的呢?就是通過將MCU的一個IO口(數據輸出引腳)輸出的串行數據轉換成并行數據,轉換后的并行數據再通過74HC595的引腳輸出到片外外設,所以使用時我們需要將MCU寄存器中的并行數據(通常是一個字節)首先轉換成串行數據,放置到MCU的一個數據引腳上,然后74HC595對這個引腳上的電平進行采樣,移位寄存后再次轉換成串行數據。所以你有沒有發現一個關鍵的步驟:MCU數據輸出引腳上的電平需要依據MCU寄存器的字節數據進行變化!!!所以你如果直接對ser賦值,只能不斷的往外送出同一個字節數據!!!
1.3 74HC595 簡介74HC595 它是一個芯片,是一個 8 位串行輸入、并行輸出的移位緩存器,那么它的功能就是將串行數據轉化為并行數據,它的內部具有八位移位寄存器和一個存儲器,還有三態輸出功能。如下圖所示
51hei.png (71.8 KB, 下載次數: 17)
下載附件
2024-3-23 20:21 上傳
由上圖可知,輸入數據的最低位和 Q7 是對應的、最高位和 Q0 是對應的。
那么下面就講一下我們的 74HC595 芯片應該怎么使用。首先說一下 MR 復位端
51hei1.png (63.15 KB, 下載次數: 15)
下載附件
2024-3-23 20:21 上傳
這個端口是主復位端口,引腳名稱 MR 上面有一根橫線代表是低電平有效,當它為低電平時它可以將移位寄存器內的數據進行清零。通常我們把它接到 VCC 目的是防止數據的清零。
第二個端口是 DS 端口,這個端口與我們的 MCU 相連接,通過這個端口我們將串行數據傳入到移位寄存器當中
51hei2.png (64.13 KB, 下載次數: 21)
下載附件
2024-3-23 20:21 上傳
下面的是 SHCP 端口,這個端口是移位寄存器時鐘輸入,在它的上升沿時將輸入的串行數據移入到移位寄存器當中;需要注意的是:它是一個移位寄存器,也就是說當下一個脈沖到來時,上一個脈沖移入的數據就會往下進行移位。如果我們串行數據輸入 8 比特數據,那么 8 比特數據輸入完之后,第一位輸入的數據就會自動移到最后面;如果我們一次輸入的數據超過 8 比特,那么最前面輸入的數據就會通過 Q7S 端口輸出,這個端口與下一個 74HC595 芯片的 DS 端口相連接,就相當于先前輸入的數據會輸入到下一個 74HC595 芯片當中
51hei3.png (63.37 KB, 下載次數: 14)
下載附件
2024-3-23 20:21 上傳
當我們的串行數據都輸入到 74HC595 芯片之后怎么控制它的輸出呢?
我們的 74HC595 芯片,它的內部有一個八位存儲寄存器,它由 STCP 這個信號控制它,叫存儲寄存器時鐘;在存儲寄存器時鐘的上升沿時,74HC595 芯片會將移位寄存器當中的數據寫入到我們的存儲寄存器當中
51hei4.png (58.22 KB, 下載次數: 13)
下載附件
2024-3-23 20:21 上傳
當我們的輸出使能信號 OE 為有效的低電平時,74HC595 芯片就將存儲寄存器當中的數據通過 Q0、Q1、Q2、……、Q7 這八個端口傳輸出去
51hei5.png (52.77 KB, 下載次數: 16)
下載附件
2024-3-23 20:21 上傳
這八個端口就與我們的片外外設相連接,這樣就完成了串行輸入到并行輸出的一個轉換,這就是我們的 74HC595 芯片。
歡迎光臨 (http://m.zg4o1577.cn/bbs/) |
Powered by Discuz! X3.1 |
主站蜘蛛池模板:
色吧综合|
天堂成人网|
韩日视频
|
久久精品视频99
|
成人综合网站
|
黄色片网站视频
|
日韩一级大片
|
日本视频一区二区三区
|
青青青草视频
|
黄色一级大片在线免费看国产一
|
欧美成人精品欧美一级乱黄
|
欧美精品亚洲
|
激情久久综合
|
少妇搡bbbb搡bbb搡毛茸茸
|
偷拍福利视频
|
日韩精品三区
|
亚洲一区二区三区在线播放
|
欧美成人激情
|
国产一区在线视频
|
av在线资源
|
国产精品午夜视频
|
黄色成人免费网站
|
玖玖伊人
|
久久av片
|
谁有毛片网站
|
日韩三级视频
|
91视频日本
|
欧美日韩在线免费观看
|
精品日韩在线观看
|
日韩三级一区二区
|
国产综合在线视频
|
久草视频免费在线
|
日本在线天堂
|
欧美日韩中文字幕
|
人人爽人人爽人人
|
天天视频国产
|
一区在线观看视频
|
日韩免费视频
|
亚洲一区二区三区中文字幕
|
日韩欧美国产高清91
|
欧美性精品|