久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3226|回復: 12
收起左側

單片機新手求教74HC595位移程序的執行分析,百思不得其解

[復制鏈接]
ID:387946 發表于 2018-8-19 21:37 | 顯示全部樓層 |閱讀模式
在編寫74HC595芯片編程時,位移問題百思不得其解:
typedef unsigned char u8;
sbit SER=p3^4;

void SendTo595(u8 indata){
        u8 i=0;
        for(;i<8;i++){         
                SER=indata>>7;
                indata=indata<<1;
                }

如果我傳入的indata=1001 1001,將indata>>7,是不是變成0000 0001,再把移位后的數值賦值給SER,那不是SER=0嗎?但顯示結果是1,這是為什么呢?

回復

使用道具 舉報

ID:19198 發表于 2018-8-20 03:45 | 顯示全部樓層
10011001右移7位是0000001

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

ID:19198 發表于 2018-8-20 03:47 | 顯示全部樓層
0000001是U8數據,賦值給位數據取最后一位就是1

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

ID:279667 發表于 2018-8-20 08:45 | 顯示全部樓層
1001 1001 右移7位后得到數值 0000 0001,這個數值是2進制數,那最后一位代表2^0(2的0次方),也就是右移后得到一個2的0次方數,那么最后的結果就是1了(2的0次方等于1)。

評分

參與人數 1黑幣 +40 收起 理由
admin + 40 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

ID:387946 發表于 2018-8-20 10:21 | 顯示全部樓層
trm999 發表于 2018-8-20 03:47
0000001是U8數據,賦值給位數據取最后一位就是1

給位數據賦值,不是取第一位嗎?難道是取最后一位?
回復

使用道具 舉報

ID:387946 發表于 2018-8-20 10:24 | 顯示全部樓層
mrhan1992 發表于 2018-8-20 08:45
1001 1001 右移7位后得到數值 0000 0001,這個數值是2進制數,那最后一位代表2^0(2的0次方),也就是右移 ...

0000 0001=2^0,這個我明白,我只是奇怪,為什么右移后是把末位賦值人SER,而不是首位賦值給SER
回復

使用道具 舉報

ID:164602 發表于 2018-8-20 13:01 | 顯示全部樓層
yanyongtom 發表于 2018-8-20 10:24
0000 0001=2^0,這個我明白,我只是奇怪,為什么右移后是把末位賦值人SER,而不是首位賦值給SER

很正常啊。
因為SER是一位,一個八位賦值給一位,自動取低位。同理,一個十六位賦值給八位,同樣,自動取低八位。以此可以類推的。
回復

使用道具 舉報

ID:388125 發表于 2018-8-20 14:32 | 顯示全部樓層
確實,一個字節的數值賦值給一個比特,選最低位賦值。

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

ID:388142 發表于 2018-8-20 14:52 | 顯示全部樓層
10011001右移7位是0000001

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

ID:287739 發表于 2018-8-20 15:39 | 顯示全部樓層
indata右移7位等于00000001
回復

使用道具 舉報

ID:287739 發表于 2018-8-20 15:44 | 顯示全部樓層
10011001右移7位是0000001,取最后一位,所以SEG=1啊

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

ID:388197 發表于 2018-8-20 16:38 | 顯示全部樓層
indata= 1001 1001;
SER = indata>>7;
可以這么理解
這兩句執行后,indata右移7位后(0000 0001)的最低位賦值給SER,即SER = 1,
然后這兩句執行過程中,indata并沒有重新賦值,indata的值仍然是1001 1001.
如需要移位操作后將移位后的值賦予原變量,
應該是
indata >>= 7;
關于74HC595適合用來與74HC165配合來用做IO口擴展
我這有當年我學習該芯片的一些程序,樓主可以參考下
bdata u8 out_data;
sbit ds = PX^X;               
sbit shcp = PX^X;          //74hc595時鐘引腳
sbit mr = PX^X;            //74HC595清零引腳,低電平有效,可直接接VCC
sbit stcp = PX^X;         //相當于片選信號
sbit stcp2 = PX^X;
sbit buf = out_data^7;
void tran(u8 dat)
{
        u8 i = 0;
        shcp = 0;
        out_data = dat;
        while(i<8)
        {
                ds = buf;
                shcp = 1;
                _nop_();
                _nop_();
                shcp = 0;
                out_data<<=1;
                i++;
        }
}

void tran_data(u8 dat,u8 which)
{
        tran(dat);
        if(which == 0)
        {
                stcp = 0;
                _nop_();
                _nop_();
                stcp = 1;
        }

        if(which == 1)
        {
                stcp2 = 0;
                _nop_();
                _nop_();
                stcp2 = 1;
       
        }
}

74HC595可以多片并聯,時鐘信號SHCP,串行數據DS端并在一起,用STCP腳作片選.

參考電路

參考電路
回復

使用道具 舉報

ID:388197 發表于 2018-8-20 16:41 | 顯示全部樓層
我以前用74HC595的代碼
bdata u8 out_data;
sbit ds = P4^0;
sbit shcp = P4^1;
sbit mr = P4^2;
sbit stcp = P4^3;
sbit stcp2 = P4^4;
sbit buf = out_data^7;

void tran(u8 dat)
{
        u8 i = 0;
        shcp = 0;
        out_data = dat;
        while(i<8)
        {
                ds = buf;
                shcp = 1;
                _nop_();
                _nop_();
                shcp = 0;
                out_data<<=1;
                i++;
        }
}

void tran_data(u8 dat,u8 which)
{
        tran(dat);
        if(which == 0)
        {
                stcp = 0;
                _nop_();
                _nop_();
                stcp = 1;
        }

        if(which == 1)
        {
                stcp2 = 0;
                _nop_();
                _nop_();
                stcp2 = 1;
       
        }
}
附件是參考電路
1.png

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美综合国产精品久久丁香 | 国产欧美精品 | www.亚洲一区二区 | 亚洲性人人天天夜夜摸 | 日本高清中文字幕 | 亚洲第一免费播放区 | 韩国av一区二区 | 日韩国产一区 | 三极网站 | 一级黄色短片 | 2018天天干天天操 | 欧美一区二区三区免费电影 | 亚洲欧洲日韩精品 中文字幕 | 亚洲女优在线播放 | 精品91av| 久久一热 | 一区二区三区在线免费观看视频 | 国产精品久久国产精品久久 | 亚洲国产精品一区二区三区 | 国产1区2区3区 | 性生活毛片 | 欧美一级电影免费观看 | 国产欧美在线 | 国产精品久久国产精品99 | 成人免费网站 | 国产在线视频在线观看 | 中文字幕 欧美 日韩 | 国产又色又爽又黄又免费 | 国产一区二区三区在线免费观看 | 中文字幕二区三区 | 嫩草视频在线看 | 久久夜视频 | 精品国产一区二区国模嫣然 | 男人的天堂在线视频 | 久久久久国产一区二区三区 | 欧美一二区 | 成人一区在线观看 | 亚洲精品久久久蜜桃 | 欧美一区二区三区一在线观看 | 岛国精品| 欧美一区二区久久 |