找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

帖子
查看: 1510|回復(fù): 5
打印 上一主題 下一主題
收起左側(cè)

咨詢一個給單片機io口賦值的問題

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:1010435 發(fā)表于 2022-3-17 15:07 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
sbit SER=P2^1;
for(a=0;a<8;a++)
{    SER=dat>>7;        
    dat<<=1;        

}

以上情況是將數(shù)據(jù)dat由最高位開始依次送到P2_1口,那么問題來了,dat始終是一個8位的二進制,P2_1口只接收dat的最高位還是最低位?我用Proteus試了下,不管給P2_1=0x80;還是P2_1=0x01;P2_1始終是高電平;
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:161164 發(fā)表于 2022-3-17 18:09 | 只看該作者
其實SER=dat>>7;這句并不是把dat位移后的值放到SER
而是判斷dat位移后的值是不是0
不是0就把SER置1, 是0就置0
回復(fù)

使用道具 舉報

板凳
ID:978751 發(fā)表于 2022-3-17 19:43 | 只看該作者
需要強制轉(zhuǎn)換成位,SER=(bit)(dat>>7);
回復(fù)

使用道具 舉報

地板
ID:1010435 發(fā)表于 2022-3-18 09:53 | 只看該作者
lkc8210 發(fā)表于 2022-3-17 18:09
其實SER=dat>>7;這句并不是把dat位移后的值放到SER
而是判斷dat位移后的值是不是0
不是0就把SER置1, 是 ...

明白了
比如data=10101100
先向右移七位變成0000001 判斷0或者1 這個時候SER=1
然后把data向左移1位 data變成了01011000,
再向右移七位再判斷。。。始終判斷的是右移7位后的最高位,
回復(fù)

使用道具 舉報

5#
ID:161164 發(fā)表于 2022-3-18 11:59 | 只看該作者
mtt661 發(fā)表于 2022-3-18 09:53
明白了
比如data=10101100
先向右移七位變成0000001 判斷0或者1 這個時候SER=1


但建議用SER = dat & 0x80;
比較快

  1.    192:                         SER = dat >> 7;
  2. C:0x03DE    E512     MOV      A,dat(0x12)
  3. C:0x03E0    C4       SWAP     A
  4. C:0x03E1    13       RRC      A
  5. C:0x03E2    13       RRC      A
  6. C:0x03E3    13       RRC      A
  7. C:0x03E4    5401     ANL      A,#0x01
  8. C:0x03E6    24FF     ADD      A,#0xFF
  9. C:0x03E8    92B7     MOV      RD(0xB0.7),C

  10.    196:                         SER = dat & 0x80;
  11. C:0x03FC    E512     MOV      A,dat(0x12)
  12. C:0x03FE    33       RLC      A
  13. C:0x03FF    92B7     MOV      RD(0xB0.7),C
復(fù)制代碼


回復(fù)

使用道具 舉報

6#
ID:1011864 發(fā)表于 2022-3-21 15:16 | 只看該作者
其實SER=dat>>7;這句并不是把dat位移后的值放到SER
而是判斷dat位移后的值是不是0
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

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