国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

基于PIC16F73的下位機串口通訊設計備忘

發布時間:2016-9-13 11:20    發布者:designapp
關鍵詞: PIC16F73 , 串口通訊
  基本功能要求:
  接收上位機所給的設定命令,并根據命令進行相應的操作,同時下位機將采集到的信息上傳給上位機處理顯示等。
  具體細節設計:
  由于本設計主要針對本公司的高壓電源的,關于采集到的輸出高壓反饋值的模擬量可以利用單片機內部集成的8位AD轉換模塊,
  而電源的設定電壓采用單片機內部的PWM模塊來實現8位的DA轉換,
  具體程序如下:(初稿)
  //***********************************************************
  //-------------- 源文件名為:RS232.c-----
  //監控高壓源71520的工作,開啟高壓,上位機可以設定高壓值
  //同時可以監控反饋高壓值,采用最簡通訊模式
  //
  //******************************************
  #include
  #include
  __CONFIG(XT & WDTDIS& PWRTDIS & BORDIS & PROTECT );//配置字
  void DELAY(int time);
  void initPORTB();
  void initPORTA();
  void initPORTC();
  void inittmr2();
  void initCCP1();
  //變量定義
  unsigned char recdata,RX[8],i,j,k,AD_result; //0-255
  unsigned char TX[8]={0x42,0x72,0x55,0x32,0x35,0x35,0x46,0x50};//BrU255FP
  //int AD_result;
  //------------------初始化 PORTB--------
  void initPORTB()
  { TRISB=0xe0; //設置portb口高3位為輸入,低5位為輸出
  RBIE=1; //關閉B口的中斷
  PORTB=0x00; //RB口先送高電平清除干擾
  }
  //-----------------初始化 PORTA----------
  void initPORTA() //包含AD轉換初始化
  { TRISA=0x3f; //設置portA口 輸入
  ADCON1=0x00; //A口全為AD口,RA0,1,2,3,5為模擬口,考電壓VDD
  ADCON0=0x85; //fosc/32,通道0-85,8D-chanl1,開啟轉換
  ADIE=1; //允許中斷
  }
  //------------------初始化 PORTC--------
  void initPORTC() //包含波特率設置
  { TRISC=0xC0; //設置portC口狀態,RC7/RX為輸入
  TXSTA=0XA6;
  RCSTA=0XB0; //使能串口,8位連續接收,B0連續接受
  PIR1=0X00; //清標志位
  RCIE=1; //接受中斷
  TXIE=1; //發送中斷
  PORTC=0x00; //RC口賦初值
  SPBRG=25; //9600-25(10進制)
  }
  //---------------初始化 tmr2------------------
  void inittmr2()
  { TMR2 =0; //賦初值,
  T2CON=0x72; //0x72后分頻為1:8,預分頻為1:16,先關閉.,31-4后分頻,4預分頻
  // TMR2IE=1; //開/關定時器2中斷,清標志位
  TMR2IF=0;
  TMR2ON=1; //啟動定時器2
  }
  //---------------初始化 CCP1 ------------------
  void initCCP1()
  {
  CCP1IF=0; //清標志位
  CCP1CON=0X0c; //設置工作模式
  //Pwm模式
  CCP1IE=1; //關閉中斷
  PR2=0XFF; //定時器2的最大周期 245hZ
  CCPR1L=0X0f; //預制一個數
  CCPR1H=0; //,通過改變CCPR1L的值即可實現占空比的改變
  }
  void interrupt all_int()
  {
  //首先判斷中斷的類型,執行不同的中斷子程序
  //中斷優先級依次為接收中斷、AD轉換中斷、發送中斷
  if(RCIF&&RCIE) //判斷是否是串口接收中斷
  {
  // RB1=1;
  RCIF=0;//清干擾
  recdata=RCREG; // 接收數據并存儲
  RX[i]=recdata;
  i=i+1;
  }
  //------AD轉換中斷----
  if(ADIF&&ADIE)
  {
  ADIF=0;//清干擾
  RB2=1;
  k=55;
  AD_result=ADRES;
  ADCON0=0x85;
  ;
  }
  //-------發送中斷-----
  if(TXIF&&TXIE)
  {
  RB3=1;
  TXIF=0;//清干擾
  TXREG=TX[j];
  j=j+1;
  if(j>=8)
  {j=0;}
  }
  }
  //軟件延時子程序
  void DELAY(int time)
  {
  int x,y;
  for(x=0;x=8)//全部接受完畢
  {
  RB1=1;
  i=0;
  if((RX[0]==66)&&(RX[6]==88)) //校驗傳輸字符正確性
  {
  CCPR1L=(RX[3]-48)*100+(RX[4]-48)*10+(RX[5]-48);
  }
  ADCON0=0x85;//開啟轉換
  }
  ADCON0=0x85;//開啟轉換
  ;
  ;
  }
  }
  終極版本出爐!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  //***********************************************************
  //-------------- 源文件名為:rs232sample1.c-----
  //最簡單的程序框架
  //RB口輸出程序執行標簽
  //將通道0的模擬量對其進行AD轉換其值送至串口輸出
  //將串口上位機設定的值送給PWM輸出,
  //******************************************
  #include
  #include
  __CONFIG(XT & WDTDIS& PWRTDIS & BORDIS & PROTECT );//配置字
  void DELAY(int time);
  void initPORTB();
  void initPORTA();
  void initPORTC();
  void inittmr2();
  void initCCP1();
  //變量定義
  unsigned char recdata,RX[8],i,j,k,t; //0-255
  unsigned char TX[8]={0x42,0x72,0x55,0x30,0x30,0x30,0x46,0x50};//BrU000FP
  int AD_result;
  //------------------初始化 PORTB--------
  void initPORTB()
  { TRISB=0xe0; //設置portb口高3位為輸入,低5位為輸出
  RBIE=0; //關閉B口的中斷
  PORTB=0x00; //RB口先送低電平清除干擾
  }
  //-----------------初始化 PORTA----------
  void initPORTA() //包含AD轉換初始化
  { TRISA=0x3f; //設置portA口 輸入
  ADCON1=0x00; //A口全為AD口,RA0,1,2,3,5為模擬口,考電壓VDD
  ADCON0=0x85; //fosc/32,通道0-85,89-chanl1,開啟轉換
  ADIE=1; //允許中斷
  }
  //------------------初始化 PORTC--------
  void initPORTC() //包含波特率設置
  { TRISC=0xC0; //設置portC口狀態,RC7/RX為輸入
  TXSTA=0XA6;
  RCSTA=0XB0; //使能串口,8位連續接收,B0連續接受
  PIR1=0X00; //
  RCIE=1; //接受中斷
  TXIE=1; //發送中斷
  PORTC=0x00; //RC口賦初值
  SPBRG=25; //9600-25(10進制)
  }
  //---------------初始化 tmr2------------------
  void inittmr2()
  { TMR2 =0; //賦初值,
  T2CON=0x72; //0x72后分頻為1:8,預分頻為1:16,先關閉.,31-4后分頻,4預分頻
  // TMR2IE=1; //開/關定時器2中斷,清標志位
  TMR2IF=0;
  TMR2ON=1; //啟動定時器2
  }
  //---------------初始化 CCP1 ------------------
  void initCCP1()
  {
  CCP1IF=0; //清標志位
  CCP1CON=0X0c; //設置工作模式
  //Pwm模式
  CCP1IE=0; //關閉中斷
  PR2=0XFF; //定時器2的最大周期 245hZ
  CCPR1L=0X0f; //預制一個數
  CCPR1H=0; //,通過改變CCPR1L的值即可實現占空比的改變
  }
  void interrupt all_int()
  {
  //首先判斷中斷的類型,執行不同的中斷子程序
  //中斷優先級依次為接收中斷、AD轉換中斷、發送中斷
  if(RCIF&&RCIE) //判斷是否是串口接收中斷
  {
  // RB1=1;
  RCIF=0;//清干擾
  recdata=RCREG; // 接收數據并存儲
  RX[i]=recdata;
  i=i+1;
  if(i>=8)//全部接受完畢
  {
  RB4=1;
  i=0;
  if((RX[0]==66)&&(RX[6]==88)) //校驗傳輸字符正確性
  {
  CCPR1L=(RX[3]-48)*100+(RX[4]-48)*10+(RX[5]-48);
  if(CCPR1L==0)
  {
  RB4=0;
  }
  }
  }
  }
  //------AD轉換中斷----
  if(ADIF&&ADIE)
  {
  ADIF=0;//清干擾
  RB2=1;
  t=t+1;
  AD_result=AD_result+ADRES;
  if (t==16)
  {
  t=0;
  AD_result=AD_result>>4;
  TX[3]=(AD_result/100)+48;
  TX[4]=((AD_result%100-AD_result%10)/10)+48;
  TX[5]=(AD_result%10)+48;
  AD_result=0;
  }
  ADCON0=0x85;
  }
  //-------發送中斷-----
  if(TXIF&&TXIE)
  {
  TXREG=TX[j];
  RB3=1;
  j=j+1;
  if(j>=8)
  {j=0;}
  }
  }
  //軟件延時子程序
  void DELAY(int time)
  {
  int x,y;
  for(x=0;x<50;x++)
  {
  for(y=0;y }
  }
  //--------------------主程序------------------------
  main()
  {
  initPORTB(); //PORTB初始化
  initPORTA(); //PORTA初始化
  initPORTC(); //PORTC初始化
  inittmr2();
  initCCP1();
  GIE=1;
  PEIE=1;
  AD_result=0;
  while(1)
  {
  RB1=1;
  DELAY(10);
  ADCON0=0x85;
  }
  }
                               
                                                               
                               
               
本文地址:http://m.qingdxww.cn/thread-173697-1-1.html     【打印本頁】

本站部分文章為轉載或網友發布,目的在于傳遞和分享信息,并不代表本網贊同其觀點和對其真實性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問題,我們將根據著作權人的要求,第一時間更正或刪除。
您需要登錄后才可以發表評論 登錄 | 立即注冊

廠商推薦

  • Microchip視頻專區
  • 為何選擇集成電平轉換?
  • 5分鐘詳解定時器/計數器E和波形擴展!
  • 想要避免發生災難,就用MPLAB® SiC電源仿真器!
  • 無線充電基礎知識及應用培訓教程2
  • 貿澤電子(Mouser)專區
關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯系我們
電子工程網 © 版權所有   京ICP備16069177號 | 京公網安備11010502021702
快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产日韩在线观看视频 | 美日韩精品 | 免费日韩一级片 | 日本韩国经典剧情片免费在线 | 看免费人成va视频全 | 九九视频热 | 国产999视频 | 四虎免费影院在线播放 | 久草视频中文 | 明星换脸高清一区二区 | 99精品日韩 | 在线观看日本网站 | 国产成社区在线视频观看 | 正在播放日韩 | 日本在线视频免费观看 | 久久香蕉国产精品一区二区三 | 伊人久热这里只有精品视频99 | 五月天激情综合网 | 欧美日韩精品一区三区 | 久久久久激情免费观看 | 视频一区二区三区在线观看 | 一区二区三区视频在线观看 | 中文毛片| 欧美日本综合一区二区三区 | 国产做国产爱免费视频 | 77色视频在线| 啪啪伊人网| 国产馆在线观看免费的 | 日韩免费毛片 | 狠狠狠色丁香婷婷综合久久俺 | 国产一级高清视频 | 国产精品国产三级国产an不卡 | 在线毛片一区二区不卡视频 | 日韩精品高清在线 | 91麻豆国产自产 | 在线免费国产视频 | 亚洲一区播放 | 紫色丝袜人妖被调教榨精 | 四虎永久在线观看免费网站网址 | 手机在线免费不卡一区二 | 国产在线观看色 |