亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 1052 | 回復(fù): 0
打印 上一主題 下一主題

AT89C52簡單的串口操作 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2011-12-23 01:27 |只看該作者 |倒序?yàn)g覽
發(fā)送程序:
  1. #include<REG52.h>
  2. #include<intrins.h>

  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. void Delay(uint del)
  6. {
  7.     uint i,j;
  8.     for(i=0; i<del; i++)
  9.     for(j=0; j<1827; j++)
  10.     ;
  11. }
  12. void Com_Init(void)
  13. {
  14.      TMOD = 0x20;//方式2,8位自動(dòng)填充
  15.      PCON = 1<<7;//設(shè)置smod為1
  16.      SCON = 0x40;//SM0,SM1,SM2,REN,TB8,RB8,TI,RI設(shè)置為0x40,不允許讀,串口工作方式1,波特率可變?yōu)?smod*fosc/[32*12*(256-x)]
  17.      TH1 = 0xfd;
  18.      TL1 = 0xfd;//19200 自填充
  19.      TR1 = 1;//啟動(dòng)定時(shí)器    
  20. }
  21. void Main()
  22. {
  23.     uchar i = 0;
  24.     uchar code Buffer[] = "Welcome To The MCU World. http://dlmcu.taobao.com QQ:85536436 ";     //所要發(fā)送的數(shù)據(jù)
  25.     uchar *p;
  26.     Com_Init();    
  27.     while(1)
  28.     {
  29.         p = Buffer;
  30.         while(1)
  31.         {    
  32.             SBUF = *p;
  33.             while(!TI) //如果發(fā)送完畢,硬件會(huì)置位TI
  34.             {
  35.                 _nop_();    
  36.             }
  37.             p++;
  38.             if(*p == '\0')
  39.             {
  40.                 Delay(200);                //延時(shí)2秒鐘再進(jìn)行下次發(fā)送
  41.                 TI = 0;
  42.                 break;                    //在每個(gè)字符串的最后,會(huì)有一個(gè)'\0'
  43.             }
  44.             TI = 0;         //TI清零
  45.         }            
  46.     }
  47. }
  48. 說明:
  49. 串口的初始化中,需要設(shè)置TIME1,這個(gè)定時(shí)器的的溢出率在波特率中有用,其中PCON電源控制器最高位SMOD與波特率有關(guān)系,然后就是設(shè)置TIME1的初始值,開啟定時(shí)器。
  50. 當(dāng)發(fā)送1個(gè)數(shù)值后,就是8位,即1個(gè)字符,先賦值給SBUF,由SBUF將并行的數(shù)據(jù)換成串行的數(shù)據(jù)在P3.1中根據(jù)01的不同會(huì)出現(xiàn)不同的電壓即完成物理層的傳輸,另外一方即可根據(jù)電壓判斷不同的01,然后形成8位的并行數(shù)據(jù)。
接受程序:
  1. #include<REG52.h>
  2. #include<intrins.h>

  3. #define uchar unsigned char
  4. #define uint unsigned int

  5. uchar code table[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
  6. uchar LED_Buffer[8] = {0}; //從串口接收的數(shù)據(jù)
  7. void Delay_1ms(uint i)//1ms延時(shí)
  8. {
  9.     uchar x,j;
  10.     for(j=0;j<i;j++)
  11.     for(x=0;x<=148;x++);    
  12. }
  13. void Com_Int(void) interrupt 4
  14. {
  15.     static uchar i = 0;         //定義為靜態(tài)變量,當(dāng)重新進(jìn)入這個(gè)子函數(shù)時(shí) i 的值不會(huì)發(fā)生改變
  16.     if(RI == 1)                     //當(dāng)硬件接收到一個(gè)數(shù)據(jù)時(shí),RI會(huì)置位
  17.     {
  18.         LED_Buffer[i] = SBUF - 48; //這里減去48是因?yàn)閺碾娔X中發(fā)送過來的數(shù)據(jù)是ASCII碼。
  19.         RI = 0;         
  20.         if(i==8)
  21.         {
  22.             i = 0;
  23.         }
  24.         i++;        
  25.     }
  26. }

  27. void Com_Init(void)
  28. {
  29.      TMOD = 0x20;
  30.      PCON = 0x00;
  31.      SCON = 0x50;            
  32.      TH1 = 0xfd; //設(shè)置波特率 9600
  33.      TL1 = 0xfd;
  34.      TR1 = 1;        //啟動(dòng)定時(shí)器1
  35.      ES = 1;        //開串口中斷
  36.      EA = 1;        //開總中斷        
  37. }

  38. void Main()
  39. {
  40.     uchar i = 0;
  41.     Delay_1ms(100);
  42.     Com_Init();
  43.     while(1)
  44.     {
  45.         P0 = table[LED_Buffer[i]];
  46.         P2 = i++;
  47.         Delay_1ms(1);
  48.         if(i == 8) i=0;
  49.     }
  50. }
說明:
可以再串口RI或者TI置位后,設(shè)置中斷函數(shù),TI和RI由硬件。通過RI置位可以讀取接受到的數(shù)組。
然后做進(jìn)一步的傳輸。

您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP