欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標(biāo)題: 單片機(jī)學(xué)習(xí)實(shí)驗(yàn)筆記:移位操作程序 [打印本頁(yè)]

作者: ralap2020    時(shí)間: 2022-10-8 00:27
標(biāo)題: 單片機(jī)學(xué)習(xí)實(shí)驗(yàn)筆記:移位操作程序
單片機(jī)源程序如下:
  1. #include<reg52.h>  //52系列單片機(jī)頭文件
  2. #include<intrins.h>  //包含 _crol_   _cror_(函數(shù)所在的頭文件 )
  3. #define uint unsigned int  //宏定義
  4. #define uchar unsigned char  //宏定義
  5. uchar a; //定義a變量, 用來(lái)給P1賦值

  6. //********延時(shí)程序***********
  7. void delayms(uint xms)
  8. {
  9. uint i,j;
  10.    for(i=xms;i>0;i--)        //i=xms 即延時(shí)約xms亳秒
  11.       for(j=110;j>0;j--);
  12. }
  13. //***************************
  14. void main() //主函數(shù)
  15. {
  16. a=0xfe;            //二進(jìn)制: 1111 1110
  17. while(1)  //大循環(huán)
  18. {
  19. P1=a; //點(diǎn)亮發(fā)光管
  20. delayms(500);  //延時(shí)500毫秒
  21. a=_cror_(a,1);        //將a循環(huán)右移1位后再賦給a
  22. }
  23. }
  24. //循環(huán)右移,被移出的放在最高位,來(lái)回循環(huán),所以P1中0和1的位數(shù)不變,只
  25. //是改變了0 1的位置,因此在右移過(guò)程中亮燈的數(shù)量不變,只是改變了亮燈的位置.



  26. /***********************************************************************************************************************
  27. 知識(shí)點(diǎn):移位操作
  28. (1)        左移:C52中操作符為“<<”,每執(zhí)行一次左移指令,被操作的數(shù)將最高位移入單片機(jī)PSW寄存器的
  29. CY位,CY位中原來(lái)的數(shù)丟棄,最低位 補(bǔ)0,其他位依次向左移動(dòng)一位,如實(shí)例一所示:

  30. //***** 實(shí)例一 ****   8位單片機(jī)一次就只能處理8位二進(jìn)制 , 如果是16位單片機(jī),一次能處理16位。
  31. void main() //主函數(shù)
  32. {
  33. a=0xcc;         //二進(jìn)制:移位前 CY  1100 1100    從CY位,最高位到最低位         , 十六進(jìn)制為:0xcc
  34. while(1)  //大循環(huán)
  35. {
  36. P1=a<<1; //二進(jìn)制:左移后為:0001 1001 1000  十六進(jìn)制為:0x198
  37.     //(利用前面所學(xué)的實(shí)驗(yàn)板8燈來(lái)認(rèn)證,P1:剛好有8個(gè)燈顯示后8位,從低位至高位顯示,0為燈亮。 a的變量,左移1位。)
  38. }
  39. }

  40. ***********************************************************************************************************************
  41. (2)右移:C52中操作符為“>>”,每執(zhí)行一次右移指令,被操作的數(shù)將最低位移入單片機(jī)PSW寄存器的
  42. CY位,CY位中原來(lái)的數(shù)丟棄,最高位 補(bǔ)0,其他位依次向右移動(dòng)一位,如實(shí)例二所示:

  43. //***** 實(shí)例二 ****
  44. void main()    //主函數(shù)
  45. {
  46.     a=0xcc;         //二進(jìn)制:移位前 1100 1100  CY    ; 最高位到最低位 CY位 ; 十六進(jìn)制為:0xcc
  47. while(1)   //大循環(huán)
  48.     {
  49.     P1=a>>1; //二進(jìn)制:右移后為:0110 0110 0      十六進(jìn)制為:0x66
  50. //P1=0x66; //(利用前面所學(xué)的實(shí)驗(yàn)板8燈來(lái)認(rèn)證,P1:因?yàn)橹挥?個(gè)燈顯示前8位,從低位至高位顯示,0為燈亮。 a的變量,右移1位。)
  51.     }
  52. }

  53. *************************************************************************************************************************
  54. (3)循環(huán)左移:最高位移入最低位,其他位依次向左移一位。C語(yǔ)言中沒(méi)有專門(mén)的指令,通過(guò)移位指令與簡(jiǎn)單邏輯運(yùn)算可以
  55. 實(shí)現(xiàn)循環(huán)左移,或直接利用C52庫(kù)中自帶的函數(shù)  _cril_  實(shí)現(xiàn); 如實(shí)例三所示:

  56. //***** 實(shí)例三 ****
  57. void main() //主函數(shù)
  58. {
  59. a=0xfe;            //二進(jìn)制: 1111 1110
  60. while(1)  //大循環(huán)
  61. {
  62. P1=a; //點(diǎn)亮發(fā)光管
  63. delayms(500);  //延時(shí)500毫秒
  64. a=_crol_(a,1);        //將a循環(huán)左移1位后再賦給a
  65. }
  66. }
  67. /*
  68. a=_crol_(a,1);        語(yǔ)句;因?yàn)開(kāi)crol_是一個(gè)帶返回值的函數(shù),本句在執(zhí)行時(shí),先執(zhí)行等號(hào)右邊的表達(dá)式,即a這個(gè)變量循環(huán)左移
  69. 一位,然后將結(jié)果再重新賦給a變量,如a初值為0xfe,二進(jìn)制為1111 1110,執(zhí)行此函數(shù)時(shí),將它循環(huán)左移一位后為1111 1101,即
  70. 0xfd,然后再將0xfd重新賦值給a變量,等while(1)中的最后一條語(yǔ)句執(zhí)行完后,將返回到while(1)中的第一語(yǔ)句重新執(zhí)行,此
  71. 時(shí)a的值變成了0xfd.
  72. ***************************************************************************************************************************/      
  73. /*
  74. (4)循環(huán)右移:最低位移入最高位,其他位依次向右移一個(gè)位。C語(yǔ)言中沒(méi)有專門(mén)的指令,通過(guò)移位指令與簡(jiǎn)單邏輯運(yùn)算可以
  75. 實(shí)現(xiàn)循環(huán)右移,或直接利用C52庫(kù)中自帶的函數(shù)  _crir_  實(shí)現(xiàn); 如實(shí)例四所示:

  76. //***** 實(shí)例四 ****
  77. void main() //主函數(shù)
  78. {
  79. a=0xfe;            //二進(jìn)制: 1111 1110
  80. while(1)  //大循環(huán)
  81. {
  82. P1=a; //點(diǎn)亮發(fā)光管
  83. delayms(500);  //延時(shí)500毫秒
  84. a=_cror_(a,1);        //將a循環(huán)右移1位后再賦給a
  85. }
  86. }
  87. //循環(huán)右移,被移出的放在最高位,來(lái)回循環(huán),所以P1中0和1的位數(shù)不變,只
  88. //是改變了0 1的位置,因此在右移過(guò)程中亮燈的數(shù)量不變,只是改變了亮燈的位置.
  89. *************************************************************************************************************************/
  90. /*************************************************************************************************************************
  91. 知識(shí)點(diǎn):PSW寄存器.
  92.    PSW (Program Status Word)全稱為程序狀態(tài)字標(biāo)志寄存器,是一個(gè)8位寄存器,位于單片機(jī)內(nèi)的特殊功能寄存器區(qū),字節(jié)地址D0H,用
  93. 來(lái)存放運(yùn)算結(jié)果的一此特征,如有無(wú)進(jìn)位,借位等,使用匯編編程時(shí)PSW寄存器很有用,但在利用C語(yǔ)言編程時(shí),編繹器會(huì)自動(dòng)控制該寄存器,
  94. 很少人為操作它,只需要簡(jiǎn)單了解即可,其每位的具體含義如下:
  95.      
  96.          _D7___D6___D5___D4____D3____D2___D1___D0__
  97. PSW        | CY | AC |        F0 | RS1 | RS0 | OV        | …  | P   |  D0H
  98.          ——————————————————————————————————————————

  99.   ① CY 進(jìn)位標(biāo)志位,它表示運(yùn)算是否有進(jìn)位(或借位)。如果操作結(jié)果在最高位有進(jìn)位(加法)或者借位(減法),則該位為1,否則為0。
  100.   ② AC 輔助進(jìn)位標(biāo)志,又稱半進(jìn)位標(biāo)志,它指兩個(gè)8位數(shù)運(yùn)算低四位是否有半進(jìn)位,即低四位相加(或相減)是否進(jìn)位(或借位),如
  101. 有AC為1,否則為0。
  102.   ③ F0  由用戶使用的一個(gè)狀態(tài)標(biāo)志位,可用軟件來(lái)使它置1或清0,也可由軟件來(lái)測(cè)試它,以控制程序的流向。
  103.   ④ RS1、RS0  4組工作寄存器區(qū)選擇控制位,在匯編語(yǔ)言中這兩位用來(lái)選擇4組工作寄存器區(qū)中的哪一組為當(dāng)前工作寄存區(qū)。
  104.   ⑤ OV  溢出標(biāo)志位,反映帶符號(hào)數(shù)的運(yùn)算結(jié)果是否有溢出。有溢出時(shí),此位為1,否則為0。
  105.   ⑥ P 奇偶標(biāo)志位,反映累加器ACC內(nèi)容的奇偶性,如果ACC中的運(yùn)算結(jié)果有偶數(shù)個(gè)1(如11001100B,其中有4個(gè)1),則P為0,否則P為1。  

  106. *************************************************************************************************************************/

復(fù)制代碼

您可以直接復(fù)制以上代碼到Keil或者下載創(chuàng)建好的Keil工程文件: 以上代碼.7z (14.04 KB, 下載次數(shù): 18)

作者: zzya1985    時(shí)間: 2022-10-11 20:08
學(xué)習(xí)使人進(jìn)步
作者: zzzzz8840    時(shí)間: 2022-10-19 10:22
請(qǐng)問(wèn)這個(gè)延時(shí)的時(shí)間誤差大嗎?
作者: ralap2020    時(shí)間: 2022-10-21 00:18
zzzzz8840 發(fā)表于 2022-10-19 10:22
請(qǐng)問(wèn)這個(gè)延時(shí)的時(shí)間誤差大嗎?

延時(shí)的時(shí)間誤差沒(méi)計(jì)算過(guò),好像是用的晶振和下載到單片機(jī)的設(shè)置有關(guān)。
作者: ynhjc2021    時(shí)間: 2023-1-3 08:22
zzzzz8840 發(fā)表于 2022-10-19 10:22
請(qǐng)問(wèn)這個(gè)延時(shí)的時(shí)間誤差大嗎?

采用定時(shí)器或計(jì)數(shù)器中斷,時(shí)間精準(zhǔn)點(diǎn)




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