標(biāo)題: 咨詢一個給單片機(jī)io口賦值的問題 [打印本頁]

作者: mtt661    時間: 2022-3-17 15:07
標(biāo)題: 咨詢一個給單片機(jī)io口賦值的問題
sbit SER=P2^1;
for(a=0;a<8;a++)
{    SER=dat>>7;        
    dat<<=1;        

}

以上情況是將數(shù)據(jù)dat由最高位開始依次送到P2_1口,那么問題來了,dat始終是一個8位的二進(jìn)制,P2_1口只接收dat的最高位還是最低位?我用Proteus試了下,不管給P2_1=0x80;還是P2_1=0x01;P2_1始終是高電平;

作者: lkc8210    時間: 2022-3-17 18:09
其實SER=dat>>7;這句并不是把dat位移后的值放到SER
而是判斷dat位移后的值是不是0
不是0就把SER置1, 是0就置0
作者: snsoyang    時間: 2022-3-17 19:43
需要強(qiáng)制轉(zhuǎn)換成位,SER=(bit)(dat>>7);
作者: mtt661    時間: 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位后的最高位,

作者: lkc8210    時間: 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ù)制代碼



作者: caowei123    時間: 2022-3-21 15:16
其實SER=dat>>7;這句并不是把dat位移后的值放到SER
而是判斷dat位移后的值是不是0





歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1