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

基于PIC16F73的下位機串口通訊設(shè)計備忘

發(fā)布時間:2016-9-13 11:20    發(fā)布者:designapp
關(guān)鍵詞: PIC16F73 , 串口通訊
  基本功能要求:
  接收上位機所給的設(shè)定命令,并根據(jù)命令進行相應(yīng)的操作,同時下位機將采集到的信息上傳給上位機處理顯示等。
  具體細節(jié)設(shè)計:
  由于本設(shè)計主要針對本公司的高壓電源的,關(guān)于采集到的輸出高壓反饋值的模擬量可以利用單片機內(nèi)部集成的8位AD轉(zhuǎn)換模塊,
  而電源的設(shè)定電壓采用單片機內(nèi)部的PWM模塊來實現(xiàn)8位的DA轉(zhuǎn)換,
  具體程序如下:(初稿)
  //***********************************************************
  //-------------- 源文件名為:RS232.c-----
  //監(jiān)控高壓源71520的工作,開啟高壓,上位機可以設(shè)定高壓值
  //同時可以監(jiān)控反饋高壓值,采用最簡通訊模式
  //
  //******************************************
  #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; //設(shè)置portb口高3位為輸入,低5位為輸出
  RBIE=1; //關(guān)閉B口的中斷
  PORTB=0x00; //RB口先送高電平清除干擾
  }
  //-----------------初始化 PORTA----------
  void initPORTA() //包含AD轉(zhuǎn)換初始化
  { TRISA=0x3f; //設(shè)置portA口 輸入
  ADCON1=0x00; //A口全為AD口,RA0,1,2,3,5為模擬口,考電壓VDD
  ADCON0=0x85; //fosc/32,通道0-85,8D-chanl1,開啟轉(zhuǎn)換
  ADIE=1; //允許中斷
  }
  //------------------初始化 PORTC--------
  void initPORTC() //包含波特率設(shè)置
  { TRISC=0xC0; //設(shè)置portC口狀態(tài),RC7/RX為輸入
  TXSTA=0XA6;
  RCSTA=0XB0; //使能串口,8位連續(xù)接收,B0連續(xù)接受
  PIR1=0X00; //清標志位
  RCIE=1; //接受中斷
  TXIE=1; //發(fā)送中斷
  PORTC=0x00; //RC口賦初值
  SPBRG=25; //9600-25(10進制)
  }
  //---------------初始化 tmr2------------------
  void inittmr2()
  { TMR2 =0; //賦初值,
  T2CON=0x72; //0x72后分頻為1:8,預分頻為1:16,先關(guān)閉.,31-4后分頻,4預分頻
  // TMR2IE=1; //開/關(guān)定時器2中斷,清標志位
  TMR2IF=0;
  TMR2ON=1; //啟動定時器2
  }
  //---------------初始化 CCP1 ------------------
  void initCCP1()
  {
  CCP1IF=0; //清標志位
  CCP1CON=0X0c; //設(shè)置工作模式
  //Pwm模式
  CCP1IE=1; //關(guān)閉中斷
  PR2=0XFF; //定時器2的最大周期 245hZ
  CCPR1L=0X0f; //預制一個數(shù)
  CCPR1H=0; //,通過改變CCPR1L的值即可實現(xiàn)占空比的改變
  }
  void interrupt all_int()
  {
  //首先判斷中斷的類型,執(zhí)行不同的中斷子程序
  //中斷優(yōu)先級依次為接收中斷、AD轉(zhuǎn)換中斷、發(fā)送中斷
  if(RCIF&&RCIE) //判斷是否是串口接收中斷
  {
  // RB1=1;
  RCIF=0;//清干擾
  recdata=RCREG; // 接收數(shù)據(jù)并存儲
  RX[i]=recdata;
  i=i+1;
  }
  //------AD轉(zhuǎn)換中斷----
  if(ADIF&&ADIE)
  {
  ADIF=0;//清干擾
  RB2=1;
  k=55;
  AD_result=ADRES;
  ADCON0=0x85;
  ;
  }
  //-------發(fā)送中斷-----
  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;//開啟轉(zhuǎn)換
  }
  ADCON0=0x85;//開啟轉(zhuǎn)換
  ;
  ;
  }
  }
  終極版本出爐!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  //***********************************************************
  //-------------- 源文件名為:rs232sample1.c-----
  //最簡單的程序框架
  //RB口輸出程序執(zhí)行標簽
  //將通道0的模擬量對其進行AD轉(zhuǎn)換其值送至串口輸出
  //將串口上位機設(shè)定的值送給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; //設(shè)置portb口高3位為輸入,低5位為輸出
  RBIE=0; //關(guān)閉B口的中斷
  PORTB=0x00; //RB口先送低電平清除干擾
  }
  //-----------------初始化 PORTA----------
  void initPORTA() //包含AD轉(zhuǎn)換初始化
  { TRISA=0x3f; //設(shè)置portA口 輸入
  ADCON1=0x00; //A口全為AD口,RA0,1,2,3,5為模擬口,考電壓VDD
  ADCON0=0x85; //fosc/32,通道0-85,89-chanl1,開啟轉(zhuǎn)換
  ADIE=1; //允許中斷
  }
  //------------------初始化 PORTC--------
  void initPORTC() //包含波特率設(shè)置
  { TRISC=0xC0; //設(shè)置portC口狀態(tài),RC7/RX為輸入
  TXSTA=0XA6;
  RCSTA=0XB0; //使能串口,8位連續(xù)接收,B0連續(xù)接受
  PIR1=0X00; //
  RCIE=1; //接受中斷
  TXIE=1; //發(fā)送中斷
  PORTC=0x00; //RC口賦初值
  SPBRG=25; //9600-25(10進制)
  }
  //---------------初始化 tmr2------------------
  void inittmr2()
  { TMR2 =0; //賦初值,
  T2CON=0x72; //0x72后分頻為1:8,預分頻為1:16,先關(guān)閉.,31-4后分頻,4預分頻
  // TMR2IE=1; //開/關(guān)定時器2中斷,清標志位
  TMR2IF=0;
  TMR2ON=1; //啟動定時器2
  }
  //---------------初始化 CCP1 ------------------
  void initCCP1()
  {
  CCP1IF=0; //清標志位
  CCP1CON=0X0c; //設(shè)置工作模式
  //Pwm模式
  CCP1IE=0; //關(guān)閉中斷
  PR2=0XFF; //定時器2的最大周期 245hZ
  CCPR1L=0X0f; //預制一個數(shù)
  CCPR1H=0; //,通過改變CCPR1L的值即可實現(xiàn)占空比的改變
  }
  void interrupt all_int()
  {
  //首先判斷中斷的類型,執(zhí)行不同的中斷子程序
  //中斷優(yōu)先級依次為接收中斷、AD轉(zhuǎn)換中斷、發(fā)送中斷
  if(RCIF&&RCIE) //判斷是否是串口接收中斷
  {
  // RB1=1;
  RCIF=0;//清干擾
  recdata=RCREG; // 接收數(shù)據(jù)并存儲
  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轉(zhuǎn)換中斷----
  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;
  }
  //-------發(fā)送中斷-----
  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://www.qingdxww.cn/thread-173697-1-1.html     【打印本頁】

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

廠商推薦

  • Microchip視頻專區(qū)
  • 基于CEC1712實現(xiàn)的處理器SPI FLASH固件安全彈性方案培訓教程
  • 5分鐘詳解定時器/計數(shù)器E和波形擴展!
  • PIC18-Q71系列MCU概述
  • 了解一下Microchip強大的PIC18-Q24 MCU系列
  • 貿(mào)澤電子(Mouser)專區(qū)
關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權(quán)所有   京ICP備16069177號 | 京公網(wǎng)安備11010502021702
快速回復 返回頂部 返回列表
主站蜘蛛池模板: 一级黄色a毛片 | 日韩女同| 久久久精品2018免费观看 | 欧美黄色tv | 黄色片免费观看 | 国产福利在线观看精品 | 亚洲国产欧美国产第一区二区三区 | 国产日本欧美亚洲精品视 | 成视频年人黄网站免费视频 | 正在播放91大神调教偷偷 | 日本视频免费高清一本18 | 成人免费观看在线视频 | 国产免费高清 | 亚洲影视在线观看 | 欧美在线视频在线观看 | 999精品| 天天干天天射综合网 | 成人免费黄色 | ye321夜色资源网站 | 亚洲成人18| 欧美午夜片 | 老司机免费精品视频 | 精品久久免费视频 | 免费日本在线视频 | 男女午夜视频在线观看 | 91avav| 特级毛片网站 | 恐怖星球在线观看完整版免费 | 国内精品久久久久鸭 | 欧美成人精品高清在线播放 | 国产午夜视频在线观看第四页 | 日本3级网站 | 手机看片日韩 | 两个人免费看 | 手机看片中文字幕 | 人人干人人模 | 天天操天天摸天天干 | 日本韩国在线观看 | 在线观看免费精品国产 | 精品国产一区二区三区久 | 欧美日韩在线看 |