久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 1788|回復(fù): 6
打印 上一主題 下一主題
收起左側(cè)

關(guān)于測(cè)量PM2.5并在LCD上顯示,同時(shí)實(shí)現(xiàn)串口通訊,大概功能就這樣,有一個(gè)報(bào)錯(cuò),死...

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:442241 發(fā)表于 2021-12-16 14:43 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
//***************************************
// 空氣質(zhì)量測(cè)試儀設(shè)計(jì)
// 使用單片機(jī)STC90C516RD
// 晶振:11.0592M
// 顯示:1602液晶顯示//編程思路:
//簡(jiǎn)單的就是做一個(gè)1ms的定時(shí)中斷(要準(zhǔn)點(diǎn)可以定時(shí)時(shí)間減少,反之定時(shí)時(shí)間加大)
//在中斷中檢測(cè)IO口的電平,是低就 加1
//1s內(nèi)總共檢測(cè)1000次 ,檢測(cè)累加的值除以10就是百分?jǐn)?shù),也就是低脈沖率。
//****************************************
#include"Reg52.H"                                           /* 調(diào)用MCS51寄存器頭文件 */
#include"intrins.H"
#include "LCD1602.H"
#include"stdio.h"
#include <string.h>  

#define uc unsigned char   
#define uint unsigned int
        
typedef unsigned char  U8;       /* defined for unsigned 8-bits integer variable           無符號(hào)8位整型變量  */
typedef signed   char  S8;       /* defined for signed 8-bits integer variable                  有符號(hào)8位整型變量  */
typedef unsigned int   U16;      /* defined for unsigned 16-bits integer variable           無符號(hào)16位整型變量 */
typedef signed   int   S16;      /* defined for signed 16-bits integer variable           有符號(hào)16位整型變量 */
typedef unsigned long  U32;      /* defined for unsigned 32-bits integer variable           無符號(hào)32位整型變量 */
typedef signed   long  S32;      /* defined for signed 32-bits integer variable           有符號(hào)32位整型變量 */
typedef float          F32;      /* single precision floating point variable (32bits) 單精度浮點(diǎn)數(shù)(32位長(zhǎng)度) */
typedef double         F64;      /* double precision floating point variable (64bits) 雙精度浮點(diǎn)數(shù)(64位長(zhǎng)度) */

unsigned char sChar_i=0;//寫入數(shù)據(jù)sChar指針
unsigned char  sendFlag = 0;        //未發(fā)送數(shù)據(jù)時(shí)
unsigned char  receFlag =0;                //未接受到數(shù)據(jù)時(shí)  
//*********************************************
//MON51必須用到的
code unsigned char stop[3] _at_ 0x3b;
//*********************************************
sbit   PWM=P1^0;              //脈沖輸出//xin//
sbit LED=P3^7;
U16    number_t0=0;                    
U16    lt_time=0;                         //低脈沖時(shí)間                     
U16    Temp0=0;   //低脈沖率

uc sChar[50]={'\0'};


void sendChar(unsigned char sendValue);  //發(fā)送一字節(jié)數(shù)據(jù)
void sendAll(unsigned char *pValue);       //發(fā)送一組數(shù)據(jù)
  //   


//*********************定時(shí)器T0用于定時(shí)1MS********
timer0() interrupt 1 using 1      //T/C0中斷服務(wù)程序, 每1ms中斷一次
{  

   number_t0++;
   if(PWM==0)  lt_time++;          //每1ms檢測(cè)PWM脈沖是否為低電平     
   if(number_t0==1000)            //munber_t0計(jì)數(shù)到1000MS,即1S,計(jì)算低脈沖率
     { TR0=0;                      //關(guān)閉定時(shí)器0
           Temp0=(int)(lt_time/10);    //計(jì)算低脈沖率
           number_t0=0;                //1S時(shí)間計(jì)數(shù)器和低脈沖率變量初始化為0,開始下一個(gè)測(cè)量周期
           lt_time=0;
           TR0=1;                      // 啟動(dòng)定時(shí)器0
         }
   TH0=0xfc;
   TL0=0x66;
}
//
void dingshi()
{        TMOD=0x01;
   TH0=0xfc;                                            /*晶振:11.0592MHz,定時(shí)1ms*/
   TL0=0x66;
   ET0=1;
   TR0=1;
   EA=1;
   DelayMs( 200 );          /* 上電延時(shí) */
}

//xin//
void initSer()//初始化  
{  
     TMOD=0x20;    //定時(shí)器工作方式,選擇了定時(shí)器1,工作方式2 八位初值自動(dòng)重裝的8位定時(shí)器。         
     TH1=0xfd;     //定時(shí)器1初值  ,設(shè)置波特率為9600 配合為晶振11.0529MHZ,晶振的電容是20uf?  
     TL1=0xfd;  
     TR1=1;        //開啟定時(shí)器1  

     SM0=0;             //屬于SCON寄存器
     SM1=1;        //串口工作方式1,10位異步接收,(8位數(shù)據(jù))波特率可變  
     REN=1;        //允許串行口接收位  
     EA=1;         //允許中斷(總閘)  
     ES=1;         //允許串口中斷
}  
void sendChar(unsigned char Value)                        //發(fā)送一個(gè)字節(jié)數(shù)據(jù)
{
         SBUF = Value;     
         sendFlag = 1;                                                        //設(shè)置發(fā)送標(biāo)志位,發(fā)一字節(jié)就置位
         while(sendFlag);                                                //直到發(fā)完數(shù)據(jù),將sendFlag清零后,才退出sendChar函數(shù)
}

void sendAll(unsigned char *pValue)                        //發(fā)送一組數(shù)據(jù)
{
        while((*pValue) != '\0')                                   //如果沒有發(fā)送完畢就繼續(xù)發(fā)
        {
                sendChar(*pValue);                              //發(fā)送1字節(jié)數(shù)據(jù)
                pValue++;                                                   //指向下1個(gè)字節(jié)
        }
}   
void serInt() interrupt 4  //中斷函數(shù)
{  
        //TI——發(fā)送中斷bai標(biāo)志位,可尋址標(biāo)志位。方式0時(shí),發(fā)送完第8位數(shù)據(jù)后,由硬件置位,其它方式下,在發(fā)送或停止位之前由硬件置位,因此,TI=1表示幀發(fā)送結(jié)束,TI可由軟件清“0”。
        //RI——接收中斷標(biāo)志位.可尋址標(biāo)志位。接收完第8位數(shù)據(jù)后,該位由硬件置位,在其他工作方式下,該位由硬件置位,RI=1表示幀接收完成。
        //在串口中斷處理時(shí),TI,RI都需要軟件清"0",硬件置位后不可能自動(dòng)清0,此外,在進(jìn)行緩沖區(qū)操作時(shí),需要ES=0,以防止中斷出現(xiàn)。
         if(RI)                                                               //接收數(shù)據(jù),手動(dòng)將RI清0  
     {         
                RI=0;
                if(SBUF=='\0'||SBUF=='#')
                {
                        sChar[sChar_i++]='\0';
                        receFlag=1;                                                        //修改接受標(biāo)志,便于主函數(shù)進(jìn)入while中發(fā)數(shù)據(jù)
                }
                else
                {
                        sChar[sChar_i++]=SBUF;                                //每次接受8位,存在SBUF里,轉(zhuǎn)存到數(shù)組中
                }
     }  
     if(TI)                                                             //發(fā)送數(shù)據(jù)  
     {
                TI = 0;                                                                //發(fā)送完一個(gè)數(shù)據(jù)
                sendFlag = 0;                                                //清標(biāo)志位
     }      
}  
//
//***********************主程序****************************
void main()
{  U8 DisplayBuf[16];  
                                       /* 存儲(chǔ)轉(zhuǎn)換后的數(shù)據(jù) */
   dingshi();               
         initSer();  //xin                                 /* 上電延時(shí) */
   LCD1602_Init();

   LCD1602_WriteUSerCode();                             /* 寫入用戶自定義字符 */
   LCD1602_SetDisplayPosition(0,1);                     /* 顯示顯示位置 */
   LCD1602_WriteString("Air quality test");

  while(1)                                              /*循環(huán)*/
  {                 
                sprintf(DisplayBuf," low rate=%3d",Temp0);             /*顯示低脈沖率*/
    LCD1602_SetDisplayPosition(0,2);                        /* 顯示顯示位置 */
    LCD1602_WriteString(DisplayBuf);                        
               
                if(receFlag)  
                {
                        LED=~LED;
                        sChar_i=0;//接受數(shù)組指針歸0,以便以下次接受
                        sendAll(sChar);
                        if(strlen(sChar)==4&&sChar[0]=='L'&&sChar[1]=='E'&&sChar[2]=='D')
                        {
                                 P1=sChar[3];
                        }              
                        receFlag=0;  
             }  
             if(sendFlag)                          //發(fā)送完畢之后,在電腦端輸出。  
             {  
                 TI=1;                             //printf之前必須將T1置為1才行。  
                 while(!TI);
                 sendFlag=0;
             }
  }
}


1.png (202.53 KB, 下載次數(shù): 45)

1.png
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:992336 發(fā)表于 2021-12-17 05:35 | 只看該作者
這個(gè)報(bào)錯(cuò)不正常,#include"intrins.H" 移到第一行試試,或者換一個(gè)keil 版本
回復(fù)

使用道具 舉報(bào)

板凳
ID:442241 發(fā)表于 2021-12-19 14:42 | 只看該作者
0x0A 發(fā)表于 2021-12-17 05:35
這個(gè)報(bào)錯(cuò)不正常,#include"intrins.H" 移到第一行試試,或者換一個(gè)keil 版本

改了,還是報(bào)錯(cuò)
回復(fù)

使用道具 舉報(bào)

地板
ID:517466 發(fā)表于 2021-12-19 15:15 | 只看該作者
這行不需要吧。使用_nop_的地方,直接引入這個(gè)函數(shù)所在的頭文件不就可以么?是不是其他地方的錯(cuò)誤導(dǎo)致的?
回復(fù)

使用道具 舉報(bào)

5#
ID:517466 發(fā)表于 2021-12-19 15:16 | 只看該作者
你先把引用其它文件的地方注釋掉,只編譯自己的主程序,看看有沒有問題。但一個(gè)個(gè)放開編譯,確定出問題的文件所在
回復(fù)

使用道具 舉報(bào)

6#
ID:442241 發(fā)表于 2021-12-19 15:21 | 只看該作者
0x0A 發(fā)表于 2021-12-17 05:35
這個(gè)報(bào)錯(cuò)不正常,#include"intrins.H" 移到第一行試試,或者換一個(gè)keil 版本

換了KEIL4在編譯,就不報(bào)錯(cuò)了。非常感謝。
回復(fù)

使用道具 舉報(bào)

7#
ID:517466 發(fā)表于 2021-12-19 15:26 | 只看該作者
intrins.h是系統(tǒng)底層的東西,不會(huì)有錯(cuò)。報(bào)出這個(gè)錯(cuò)誤,基本上可以斷定是你自已的程序代碼出了問題,你試試排除法找錯(cuò)誤點(diǎn)。很可能就是一個(gè)語(yǔ)句少了";"之類的錯(cuò)誤
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 男女羞羞视频在线免费观看 | 亚洲午夜av久久乱码 | 久久精品免费 | 日本一区二区不卡视频 | 久久久噜噜噜久久中文字幕色伊伊 | 精品在线一区 | 精品久久精品 | 亚洲最大看片网站 | 五月婷婷在线播放 | a在线观看 | 欧美中文字幕一区 | 国产高清在线视频 | 可以在线看的黄色网址 | 亚洲精品欧美 | 日韩精品免费视频 | 日日射影院 | 亚洲一区二区在线免费观看 | 亚洲综合成人网 | 久久免费国产 | 日韩在线视频观看 | 亚洲精品久久久久久下一站 | 欧美高清视频 | 成人av资源在线 | 国产精久久久久久 | 久久国产区 | 黄色一级电影在线观看 | 国产伦精品一区二区三区照片91 | 日韩欧美综合在线视频 | 大乳boobs巨大吃奶挤奶 | 亚洲精品欧美精品 | 中文字幕国产精品 | 成人免费视频一区 | 日韩在线视频一区 | 成人高清在线视频 | 在线欧美视频 | 精品视频在线观看 | 国产电影一区 | 国产在线视频一区 | 久久综合婷婷 | 久久婷婷国产麻豆91 | 国产一级视频在线观看 |