#include

#define                            BUF_LENTH              128                            //定义串口接收缓冲长度

#define     uint unsigned int

#define     uchar unsigned char

unsigned char               uart1_wr;                            //写指针

unsigned char               uart1_rd;                            //读指针

unsigned char               xdata RX0_Buffer[BUF_LENTH];              //接收缓冲

unsigned char flag;

unsigned char i;

unsigned char   xdata mbus_buffer[255];

unsigned char   xdata mbus_Sendbuf[255];

unsigned char   xdata Crc_buf[2];  //声明存储CRC校验值的高8位及低8位的缓存

unsigned int  Crc_return_data;  //声明CRC校验值

bit                            B_TI; //发送完成标志

sbit  P1_0 = P1^0;//定义P1.0端口

//                                                                                                                7       6      5       4         3      2    1    0   Reset Value

//sfr ADC_CONTR = 0xBC;                            ADC_POWER SPEED1 SPEED0 ADC_FLAG ADC_START CHS2 CHS1 CHS0 0000,0000              //AD 转换控制寄存器

#define ADC_OFF()              ADC_CONTR = 0

#define ADC_ON                            (1 << 7)

#define ADC_90T                            (3 << 5)

#define ADC_180T              (2 << 5)

#define ADC_360T              (1 << 5)

#define ADC_540T              0

#define ADC_FLAG              (1 << 4)              //软件清0

#define ADC_START              (1 << 3)              //自动清0

#define ADC_CH0                            0

#define ADC_CH1                            1

#define ADC_CH2                            2

#define ADC_CH3                            3

#define ADC_CH4                            4

#define ADC_CH5                            5

#define ADC_CH6                            6

#define ADC_CH7                            7

uint adc10_start(uchar channel);

void              uart1_init(void);

void Uart1_TxByte(unsigned char dat);

void Uart1_String(unsigned char code *puts);

void delay_ms(unsigned char ms);

unsigned int cal_crc(unsigned char *snd, unsigned char num);

/*************** 用户定义参数 *****************************/

#define MAIN_Fosc                            11059200UL

#define Baudrate0                            9600UL

/**********************************************************/

/************** 编译器自动生成,用户请勿修改 *****************************/

#define BRT_Reload                                          (256 - MAIN_Fosc / 16 / Baudrate0)                            //Calculate the timer1 reload value ar 1T mode

/**********************************************************/

//**********************************************************************

//函数名:main(void)

//输入  :无

//输出  :无

//功能描述:检测红外对射传感器中间有无物体,用AD量表示,当返回值大于

//500判定有物体

//**********************************************************************

void              main(void)

{

uint              j;

uart1_init();//初始化串口

P1ASF = (1 << ADC_CH0);              //STC12C5A16S2系列模拟输入(AD)选择ADC1(P1.0)

ADC_CONTR = ADC_360T | ADC_ON;

while(1)

{

j = adc10_start(0);              //(P1.0)ADC1转换

delay_ms(5);

if(flag==1)

{                            delay_ms(5);

if(RX0_Buffer[0x03] == 0x2C)

{

mbus_Sendbuf[3] = 0x00;

mbus_Sendbuf[4] = 0x00;

if(j>500)

mbus_Sendbuf[4] = 0x01;

mbus_Sendbuf[2] = (((RX0_Buffer[0x04] * 16) + RX0_Buffer[0x05]) * 2);

mbus_Sendbuf[0] = RX0_Buffer[0];

mbus_Sendbuf[1] = 0x03;

Crc_return_data=cal_crc(mbus_Sendbuf, 5);  //取得将要发送数据的CRC值

Crc_buf[0]=((Crc_return_data >> 8)&0xff);  //取得CRC值的高8位

Crc_buf[1]=(Crc_return_data & 0xff);   //取得CRC值的低8位

mbus_Sendbuf[5]=Crc_buf[1];  //CRC值低8位赋值给将要发送的数据的倒数第二个字节

mbus_Sendbuf[6]=Crc_buf[0];  //CRC值高8位赋值给将要发送的数据的最后一个

for(i = 0; i < 7; i++)

{

Uart1_TxByte(mbus_Sendbuf[i]);

}

flag=0;

uart1_wr=0;

}

}

}

}

//**********************************************************************

//函数名:adc10_start(uchar channel)

//输入  :ADC转换的通道

//输出  :ADC值

//功能描述:ADC转换

//**********************************************************************

uint              adc10_start(uchar channel)              //channel = 0~7

{

uint              adc;

uchar              i;

ADC_RES = 0;

ADC_RESL = 0;

ADC_CONTR = (ADC_CONTR & 0xe0) | ADC_START | channel;

i = 250;

do{

if(ADC_CONTR & ADC_FLAG)

{

ADC_CONTR &= ~ADC_FLAG;

adc = (uint)ADC_RES;

adc = (adc << 2) | (ADC_RESL & 3);

return              adc;

}

}while(--i);

return              1024;

}

/*****************************CRC校验计算函数********************************/

unsigned int cal_crc(unsigned char *snd, unsigned char num)

{

unsigned char i, j;

unsigned int c,crc=0xFFFF;

for(i = 0; i < num; i ++)

{

c = snd[i] & 0x00FF;

crc ^= c;

for(j = 0;j < 8; j ++)

{

if (crc & 0x0001)

{

crc>>=1;

crc^=0xA001;

}

else crc>>=1;

}

}

return(crc);

}

//**********************************************************************

//函数名:uart1_init(void)

//输入  :无

//输出  :无

//功能描述:串口初始化函数,通信参数为9600 8 N 1

//**********************************************************************

void              uart1_init(void)

{

PCON |= 0x80;                            //UART0 Double Rate Enable

SCON = 0x50;                            //UART0 set as 10bit , UART0 RX enable

AUXR |=  0x01;                            //UART0 使用BRT

AUXR |=  0x04;                            //BRT set as 1T mode

BRT = BRT_Reload;

AUXR |=  0x10;                            //start BRT

ES  = 1;

EA = 1;

}

//**********************************************************************

//函数名:Uart1_TxByte(unsigned char dat)

//输入  :需要发送的字节数据

//输出  :无

//功能描述:从串口发送单字节数据

//**********************************************************************

void Uart1_TxByte(unsigned char dat)

{

B_TI = 0;

SBUF = dat;

while(!B_TI);

B_TI = 0;

}

//**********************************************************************

//函数名:Uart1_String(unsigned char code *puts)

//输入  :字符串首地址

//输出  :无

//功能描述:从串口发送字符串

//**********************************************************************

void Uart1_String(unsigned char code *puts)

{

for(; *puts != 0; puts++)

{

Uart1_TxByte(*puts);

}

}

//**********************************************************************

//函数名:UART1_RCV (void)

//输入  :无

//输出  :无

//功能描述:串口中断接收函数

//**********************************************************************

void UART1_RCV (void) interrupt 4

{

if(RI)

{

RI = 0;

RX0_Buffer[uart1_wr++] = SBUF;

//if(++uart0_wr >= BUF_LENTH)              uart0_wr = 0;

flag = 1;

}

if(TI)

{

TI = 0;

B_TI = 1;

}

}

void delay_ms(unsigned char ms)

{

unsigned int i;

do{

i = MAIN_Fosc /1400;

while(--i);

}while(--ms);

}

振动传感器的c语言程序,单片机红外对射传感器实验详解 附程序源码相关推荐

  1. 微信小程序开发【前端+后端(Java)】附完整源码,拿来接私活简直不要太香

    一.前言 现在微信小程序越来越火了,相信不少人都通过各种途径学习过微信小程序或者尝试开发,作者就是曾经由于兴趣了解开发过微信小程序,所以现在用这篇博客记录我之前开发的一些经验和一些心得吧. 二.主要内 ...

  2. 【C语言】练手游戏项目:天天酷跑1.0代码详解,包括源码,素材,第三方文件。

    C语言手写天天酷跑代码详解 项目总览: 一.项目开发日志 二.引入库与宏编译 三.全局变量与结构体的定义 四.主函数中的内容 五.逐个自定义函数拆解分析 1.初始化init()函数 2.处理用户按键输 ...

  3. C语言二叉树总和等于k的所有路径的算法(附完整源码)

    C语言二叉树总和等于k的所有路径的算法 C语言二叉树总和等于k的所有路径的算法完整源码(定义,实现,main函数测试) C语言二叉树总和等于k的所有路径的算法完整源码(定义,实现,main函数测试) ...

  4. C语言字符串中最后一个单词的长度的算法(附完整源码)

    C语言字符串中最后一个单词的长度的算法 C语言字符串中最后一个单词的长度的算法完整源码(定义,实现,main函数测试) C语言字符串中最后一个单词的长度的算法完整源码(定义,实现,main函数测试) ...

  5. C语言将向量中的所有0移至末尾(附完整源码)

    C语言将向量中的所有0移至末尾 将向量中的所有0移至末尾 C语言将向量中的所有0移至末尾完整源码(定义,实现,main函数测试) 将向量中的所有0移至末尾 example: intout vec = ...

  6. C语言数组中找到第一个重复元素的算法(附完整源码)

    C语言数组中找到第一个重复元素的算法 C语言数组中找到第一个重复元素的算法完整源码(定义,实现,main函数测试) C语言数组中找到第一个重复元素的算法完整源码(定义,实现,main函数测试) #in ...

  7. C语言判断是否为happy number快乐数字的算法(附完整源码)

    C语言判断是否为happy number快乐数字的算法 C语言判断是否为happy number快乐数字的算法完整源码(定义,实现,main函数测试) C语言判断是否为happy number快乐数字 ...

  8. C语言从已排序的链表中删除重复项(附完整源码)

    C语言从已排序的链表中删除重复项 C语言从已排序的链表中删除重复项完整源码(定义,实现,main函数测试) C语言从已排序的链表中删除重复项完整源码(定义,实现,main函数测试) #include ...

  9. C语言已排序链表插入新节点保持排序状态(附完整源码)

    C语言已排序链表插入新节点保持排序状态 C语言已排序链表插入新节点保持排序状态完整源码(定义,实现,main函数测试) C语言已排序链表插入新节点保持排序状态完整源码(定义,实现,main函数测试) ...

最新文章

  1. iOS 10 SceneKit 新特性 – SceneKit 制作 3D 场景框架
  2. php运行代码运行退出为0,php – Selenium测试用例返回进程以退出代码0结束
  3. 115个Java面试题和答案——终极列表(下)
  4. 并发–执行程序和Spring集成
  5. java桥_java 泛型--桥方法
  6. 网页错误排查 如何?
  7. linux man 手册翻译,close (linux man) 翻译
  8. 报错:content type application/x-www-form-urlencoded;
  9. APP架构师必看:面对爆发流量如何进行架构调整
  10. 2016/2/24 1,dotctype有几种? 2,了解html的发展历史
  11. 深入浅出 Python Decorators
  12. fm核武破解 java出错_关闭Java时后台的FM无法恢复
  13. vmware linux虚拟机网络配置
  14. 元素周期表排列的规律_化学元素周期表的规律 元素周期表的规律
  15. JixiPix Romantic Photo for Mac(照片浪漫效果软件)
  16. 全景图转换为天空盒图
  17. 和外国bi相比,国产bi软件更适合中国企业
  18. 腾讯一面,发现自己就是个渣渣
  19. TQ2440与Ubuntu进行TFTP传输
  20. OVA转OVF部署到vsphere上

热门文章

  1. 五家共井 穷举法_经典算法题——五家共井
  2. 计算机动画制作专业软件,电脑动画制作我想学动画制作用什么样的软件比较好呢 爱问知识人...
  3. pyrosim2016 Windows10安装教程 以及无法打开的解决办法
  4. 上市首日市值超过福特汽车,Rivian能否成下一个“特斯拉”?
  5. 20220714 三相异步交流电动机基础学习
  6. adobe acrobat pro dc 无法打开PDF_Adobe acrobat好用吗?pdf编辑器到底哪个好用?
  7. 个人计算机培训校本研修总结,网络研修与校本研修整合培训总结范文
  8. 基于 Element-ui 的简单后台模板
  9. 电子元器件简介——三极管功放
  10. 分数计算器(C++课设)